什么是适用于 AWS 的 ABAC? - AWS Identity and Access Management
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

什么是适用于 AWS 的 ABAC?

基于属性的访问控制(ABAC)是一种授权策略,基于属性来定义权限。在 AWS 中,这些属性称为标签。标签可以附加到 IAM 委托人(用户或角色)以及 AWS 资源。您可以为 IAM 委托人创建单个 ABAC 策略或者一小组策略。这些 ABAC 策略可设计为在委托人的标签与资源标签匹配时允许操作。ABAC 在快速增长的环境中非常有用,并在策略管理变得繁琐的情况下可以提供帮助。

例如,您可以创建具有 access-project 标签键的三个角色。将第一个角色的标签值设置为 Heart,第二个为 Sun,第三个为 Lightning。然后,您可以使用单个策略,在角色和资源标记了 access-project 的相同值时允许访问。有关演示如何在 AWS 中使用 ABAC 的详细教程,请参阅教程:将标签用于 AWS 中的基于属性的访问控制


         ABAC 模型

ABAC 与传统 RBAC 模型的对比

IAM 中使用的传统授权模型称为基于角色的访问控制 (RBAC)。RBAC 根据用户的工作职能定义权限,在 AWS 之外称为角色。在 AWS 中,角色通常指 IAM 角色,这是您可以代入的 IAM 中的身份。IAM 包括适用于工作职能的托管策略,将权限与 RBAC 模型中的工作职能相匹配。

在 IAM 中,您通过为不同工作职能创建不同策略来实施 RBAC。然后,您可将策略附加到身份(IAM 用户、用户组或 IAM 角色)。作为最佳实践,您向工作职能授予所需的最小权限。这称为授予最小权限。通过列出工作职能可以访问的特定资源来完成此操作。使用传统 RBAC 模型的缺点在于,当员工添加新资源时,您必须更新策略以允许访问这些资源。

例如,假设您的员工在处理三个项目,名为 HeartSunLightning。您可以为每个项目创建一个 IAM 角色。然后,您将策略附加到各个 IAM 角色,定义允许代入该角色的任何用户可以访问的资源。如果员工更换了公司中的工作,您可向其分配不同的 IAM 角色。用户或计划可以分配到多个角色。但是,Sun 项目可能需要额外的资源,例如新的 Amazon S3 存储桶。在这种情况下,您必须更新附加到 Sun 角色的策略来指定新存储桶资源。否则,Sun 项目成员不允许访问新的存储桶。


            RBAC 模型

相比传统 RBAC 模型,ABAC 具备以下优势:

  • ABAC 权限随着创新扩展。 它不再需要管理员更新现有策略以允许对新资源的访问。例如,假设您使用 access-project 标签指定了 ABAC 策略。开发人员使用 access-project = Heart 标签的角色。当 Heart 项目中的员工需要额外的 Amazon EC2 资源时,开发人员可以使用 access-project = Heart 标签创建新 Amazon EC2 实例。这样,Heart 项目中的任何员工可以启动和停止这些实例,因为其标签值匹配。

  • ABAC 需要较少的策略。 由于您无需为不同工作职能创建不同策略,需要创建的策略数量减少。这些策略更易于管理。

  • 使用 ABAC,团队可以进行更改和扩展。 这是因为新资源的权限根据属性自动授予。例如,如果您的公司已经使用 ABAC 支持 HeartSun 项目,则可以轻松地添加新 Lightning 项目。IAM 管理员创建具有 access-project = Lightning 标签的新角色。无需更改策略以支持新项目。有权代入该角色的任何用户可以创建和查看使用 access-project = Lightning 标记的实例。此外,团队成员可以从 Heart 项目转向 Lightning 项目。IAM 管理员将用户分配到不同 IAM 角色。无需更改权限策略。

  • 使用 ABAC 可以实现精细权限。 在您创建策略时,最佳实践是授予最小权限。使用传统 RBAC,您必须编写一个策略,仅允许访问特定资源。但是,如果使用 ABAC,您可以允许在所有资源上的操作,但仅在资源标签与委托人标签匹配时。

  • 通过 ABAC 使用来自您公司目录的员工属性。 您可以对基于 SAML 的身份提供商或 Web 身份提供商进行配置,将会话标签传递给 AWS。当您的员工希望联合身份到 AWS 中时,其属性将应用到 AWS 中所得到的委托人。然后,您可以使用 ABAC 来允许或拒绝基于这些属性的权限。

有关演示如何在 AWS 中使用 ABAC 的详细教程,请参阅教程:将标签用于 AWS 中的基于属性的访问控制