Skip to content
Noguchi Blog
Go back

S3のクロスリージョンレプリケーション設定方法

Updated:

今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"
        }
    ]
}


Share this post on:

Previous Post
AWS SAAに受かった
Next Post
microsoft 365 copilotで十分かもしれない