この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
データアナリティクス事業本部の笠原です。
今回はS3バケットのクロスアカウントレプリケーションを行なったので、設定方法をまとめてみました。
3行まとめ
- 送信元、送信先バケットとも、S3バージョニングを有効化する
- 送信元のバケットレプリケーションルールを設定する
- 送信元のバケットレプリケーション実行IAMロールに対して、送信先のバケットポリシーにて適切な権限設定をする
バケット作成
送信元バケット、送信先バケットを事前に作成しておきます。
- 同一リージョン (今回はap-northeast-1) で作成
- バージョニング有効化
- パブリックアクセスブロック有効化
送信元バケットのレプリケーション設定
送信元バケットの「管理」⇒「レプリケーションルール」から、レプリケーションルールを作成します。今回はこんな感じの設定です。
- レプリケーションルール名:
replication1
- ステータス: 有効
- ソースバケット
- ルールスコープを選択: バケット内の全てのオブジェクトに適用
- 送信先
- 別のアカウントのバケットを指定する
- 「アカウントID」と「送信先バケット名」を指定
- 「オブジェクト所有者を送信先バケット所有者に変更」にチェックを入れる
- 別のアカウントのバケットを指定する
- IAMロール
- 既存のロールから選択: 新しいロールの作成
- 暗号化
- 今回はデフォルトのチェックなしのままにします
- KMS暗号化されたオブジェクトをレプリケートする場合はチェックを入れておきましょう
- 今回はデフォルトのチェックなしのままにします
- 送信先ストレージクラス
- 今回はデフォルトのチェックなしのままにします
- 追加のレプリケーションオプション
- 今回は以下のオプションにチェック入れました
- 「レプリケーション時間のコントロール (RTC)」にチェックを入れる
- 今回は以下のオプションにチェック入れました
ルールを保存すると、既存オブジェクトをレプリケートするか尋ねられます。 今回はまだバケットにオブジェクトが何もないので、「いいえ、既存オブジェクトをレプリケートしません」を選択しておきます。
ルールを保存すると、レプリケーション用にIAMロールが作成されています。ポリシーはこんな感じでした。なお、IAMロールのARNをメモしておきましょう。この後、送信先バケットポリシーの設定で必要になります。
{
"Version": "2012-10-17",
"Statement": [
{
"Action": [
"s3:ListBucket",
"s3:GetReplicationConfiguration",
"s3:GetObjectVersionForReplication",
"s3:GetObjectVersionAcl",
"s3:GetObjectVersionTagging",
"s3:GetObjectRetention",
"s3:GetObjectLegalHold"
],
"Effect": "Allow",
"Resource": [
"arn:aws:s3:::<送信元バケット>",
"arn:aws:s3:::<送信元バケット>/*",
"arn:aws:s3:::<送信先バケット>",
"arn:aws:s3:::<送信先バケット>/*"
]
},
{
"Action": [
"s3:ReplicateObject",
"s3:ReplicateDelete",
"s3:ReplicateTags",
"s3:ObjectOwnerOverrideToBucketOwner"
],
"Effect": "Allow",
"Resource": [
"arn:aws:s3:::<送信元バケット>/*",
"arn:aws:s3:::<送信先バケット>/*"
]
}
]
}
送信先バケットのバケットポリシー設定
送信元バケットにてレプリケーション設定したら、以下のように送信先バケットにバケットポリシーを設定しておきましょう。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "1",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::<送信元アカウントID>:role/service-role/<送信元IAMロール>"
},
"Action": [
"s3:ReplicateDelete",
"s3:ReplicateObject",
"s3:ReplicateTags",
"s3:ObjectOwnerOverrideToBucketOwner"
],
"Resource": "arn:aws:s3:::<送信先バケット>/*"
}
]
}
動作確認
送信元バケットにファイルをアップロードします。しばらくすると、送信先バケットにファイルがレプリケートされていればOKです。
アップロード後レプリケートがなかなかされない場合は、送信元バケットのオブジェクトプロパティ内にあるレプリケーションステータスを確認しましょう。PENDINGならまだレプリケーションされる前の状態になりますし、FAILEDならレプリケーション失敗となります。設定内容を確認しましょう。
KMSを利用している場合は、送信元IAMロールがKMSキーにアクセスできていないケースがあるので、ロールのポリシー含め権限設定を見直してみましょう。