2019.11.08
STAFF BLOG
スタッフブログ
TECHNICAL
テクログ
同一リージョンでレプリケーション
できるようになったんです。
今までできなかったの?って感じはします。
クロスリージョンで同じことはずっと前から使えましたからね。
で、今日はポリシーのテンプレ貼ります。
バケット名とアカウント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の中身同期しといて、レプリケートかけるようにする」
がやれます。
現場からは以上です。