本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
AWSSupport-ConfigureS3ReplicationSameAndCrossAccount
Description
AWSSupport-ConfigureS3ReplicationSameAndCrossAccount 自動化 Runbook 會為相同或跨帳戶設定來源與目的地儲存貯體之間的 Amazon Simple Storage Service (Amazon S3) 儲存貯體複寫。此自動化支援複寫使用 Amazon S3-Managed管金鑰 (SSE-S3) 進行伺服器端加密和使用 AWS Key Management Service (SSE-KMS) 進行伺服器端加密的儲存貯體。它還支援字首和標籤型選擇性複寫篩選、具有 15 分鐘 SLA 的 Amazon S3 複寫時間控制 (Amazon S3 RTC),以及刪除標記複寫。自動化會執行下列動作:
驗證輸入參數和儲存貯體組態的相容性。
檢查來源和目的地儲存貯體上的加密設定。
如果未提供 作為輸入,則建立具有適當複寫許可的新 AWS Identity and Access Management (IAM) 角色。
根據指定的參數 (字首、標籤或整個儲存貯體) 設定複寫規則。
如果尚未啟用,請啟用儲存貯體版本控制。
使用複寫時間控制 (RTC) 和刪除標記複寫等選用功能來設定複寫組態。
重要
-
此自動化不支援具有現有複寫規則的儲存貯體。來源儲存貯體不得有任何現有的複寫組態。
-
如果未提供 S3ReplicationRole 輸入,則此自動化會建立具有適當複寫許可的新 IAM 角色。
-
此自動化不會複寫現有的物件。Amazon S3 複寫僅適用於啟用複寫組態後上傳/建立的物件。
-
對於跨帳戶複寫,您必須為目的地帳戶中的 IAM 角色提供適當的 Amazon S3 操作和 AWS KMS 操作許可 (如果儲存貯體使用 AWS KMS 加密)。
-
此自動化使用
aws:approve動作,這會暫時暫停執行,直到指定的委託人核准組態變更為止。如需詳細資訊,請參閱使用核准者執行自動化。
如何運作?
Runbook 會執行下列步驟:
ValidateInputParameters:驗證所有輸入參數的正確性和相容性,以確保適當的複寫組態。
PrepareApprovalMessage:準備包含所有複寫組態參數的核准訊息以供使用者檢閱。
RequestApproval:在來源儲存貯體上新增 Amazon S3 複寫組態之前,請求授權使用者的核准。
CheckBucketEncryption:檢查來源和目的地 Amazon S3 儲存貯體的加密組態,以判斷相容的複寫設定。
BranchOnEncryptionType:根據 Amazon S3 儲存貯體加密類型分支執行,以套用 SSE-S3 或 SSE-KMS 加密儲存貯體的適當複寫組態。
ConfigureSSES3Replication:為使用伺服器端加密搭配 Amazon S3 S3-Managed3 複寫,包括 IAM 角色和複寫規則。
ConfigureSSEKMSReplication:為使用伺服器端加密 AWS KMS (SSE-KMS) 加密的儲存貯體設定 Amazon S3 複寫,包括 IAM 角色、KMS 金鑰許可和複寫規則。
CleanupResources:當未提供 S3ReplicationRole 做為輸入時,清除在複寫組態失敗期間建立的 IAM 角色。
必要的 IAM 許可
AutomationAssumeRole 參數需要下列動作才能成功使用 Runbook。
s3:ListBucket
s3:GetBucketVersioning
s3:GetEncryptionConfiguration
s3:GetBucketLocation
s3:GetReplicationConfiguration
s3:PutBucketVersioning
s3:PutReplicationConfiguration
iam:ListRoles
iam:GetRole
iam:GetRolePolicy
iam:ListRoleTags
iam:ListAttachedRolePolicies
iam:ListRolePolicies
iam:SimulatePrincipalPolicy
iam:CreateRole
iam:TagRole
iam:PassRole
iam:DeleteRole
iam:DeleteRolePolicy
iam:DetachRolePolicy
iam: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:Encrypt (適用於 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" } ] }
注意
以您提供給自動化的實際 AutomationAssumeRole 參數值取代 AUTOMATION_ASSUME_ROLE_ARN。
S3ReplicationRole 政策範例:
{ "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)。
只有跨帳戶儲存貯體複寫需要 S3CrossAccountPermissions 陳述式。
S3ReplicationRole 信任政策範例:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "s3.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
指示
請依照下列步驟設定自動化:
-
在文件下的 Systems Manager
AWSSupport-ConfigureS3ReplicationSameAndCrossAccount中導覽至 。 -
選擇 Execute automation (執行自動化)。
-
針對輸入參數,輸入下列內容:
-
AutomationAssumeRole (必要):
-
描述:(必要) (IAM) 角色的 Amazon Resource Name AWS Identity and Access Management (ARN),允許 Systems Manager Automation 代表您執行動作。如果未指定角色,Systems Manager Automation 會使用啟動此 Runbook 之使用者的許可。
-
類型:
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 Simple Notification Service (Amazon SNS) 主題 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)?$
-
-
核准者 (必要):
-
描述:(必要) 授權核准自動化執行的 IAM 使用者/角色 ARNs 清單。
-
類型:
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":"TagKey1","Value":"TagValue1"},{"Key":"TagKey2","Value":"TagValue2"}】。
-
類型:
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}\"\\})*)?\\]$ -
預設:
[]
-
-
-
選取執行。
-
自動化會啟動。
-
文件會執行下列步驟:
-
ValidateInputParameters:
驗證所有輸入參數的正確性和相容性,以確保適當的複寫組態。
-
PrepareApprovalMessage:
使用所有複寫組態參數準備核准訊息以供使用者檢閱。
-
RequestApproval:
在繼續進行 Amazon S3 複寫組態變更之前,請求授權使用者的核准。
-
CheckBucketEncryption:
檢查來源和目的地 Amazon S3 儲存貯體的加密組態,以判斷相容的複寫設定。
-
BranchOnEncryptionType:
根據 Amazon S3 儲存貯體加密類型分支執行,以套用 SSE-S3 或 SSE-KMS 加密儲存貯體的適當複寫組態。
-
ConfigureSSES3Replication:
為使用伺服器端加密搭配 Amazon S3 S3-Managed 複寫,包括 IAM 角色和複寫規則。
-
ConfigureSSEKMSReplication:
針對使用伺服器端加密 AWS KMS (SSE-KMS) 加密的儲存貯體設定 Amazon S3 複寫,包括 IAM 角色、KMS 金鑰許可和複寫規則。
-
CleanupResources:
當客戶未提供 S3ReplicationRole 時,清除在複寫組態失敗期間建立的 IAM 角色。
-
-
完成後,請檢閱 ConfigureSSES3Replication 步驟 (適用於 SSE-S3 加密儲存貯體) 或 ConfigureSSEKMSReplication 步驟 (適用於 SSE-KMS 加密儲存貯體) 的輸出以取得執行結果,包括複寫組態狀態以及用於複寫的 IAM 角色。
參考
Systems Manager Automation