色々調べたのだけど、とにかくパターンが多すぎて怖い
ので、一番簡素で強力と思えたパターンだけ書きます。
(違ってたらぜひご指摘ください!)
hogehoge.comを置き換えてご利用下さい。
(ここではcloudfrontでスタティックページを配信してるユースケースを想定しています)
# テンプレ
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "s3:*",
"Resource": [
"arn:aws:s3:::hogehoge.com",
"arn:aws:s3:::hogehoge.com/*"
]
},
{
"Effect": "Deny",
"NotAction": "s3:*",
"NotResource": [
"arn:aws:s3:::hogehoge.com",
"arn:aws:s3:::hogehoge.com/*"
]
}
]
}
使うのは「iamユーザー」
いろんな設定の仕方があるかと思いますが、僕は上記ポリシーを作成後、
そのポリシーを適用したユーザーをバケットごとに作成しています。
(プラグマティックアクセスを有効に・ManagementコンソールはOFF)
Cyderduck や Transmit で使う時
「指定バケットをデフォルトパス」に指定しないとエラーになります。(デフォルトはバケット全体をListしようとするため)
CyberDuckだと「QuickConnect」にそのオプションが無いのだけ軽くハマりました。
普通に「新規作成」から詳細設定を指定してあげればOK!
より詳しくは
セキュリティ的なベストプラクティスなのか?
これで僕が求めていた事は実現(作業者ごとに個別のバケットアクセスを管理 - 管理者のみ複数バケットにアクセス可)出来ているのですが、
AWS勉強中の身ですのでこれで完全かはわかりません。
具体的には「ポリシー・Deny」を上回る権限設定が出来るか、これから調べたいと思います。
「S3全員見えちゃう運用」からのステップアップとしては上記でも充分有効、程度にお読み頂ければ。