为公有子网部署基于属性的预防性访问控制 - AWS Prescriptive Guidance

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

为公有子网部署基于属性的预防性访问控制

由乔尔·阿尔弗雷多·努内斯·冈萨雷斯 () 和塞缪尔·奥尔特加·桑乔 (AWS) 创作 AWS

摘要

在集中式网络架构中,检查和边缘虚拟私有云 (VPCs) 集中所有入站和出站流量,例如进出互联网的流量。但是,这可能会造成瓶颈或导致达到AWS服务配额的限制。与更常见的集中式方法相比,将网络边缘安全与其中的工作负载一起部署可VPCs提供前所未有的可扩展性。这称为分布式边缘架构。

尽管在工作负载账户中部署公有子网可以带来好处,但它也会带来新的安全风险,因为它增加了攻击面。我们建议您仅在这些资源的公有子网中部署 Elastic Load Balancing (ELB) 资源,例如应用程序负载均衡器或网NAT关。VPCs在专用的公有子NAT网中使用负载均衡器和网关可以帮助您对入站和出站流量实施精细控制。

基于属性的访问控制 (ABAC) 是根据用户属性(例如部门、工作角色和团队名称)创建细粒度权限的做法。有关更多信息,请参ABAC阅AWS。 ABAC可以为工作负载帐户中的公用子网提供护栏。这有助于应用程序团队在不影响基础架构安全性的情况下保持敏捷性。

此模式描述了如何ABAC通过AWS组织中的服务控制策略 (SCP) 和 Identity and Access Managem AWS ent () 中的策略来实施来帮助保护公有子网。IAM您可以将SCP应用于组织的成员帐户或组织单位 (OU)。这些ABAC策略允许用户在目标子NAT网中部署网关,并防止他们部署其他亚马逊弹性计算云 (AmazonEC2) 资源,例如EC2实例和弹性网络接口。  

先决条件和限制

先决条件

  • Organiations 中的AWS组织

  • 对 Organization AWS s 根账户的管理权限

  • 在组织中,用于测试的活跃成员账户或 OU SCP

限制

  • 此解决方案SCP中的不会阻止使用AWS服务相关角色的服务在目标子网中部署资源。这些服务的示例有 Elastic Load Balancing (ELB)、亚马逊弹性容器服务 (亚马逊ECS) 和亚马逊关系数据库服务 (亚马逊RDS)。有关更多信息,请参阅 Org SCPanizations 文档AWS中的权限影响。实施安全控制来检测这些异常。

架构

目标技术堆栈

  • SCP应用于 Organi AWS zations 中的AWS账户或 OU

  • 以下IAM角色:

    • AutomationAdminRole— 用于在实施后修改子网标签和创建VPC资源 SCP

    • TestAdminRole— 用于测试SCP是否阻止其他IAM委托人(包括具有管理权限的主体)执行保留给的操作 AutomationAdminRole

目标架构

这些标签可防止用户在公有子NAT网中部署网关以外的资源
  1. 您在目标账户中创建AutomationAdminRoleIAM角色。此角色有权管理网络资源。请注意此角色独有的以下权限:

    • 此角色可以创建VPCs和公有子网。

    • 此角色可以修改目标子网的标签分配。

    • 此角色可以管理自己的权限。

  2. 在 AWS Organizations 中SCP,您可以将应用于目标AWS账户或 OU。有关示例策略,请参阅此模式中的其他信息

  3. CI/CD 管道中的用户或工具可以承担 AutomationAdminRole 角色,将 SubnetType 标签应用到目标子网。

  4. 通过担任其他IAM角色,组织中的IAM授权委托人可以管理目标子NAT网中的网关以及AWS账户中其他允许的网络资源,例如路由表。使用IAM策略来授予这些权限。有关更多信息,请参阅 Amazon 的身份和访问管理VPC

自动化和扩缩

为了帮助保护公有子网,必须应用相应的AWS标签。应用后SCP,NAT网关是授权用户可以在带有SubnetType:IFA标签的子网中创建的唯一一种 Amazon EC2 资源。 (IFA面向互联网的资产。) SCP阻止创建其他 Amazon EC2 资源,例如实例和弹性网络接口。 我们建议您使用AutomationAdminRole扮演角色的 CI/CD 管道来创建VPC资源,以便将这些标签正确应用于公有子网。

工具

AWS 服务

  • AWSIdentity and Access Management (IAM) 通过控制谁经过身份验证并有权使用AWS资源,从而帮助您安全地管理对资源的访问权限。

  • AWSO rganizations 是一项账户管理服务,可帮助您将多个AWS账户整合到一个由您创建和集中管理的组织中。在 AWS Organizations 中,您可以实施服务控制策略 (SCPs),这是一种可用于管理组织中权限的策略。

  • Amazon Virtual Private Cloud(亚马逊VPC)可帮助您将AWS资源启动到您定义的虚拟网络中。该虚拟网络类似于您在数据中心中运行的传统网络,并具有使用 AWS 的可扩展基础设施的优势。

操作说明

任务描述所需技能

创建测试管理员角色。

在目标AWS账户TestAdminRole中创建名为的IAM角色。将AdministratorAccessAWS托管IAM策略附加到新角色。有关说明,请参阅IAM文档中的创建角色以向IAM用户委派权限

AWS 管理员

创建自动化管理员角色。

  1. 在目标AWS账户AutomationAdminRole中创建名为的IAM角色。

  2. AdministratorAccessAWS托管IAM策略附加到新角色。

以下是您可用于测试 000000000000 账户角色的信任策略示例。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::000000000000:root" ] }, "Action": "sts:AssumeRole", "Condition": {} } ] }
AWS 管理员

创建并附上SCP.

  1. 使用其他信息部分中提供的示例代码,创建安全控制策略。有关说明,请参阅 Org aniz SCP ations AWS 文档中的创建

  2. 将其附加SCP到目标AWS账户或 OU。有关说明,请参阅 Organiz ations 文档中的附加和分离服务控制策略AWS。

AWS 管理员
任务描述所需技能

创建VPC或子网。

  1. 在目标AWS账户中TestAdminRole扮演该角色。

  2. 尝试在现有的公有子网中创建一个VPC或一个新的公有子网VPC。有关说明,请参阅 Amazon VPC 文档中的创建VPC、子网和其他VPC资源。您不应能够创建这些资源。

  3. 承担 AutomationAdminRole 角色,然后重试上一步。现在,您应该可以创建网络资源了。

AWS 管理员

管理标签。

  1. 在目标AWS账户中TestAdminRole扮演该角色。

  2. SubnetType:IFA 标签添加到可用的公有子网。你应该可以添加此标签。有关如何通过AWS命令行界面 (AWSCLI) 添加标签的说明,请参阅《命令参考》中的 create-tags。AWS CLI

  3. 在不更改凭证的情况下,尝试修改分配给此子网的 SubnetType:IFA 标签。您应该无法修改此标签。

  4. 承担 AutomationAdminRole角色,然后重试前面的步骤。此角色应能添加和修改此标签。

AWS 管理员

在目标子网中部署资源。

  1. 担任 TestAdminRole 角色。

  2. 对于带有SubnetType:IFA标签的公有子网,请尝试创建EC2实例。有关说明,请参阅 Amazon EC2 文档中的启动实例。在此子网中,除了网NAT关之外,您不应能够创建、修改或删除任何 Amazon EC2 资源。

  3. 在同一个子网中,创建一个NAT网关。有关说明,请参阅 Amazon VPC 文档中的创建NAT网关。您应该能够在该子NAT网中创建、修改或删除网关。

AWS 管理员

管理 AutomationAdminRole 角色。

  1. 担任 TestAdminRole 角色。

  2. 尝试修改 AutomationAdminRole 角色。有关说明,请参阅IAM文档中的修改角色。您应该无法修改此角色。

  3. 承担 AutomationAdminRole 角色,然后重试上一步。现在,您应该可以修改角色了。

AWS 管理员
任务描述所需技能

清理已部署的资源。

  1. 将其与SCPAWS账户或 OU 分离。有关说明,请参阅 Org anizati SCP ons 文档中的AWS分离

  2. 删除 SCP。有关说明,请参阅删除SCP(Organi z AWS ations 文档)。

  3. 删除 AutomationAdminRole 角色和 TestAdminRole 角色。有关说明,请参阅IAM文档中的删除角色

  4. 删除您为此解决方案创建的所有网络资源,例如VPCs和子网。

AWS 管理员

相关资源

AWS 文档

其他AWS参考文献

其他信息

以下服务控制策略是一个示例,您可以用来在您的组织中测试这种方法。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "DenyVPCActions", "Effect": "Deny", "Action": [ "ec2:CreateVPC", "ec2:CreateRoute", "ec2:CreateSubnet", "ec2:CreateInternetGateway", "ec2:DeleteVPC", "ec2:DeleteRoute", "ec2:DeleteSubnet", "ec2:DeleteInternetGateway" ], "Resource": [ "arn:aws:ec2:*:*:*" ], "Condition": { "StringNotLike": { "aws:PrincipalARN": ["arn:aws:iam::*:role/AutomationAdminRole"] } } }, { "Sid": "AllowNATGWOnIFASubnet", "Effect": "Deny", "NotAction": [ "ec2:CreateNatGateway", "ec2:DeleteNatGateway" ], "Resource": [ "arn:aws:ec2:*:*:subnet/*" ], "Condition": { "ForAnyValue:StringEqualsIfExists": { "aws:ResourceTag/SubnetType": "IFA" }, "StringNotLike": { "aws:PrincipalARN": ["arn:aws:iam::*:role/AutomationAdminRole"] } } }, { "Sid": "DenyChangesToAdminRole", "Effect": "Deny", "NotAction": [ "iam:GetContextKeysForPrincipalPolicy", "iam:GetRole", "iam:GetRolePolicy", "iam:ListAttachedRolePolicies", "iam:ListInstanceProfilesForRole", "iam:ListRolePolicies", "iam:ListRoleTags" ], "Resource": [ "arn:aws:iam::*:role/AutomationAdminRole" ], "Condition": { "StringNotLike": { "aws:PrincipalARN": ["arn:aws:iam::*:role/AutomationAdminRole"] } } }, { "Sid": "allowbydefault", "Effect": "Allow", "Action": "*", "Resource": "*" } ] }