AWS Key Management Service (AWS KMS) 暗号化が行われた Amazon Simple Storage Service (Amazon S3) バケットを使用しています。複数 AWS リージョンと AWS アカウントにわたり、バケット内オブジェクトのレプリケーションを設定したいと考えています。
簡単な説明
AWS KMS 暗号化が行われたソースバケットからオブジェクトを複製するには、宛先バケットで AWS KMS 暗号化を使用する必要があります。また、宛先バケットの AWS KMS キーは、宛先バケットと同じリージョンに存在する必要があります。
注: ソースバケットと宛先バケットが別々のリージョンにある場合は、それぞれ別の AWS KMS キーが必要です。
宛先用の S3 バケットを作成する
AWS KMS キーと同じリージョンに新しい宛先 S3 バケットを作成します。
バケットの作成時は、Amazon S3 レプリケーションを使用するためにバージョニングを有効化する必要があります。
注: 新しい AWS KMS キーをデフォルトの暗号化として使用し、バケットが 1 つの AWS KMS キーのみを使用するよう設定することをおすすめします。
暗号化コストを削減するには、バケットで S3 バケットキーを有効にします。
(オプション) レプリケーション IAM ロールの権限を編集する
レプリケーションルールを作成するときに、AWS Identity and Access Management (IAM) ロールを作成することもできます。IAM ロールは、Amazon S3 がオブジェクトを取得、レプリケート、暗号化、復号化できるようにする必要があります。オブジェクトを別のリージョンに移動する前に、オブジェクトを復号化するアクセス許可を付与する必要があります。次に、宛先のオブジェクトを暗号化します。
次の手順を実行し、既存のレプリケーションルールが含まれるバケットの権限を構成します。
-
IAM ロールには、次の Amazon S3 との信頼関係が含まれることを確認します。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "s3.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}
-
IAM ロールには、次の権限が含まれることを確認します。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "SourceBucketPermissions",
"Effect": "Allow",
"Action": [
"s3:GetObjectVersionTagging",
"s3:GetObjectVersionAcl",
"s3:ListBucket",
"s3:GetObjectVersionForReplication",
"s3:GetReplicationConfiguration"
],
"Resource": [
"arn:aws:s3:::SourceBucketName/*",
"arn:aws:s3:::SourceBucketName"
]
},
{
"Sid": "DestinationBucketPermissions",
"Effect": "Allow",
"Action": [
"s3:ReplicateObject",
"s3:ObjectOwnerOverrideToBucketOwner",
"s3:GetObjectVersionTagging",
"s3:ReplicateTags",
"s3:ReplicateDelete"
],
"Resource": [
"arn:aws:s3:::DestinationBucketName/*"
]
},
{
"Sid": "SourceBucketKMSKey",
"Action": [
"kms:Decrypt",
"kms:GenerateDataKey"
],
"Effect": "Allow",
"Resource": "SourceBucketKMSKeyARN"
},
{
"Sid": "DestinationBucketKMSKey",
"Action": [
"kms:Encrypt",
"kms:GenerateDataKey"
],
"Effect": "Allow",
"Resource": "DestinationBucketKMSKeyARN"
}
]
}
注: SourceBucketName をソースバケット名に、DestinationBucketName を宛先バケット名に置き換えてください。さらに、SourceBucketKMSKeyARN をソースバケットの AWS KMS キーの Amazon リソースネーム (ARN) に、DestinationBucketKMSKeyARN を宛先バケットの AWS KMS キーの ARN に置き換えてください。上記の権限は、ロールがソースバケット内のオブジェクトにアクセスし、オブジェクトを宛先バケットに複製する許可を付与します。ロールが AWS KMS キーを使用してオブジェクトの復号と暗号化を行う許可も付与されます。
キーポリシーを更新し、IAM ロールがソース、宛先両方のバケット内のキーを使用できるようにする
AWS KMS キーポリシーを変更し、IAM ロールがソース、宛先両方のバケット内のキーを使用できるようにします。
宛先バケットのポリシーを変更し、バケットへの複製を許可する
宛先バケットのポリシーを次のポリシーに変更します。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "DestinationBucketPermissions",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::ACCOUNTNUMBER:role/IAMROLE"
},
"Action": [
"s3:ReplicateObject",
"s3:ObjectOwnerOverrideToBucketOwner",
"s3:GetObjectVersionTagging",
"s3:ReplicateTags",
"s3:ReplicateDelete",
"s3:GetBucketVersioning",
"s3:PutBucketVersioning"
],
"Resource": [
"arn:aws:s3:::DestinationBucketName/*",
"arn:aws:s3:::DestinationBucketName"
]
}]
}
注: AccountNumber をソースバケットのアカウント番号に、IAMRole を IAM ロールに、DestinationBucketName を宛先バケット名に置き換えてください。
レプリケーションルールを設定する
次の手順を実行します。
- Amazon S3 コンソールを開きます。
- [バケット] を選択してから、ソースバケットを選択します。
- [管理] タブを選択します。[レプリケーションルール] で [レプリケーションルールを作成] を選択します。
- ルールに名前を入力します。[ソースバケット] でルールの範囲を選択し、レプリケーションを特定のオブジェクトプレフィックスに適用するか、バケットのコンテンツ全体に適用するかを決定します。
- [宛先] で [他のアカウントのバケットを指定] を選択し、宛先バケットおよびアカウント ID を入力します
- [IAM ロール] で [既存の IAM ロールから選択] を選択します。
- [IAM ロール] において、必須権限を含む既存の IAM ロールが存在する場合は [既存の IAM ロールから選択] または [IAM ロールの ARN を入力] を選択します。
または、
[新しいロールを作成] を選択し、必須権限を含むロールを新たに作成します。
- [暗号化] で [AWS Key Management Service (AWS KMS) で暗号化されたオブジェクトを複製する] を選択します。次に、AWS KMS キーの ARN を入力します。
- (オプション) 宛先ストレージクラスと追加のレプリケーションオプションを設定します。
- 構成をレビューし、[保存] を選択します。
- (オプション) 1 回限りの S3 Batch Operations ジョブを実行し、既存のオブジェクトを複製します。
レプリケーションを検証する
レプリケーションルールを作成すると、新しく追加されたオブジェクトをソースから宛先バケットにシームレスにレプリケーションできます。レプリケーションをテストするには、次の手順を実行します。
- 新しいオブジェクトをソースバケットにアップロードします。
- オブジェクトの概要を確認し、オブジェクトのレプリケーションステータスをチェックします。
- レプリケーションが成功すると、COMPLETED ステータスとなります。
関連情報
暗号化されたオブジェクトのレプリケーション (SSE-S3、SSE-KMS、DSSE-KMS、SSE-C)
複数アカウントのバケットでレプリケーションを構成する