はじめに
S3をIAMユーザに使わせるときに、バケット一覧を見せたくない。という要望は多いと思います。
CyberDuckとかサードパーティのソフトを使うことなく、
ブラウザのみでマネジメントコンソールからアクセスさせたい。
このような場合、いろいろググってもListAllMyBucketsの権限は必須であり、
バケット一覧が見えてしまうのは仕方がないという情報が割と多くヒットするのですが、
この権限を与えずともマネジメントコンソールから利用できるということに気が付きました。
手順
一言で言うと、 IAMユーザにはバケット以下に直結するURLを通知する だけです。
早速作ってみましょう。
バケットを作る
適当な名前でバケットを作ります。
IAMユーザにはこのバケットにのみアクセスさせることとします。
ポリシーを作る
適当な名前でポリシーを作ります。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:Get*",
"s3:List*"
],
"Resource": [
"arn:aws:s3:::バケット名/",
"arn:aws:s3:::バケット名/*"
]
}
]
}
このような感じで先ほど作成したバケットにのみ権限を与えます。
"s3:List*"
を与えているのでListAllMyBucketsも含まれているようにも思えますが、
Resourceでバケット名を制限しているので実質的に無効であり、
ListAllMyBucketsは与えていない ことに注目です。
ここではReadOnly的な感じで権限を与えていますが、
要望に応じて適宜変更してください。
IAMユーザを作る
適当なIAMユーザを作り、ID/パスワードを発行します。
このIAMユーザには先ほど作ったポリシーを与えます。
連絡する
ここが重要なのですが、
利用者にURLを伝えるときにはS3のバケットのURLを伝えます。
https://s3.console.aws.amazon.com/s3/buckets/バケット名/
このURLにアクセスするとIAMのログイン画面が表示され、
ログインに成功するとバケットの中身が表示されます。
もちろん、ディレクトリを上にさかのぼってバケットの一覧を表示させようとすると
Access Deny となってはじかれます。