当我尝试修改我的 Amazon Simple Storage Service(Amazon S3)桶的桶策略时,遇到以下错误: You don't have permissions to edit bucket policy(您无权编辑桶策略)
简短描述
出现此错误的原因如下:
如需解决这些问题,请尝试以下方法:
- 检查 IAM 用户或角色是否具有 s3:GetBucketPolicy 桶策略查看权限以及 s3:PutBucketPolicy 编辑权限。添加 IAM 用户策略以授予您访问权限(如果不存在)。
- 如果您的权限被拒绝,请使用具有桶访问权限的另一个 IAM 身份,然后编辑桶策略。或者,如果没有人能够访问桶策略,请将其删除并重新创建桶策略。
- 如果您正在尝试添加公共读取策略,请关闭桶的“S3 屏蔽公共访问权限”功能。
- 如果使用 AWS Organizations,请确认您没有任何明确拒绝 S3 操作的服务控制策略。此外,请确认您可以为您的操作添加例外。
解决方法
检查您对 s3:GetBucketPolicy 和 s3:GetBucketPolicy 的权限
请按照以下步骤进行操作:
1. 打开 IAM 控制台。
2. 选择用于访问桶策略的身份,例如 User(用户)或 Role(角色)。
3. 选择您用于访问桶策略的 IAM 身份名称。
4. 在您的 IAM 身份的 Permissions(权限)选项卡中,展开每项策略以查看其 JSON 策略文档。
5. 在 JSON 策略文档中,搜索与 Amazon S3 访问相关的策略。然后,确认您拥有在桶上执行 s3:GetBucketPolicy 和 s3:PutBucketPolicy 操作的权限。
以下示例 IAM 策略允许 IAM 身份在 DOC-EXAMPLE-BUCKET 上执行 s3:GetBucketPolicy 和 s3:PutBucketPolicy 操作:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "ModifyBucketPolicy",
"Action": [
"s3:GetBucketPolicy",
"s3:PutBucketPolicy"
],
"Effect": "Allow",
"Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET"
},
{
"Sid": "AccessS3Console",
"Action": [
"s3:GetBucketLocation",
"s3:ListAllMyBuckets"
],
"Effect": "Allow",
"Resource": "arn:aws:s3:::*"
}
]
}
**注意:**上述 IAM 策略中的 AccessS3Console 语句授予 Amazon S3 控制台访问权限。它并不是修改桶策略所特有的。
6. 在 JSON 策略文档中,搜索带有 "Effect": "Deny" 的语句。然后,确认这些语句不会拒绝您的 IAM 身份对 s3:GetBucketPolicy 或 s3:PutBucketPolicy 的访问。
7. 确保桶 ARN(例如:arn:aws:s3:::DOC-EXAMPLE-BUCKET)存在于策略的 Resource(资源)部分中。这是因为 s3:GetBucketPolicy 和 s3:PutBucketPolicy 是桶级别操作。
8. 检查 IAM 策略中是否应用了 aws:SourceIP 等任何全局条件,以限制 s3:GetBucketPolicy 和 s3:PutBucketPolicy 操作。如果这些条件限制访问权限,请删除或更新这些条件。
如果桶策略不存在,请添加一个桶策略
如果找不到授予 s3:GetBucketPolicy 或 s3:PutBucketPolicy 权限的策略,请添加一个策略来向您的 IAM 身份授予对它们的权限。如果发现有策略拒绝对 s3:GetBucketPolicy 或 s3:PutBucketPolicy 的访问,请删除这些策略。有关修改 IAM 权限的说明,请参阅更改 IAM 用户的权限。
使用具有桶访问权限的另一个 IAM 身份并修改桶策略
请按照以下步骤修改桶策略:
1. 打开 Amazon S3 控制台。
2. 从桶列表中,打开包含要更改的桶策略的桶。
3. 选择 Permissions(权限)选项卡。
4. 选择 Bucket policy(桶策略)。
5. 搜索带有 "Effect": "Deny" 的语句。
6. 编辑桶策略以更新任何 "Effect": "Deny" 语句,这些语句拒绝了 IAM 身份对 s3:GetBucketPolicy 或 s3:PutBucketPolicy 的访问。
7. 检查桶策略中是否应用了 aws:PrincipalArn 等条件,以限制您的 IAM 身份的 s3:GetBucketPolicy 和 s3:PutBucketPolicy 操作。如果这些条件限制访问权限,请删除或更新这些条件。
如果桶策略拒绝所有人访问,请将其删除并重新创建桶策略
如果桶策略拒绝所有人访问 s3:GetBucketPolicy、s3:PutBucketPolicy 或所有 Amazon S3 操作(s3:*),请删除该桶策略。如果无法删除桶策略,请尝试以 AWS 账户根用户身份删除该策略。删除策略后,您可以创建新的桶策略。
关闭“S3 屏蔽公共访问权限”
如果您的桶策略授予公共访问权限,请检查该桶是否已启用“S3 屏蔽公共访问权限”,然后将其关闭。为防止将来对您设为公共的 S3 桶的访问被拒绝,请确认您没有为该账户启用“S3 屏蔽公共访问权限”。
有关详细信息,请参阅屏蔽对您的 Amazon S3 存储的公共访问。另请参阅“公共”的含义。
**注意:**在账户级别关闭“S3 屏蔽公共访问权限”之前,请确认您已在桶级别为私有桶启用该功能。这是防止不必要地公共访问这些私有桶所必需的。
对于 AWS Organizations,删除不允许 Amazon S3 访问的服务控制策略
如果您使用的是 AWS Organizations,请检查服务控制策略是否有任何语句明确拒绝 s3:PutBucketPolicy 操作或任何其他 S3 操作。根据贵组织的安全策略,删除明确拒绝 S3 操作的服务控制策略。
例如,以下策略拒绝访问所有 S3 操作:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Deny",
"Action": "s3:*",
"Resource": "*"
}
]
}