主体 - Amazon Simple Storage Service
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

主体

Principal 元素用于指定被允许或拒绝访问资源的用户、账户、服务或其他实体。下面是指定 Principal 的示例。有关更多信息,请参阅 IAM 用户指南中的主体

向 Amazon Web Services 账户授予权限

要向 Amazon Web Services 账户授予权限,则使用以下格式标识此账户。

"AWS":"account-ARN"

示例如下。

"Principal":{"AWS":"arn:aws:iam::AccountIDWithoutHyphens:root"}
"Principal":{"AWS":["arn:aws:iam::AccountID1WithoutHyphens:root","arn:aws:iam::AccountID2WithoutHyphens:root"]}

Amazon S3 还支持规范用户 ID,这是 Amazon Web Services 账户 ID 的模糊形式。可使用以下格式指定此 ID。

"CanonicalUser":"64-digit-alphanumeric-value"

以下是示例。

"Principal":{"CanonicalUser":"64-digit-alphanumeric-value"}

有关如何查找您的账户的规范用户 ID 的信息,请参阅查找账户的规范用户 ID

重要

在策略中使用规范用户 ID 时,Amazon S3 可能会将规范 ID 更改为相应的 Amazon Web Services 账户 ID。这不会影响策略,因为这两个 ID 标识相同的账户。

向 IAM 用户授予权限

要向您的账户中的 IAM 用户授予权限,您必须提供 "AWS":"user-ARN" 名称值对。

"Principal":{"AWS":"arn:aws:iam::account-number-without-hyphens:user/username"}

有关提供分步说明的详细示例,请参阅 示例 1:存储桶拥有者向其用户授予存储桶权限示例 3:存储桶拥有者授予不属于自己的对象的权限

注意

如果您在更新存储桶策略后删除了 IAM 身份,则存储桶策略将在主体元素中显示唯一标识符,而不是 ARN。这些唯一 ID 从不会重复使用,因此,您可以安全地从所有策略语句中删除具有唯一标识符的主体。有关唯一标识符的更多信息,请参阅《IAM 用户指南》中的 IAM 标识符

授予匿名权限

要授予每个人权限,也称为匿名访问,请将 Principal 值设置为通配符 ("*")。例如,如果您将存储桶配置为网站,您将需要使该存储桶中的所有对象都可公开访问。

"Principal":"*"
"Principal":{"Amazon":"*"}

在基于资源的策略中使用具有 Allow 效果的 "Principal": "*" 允许任何人访问您的资源,即便未登录 Amazon。

在基于资源的策略中使用具有 Allow 效果的 "Principal" : { "Amazon" : "*" } 允许任何根用户、IAM 用户、代入角色会话或联合身份用户在同一分区的任何账户中访问您的资源。

对于匿名用户,这两种方法是等效的。有关更多信息,请参阅《IAM 用户指南》中的所有主体

您不能使用通配符匹配一部分主体名称或 ARN。

重要

因为任何人都可以创建 Amazon Web Services 账户,安全级别在这两种方法中是等效的,尽管它们的功能不同。

警告

在授予对您的 Amazon S3 存储桶的匿名访问权限时应谨慎。如果您授予匿名访问权限,那么世界上的任何人都可以访问您的存储桶。我们强烈建议您绝对不要授予对 S3 存储桶的任何类型的匿名写入权限。

限制资源权限

您还可以使用资源策略来限制对 IAM 主体原本可以使用的资源的访问权限。使用 Deny 语句来阻止访问。

如果未使用安全传输协议,则以下示例会阻止访问:

{"Effect": "Deny", "Principal": "*", "Action": "s3:*", "Resource": <bucket ARN>, "Condition": { "Boolean": { "aws:SecureTransport" : "false"} } }

使用 "Principal": "*" 以便此限制适用于每个用户,这是本策略的最佳实践,而不是尝试使用此方法仅拒绝特定账户或主体的访问权限。

要求通过 CloudFront URL 进行访问

您可以要求用户使用 Amazon CloudFront URL 而不是 Amazon S3 URL 访问您的 Amazon S3 内容。为此,请创建 CloudFront 源访问身份 (OAI)。然后,更改对您的存储桶或存储桶中对象的权限。在 Principal 语句中指定 OAI 的格式如下所示。

"Principal":{"CanonicalUser":"Amazon S3 Canonical User ID assigned to origin access identity"}

有关更多信息,请参阅 Amazon CloudFront 开发人员指南中的使用源访问身份限制对您的 Amazon S3 内容的访问