# 什么是ABAC？

Attribute-based access control (ABAC)的优势在于其灵活性和可扩展性。使用ABAC，您可以通过定义基于资源和用户属性（如部门、地理位置或项目名称）的访问控制策略，来动态地控制对资源的访问。这意味着当资源或用户的属性发生变化时，您无需手动更新访问控制策略。例如，如果某个用户的职能从“开发”变更为“项目管理”，他们访问资源的权限可以自动根据其新的角色进行调整。

此外，ABAC能够支持细粒度的访问控制，允许您基于复杂的逻辑和条件为资源定义访问规则，如“只有来自特定IP地址、在工作时间访问的项目经理才允许查看此资源”。这种灵活性使得ABAC特别适合用于需要高度定制访问控制的大型和动态环境中。

### 对比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>

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