# 标记Amazon S3

## 1-给S3存储桶打标签

首先需要给S3存储桶打标签，比如Owner: zhangsan, department: Iot.

## 2-给授予权限的身份打标签

被授予权限的身份可以是IAM user或者IAM role。此处以IAM Identity Center真人访问的身份+IoT设备为例，如何授予这两者以ABAC的方式访问S3存储桶内的文件。

IAM Identity Center真人访问的身份如何配置标签参见 #[Identity Center的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/abac-quan-xian-kong-zhi-fang-shi/abac-de-ying-yong/identity-center-de-attribute-based-access-control-abac)

## 3-授予真人访问权限：编辑权限集的策略

权限集添加一个托管策略：AmazonS3FullAccess；

编辑内联策略，实现当Identity Center的用户的部门与存储桶的标签department匹配时允许进行增删改的操作：

```json
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "ABACHuman",
            "Effect": "Deny",
            "Action": [
                "s3:Get*",
                "s3:Put*",
                "s3:Delete*"
            ],
            "Resource": "arn:aws:s3:::BUCKET-NAME/human-objects/*",
            "Condition": {
                "StringNotEquals": {
                    "aws:PrincipalTag/department": "${s3:ExistingObjectTag/department}"
                }
            }
        }
    ]
}
```

此内联策略通过条件比较存储桶的对象标签中的部门（`department`）和IAM身份的标签，当它们匹配时，允许用户对S3存储桶的对象进行上传（`PutObject`）、下载（`GetObject`）、删除（`DeleteObject`）操作。这实现了以ABAC（基于属性的访问控制）模式进行精细化控制。
