夜な夜なバックアップを取って s3cmd put しようと思い、専用の IAM ユーザを作成しました。万一のことがあってもデータを削除されたりすることのないよう、バックアップファイルを put するだけに必要な最小の IAM Policy は下記です。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:GetBucketLocation",
"s3:PutObject"
],
"Resource": [
"arn:aws:s3:::{{ bucket-name }}",
"arn:aws:s3:::{{ bucket-name }}/*"
]
}
]
}
s3:GetBucketLocation
が必要なところでひとしきりハマってました……。
この記事の本題ではありませんが、上記の Policy だと、 s3cmd --configure
で最後に接続確認テストで失敗になります( s3cmd put
でアップロードできることは確認しています)。もしここで接続確認テストを通過させたいのであれば s3:ListAllMyBuckets
が必要なので下記のようになるでしょう。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "s3:ListAllMyBuckets",
"Resource": "arn:aws:s3:::*"
},
{
"Effect": "Allow",
"Action": [
"s3:GetBucketLocation",
"s3:PutObject"
],
"Resource": [
"arn:aws:s3:::youcube-backups",
"arn:aws:s3:::youcube-backups/*"
]
}
]
}