特定S3バケットに対してのみアクセスを許可したい

記事タイトルとURLをコピーする

指定したS3バケットだけアクセスさせたいしバケット一覧も見せたくない!

多くの利用者さんが一つのAWSアカウントを使っているが、それぞれの利用者さんには指定したS3バケットにだけアクセスさせたい、ということがあると思います。

しかし、AWSのマネジメントコンソールからS3を利用するには、全てのS3バケットを一覧表示する権限(s3:ListAllMyBuckets)を IAM Userに付与しなければいけないため、S3バケット名すら見せたくない!という場合には、少し困ってしまいます。

場合によっては、利用者さんは CloudBerry Explorer for Amazon S3Cyberduck といったクライアントソフトウェアを利用しているかもしれません。

上記の代表的な2つのクライアントソフトウェアではS3バケット一覧を見せることなく特定のS3バケットのみにアクセスすることができます。
またもちろん、 AWS CLI を使用するのも手です。

IAMポリシーの設定の例


下記に your-bucket-name という名前のS3バケットへのアクセスを許可するポリシー例を記載しています。
念のため、バケットの削除や作成もできないように制限しています。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "s3:*",
            "Resource": [
                "arn:aws:s3:::your-bucket-name",
                "arn:aws:s3:::your-bucket-name/*"
            ]
        },
        {
            "Effect": "Deny",
            "Action": [
                "s3:DeleteBucket",
                "s3:CreateBucket"
            ],
            "Resource": [
                "*"
            ]
        }
    ]
}


CloudBerry Explorer for Amazon S3


s3:ListAllMyBuckets権限がないと下記スクリーンショットのようにバケット一覧が表示されません。しかしスクリーンショット赤枠の部分にS3バケット名を入力してください。特定のS3バケットにのみアクセスできます。


Cyberduck


s3:ListAllMyBuckets権限がない状態でS3バケットを指定せずアクセスしようとすると、下記スクリーンショットのように「 ディレクトリ一覧取得に失敗しました 」というエラーメッセージが表示されてしまいます。



バケットのリスト権限が無くてもアクセスできるようにするには、接続設定をする際に下記スクリーンショットの赤枠部分にS3バケット名を入力してください。これで接続が可能です。


AWS CLI


AWS CLIではバケットのリスト権限が無くても、通常通りS3へ接続することができます。

aws s3 ls s3://your-bucket-name
aws s3 cp s3://your-bucket-name/test.txt ./

おことわり

本投稿では例として上記の3つのソフトウェアを取り上げていますが、スクリーンショットを含め、内容は2018年4月23日現在のものですのでご注意ください。また、当社として上記ソフトウェアのご利用を保証するものではありません!あくまで参考情報としてご閲覧ください。

杉村 勇馬 (記事一覧)

クラウドインテグレーション部 技術3課 課長

マルチAWSアカウント管理運用やネットワーク関係のAWSサービスに関するブログをよく書いています

2020年10月現在、ハマっているものはポケモン ソード(遅い)