# ABAC权限控制方式

## 什么是ABAC

Attribute-based access control (ABAC)是一个基于属性定义权限的授权策略。在Amazon，这些属性称为标签（tag）。您可以为Amazon的资源添加标签。ABAC在快速增长的环境中非常有用，有助于解决策略管理变得繁琐的情况。

<figure><img src="https://3752289132-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LTfg4e0NhLEbwi6WFJp%2Fuploads%2FKM3oHfnlfTMgFNpYEzRj%2Fimage.png?alt=media&#x26;token=f3d01a63-42b9-4ae1-8f12-53a80b8f4f90" alt=""><figcaption></figcaption></figure>

### 对比ABAC和传统的RBAC模型

传统的RBAC模型根据人员的工作职能定义权限。在Amazon，角色通常指IAM role，是您可以代入的身份。

传统方式是为每个人创建一个user，放在一个group中，group配置不同的策略来实施RBAC。但是作为最佳实践，要求使用最小权限，列出能够访问的特定资源，可以执行的特定操作。那么RBAC模型的缺点是当有新的资源创建出来，必须更新策略来访问这些资源。

假设，你有三个项目，分别为“Heart”， “Sun”和“Lightning”。您为每个项目都创建了组或者IAM role和不同的策略，给人员或者程序分配好后，“Sun”添加了新的资源，比如新的S3存储桶。那么您就需要更新“Sun”的组或者IAM role的策略。否则，Sun的项目组成员就无法访问这个新建的资源。

### ABAC的优势

:tada:<mark style="background-color:purple;">**ABAC与创新一起增长**</mark>

管理员不需要不断更新策略来允许访问新的资源。比如，您使用ABAC策略，开发人员和项目资源都是用🏷️标签tag进行标记。当项目需要额外的Amazon资源时，开发人员可以给资源加上标签，然后所有项目组的人员拥有一样的标签就可以看到/更改（可使用的action以策略里定义的为准）这个资源了。（需要policy中condition配置了基于标签进行权限控制）

:tada:<mark style="background-color:purple;">**ABAC需要更少的策略**</mark>

您不再需要为不同的工作职能创建不同的策略，您只需要创建几个策略，给不同的IAM role，这些策略更易于管理。

:tada:<mark style="background-color:purple;">**使用ABAC，团队可以更快地变化和增长**</mark>

这是因为新资源的权限是根据tag自动授予的。比如你有一个新项目“Lighting”， IAM管理员创建新角色，`access-project = Lightning`，任何代入该角色的人都可以创建和查看标记为`access-project = Lightning`的资源。此外，企业内部人员可能从Heart项目调整到Lighting项目，那么代入Lighting项目的角色就可以拥有对应的权限了。

:tada:<mark style="background-color:purple;">**使用ABAC，可以实现权限最小化原则**</mark>

AWS安全最佳实践推荐要实现权限最小化，使用传统的RBAC，你必须创建策略允许访问指定的资源。但是，如果您使用ABAC，只需要资源的tag与principal的tag匹配，你就可以拥有权限进行操作。不要调整策略，只需要创建资源时带上正确的标签🏷️。

参考资料

<https://catalog.workshops.aws/applying-abac/en-US>
