今AWS SAAの勉強をしていて、S3のクロスリージョンレプリケーションの内容がたまに出てくるので実際に動かしてみた。
バージョニングを有効にしたバケットを作成する
まずは以下の二つのバケットを作成する。バージョニング設定だけどちらも有効化する必要がある。(その他はデフォルト設定でOK)
複製元バケット:cross-src-tokyo(東京リージョン)
複製先バケット:cross-dst-virginia (バージニア北部リージョン)
レプリケーションルールを作成する
複製元バケットの方で、レプリケーションルールを作成する。
cross-src-tokyo > 管理 > 「レプリケーションルールを作成」を押す。

cross-tokyo-to-virginiaという名前をつける。
ルールスコープには「バケット内のすべてのオブジェクトに適用」を選択。
送信先には先ほど作成した、複製先のバケットを入れる。

IAMロールには「新しいロールの作成」を押して保存。

作成したルールが表示されてたらOK!

ここまでで、cross-src-tokyoにオブジェクトを置くと、cross-tokyo-to-virginiaに複製されるようになった。
おまけ:作成されたIAMロールの詳細
IAMロールでs3と調べると、先ほど新規作成されたIAMロールがでてくる(今回だとs3crr_role_for_cross-src-tokyoという名前)。
許可ポリシーと信頼されたエンティティには以下が設定されてた。
当たり前だが、「複製元のオブジェクト取得と、複製先へのコピーを(S3サービスが)できますよ」と書かれてそう。
一見、Resource周りが最小権限ではないように思えるが、双方向レプリケーションに拡張する際、このIAMロールをそのまま使えるメリットがあると感じた。
{
"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:::cross-src-tokyo",
"arn:aws:s3:::cross-src-tokyo/*",
"arn:aws:s3:::cross-dst-virginia",
"arn:aws:s3:::cross-dst-virginia/*"
]
},
{
"Action": [
"s3:ReplicateObject",
"s3:ReplicateDelete",
"s3:ReplicateTags",
"s3:ObjectOwnerOverrideToBucketOwner"
],
"Effect": "Allow",
"Resource": [
"arn:aws:s3:::cross-src-tokyo/*",
"arn:aws:s3:::cross-dst-virginia/*"
]
}
]
}{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "s3.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}