🚨
Cloud Storageでファイルは公開 & 一覧ページは非公開にする権限設定
GCPのCloud Storageの権限設定について、意外と知られていなさそうなハマりポイントがあるので書き残しておきます。
投稿機能があるサービスなどで、ユーザーがアップロードしたファイルをCloud Storageに以下のような形で保管したいとします。
- ファイル自体は公開する(誰でもアクセスできる)
- ファイルの一覧ページは非公開にする
このような場合、バケットの権限設定でロールを[ストレージのレガシー オブジェクト読み取り]にする必要があります。
「Storageオブジェクト閲覧者」だとファイルの一覧まで公開されてしまう
GCPのIAMにおいて、「誰でも○」を実現するには、メンバーとしてallUsers
を指定します。そのうえでバケットのロールにStorageオブジェクト閲覧者
を指定すると…
バケット内のファイルに誰でもアクセスできるだけでなく、以下のようにファイルの一覧まで見れてしまいます。
ファイルの一覧が公開状態になっているかどうかは、シークレットブラウザなどで下記のURLにアクセスしてみると確認できます。
https://storage.googleapis.com/バケット名
「ストレージのレガシー オブジェクト読み取り」にするとファイルの一覧は非公開に
ファイルの一覧は非表示にしたければ、ロールは[ストレージのレガシー オブジェクト読み取り](storage.legacyObjectReader
)にしましょう。
これでhttps://storage.googleapis.com/バケット名
にアクセスしたときにAccess Denied
と表示されるようになります。
Discussion