上次更新日期:2021 年 4 月 27 日
我想授予用户在 Amazon Simple Storage Service (Amazon S3) 控制台中访问某个存储桶或文件夹(前缀)的权限。但是,我不希望用户能够查看其他账户中的存储桶或其他存储桶中的文件夹。如何限制用户的控制台访问权限,使之只能访问某个特定的 Amazon S3 存储桶或文件夹?
简短描述要限制用户的 S3 控制台访问权限,使之只能访问某个特定的存储桶或文件夹(前缀),请更改用户的 AWS Identity and Access Management (IAM) 权限。您可以通过执行以下操作来更改 IAM 权限:
1.删除 s3:ListAllMyBuckets 操作权限。
2.仅为您希望用户访问的存储桶或文件夹添加 s3:ListBucket 权限。
注意:要允许用户上传和下载存储桶或文件夹中的对象,您还必须包括 s3:PutObject 和 s3:GetObject。
警告:在更改这些权限后,用户在访问主 Amazon S3 控制台时会收到拒绝被访问错误。用户必须使用指向存储桶或文件夹的直接控制台链接访问存储桶。指向存储桶的直接控制台链接与以下内容类似:
https://s3.console.aws.amazon.com/s3/buckets/DOC-EXAMPLE-BUCKET/
指向文件夹(例如 folder2)的直接控制台链接如下所示:
https://s3.console.aws.amazon.com/s3/buckets/DOC-EXAMPLE-BUCKET/folder1/folder2/
注意:Amazon S3 使用平面数据结构,而不是文件层次结构。控制台支持以文件夹方式分组和组织文件的概念。
解决方法按照以下步骤更新用户控制台仅访问某个存储桶或文件夹的 IAM 权限:
1.打开 IAM 控制台。
2.在控制台中,打开仅应具有对某个存储桶的访问权限的 IAM 用户或角色。
3.在 IAM 用户或角色的权限选项卡中,展开每个策略以查看其 JSON 策略文档。
4.在 JSON 策略文档中,搜索授予用户 s3:ListAllMyBuckets 操作或 s3:* 操作(所有 S3 操作)权限的策略。
5.修改策略以删除 s3:ListAllMyBuckets 操作权限。
注意:如果附加的用户策略允许对“*”资源进行 s3:* 或 Full Admin 访问,则策略已经包含 s3:ListAllMyBuckets 权限。因此,删除“*”资源。相反,请确保您使用的是本文中列出的示例策略之一。
6.仅为您希望用户从控制台访问的存储桶或文件夹添加 s3:ListBucket 权限。
以下示例策略用于访问 S3 存储桶。该策略允许用户仅在 DOC-EXAMPLE-BUCKET 上执行 s3:ListBucket、s3:PutObject 和 s3:GetObject 操作:该策略允许用户仅在 DOC-EXAMPLE-BUCKET 上执行 s3:ListBucket、s3:PutObject 和 s3:GetObject 操作:
{
"Version":"2012-10-17",
"Statement":,
"Resource":"arn:aws:s3:::DOC-EXAMPLE-BUCKET"
},
{
"Effect":"Allow",
"Action":,
"Resource":"arn:aws:s3:::DOC-EXAMPLE-BUCKET/*"
}
]
}
以下示例策略授予对文件夹的访问权限。例如,以下策略允许用户对 DOC-EXAMPLE-BUCKET中的 folder2 执行 s3:ListBucket、s3:PutObject 和 s3:GetObject 操作:
{
"Version": "2012-10-17",
"Statement": ,
"Resource":
},
{
"Effect": "Allow",
"Action": ,
"Resource": ,
"Condition": {
"StringLike": {
"s3:prefix":
}
}
}
]
}
7.为用户提供指向 S3 存储桶或文件夹的直接控制台链接。指向 S3 存储桶的直接控制台链接与以下类似:
https://s3.console.aws.amazon.com/s3/buckets/DOC-EXAMPLE-BUCKET/
指向文件夹的直接控制台链接与以下类似:
https://s3.console.aws.amazon.com/s3/buckets/DOC-EXAMPLE-BUCKET/folder1/folder2/
用户必须使用直接链接才能从控制台访问 S3 存储桶或文件夹。