信頼はずっと、挑戦はもっと。

お問い合わせ
TEL:03-3496-3888

BLOG コアテックの社員ブログ (毎週月曜~金曜更新中)

2019

8

11月

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

テクログ

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


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

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

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


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

バケット名とアカウント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の中身同期しといて、レプリケートかけるようにする」

がやれます。


現場からは以上です。

この記事を書いた人

マスオさん

ひなっち

所 属:
WEBインテグレーション事業部
出身地:
青森
仕事内容:
インフラ