我必须解决我在修改 Amazon Simple Storage Service (Amazon S3) 存储桶的存储桶策略时收到的“You don't have permissions to edit bucket policy”错误。
简短描述
**注意:**如果您在运行 AWS 命令行界面 (AWS CLI) 命令时收到错误,请参阅排查 AWS CLI 错误。此外,请确保您使用的是最新版本的 AWS CLI。
您的用户收到“You don't have permissions to edit bucket policy”错误,原因如下:
要解决上述问题,请完成以下故障排除步骤。
解决方法
检查您对 s3:GetBucketPolicy 和 s3:PutBucketPolicy 的权限
完成以下步骤:
- 打开 IAM 控制台。
- 在导航窗格中,选择用于访问存储桶策略的身份,例如 User(用户)或 Role(角色)。
- 选择您用于访问存储桶策略的 IAM 身份名称。
- 在 IAM 身份的 Permissions(权限)选项卡中,展开每个策略以查看其 JSON 策略文档。
- 在 JSON 策略文档中,搜索与 Amazon S3 访问相关的策略。然后,确认您拥有在存储桶上执行 s3:GetBucketPolicy 和 s3:PutBucketPolicy 操作的权限。
**注意:**如果没有包含 s:3GetBucketPolicy 和 s3:PutBucketPolicy 操作的策略,请将这些权限添加到策略中。有关如何修改 IAM 权限的说明,请参阅更改 IAM 用户的权限。
以下示例 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 控制台访问权限,并不特定于存储桶策略的更改。
- 在 JSON 策略文档中,搜索包含 "Effect": "Deny" 的语句。然后,确认这些语句不会拒绝您的 IAM 身份对 s3:GetBucketPolicy 或 s3:PutBucketPolicy 的访问。
- 确保在策略的 Resource(资源)部分中包含存储桶的 Amazon 资源名称 (ARN)。在上述示例中,ARN 为 aws:s3:::DOC-EXAMPLE-BUCKET。
**注意:**s3:GetBucketPolicy 和 s3:PutBucketPolicy 是存储桶级别的操作。
- 检查您是否在 IAM 策略中应用了 aws:SourceIP 等全局条件,以限制 s3:GetBucketPolicy 和 s3:PutBucketPolicy 操作。如果这些条件限制访问权限,请将其移除或进行更新。
如果存储桶策略不存在,请添加一个策略
如果找不到授予 s3:GetBucketPolicy 或 s3:PutBucketPolicy 权限的策略,请添加一个策略向您的 IAM 身份授予这些权限。如果发现有策略拒绝对 s3:GetBucketPolicy 或 s3:PutBucketPolicy 的访问,请移除这些策略。
使用具有存储桶访问权限的另一个 IAM 身份来修改存储桶策略
完成以下步骤:
- 打开 Amazon S3 控制台。
- 在左侧导航窗格中,选择 General purpose buckets(通用存储桶)或 Directory buckets(目录存储桶)。
- 从存储桶列表中,打开您要更改其策略的存储桶。
- 选择 Permissions(权限)选项卡。
- 选择 Bucket policy(存储桶策略)。
- 搜索包含 "Effect": "Deny" 的语句。
- 编辑存储桶策略以更新任何 "Effect": "Deny" 语句,这些语句拒绝了 IAM 身份对 s3:GetBucketPolicy 或 s3:PutBucketPolicy 的访问。
- 检查存储桶策略中是否包含 aws:PrincipalArn 等条件,这些条件会限制您的 IAM 身份执行 s3:GetBucketPolicy 和 s3:PutBucketPolicy 操作。如果这些条件限制访问权限,请将其移除或进行更新。
删除并重新创建拒绝所有人访问的存储桶策略
如果没有人能够访问 s3:GetBucketPolicy、s3:PutBucketPolicy 或所有 Amazon S3 操作 (s3:*),请使用 delete-bucket-policy AWS CLI 命令删除该策略:
delete-bucket-policy
-bucket example_bucket
**注意:**请将 example_bucket 替换为您的存储桶名称。
如果您意外将自己锁定在存储桶之外并且无法删除存储桶策略,请重新获得对存储桶的访问权限。删除存储桶策略后,您可以创建新的存储桶策略。
关闭 Amazon S3 屏蔽公共访问权限
如果您的存储桶策略授予公共访问权限,请关闭该存储桶的 Amazon S3 屏蔽公共访问权限。有关更多信息,请参阅屏蔽对您的 Amazon S3 存储的公共访问以及“公共”的含义。
**注意:**要阻止对私有存储桶的公共访问,请先启用存储桶的 Amazon S3 屏蔽公共访问权限,然后在 AWS 账户级别将其停用。
对于 AWS Organizations,删除不允许 Amazon S3 访问的 SCP
如果您使用 AWS Organizations,请查看您的服务 (SCP)。查找任何显式拒绝 s3:PutBucketPolicy 操作或其他 Amazon S3 策略操作的语句。当您的组织不需要策略时,请删除对 s3:* 操作应用 Deny 效果的 SCP。
以下策略示例拒绝对所有 Amazon S3 操作的访问:
{ "Version": "2012-10-17",
"Statement": [
{
"Effect": "Deny",
"Action": "s3:*",
"Resource": "*"
}
]
}