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

为实时复制设置权限

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

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

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

创建 IAM 角色

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

本节解释了附加到此 IAM 角色的信任策略和最低所需权限策略。示例演练提供创建 IAM 角色的分步说明。有关更多信息,请参阅 配置实时复制的示例

信任策略 确定哪些主体身份可以担任此 IAM 角色。权限策略 指定 IAM 角色可在什么条件下对哪些资源执行哪些操作。

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

    { "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Principal":{ "Service":"s3.amazonaws.com" }, "Action":"sts:AssumeRole" } ] }
  • 以下示例显示了一个信任策略,您在其中将 Amazon S3 和 S3 批量操作标识为可担任此角色的服务主体。如果您正在创建批量复制任务,则使用此方法。有关更多信息,请参阅 为新的复制规则或目标创建批量复制任务

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

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

  • 以下示例显示了权限策略,您在其中向 IAM 角色授予代表您执行复制任务的权限。当 Amazon S3 担任角色时,它将具有您在此策略中指定的权限。在此策略中,amzn-s3-demo-source-bucket 是源存储桶,amzn-s3-demo-destination-bucket 是目标存储桶。

    { "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Action":[ "s3:GetReplicationConfiguration", "s3:ListBucket" ], "Resource":[ "arn:aws:s3:::amzn-s3-demo-source-bucket" ] }, { "Effect":"Allow", "Action":[ "s3:GetObjectVersionForReplication", "s3:GetObjectVersionAcl", "s3:GetObjectVersionTagging" ], "Resource":[ "arn:aws:s3:::amzn-s3-demo-source-bucket/*" ] }, { "Effect":"Allow", "Action":[ "s3:ReplicateObject", "s3:ReplicateDelete", "s3:ReplicateTags" ], "Resource":"arn:aws:s3:::amzn-s3-demo-destination-bucket/*" } ] }

    此权限策略授予执行以下操作的权限:

    • s3:GetReplicationConfigurations3:ListBucket – 对 amzn-s3-demo-source-bucket 存储桶执行这些操作的权限可让 Amazon S3 检索复制配置和列出存储桶内容。(当前权限模型需要 s3:ListBucket 权限来访问删除标记)。

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

    • s3:ReplicateObjects3:ReplicateDeleteamzn-s3-demo-destination-bucket 存储桶中所有对象上的这些操作的权限允许 Amazon S3 将对象或删除标记复制到目标存储桶。有关删除标记的信息,请参阅 删除操作对复制操作有何影响

      注意

      amzn-s3-demo-destination-bucket 存储桶执行 s3:ReplicateObject 操作的权限还支持复制元数据,例如对象标签和 ACL。因此,您无需显式授予执行 s3:ReplicateTags 操作的权限。

    • s3:GetObjectVersionTagging – 对 amzn-s3-demo-source-bucket 存储桶中的对象执行此操作的权限可让 Amazon S3 读取用于复制的对象标签。有关对象标签的更多信息,请参阅 使用标签对存储进行分类。如果 Amazon S3 没有 s3:GetObjectVersionTagging 权限,它将复制对象,而不是对象标签。

    有关 Amazon S3 操作的列表,请参阅《Service Authorization Reference》中的 Actions, resources, and condition keys for Amazon S3

    有关按 S3 资源类型对 S3 API 操作的权限的更多信息,请参阅 Amazon S3 API 操作所需的权限

    重要

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

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

    此处介绍的权限与最低复制配置相关。如果您选择添加可选复制配置,则必须向 Amazon S3 授予其他权限。例如,如果要复制加密的对象,还需要授予必要的 Amazon Key Management Service(Amazon KMS)密钥权限。有关更多信息,请参阅 复制加密对象(SSE-S3、SSE-KMS、DSSE-KMS、SSE-C)

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

当源存储桶和目标存储桶不是由相同的账户拥有时,目标存储桶的拥有者还必须添加一个存储桶策略,来向源存储桶的拥有者授予执行复制操作的权限,如下面的示例所示。在此示例策略中,amzn-s3-demo-destination-bucket 是目标存储桶。

还可以使用 Amazon S3 控制台来自动为您生成此存储桶策略。有关更多信息,请参阅启用从源存储桶接收复制的对象

注意

角色的 ARN 格式可能看起来不同。如果使用控制台创建角色,则 ARN 格式为 arn:aws:iam::account-ID:role/service-role/role-name。如果使用 Amazon CLI 创建角色,则 ARN 格式为 arn:aws:iam::account-ID:role/role-name。有关更多信息,请参阅《IAM 用户指南》中的 IAM 角色

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

有关示例,请参阅针对不同账户中的存储桶配置复制

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

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

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

    ... "Statement":[ { "Effect":"Deny", "Principal":{ "AWS":"arn:aws:iam::source-bucket-account-id:role/service-role/source-account-IAM-role" }, "Action":"s3:ReplicateTags", "Resource":"arn:aws:s3:::amzn-s3-demo-destination-bucket/*" } ] ...
注意

如果要复制加密的对象,还必须授予必要的 Amazon Key Management Service(Amazon KMS)密钥权限。有关更多信息,请参阅 复制加密对象(SSE-S3、SSE-KMS、DSSE-KMS、SSE-C)

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

您可以快速生成所需的策略,以便启用通过 Amazon S3 控制台从源存储桶接收复制的对象,而不是手动将上述策略添加到目标存储桶中。

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

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

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

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

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

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

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

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

更改副本所有权

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

授予 S3 批量操作的权限

S3 批量复制为您提供了一种复制以下对象的方法:

  • 在复制配置设立之前已经存在的对象

  • 以前已复制的对象

  • 复制失败的对象

当在新的复制配置中创建第一个规则时,或者通过 Amazon S3 控制台将新目标添加到现有配置时,您可以创建一次性批量复制任务。也可以通过创建批量操作任务来启动现有复制配置的批量复制。

有关批量复制 IAM 角色和策略示例,请参阅配置 IAM 角色以进行 S3 批量复制