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

设置权限

设置复制时,您必须获取必要的权限,如下所示:

  • Amazon S3 需要代表您复制对象的权限。您通过创建一个 IAM 角色,然后在复制配置中指定该角色,授予这些权限。

  • 当源存储桶与目标存储桶不是由相同亚马逊云科技账户拥有时,目标存储桶的拥有者必须向源存储桶拥有者授予存储副本的权限。

创建 IAM 角色

默认情况下,所有 Amazon S3 资源(存储桶、对象和相关子资源)都是私有的,只有资源拥有者可以访问相应的资源。Amazon S3 需要权限才能从源存储桶读取和复制对象。您通过创建一个 IAM 角色并在复制配置中指定该角色,授予这些权限。

此部分介绍信任策略及所需的最低权限策略。示例演练提供创建 IAM 角色的分步说明。有关更多信息,请参阅演练:配置复制的示例

  • 以下示例显示了一个信任策略,您在其中将 Amazon S3 标识为可担任角色的服务委托人。

    { "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Principal":{ "Service":"s3.amazonaws.com" }, "Action":"sts:AssumeRole" } ] }

    有关 IAM 角色的更多信息,请参阅《IAM 用户指南》中的 IAM 角色

  • 以下示例显示了一个访问策略,您在其中向角色授予代表您执行复制任务的权限。当 Amazon S3 担任角色时,它将具有您在此策略中指定的权限。在此策略中,DOC-EXAMPLE-BUCKET1 是源存储桶,DOC-EXAMPLE-BUCKET2 是目标存储桶。

    { "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Action":[ "s3:GetReplicationConfiguration", "s3:ListBucket" ], "Resource":[ "arn:aws:s3:::DOC-EXAMPLE-BUCKET1" ] }, { "Effect":"Allow", "Action":[ "s3:GetObjectVersionForReplication", "s3:GetObjectVersionAcl", "s3:GetObjectVersionTagging" ], "Resource":[ "arn:aws:s3:::DOC-EXAMPLE-BUCKET1/*" ] }, { "Effect":"Allow", "Action":[ "s3:ReplicateObject", "s3:ReplicateDelete", "s3:ReplicateTags" ], "Resource":"arn:aws:s3:::DOC-EXAMPLE-BUCKET2/*" } ] }

    访问策略授予以下操作的权限:

    • s3:GetReplicationConfigurations3:ListBucket – 针对 DOC-EXAMPLE-BUCKET1 存储桶上这些操作的权限允许 Amazon S3 检索复制配置和列出存储桶内容。(当前权限模型需要 s3:ListBucket 权限来访问删除标记)。

    • s3:GetObjectVersionForReplications3:GetObjectVersionAcl – 针对所有对象授予的这些操作的权限允许 Amazon S3 获取特定对象版本和对象关联的访问控制列表 (ACL)。

    • s3:ReplicateObjects3:ReplicateDelete – 针对 DOC-EXAMPLE-BUCKET2 存储桶(目标存储桶)中所有对象的这些操作的权限允许 Amazon S3 将对象或删除标记复制到目标存储桶。有关删除标记的信息,请参阅 删除操作对复制操作有何影响

      注意

      针对 DOC-EXAMPLE-BUCKET2 存储桶(目标存储桶)的 s3:ReplicateObject 操作的权限还允许复制对象标签,因此您无需显式授予 s3:ReplicateTags 操作的权限。

    • s3:GetObjectVersionTagging – 针对 DOC-EXAMPLE-BUCKET1 存储桶(源存储桶)中对象的此操作的权限允许 Amazon S3 读取复制的对象标签。有关更多信息,请参阅使用标签对存储进行分类。如果 Amazon S3 没有这些权限,它将复制对象而不是对象标签。

    有关 Amazon S3 操作的列表,请参见 Amazon S3 操作

    重要

    拥有 IAM 角色的 Amazon Web Services 账户 必须拥有其向 IAM 角色授予的操作的权限。

    例如,假定源存储桶包含由另一个 Amazon Web Services 账户 拥有的对象。对象的拥有者必须通过对象 ACL 向拥有 IAM 角色的 Amazon Web Services 账户 显式授予必要的权限。否则,Amazon S3 无法访问这些对象,因而这些对象的复制将失败。有关 ACL 权限的信息,请参阅 访问控制列表 (ACL) 概述

    此处介绍的权限与最低复制配置相关。如果您选择添加可选复制配置,则必须向 Amazon S3 授予其他权限。有关更多信息,请参阅其他复制配置

在源存储桶和目标存储桶由不同的 Amazon Web Services 账户 拥有时授予权限

当源存储桶和目标存储桶由不同的账户拥有时,目标存储桶的拥有者还必须添加一个存储桶策略,以向源存储桶的拥有者授予执行复制操作的权限,如下所示。在此策略中,DOC-EXAMPLE-BUCKET2 是目标存储桶。

{ "Version":"2012-10-17", "Id":"PolicyForDestinationBucket", "Statement":[ { "Sid":"Permissions on objects", "Effect":"Allow", "Principal":{ "AWS":"arn:aws:iam::SourceBucket-account-ID:role/service-role/source-account-IAM-role" }, "Action":[ "s3:ReplicateDelete", "s3:ReplicateObject" ], "Resource":"arn:aws:s3:::DOC-EXAMPLE-BUCKET2/*" }, { "Sid":"Permissions on bucket", "Effect":"Allow", "Principal":{ "AWS":"arn:aws:iam::SourceBucket-account-ID:role/service-role/source-account-IAM-role" }, "Action": [ "s3:List*", "s3:GetBucketVersioning", "s3:PutBucketVersioning" ], "Resource":"arn:aws:s3:::DOC-EXAMPLE-BUCKET2" } ] }

有关示例,请参阅当源存储桶和目标存储桶由不同账户拥有时配置复制

如果向源存储桶中的对象添加标签,请注意以下事项:

  • 如果源存储桶拥有者向 Amazon S3 授予 s3:GetObjectVersionTaggings3:ReplicateTags 操作的权限来复制对象标签(通过 IAM 角色),则 Amazon S3 将复制标签以及对象。有关 IAM 角色的信息,请参阅 创建 IAM 角色

  • 如果目标存储桶的所有者不希望复制标签,则他们可以向目标存储桶策略添加以下语句来显式拒绝 s3:ReplicateTags 操作的权限。在此策略中,DOC-EXAMPLE-BUCKET2 是目标存储桶。

    ... "Statement":[ { "Effect":"Deny", "Principal":{ "AWS":"arn:aws:iam::SourceBucket-account-id:role/service-role/source-account-IAM-role" }, "Action":"s3:ReplicateTags", "Resource":"arn:aws:s3:::DOC-EXAMPLE-BUCKET2/*" } ] ...

更改副本所有权

当源存储桶和目标存储桶由不同的 Amazon Web Services 账户 拥有时,您可以指示 Amazon S3 将副本的所有权更改为拥有目标存储桶的 Amazon Web Services 账户。有关拥有者覆盖的更多信息,请参阅更改副本拥有者

启用从源存储桶接收复制的对象

您可以快速生成所需的策略,以便通过 Amazon Web Services Management Console从源存储桶接收复制的对象。

  1. 登录到 Amazon Web Services Management Console,然后通过以下网址打开 Amazon S3 控制台:https://console.aws.amazon.com/s3/

  2. 在左侧导航窗格中,选择存储桶

  3. Buckets(存储桶)列表中,选择要用作目标存储桶的存储桶。

  4. 选择 Management(管理)选项卡,然后向下滚动到 Replication rules(复制规则)。

  5. 对于 Actions(操作),选择 Receive replicated objects(接收复制的对象)。

    按照提示进行操作并输入源存储桶账户的 Amazon Web Services 账户 ID,然后选择 Generate policies(生成策略)。这将生成 Amazon S3 存储桶策略和 KMS 密钥策略。

  6. 要将此策略添加到现有存储桶策略中,请选择 Apply settings(应用设置),或者选择 Copy(复制)以手动复制更改。

  7. (可选)在 Amazon Key Management Service 控制台上将 Amazon KMS 策略复制到所需的 KMS 密钥策略。