公開日:2019.11.08

S3の同じリージョン間でサクッとレプリケーションしたいときのポリシーテンプレ

テクログaws

同一リージョンでレプリケーション

できるようになったんです。

今までできなかったの?って感じはします。

クロスリージョンで同じことはずっと前から使えましたからね。

で、今日はポリシーのテンプレ貼ります。

バケット名とアカウントIDを差し替えれば使える感じです。

とりあえず、クロスアカウントと同一アカウントでレプリケーションするための方法

なので、それ以外のことやりたいときは改変して、使ってみてくださいー

S3に大して何かやりたいときって、そのS3バケットの所有者がどのアカウントかが重要です。

つまり、同一アカウント内だったら、みんなAアカウントが持ってるので

IAMロールでS3リソースに何ができるかを設定したらOK。

BアカウントにあるS3バケットに大して、Aアカウントから何かをしたいとき。

これは、AアカウントでIAMロール設定とBアカウント側でバケットポリシーの設定が必要になります。

同一アカウントでレプリケーションするときのIAMロールにつけるポリシー

 {
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:GetReplicationConfiguration",
                "s3:GetObjectVersion",
                "s3:GetObjectVersionAcl",
                "s3:GetObjectVersionTagging",
                "s3:ListBucket"
            ],
            "Resource": [
                "arn:aws:s3:::source-bucket",
                "arn:aws:s3:::source-bucket/*" <転送元バケット
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:ReplicateObject",
                "s3:ReplicateDelete",
                "s3:ReplicateTags"
            ],
            "Resource": "arn:aws:s3:::dist-bucket/*" <転送先バケット
        }
    ]
}

Getの部分を省略して書くこともできます。たぶん、S3://Replicateも短縮できるかもですが、実際試してないのでたぶんです。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:Get*",
                "s3:ListBucket"
            ],
            "Resource": [
                "arn:aws:s3:::source-bucket",
                "arn:aws:s3:::source-bucket/*" <転送元バケット
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:ReplicateObject",
                "s3:ReplicateDelete",
                "s3:ReplicateTags"
            ],
            "Resource": "arn:aws:s3:::dist-bucket/*" <転送先バケット
        }
    ]
}

S3の認証周りでポリシーを設定するときって、

単純にレプリケーションしたいだけでもいろいろActionに書かなきゃいけないので

とりあえず、なにも考えずにアスタリスク!でいいとおもいます。

クロスアカウントでレプリケーションするときにつけるバケットポリシー

 {
    "Version": "2008-10-17",
    "Id": "S3-Console-Replication-Policy",
    "Statement": [
        {
            "Sid": "S3ReplicationPolicyStmt1",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::アカウントID番号:root"
            },
            "Action": [
                "s3:GetBucketVersioning",
                "s3:PutBucketVersioning",
                "s3:ReplicateObject",
                "s3:ReplicateDelete"
            ],
            "Resource": [
                "arn:aws:s3:::dist-bucket",
                "arn:aws:s3:::dist-bucket/*" <転送先バケット
            ]
        }
    ]
}

転送先のバケットがあるアカウント側のバケットポリシーにいれましょう。

クロスアカウントのIAMロールを作る

これ地味に忘れてて、すこしはまったんですが、

このロールは、転送先のアカウントで作成します。

転送元のアカウントからのリソース操作を許可するので。

これでとりあえず、レプリケーションとかaws-cliで同期をしたいとか

はできます。

案外これ使うんで、お役に立てばうれしいです。

「とりあえず、S3の中身同期しといて、レプリケートかけるようにする」

がやれます。

現場からは以上です。

この記事を書いた人

ひなっち

入社年2018年

出身地青森

業務内容インフラ

特技または趣味筋トレ

ひなっちの記事一覧へ

テクログに関する記事一覧