我想使用具有基于标签的访问控制的 AWS Identity and Access Management (IAM) 策略来限制对 Amazon Simple Storage Service (Amazon S3) 存储桶中对象的访问。
解决方法
以下策略是如何使用对象标签控制对 Amazon S3 存储桶对象的访问权限的示例。
注意:
- 在以下策略示例中,将 awsexamplebucket 替换为您的 S3 存储桶名称。此外,将 CreationDate、Owner、security 和 environment 标签键替换为您的标签键。
- CreateBucket API 不支持标签。
- 使用 PutBucketTagging API 向您创建的存储桶添加标签。
- Amazon S3 仅支持对对象资源进行基于标签的授权。
使用基于身份的策略可使用户只能读取具有特定标签和键值的对象
以下基于身份的策略授予 s3:GetObject 对 awsexamplebucket1 存储桶和该存储桶中所有对象的权限。该策略使用 s3:ExistingObjectTag 条件将访问权限限制为仅针对具有 security: public 键值对的对象:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::awsexamplebucket1/*",
"Condition": {
"StringEquals": {
"s3:ExistingObjectTag/security": "public"
}
}
}
]
}
使用基于身份的策略限制用户可以添加的对象标签键
以下基于身份的策略限制了用户可以添加到 awsexamplebucket 存储桶中对象的标签键。用户只能使用 Owner 或 CreationDate 键添加标签。控制用户可以添加到对象的标签键就可以保持存储桶对象的标记方案的一致性:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "s3:PutObjectTagging",
"Resource": "arn:aws:s3:::awsexamplebucket1/*",
"Condition": {
"ForAllValues:StringLike": {
"s3:RequestObjectTagKeys": [
"Owner",
"CreationDate"
]
}
}
}
]
}
使用存储桶策略可使用户只能读取具有特定标签和键值的对象
以下存储桶策略可使用户只能读取具有 environment: production 键值对的对象。该策略使用 s3:ExistingObjectTag 条件键指定键值对:
{
"Version": "2012-10-17",
"Statement": [
{
"Principal": {
"AWS": [
"arn:aws:iam::111122223333:role/JohnDoe"
]
},
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:GetObjectVersion"
],
"Resource": "arn:aws:s3:::awsexamplebucket/*",
"Condition": {
"StringEquals": {
"s3:ExistingObjectTag/environment": "production"
}
}
}
]
}
使用存储桶策略限制用户可以向对象添加的对象标签键
以下存储桶策略限制了用户可以添加到 awsexamplebucket 存储桶中对象的标签键。用户只能使用 Owner 或 CreationDate 键添加标签。控制用户可以添加到对象的标签键就可以保持存储桶对象的标记方案的一致性:
{
"Version": "2012-10-17",
"Statement": [
{
"Principal": {
"AWS": [
"arn:aws:iam::111122223333:role/JohnDoe"
]
},
"Effect": "Allow",
"Action": [
"s3:PutObjectTagging"
],
"Resource": [
"arn:aws:s3:::awsexamplebucket*"
],
"Condition": {
"ForAllValues:StringEquals": {
"s3:RequestObjectTagKeys": [
"Owner",
"CreationDate"
]
}
}
}
]
}