View a markdown version of this page

AWSSupport-ConfigureS3ReplicationSameAndCrossAccount - AWS Systems Manager 自动化运行手册参考

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

AWSSupport-ConfigureS3ReplicationSameAndCrossAccount

描述

AWSSupport-ConfigureS3ReplicationSameAndCrossAccount自动化运行手册为相同账户或跨账户配置亚马逊简单存储服务 (Amazon S3) Simple Storage Service 在源存储桶和目标存储桶之间复制。此自动化支持复制使用服务器端加密、使用 Amazon S3 托管密钥 (SSE-S3) 和使用 (SSE-KMS) 进行服务器端加密 (SSE-KMS) 加密的存储桶。 AWS Key Management Service 它还支持基于前缀和标签的选择性复制筛选、具有 15 分钟 SLA 的 Amazon S3 复制时间控制 (Amazon S3 RTC) 以及删除标记复制。自动化会执行以下操作:

  • 验证输入参数和存储桶配置的兼容性。

  • 检查源存储桶和目标存储桶的加密设置。

  • 如果未作为输入提供,则创建一个具有相应复制权限的新 AWS Identity and Access Management (IAM) 角色。

  • 根据指定的参数(前缀、标签或整个存储桶)配置复制规则。

  • 如果尚未启用,则启用存储桶版本控制。

  • 使用复制时间控制 (RTC) 和删除标记复制等可选功能设置复制配置。

重要
  • 这种自动化不支持具有现有复制规则的存储桶。源存储桶不得有任何现有的复制配置。

  • 如果未提供 S3 ReplicationRole 输入,此自动化会创建一个具有相应复制权限的新 IAM 角色

  • 这种自动化不会复制现有对象。Amazon S3 复制仅适用于启用复制配置 uploaded/created 后的对象。

  • 要进行跨账户复制,您必须在目标账户中为一个 IAM 角色提供相应的 Amazon S3 操作和 AWS KMS 操作权限(如果存储桶使用 AWS KMS 加密)。

  • 此自动化使用aws:approve操作,该操作会暂时暂停执行,直到指定的委托人批准配置更改。有关更多信息,请参阅与批准者一起运行自动化

如何工作?

运行手册执行以下步骤:

  • ValidateInputParameters:验证所有输入参数的正确性和兼容性,以确保复制配置正确。

  • PrepareApprovalMessage:准备包含所有复制配置参数的批准消息,以供用户查看。

  • RequestApproval:在源存储桶上添加 Amazon S3 复制配置之前,请先请求授权用户的批准。

  • CheckBucketEncryption:检查源和目标 Amazon S3 存储桶的加密配置,以确定兼容的复制设置。

  • BranchOnEncryptionType:基于 Amazon S3 存储桶加密类型分支执行,以便为 SSE-S3 或 SSE-KMS 加密存储桶应用适当的复制配置。

  • 配置SSES3复制:为使用服务器端加密和 Amazon S3 托管密钥 (SSE-S3) 加密的存储桶配置 Amazon S3 复制,包括 IAM 角色和复制规则。

  • 配置 SSEKMSReplication:为使用服务器端加密 AWS KMS (SSE-KMS) 加密的存储桶配置 Amazon S3 复制,包括 IAM 角色、KMS 密钥权限和复制规则。

  • CleanupResources:如果未提供 S3 作为输入,则清理在复制配置失败期间创建ReplicationRole 的 IAM 角色。

运行此自动化(控制台)

所需的 IAM 权限

AutomationAssumeRole 参数需要执行以下操作才能成功使用运行手册。

  • s3:ListBucket

  • s3:GetBucketVersioning

  • s3:GetEncryptionConfiguration

  • s3:GetBucketLocation

  • s3:GetReplicationConfiguration

  • s3:PutBucketVersioning

  • s3:PutReplicationConfiguration

  • 我是:ListRoles

  • 我是:GetRole

  • 我是:GetRolePolicy

  • 我是:ListRoleTags

  • 我是:ListAttachedRolePolicies

  • 我是:ListRolePolicies

  • 我是:SimulatePrincipalPolicy

  • 我是:CreateRole

  • 我是:TagRole

  • 我是:PassRole

  • 我是:DeleteRole

  • 我是:DeleteRolePolicy

  • 我是:DetachRolePolicy

  • 我是:PutRolePolicy

  • sts: GetCallerIdentity

  • sns:Publish

  • kms:GetKeyPolicy (当存储桶使用 SSE-KMS 时,同账号复制)

  • kms:DescribeKey (当存储桶使用 SSE-KMS 时,同账号复制)

  • kms:PutKeyPolicy (当存储桶使用 SSE-KMS 时,同账号复制)

  • sts:AssumeRole (用于跨账户复制)

CrossAccountReplicationRole (适用于跨账户场景):

要进行跨账户复制,您必须为 CrossAccountReplicationRole 目标账户提供以下权限:

  • s3:ListBucket

  • s3:GetBucketVersioning

  • s3:GetBucketLocation

  • s3:GetBucketPolicy

  • s3:GetEncryptionConfiguration

  • s3:PutBucketVersioning

  • s3:PutBucketPolicy

  • kms:GetKeyPolicy (当跨账户目标存储桶使用 SSE-KMS 时)

  • kms:DescribeKey (当跨账户目标存储桶使用 SSE-KMS 时)

  • kms:PutKeyPolicy (当跨账户目标存储桶使用 SSE-KMS 时)

S3ReplicationRole (客户提供的角色):

如果您提供现有 S3ReplicationRole,则它必须具有以下权限:

  • s3:ListBucket

  • s3:GetBucketLocation

  • s3:GetReplicationConfiguration

  • s3:GetObjectVersionAcl

  • s3:GetObjectVersionTagging

  • s3:GetObjectVersionForReplication

  • s3:GetObjectTagging

  • s3:ReplicateObject

  • s3:ReplicateDelete

  • s3:ReplicateTags

  • s3:ObjectOwnerOverrideToBucketOwner

  • kms: decrypt(对于 SSE-KMS 场景,来源 KMS 密钥)

  • KMS: 加密(对于 SSE-KMS 方案,使用目标 KMS 密钥)

  • kms:GenerateDataKey (对于 SSE-KMS 场景,请使用目标 KMS 密钥)

  • kms: ReEncrypt *(对于 SSE-KMS 方案,目标 KMS 密钥)

同账号复制AutomationAssumeRole策略示例:

{ "Version": "2012-10-17", "Statement": [ { "Sid": "S3Permissions", "Effect": "Allow", "Action": [ "s3:GetBucketVersioning", "s3:GetEncryptionConfiguration", "s3:GetBucketLocation", "s3:GetReplicationConfiguration", "s3:ListBucket", "s3:PutBucketVersioning", "s3:PutReplicationConfiguration" ], "Resource": [ "arn:aws:s3:::SOURCE_BUCKET", "arn:aws:s3:::DESTINATION_BUCKET" ] }, { "Sid": "IAMReadOperations", "Effect": "Allow", "Action": [ "iam:GetRole", "iam:GetRolePolicy", "iam:ListRoleTags", "iam:ListAttachedRolePolicies", "iam:ListRolePolicies", "iam:SimulatePrincipalPolicy" ], "Resource": "*" }, { "Sid": "IAMListRolesForCleanup", "Effect": "Allow", "Action": "iam:ListRoles", "Resource": "*" }, { "Sid": "IAMCreateAndTagRole", "Effect": "Allow", "Action": [ "iam:CreateRole", "iam:TagRole" ], "Resource": "arn:aws:iam::ACCOUNT_ID:role/S3RepRole-*", "Condition": { "StringLike": { "aws:RequestTag/AWSSupport-ConfigureS3ReplicationSameAndCrossAccount": "*" } } }, { "Sid": "IAMPassRole", "Effect": "Allow", "Action": "iam:PassRole", "Resource": "arn:aws:iam::ACCOUNT_ID:role/S3RepRole-*", "Condition": { "StringEquals": { "iam:PassedToService": "s3.amazonaws.com" } } }, { "Sid": "TaggedIAMRoleModifyAndDeleteOperations", "Effect": "Allow", "Action": [ "iam:DeleteRole", "iam:DeleteRolePolicy", "iam:DetachRolePolicy", "iam:PutRolePolicy" ], "Resource": "arn:aws:iam::ACCOUNT_ID:role/S3RepRole-*", "Condition": { "StringLike": { "aws:ResourceTag/AWSSupport-ConfigureS3ReplicationSameAndCrossAccount": "*" } } }, { "Sid": "STSGetCallerIdentity", "Effect": "Allow", "Action": "sts:GetCallerIdentity", "Resource": "*" }, { "Sid": "SNSPublish", "Effect": "Allow", "Action": "sns:Publish", "Resource": "SNS_TOPIC_ARN" }, { "Sid": "KMSKeyReadOperations", "Effect": "Allow", "Action": [ "kms:GetKeyPolicy", "kms:DescribeKey" ], "Resource": [ "arn:aws:kms:REGION:ACCOUNT_ID:key/SOURCE_KMS_KEY_ID", "arn:aws:kms:REGION:ACCOUNT_ID:key/DESTINATION_KMS_KEY_ID" ] }, { "Sid": "KMSKeyMutatingOperations", "Effect": "Allow", "Action": "kms:PutKeyPolicy", "Resource": [ "arn:aws:kms:REGION:ACCOUNT_ID:key/SOURCE_KMS_KEY_ID", "arn:aws:kms:REGION:ACCOUNT_ID:key/DESTINATION_KMS_KEY_ID" ], "Condition": { "StringEquals": { "kms:CallerAccount": "ACCOUNT_ID" } } } ] }
注意

只有当存储桶使用 SSE-KMS 加密时,才需要策略声明(KMSKeyReadOperations 和 KMSKeyMutatingOperations)。

跨账户复制AutomationAssumeRole策略示例:

{ "Version": "2012-10-17", "Statement": [ { "Sid": "S3SourceBucketOperations", "Effect": "Allow", "Action": [ "s3:GetBucketVersioning", "s3:GetEncryptionConfiguration", "s3:GetBucketLocation", "s3:GetReplicationConfiguration", "s3:ListBucket", "s3:PutBucketVersioning", "s3:PutReplicationConfiguration" ], "Resource": "arn:aws:s3:::SOURCE_BUCKET" }, { "Sid": "IAMReadOperations", "Effect": "Allow", "Action": [ "iam:GetRole", "iam:GetRolePolicy", "iam:ListRoleTags", "iam:ListAttachedRolePolicies", "iam:ListRolePolicies", "iam:SimulatePrincipalPolicy" ], "Resource": "*" }, { "Sid": "IAMListRolesForCleanup", "Effect": "Allow", "Action": "iam:ListRoles", "Resource": "*" }, { "Sid": "IAMCreateAndTagRole", "Effect": "Allow", "Action": [ "iam:CreateRole", "iam:TagRole" ], "Resource": "arn:aws:iam::SOURCE_ACCOUNT_ID:role/S3RepRole-*", "Condition": { "StringLike": { "aws:RequestTag/AWSSupport-ConfigureS3ReplicationSameAndCrossAccount": "*" } } }, { "Sid": "IAMPassRole", "Effect": "Allow", "Action": "iam:PassRole", "Resource": "arn:aws:iam::SOURCE_ACCOUNT_ID:role/S3RepRole-*", "Condition": { "StringEquals": { "iam:PassedToService": "s3.amazonaws.com" } } }, { "Sid": "TaggedIAMRoleModifyAndDeleteOperations", "Effect": "Allow", "Action": [ "iam:DeleteRole", "iam:DeleteRolePolicy", "iam:DetachRolePolicy", "iam:PutRolePolicy" ], "Resource": "arn:aws:iam::SOURCE_ACCOUNT_ID:role/S3RepRole-*", "Condition": { "StringLike": { "aws:ResourceTag/AWSSupport-ConfigureS3ReplicationSameAndCrossAccount": "*" } } }, { "Sid": "CrossAccountRoleAssumption", "Effect": "Allow", "Action": "sts:AssumeRole", "Resource": "CROSS_ACCOUNT_REPLICATION_ROLE_ARN" }, { "Sid": "STSGetCallerIdentity", "Effect": "Allow", "Action": "sts:GetCallerIdentity", "Resource": "*" }, { "Sid": "SNSPublish", "Effect": "Allow", "Action": "sns:Publish", "Resource": "SNS_TOPIC_ARN" }, { "Sid": "KMSSourceKeyReadOperations", "Effect": "Allow", "Action": [ "kms:GetKeyPolicy", "kms:DescribeKey" ], "Resource": "arn:aws:kms:SOURCE_REGION:SOURCE_ACCOUNT_ID:key/SOURCE_KMS_KEY_ID" }, { "Sid": "KMSSourceKeyMutatingOperations", "Effect": "Allow", "Action": "kms:PutKeyPolicy", "Resource": "arn:aws:kms:SOURCE_REGION:SOURCE_ACCOUNT_ID:key/SOURCE_KMS_KEY_ID", "Condition": { "StringEquals": { "kms:CallerAccount": "SOURCE_ACCOUNT_ID" } } } ] }
注意
  • 只有当源存储桶使用 SSE-KMS 加密时,才需要策略声明(KMSSourceKeyReadOperations 和 KMSSourceKeyMutatingOperations)。

  • 将 CROSS_ACCOUNT_REPLICATION_ROLE_ARN 替换为您向自动化提供的实际参数值。 CrossAccountReplicationRole

CrossAccountReplicationRole策略示例:

{ "Version": "2012-10-17", "Statement": [ { "Sid": "S3DestinationBucketReadOperations", "Effect": "Allow", "Action": [ "s3:GetBucketVersioning", "s3:GetBucketLocation", "s3:GetBucketPolicy", "s3:GetEncryptionConfiguration", "s3:ListBucket", "s3:PutBucketVersioning", "s3:PutBucketPolicy" ], "Resource": "arn:aws:s3:::DESTINATION_BUCKET" }, { "Sid": "KMSDestinationKeyReadOperations", "Effect": "Allow", "Action": [ "kms:GetKeyPolicy", "kms:DescribeKey" ], "Resource": "arn:aws:kms:DESTINATION_REGION:DESTINATION_ACCOUNT_ID:key/DESTINATION_KMS_KEY_ID" }, { "Sid": "KMSDestinationKeyMutatingOperations", "Effect": "Allow", "Action": "kms:PutKeyPolicy", "Resource": "arn:aws:kms:DESTINATION_REGION:DESTINATION_ACCOUNT_ID:key/DESTINATION_KMS_KEY_ID", "Condition": { "StringEquals": { "kms:CallerAccount": "DESTINATION_ACCOUNT_ID" } } } ] }
注意

仅当目标存储桶使用 SSE-KMS 加密时,才需要 KMS 语句(KMSDestinationKeyReadOperations 和 KMSDestinationKeyMutatingOperations)。对于 SSE-S3 场景,请删除这些语句。

CrossAccountReplicationRole 信任策略示例:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "AUTOMATION_ASSUME_ROLE_ARN" }, "Action": "sts:AssumeRole" } ] }
注意

将 AUTOMATION_ASSUME_ROLE_ARN 替换为您提供的实际参数值。 AutomationAssumeRole

S3 ReplicationRole 策略示例:

{ "Version": "2012-10-17", "Statement": [ { "Sid": "S3SourceBucketPermissions", "Effect": "Allow", "Action": [ "s3:ListBucket", "s3:GetBucketLocation", "s3:GetReplicationConfiguration", "s3:GetObjectVersionAcl", "s3:GetObjectVersionTagging", "s3:GetObjectVersionForReplication", "s3:GetObjectTagging" ], "Resource": [ "arn:aws:s3:::SOURCE_BUCKET", "arn:aws:s3:::SOURCE_BUCKET/*" ] }, { "Sid": "S3DestinationBucketPermissions", "Effect": "Allow", "Action": [ "s3:ReplicateObject", "s3:ReplicateDelete", "s3:ReplicateTags" ], "Resource": "arn:aws:s3:::DESTINATION_BUCKET/*" }, { "Sid": "S3CrossAccountPermissions", "Effect": "Allow", "Action": "s3:ObjectOwnerOverrideToBucketOwner", "Resource": "arn:aws:s3:::DESTINATION_BUCKET/*" }, { "Sid": "KMSSourceKeyPermissions", "Effect": "Allow", "Action": "kms:Decrypt", "Resource": "arn:aws:kms:SOURCE_REGION:SOURCE_ACCOUNT_ID:key/SOURCE_KMS_KEY_ID" }, { "Sid": "KMSDestinationKeyPermissions", "Effect": "Allow", "Action": [ "kms:Encrypt", "kms:GenerateDataKey", "kms:ReEncrypt*" ], "Resource": "arn:aws:kms:DESTINATION_REGION:DESTINATION_ACCOUNT_ID:key/DESTINATION_KMS_KEY_ID" } ] }
注意
  • 仅当存储桶使用 SSE-KMS 加密时,才需要 KMS 语句(KMSSourceKeyPermissions 和 KMSDestinationKeyPermissions)。

  • 只有跨账户存储桶复制才需要 S3 CrossAccountPermissions 语句。

S3 ReplicationRole 信任策略示例:

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

说明

按照这些步骤对自动化进行配置:

  1. AWSSupport-ConfigureS3ReplicationSameAndCrossAccount在 Systems Manager 的 “文档” 下导航至。

  2. 选择 Execute automation(执行自动化)。

  3. 对于输入参数,请输入以下内容:

    • AutomationAssumeRole (必填):

      • 描述:(必填)允许 Systems Manager Automation 代表您执行操作的 AWS Identity and Access Management (IAM)角色的亚马逊资源名称 (ARN)。如果未指定角色,Systems Manager Automation 将使用启动此运行手册的用户的权限。

      • 类型:AWS::IAM::Role::Arn

    • SourceBucket (必填):

      • 描述:(必填)将在其中创建或更新复制规则的源 Amazon S3 存储桶的名称。

      • 类型:AWS::S3::Bucket::Name

    • DestinationBucket (必填):

      • 描述:(必填)将对象复制到的目标 Amazon S3 存储桶的名称。

      • 类型:String

      • 允许的模式:^[0-9a-z][a-z0-9\\-\\.]{3,63}$

    • SourceAccountId (必填):

      • 描述:(必填)源存储桶所在的 AWS 账户 ID。

      • 类型:String

      • 允许的模式:^[0-9]{12,13}$

    • DestinationAccountId (必填):

      • 描述:(必填)目标存储桶所在的 AWS 账户 ID。

      • 类型:String

      • 允许的模式:^[0-9]{12,13}$

    • SnsNotificationArn (必填):

      • 描述:(必填)用于自动化批准的亚马逊简单通知服务 (Amazon SNS) Simple Notification Service 的 ARN 主题。

      • 类型:String

      • 允许的模式:^arn:(aws|aws-cn|aws-us-gov|aws-iso(-[a-z])?):sns:[a-z]{2}(-gov)?(-iso[a-z]?)?-[a-z]{2,10}-[0-9]{1,2}:\\d{12}:[0-9a-zA-Z-_]{1,256}(.fifo)?$

    • 批准者(必填):

      • 描述:(必填) user/role ARNs 授权批准自动化执行的 IAM 列表。

      • 类型:StringList

      • 允许的模式:^arn:(aws|aws-cn|aws-us-gov|aws-iso(-[a-z])?):iam::\\d{12}:(user|role)/[\\w+=,.@\\-/]+$

    • S3ReplicationRole (可选):

      • 描述:(可选)用于 Amazon S3 复制操作的现有 IAM 角色的 ARN。此角色必须具有从源存储桶读取和写入目标存储桶的权限,如果存储桶使用 SSE-KMS 加密,则包括 KMS 权限。如果未提供,则自动化将创建一个具有适当权限的新角色。

      • 类型:String

      • 允许的模式:^$|^arn:(aws|aws-cn|aws-us-gov|aws-iso(-[a-z])?):iam::\\d{12}:role/[\\w+=,.@\\-/]+$

      • 默认值:""

    • CrossAccountReplicationRole (可选):

      • 描述:(可选)自动化可以代入的目标账户中 IAM 角色的 ARN。这是跨账户复制所必需的。对于同账号复制,请将其留空。

      • 类型:String

      • 允许的模式:^$|^arn:(aws|aws-cn|aws-us-gov|aws-iso(-[a-z])?):iam::\\d{12}:role/[\\w+=,.@\\-/]+$

      • 默认值:""

    • ReplicateEntireBucket (可选):

      • 描述:(可选)如果设置为true,则将复制整个存储桶,并且前缀和标签必须为空。如果为 false,则复制将基于指定的前缀或标记。

      • 类型:Boolean

      • 允许的值:[true, false]

      • 默认值:true

    • ReplicationRuleStatus (可选):

      • 描述:(可选)如果设置为true,则将启用创建的复制规则。如果设置为false,则创建的复制规则将设置为 “已禁用”。

      • 类型:Boolean

      • 允许的值:[true, false]

      • 默认值:true

    • DeleteMarkerReplicationStatus (可选):

      • 描述:(可选)如果设置为true,则自动化将启用删除标记复制。

      • 类型:Boolean

      • 允许的值:[true, false]

      • 默认值:false

    • ReplicationTimeControl (可选):

      • 描述:(可选)如果设置为true,则启用具有 15 分钟 SLA 的 Amazon S3 复制时间控制 (Amazon S3 RTC),以实现可预测的复制时间。

      • 类型:Boolean

      • 允许的值:[true, false]

      • 默认值:false

    • ReplicaModifications (可选):

      • 描述:(可选)如果设置为true,则允许复制对副本对象所做的元数据更改,从而允许将对复制对象的修改同步回源中。

      • 类型:Boolean

      • 允许的值:[true, false]

      • 默认值:false

    • 前缀(可选):

      • 描述:(可选)前缀过滤器,用于选择性复制具有特定键前缀的对象。前缀必须以尾部斜杠 (/) 结尾,才能正确筛选 Amazon S3 前缀。

      • 类型:String

      • 允许的模式:^$|^[a-zA-Z0-9!_'()\\-]*/+$

      • 默认值:""

    • 标签(可选):

      • 描述:(可选)JSON 标签数组,用于筛选要复制的对象。单个标签的格式:[{“Key”:” TagKey “” “,” Value”:” TagValue “}],多个标签的格式:[{“Key”:” TagKey 1"、“Value”:” TagValue 1"}、{“Key”:” TagKey 2"、“Value”:” TagValue 2"}]。

      • 类型:String

      • 允许的模式:^\\[((\\{\"Key\":\"[a-zA-Z0-9+\\-=.:/ @\\s]{1,128}\",\"Value\":\"[a-zA-Z0-9+\\-=.:/@\\s]{0,256}\"\\})(,\\{\"Key\":\"[a-zA-Z0-9+\\-=.:/ @\\s]{1,128}\",\"Value\":\"[a-zA-Z0-9+\\-=.:/@\\s]{0,256}\"\\})*)?\\]$

      • 默认值:[]

  4. 选择执行

  5. 自动化启动。

  6. 文档将执行以下步骤:

    • ValidateInputParameters:

      验证所有输入参数的正确性和兼容性,以确保复制配置正确。

    • PrepareApprovalMessage:

      准备带有所有复制配置参数的批准消息,以供用户查看。

    • RequestApproval:

      在继续进行 Amazon S3 复制配置更改之前,请先请求授权用户的批准。

    • CheckBucketEncryption:

      检查源和目标 Amazon S3 存储桶的加密配置,以确定兼容的复制设置。

    • BranchOnEncryptionType:

      基于 Amazon S3 存储桶加密类型分支执行,以便为 SSE-S3 或 SSE-KMS 加密存储桶应用适当的复制配置。

    • 配置SSES3复制

      为使用服务器端加密、使用 Amazon S3 托管密钥 (SSE-S3) 加密的存储桶配置 Amazon S3 复制,包括 IAM 角色和复制规则。

    • 配置 SSEKMSReplication

      为使用服务器端加密 AWS KMS (SSE-KMS) 加密的存储桶配置 Amazon S3 复制,包括 IAM 角色、KMS 密钥权限和复制规则。

    • CleanupResources:

      当客户未提供 S3 时,清理在复制配置失败期间创建ReplicationRole 的 IAM 角色。

  7. 完成后,查看配置SSES3复制步骤(对于 SSE-S3 加密存储桶)或配置SSEKMSReplication步骤(对于 SSE-KMS 加密存储桶)的输出,以了解执行结果,包括复制配置状态以及用于复制的 IAM 角色。

参考

Systems Manager Automation