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

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

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

由 Joel Alfredo Nunez Gonzalez (AWS) 和 Samuel Ortega Sancho (AWS) 编写

环境:PoC 或试点

技术:安全性、标识性、合规性;联网;内容交付

Amazon Web Services:AWS Organizations;AWS Identity and Access Management

Summary

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

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

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

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

先决条件和限制

先决条件

  • AWS Organizations 中的组织

  • 对 AWS Organizations 根账户的管理访问权限

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

限制

  • 此解决方案中的 SCP 不会阻止使用服务相关角色的 Amazon Web Services 在目标子网中部署资源。这些服务的示例包括弹性负载均衡(ELB)、Amazon Elastic Container Service (Amazon ECS) 和 Amazon Relational Database Service (Amazon RDS)。有关更多信息,请参阅 AWS Organizations 文档中的 SCP 对权限的影响。实施安全控制来检测这些异常。

架构

目标技术堆栈

  • SCP 应用于 AWS Organizations 中的 Amazon Web Services account 或 OU

  • 以下 IAM 角色:

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

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

目标架构

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

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

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

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

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

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

  4. 通过承担其他 IAM 角色,组织中的授权 IAM 主体可以管理目标子网中的 NAT 网关以及 Amazon Web Services account 中其他允许的网络资源,例如路由表。使用 IAM policy 以授予这些权限。有关更多信息,请参阅 Amazon VPC 的身份和访问权限管理

自动化和扩展

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

工具

Amazon Web Services

  • AWS Identity and Access Management(AWS IAM)通过控制验证和授权使用您 AWS 资源的用户,帮助您安全地管理对您 AWS 资源的访问。

  • AWS Organizations 是一项账户管理服务,使您可将多个 Amazon Web Services account 整合到您所创建的组织中并进行集中管理。在 AWS Organizations 中,您可以实施服务控制策略(SCP),这是一种组织策略,可用于管理组织中的权限。

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

操作说明

任务描述所需技能

创建测试管理员角色。

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

AWS 管理员

创建自动化管理员角色。

  1. 在目标 Amazon Web Services account 中,创建一个名为 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. 使用其他信息部分中提供的示例代码,创建安全控制策略。有关说明,请参阅 AWS Organizations 文档中的创建 SCP

  2. 将 SCP 附加到目标 Amazon Web Services account 或 OU。有关说明,请参阅 AWS Organizations 文档中的附加和分离服务控制策略

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

创建 VPC 或子网。

  1. 承担目标 Amazon Web Services account 中的 TestAdminRole角色。

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

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

AWS 管理员

管理标签。

  1. 承担目标 Amazon Web Services account 中的 TestAdminRole角色。

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

  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. 从 Amazon Web Services account 或 OU 中分离 SCP。有关说明,请参阅 AWS Organizations 文档中的分离 SCP

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

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

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

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": "*" } ] }