# Identity Center的Attribute Based Access Control (ABAC)

[Attribute-based access control (ABAC)](https://aws-gcr-wwso-security.gitbook.io/an-quan-zui-jia-shi-jian/1.-iam-shen-fen-shi-bie-yu-fang-wen-kong-zhi/xin-shou-qi-bu/shen-me-shi-abac)是一个基于属性定义权限的授权策略。在Amazon，这些属性称为标签（tag）。您可以为Amazon的资源添加标签。ABAC在快速增长的环境中非常有用，有助于解决策略管理变得繁琐的情况。您在IAM Identity Center也可以基于标签实现权限管理。

## 假设场景

在企业中，假设有一组来自不同团队（如财务和营销）的业务用户。在 AWS 身份中心，您可以使用相同的权限集，然后选择部门名称属性，对每类用户（财务用户或营销用户）进行细粒度访问控制。当`financeUser`和`marketingUser`登录到他们的AWS账户时，IAM身份中心会在AWS会话中发送他们的团队名称属性，因此financeUser和marketingUser只有在他们的部门名称属性与项目资源上的部门名称标签相匹配时才能访问AWS项目资源。如果 financeUser 今后转到 marketingUser 的团队，只需更新企业目录中的团队名称属性，就可以修改他/她的访问权限。当 financeUser 下次登录时，他们将自动获得对新团队项目资源的访问权限，而无需在 AWS 中更新任何权限。

### 创建用户和组

创建2个用户： **financeUser** 和 **marketingUser** 到两个不同的部门Finance和Marketing，并且配置他们的 **Job-related information - Department** 部分。

<figure><img src="https://3752289132-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LTfg4e0NhLEbwi6WFJp%2Fuploads%2F8zYhgWnszt6gzwtPPmFH%2Fimage.png?alt=media&#x26;token=a055fb9f-c32c-415c-9540-9645a61d98bb" alt=""><figcaption></figcaption></figure>

### 创建权限集

创建**Inline Policy**，授予ec2启动和停止的权限，可以查看所有的ec2，但是只能启动和停止标签Department: \*和访问者的部门匹配的。也就是比如**financeUser**的部门标签是Department: Finance，那么只能启停标签也是Department: Finance的EC2。

以下是一个示例策略，允许用户启动和停止 EC2 实例，但仅限于实例的 `Owner` 标签值与用户的 `user:email` 属性匹配：

```
json
```

```JSON
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ec2:StartInstances",
                "ec2:StopInstances"
            ],
            "Resource": "arn:aws:ec2:*:*:instance/*",
            "Condition": {
                "StringEquals": {
                    "ec2:ResourceTag/Department": "Finance"
                }
            }
        },
        {
            "Effect": "Allow",
            "Action": [
                "ec2:DescribeInstances"
            ],
            "Resource": "*"
        }
    ]
}
```

**解释:**

* `Effect: Allow`: 允许操作。
* `Action`: 指定允许的 EC2 操作，这里是 `ec2:StartInstances` 和 `ec2:StopInstances`。
* `Resource`: 指定策略应用到的资源，这里是所有 EC2 实例 (`arn:aws:ec2:*:*:instance/*`)。
* `Condition`: 这是 ABAC 的关键部分。
  * `StringEquals`: 要求字符串相等。
  * `ec2:ResourceTag/`Department: 指定要检查的 EC2 实例标签，这里是 Department 标签。

### **配置 IAM Identity Center 访问属性:**

* 在 IAM Identity Center 中，Settings的Attributes for access control确保你的Identity Center有 Department  属性，并且该属性的值与 EC2 实例的 Department 标签值匹配。

Key：Department;

Value: `${path:enterprise.department}`

### **将权限集分配给用户或组:**

* 在 IAM Identity Center 中，将权限集分配给需要访问 EC2 实例的用户或组。
* 在分配权限集时，你需要选择要应用权限集的 AWS 账户。

**测试:**

* 使用分配了权限集的用户登录 AWS 控制台。
* 尝试启动和停止 EC2 实例。
* 只有当 EC2 实例的 Department 标签值与用户的 Department 属性匹配时，用户才能成功启动和停止实例。

The following table lists all external identity provider (IdP) attributes supported and can be mapped to attributes you can use when configuring [Attributes for access control](#jia-she-chang-jing) in IAM Identity Center. When using SAML assertions, you can use whichever attributes your IdP supports.

| Supported attributes in your IdP                  |
| ------------------------------------------------- |
| `${path:userName}`                                |
| `${path:name.familyName}`                         |
| `${path:name.givenName}`                          |
| `${path:displayName}`                             |
| `${path:nickName}`                                |
| `${path:emails[primary eq true].value}`           |
| `${path:addresses[type eq "work"].streetAddress}` |
| `${path:addresses[type eq "work"].locality}`      |
| `${path:addresses[type eq "work"].region}`        |
| `${path:addresses[type eq "work"].postalCode}`    |
| `${path:addresses[type eq "work"].country}`       |

| `${path:addresses[type eq "work"].formatted}` |
| --------------------------------------------- |
| `${path:phoneNumbers[type eq "work"].value}`  |
| `${path:userType}`                            |
| `${path:title}`                               |
| `${path:locale}`                              |
| `${path:timezone}`                            |
| `${path:enterprise.employeeNumber}`           |
| `${path:enterprise.costCenter}`               |
| `${path:enterprise.organization}`             |
| `${path:enterprise.division}`                 |
| `${path:enterprise.department}`               |
| `${path:enterprise.manager.value}`            |

参考资料：<https://docs.aws.amazon.com/zh_cn/singlesignon/latest/userguide/abac-checklist.html>

### &#x20;<a href="#defaultattributemappings" id="defaultattributemappings"></a>
