我正在尝试使用存储桶策略或对象访问控制列表 (ACL) 向Amazon Simple Storage Service (Amazon S3) 存储桶中的对象授予公共读取权限。但是,我收到了权限不足或访问被拒的错误信息。
概述
假设您正在使用以下存储桶策略授予存储桶中对象的公共读取权限:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "PublicReadGetObject",
"Effect": "Allow",
"Principal": "*",
"Action": [
"s3:GetObject"
],
"Resource": [
"arn:aws:s3:::example-bucket/*"
]
}
]
}
由于以下原因,您可能会出现权限不足或访问被拒绝的错误:
- 您没有 ** s3: PutBucketPolicy** 权限,无法为 Amazon S3 存储桶更新或创建存储桶策略。
- 您没有 **s3: PutObjectACL **修改对象 ACL 的权限。
- S3 存储桶策略或对象 ACL 与您的 S3 屏蔽公共访问权限设置冲突。
解决方法
授予所需的权限
确保您使用的 AWS 身份和访问管理 (IAM) 用户或角色具有以下权限:
- s3: PutBucketPolicy 用于为您的 S3 存储桶创建或更新存储桶策略
- s3:PutObjectAcl 用于更新对象的 ACL 以授予公共读取访问权限
更新屏蔽公共访问权限设置
默认情况下,所有 Amazon S3 资源都是私有的,例如存储桶、对象和相关子资源,不得公开访问。接入点、存储桶和账户的屏蔽公共访问权限设置可帮助您管理对 Amazon S3 资源的公共访问。这些设置会覆盖 S3 存储桶策略和对象 ACL,因此您可以限制对这些资源的公共访问。当您配置的存储桶策略或对象 ACL 与屏蔽公共访问权限设置冲突时,您无法创建存储桶策略来授予公共读取访问权限。S3 还拒绝修改存储桶策略或对象 ACL 授予公共读取访问权限的权限。
Amazon S3 屏蔽公共访问权限有四种设置来屏蔽对存储桶和对象的公共访问。这些设置是独立的,可以任意组合使用。
- BlockPublicACLS - 屏蔽使用新 ACL 授予的公共访问权限: Amazon S3 会屏蔽您应用于新添加的存储桶或对象的公共访问权限。S3 还拒绝为现有存储桶和对象创建新的公共访问 ACL。此设置不会更改任何允许公众访问使用 ACL 的 S3 资源的现有权限。
- **IgnorePublicAcLs-屏蔽使用任何 ACL 授予的公共访问权限:**Amazon S3 会忽略所有授予对存储桶和对象的公共访问权限的 ACL。
- **BlockPublicPolicy-屏蔽使用新的公共存储桶或接入点策略授予的公共访问权限:**Amazon S3 屏蔽使用授予对存储桶和对象的公共访问权限的新存储桶和接入点策略。此设置不会更改任何允许公众访问 S3 资源的现有策略。
- **RestrictPublicBuckets-屏蔽使用任何公共存储桶或接入点策略授予的公共和跨账户访问权限:**通过授予对存储桶和对象的公共访问权限的策略,Amazon S3 忽略对存储桶或接入点的公有和跨账户访问权限。
有关更多信息,请参阅 Amazon S3 屏蔽公共访问权限-为您的账户和存储桶提供另一层保护。
请务必根据您的用例来更新 S3 屏蔽公共访问权限设置。
注意:
- 如果您使用 ACL 授予对象的公共读取权限,请关闭以下 屏蔽公共访问权限设置:
- 如果您使用 S3 存储桶策略授予对象的公共读取权限,请关闭以下屏蔽公共访问权限设置:
- 您不能使用存储桶 ACL 或对象 ACL ,为已将 S3 对象所有权设置为强制执行存储桶所有者的存储分段授予公共读取访问权限。 在这种情况下,您必须使用策略来授予对存储桶和桶中对象的访问权限。设置或更新 ACL 的请求失败,您会收到AccessControlListNotSupported 错误消息。仍然支持读取 ACL 的请求。
如果您为账户中的所有 S3 存储段启用了屏蔽公共访问权限设置,则会看到消息存储桶和对象未公开。有关更多信息,请参阅为您的账户配置屏蔽公共访问权限设置。
**重要信息:**当您授予对象的公共读取权限时,互联网上的任何人都可以访问这些对象。如果这不是您想要的,请确保您的 S3 存储桶不可公开访问。有关更多信息,请参阅 Amazon S3 安全最佳实践。
相关信息
如何授予对 Amazon S3 存储桶中某些对象的公共读取权限?