当我尝试修改 Amazon Simple Storage Service(Amazon S3)存储桶的存储桶策略时,不断收到“403 Access Denied(403 访问被拒绝)”错误。
简短描述
由于以下原因,可能会出现 “403 访问被拒绝” 错误:
如要解决这些错误,请执行如下操作:
- 检查 IAM 用户或角色是否具有查看存储桶策略的 s3:Get:BucketPolicy 权限和编辑存储桶策略的 s3:PutBucketPolicy 权限。添加 IAM 用户策略,以便在不存在时授予您访问权限。
- 如果您的权限被拒绝,请使用另一个具有存储桶访问权限的 IAM 身份并编辑存储桶策略。或者,如果没有人有权访问存储桶策略,请将其删除并重新创建。
- 如果您尝试添加公有读策略,请禁用存储桶的 S3 阻止公有访问。
- 如果您使用 AWS Organizations,请确认您没有任何显式拒绝 S3 操作的服务控制策略。另外,请确认您可以为操作添加例外。
解决方法
检查您对 s3:GetBucketPolicy 和 s3:PutBucketPolicy 的权限
请按照以下步骤执行操作:
1. 打开 IAM console(IAM 控制台)。
2. 选择用于访问存储桶策略的身份,例如用户或角色。
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。
如果存储桶策略不存在,请添加该策略
如果您找不到授予 s3:GetBucketPolicy 或 s3:PutBucketPolicy 的权限,则添加授予您的 IAM 身份这些权限的策略。如果您发现拒绝访问 s3:GetBucketPolicy 或 s3:PutBucketPolicy 的策略,请移除这些策略。有关如何修改 IAM 权限的说明,请参阅更改 IAM 用户的权限。
使用另一个具有存储桶访问权限的 IAM 身份并修改存储桶策略
请按照以下步骤修改存储桶策略:
1. 打开 Amazon S3 控制台。
2. 从存储桶列表中打开您要更改其存储桶策略的存储桶。
3. 选择**Permissions (权限)**选项卡。
4. 选择存储桶策略。
5. 搜索包含 "Effect": "Deny" 的语句。
6. 编辑存储桶策略 以更新任何拒绝 IAM 身份访问 s3:GetBucketPolicy 或 s3:PutBucketPolicy 的 "Effect": "Deny" 语句。
如果存储桶策略拒绝所有人访问,请将其删除并重新创建
如果存储桶策略拒绝所有人访问 s3:GetBucketPolicy、s3:PutBucketPolicy 或所有 Amazon S3 操作 (s3:*),则删除该存储桶策略。如果您无法删除存储桶策略,请尝试以 AWS 账户根用户身份删除该策略。删除策略后,您可以创建新的存储桶策略。
禁用 S3 阻止公有访问
如果您的存储桶策略授予公有访问权限,请检查是否在存储桶上启用了 S3 阻止公有访问权限并将其禁用。为防止将来拒绝对您设为公有的 S3 存储桶的访问,请确认您没有为该账户启用 S3 阻止公有访问。
**注意:**在账户级别禁用 S3 阻止公有访问之前,请确认已在存储桶级别为私有存储桶启用该功能,以防止不必要的公有访问。
对于 AWS Organizations,删除不允许 Amazon S3 访问的服务控制策略
如果您使用的是 AWS Organizations,请检查显式拒绝 s3:PutBucketPolicy 操作或任何其他 S3 操作的任何语句的服务控制策略。删除根据贵组织的安全策略显式拒绝 S3 操作的服务控制策略。
例如,以下策略拒绝对所有 S3 操作的访问:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Deny",
"Action": "s3:*",
"Resource": "*"
}
]
}