将 SAML 会话标签用于 ABAC - AWS Identity and Access Management
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

将 SAML 会话标签用于 ABAC

基于属性的访问控制 (ABAC) 是一种授权策略,该策略基于属性来定义权限。在 AWS 中,这些属性称为标签。您可以将标签附加到 IAM 实体(用户或角色)以及 AWS 资源。将实体用于向 AWS 发出请求时,实体成为委托人并且包含标签。

您也可以在代入角色或联合身份用户时传递会话标签。然后,您可以定义策略,这些策略使用标签条件键来根据委托人的标签向其授予权限。当您使用标签控制对 AWS 资源的访问时,可通过对 AWS 策略进行较少更改来实现团队和资源的增长。ABAC 策略比传统 AWS 策略更加灵活,后者需要您列出每个单独的资源。有关 ABAC 及其相对于传统策略的优势的更多信息,请参阅什么是适用于 AWS 的 ABAC?

如果您的公司使用基于 SAML 的身份提供商 (IdP) 管理公司用户身份,则可以在 AWS 中使用 SAML 属性进行细粒度访问控制。属性包括成本中心标识符、用户电子邮件地址、部门分类和项目分配等。当您将这些属性作为会话标签传递时,可以根据这些会话标签控制对 AWS 的访问权限。

要通过将 SAML 属性传递给会话委托人来完成 ABAC 教程,请完成 教程:将标签用于 AWS 中的基于属性的访问控制 中的任务以及本主题中介绍的更改。

先决条件

要执行将 SAML 会话标签用于 ABAC 的步骤,您必须满足以下条件:

  • 对基于 SAML 的 IdP 的访问权限,您在其中可以创建具有特定属性的测试用户。

  • 可使用 IAM 用户身份登录的具有管理权限的 AWS 账户。如果您有一个新账户并作为 AWS 账户根用户 进行登录,则创建 IAM 管理员用户

  • 体验在 AWS 管理控制台中创建和编辑 IAM 用户、角色和策略。但是,如果您需要获得帮助以便记住 IAM 管理过程,请访问 ABAC 教程提供的链接来查看分步说明。

  • 在 IAM 中设置基于 SAML 的 IdP 的经验。要查看详细信息以及指向详细 IAM 文档的链接,请参阅使用 AssumeRoleWithSAML 传递会话标签

步骤 1:创建测试 IAM 用户

跳过步骤 1:创建测试用户中的说明。由于您在提供商中定义身份,因此无需为员工添加 IAM 用户。

步骤 2:创建 ABAC 策略

按照步骤 2:创建 ABAC 策略中的说明在 IAM 中创建指定的托管策略。

步骤 3:创建和配置 SAML 角色

为 SAML 使用 ABAC 教程时,您必须执行额外的步骤来创建角色、配置 SAML IdP 和启用 AWS 管理控制台 访问权限。有关更多信息,请参阅步骤 3:创建角色

步骤 3A:创建 SAML 角色

创建一个信任 SAML 身份提供商和在步骤 1 中创建的 test-session-tags 用户的角色。ABAC 教程使用具有不同角色标签的单独角色。由于您从 SAML IdP 传递会话标签,因此只需要一个角色。要了解如何创建基于 SAML 的角色,请参阅创建用于 SAML 2.0 联合的角色 (控制台)

命名角色 access-session-tags。将 access-same-project-team 权限策略附加到角色。编辑角色信任策略来使用以下策略。有关如何编辑角色的信任关系的详细说明,请参阅修改角色 (控制台)

以下角色信任策略允许您的 SAML 身份提供商和 test-session-tags 用户代入该角色。在代入角色时,他们必须传递三个指定的会话标签。sts:TagSession 操作是允许传递会话标签所必需的。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowSamlIdentityAssumeRole", "Effect": "Allow", "Action": [ "sts:AssumeRoleWithSAML", "sts:TagSession" ], "Principal": {"Federated":"arn:aws:iam::123456789012:saml-provider/ExampleCorpProvider"}, "Condition": { "StringLike": { "aws:RequestTag/cost-center": "*", "aws:RequestTag/access-project": "*", "aws:RequestTag/access-team": [ "eng", "qas" ] }, "StringEquals": {"SAML:aud": "https://signin.aws.amazon.com/saml"} } } ] }

AllowSamlIdentityAssumeRole 语句允许工程和质量保证团队的成员在从示例公司 IdP 将身份联合到 AWS 中时代入此角色。ExampleCorpProvider SAML 提供商在 IAM 中定义。管理员已经设置 SAML 断言以传递三个必需的会话标签。断言可以传递额外的标签,但必须存在这三个标签。身份的属性可以具有 cost-centeraccess-project 标签的任何值。但是,access-team 属性值必须匹配 engqas,以指示位于工程或质量保证团队中的身份。

步骤 3B:配置 SAML IdP

配置您的 SAML IdP 以将 cost-centeraccess-projectaccess-team 属性作为会话标签传递。有关更多信息,请参阅使用 AssumeRoleWithSAML 传递会话标签

要将这些属性作为会话标签传递,请在 SAML 断言中包含以下元素。

<Attribute Name="http://www.amazonaws.cn/SAML/Attributes/PrincipalTag:cost-center"> <AttributeValue>987654</AttributeValue> </Attribute> <Attribute Name="http://www.amazonaws.cn/SAML/Attributes/PrincipalTag:access-project"> <AttributeValue>peg</AttributeValue> </Attribute> <Attribute Name="http://www.amazonaws.cn/SAML/Attributes/PrincipalTag:access-team"> <AttributeValue>eng</AttributeValue> </Attribute>

步骤 3B:启用控制台访问

为联合身份 SAML 用户启用控制台访问权限。有关更多信息,请参阅 使 SAML 2.0 联合身份用户能够访问 AWS 管理控制台

步骤 4:测试创建密钥

使用 access-session-tags 角色联合身份到 AWS 管理控制台中。有关更多信息,请参阅使 SAML 2.0 联合身份用户能够访问 AWS 管理控制台。然后按照说明 步骤 4:测试创建密钥 创建密钥。使用不同的 SAML 身份,该身份的属性与 ABAC 教程中指示的标签匹配。有关更多信息,请参阅步骤 4:测试创建密钥

步骤 5:测试查看密钥

按照步骤 5:测试查看密钥中的说明查看在上一步中创建的密钥。使用不同的 SAML 身份,该身份的属性与 ABAC 教程中指示的标签匹配。

步骤 6:测试可扩展性

按照步骤 6:测试可扩展性中的说明测试可扩展性。要执行此操作,您可在基于 SAML 的 IdP 中添加具有以下属性的新身份:

  • cost-center = 101010

  • access-project = cen

  • access-team = eng

步骤 7:测试更新和删除密钥

按照步骤 7:测试更新和删除密钥中的说明更新和删除密钥。使用不同的 SAML 身份,该身份的属性与 ABAC 教程中指示的标签匹配。

重要

删除您创建的所有密钥以避免产生费用。有关 Secrets Manager 中定价的详细信息,请参阅 AWS Secrets Manager 定价

摘要

您现在已成功完成使用 SAML 会话标签和资源标签进行权限管理所需的所有步骤。

注意

您添加的策略仅允许在特定条件下执行操作。如果您将不同的策略应用于具有更广泛权限的用户或角色,则可能不会将操作限制为需要标记。例如,如果您使用 AdministratorAccessAWS 托管策略向用户授予完全管理权限,则这些策略不会限制该访问。有关在涉及多个策略时如何确定权限的更多信息,请参阅确定是允许还是拒绝账户内的请求