Google Cloud 最新アップデート(2025年7月2日) GCSバケットIPフィルタリングを試してみた
こんにちは。樋口です。
ふとGoogle Cloudのリリースノートを眺めていたら、7/2にこのようなリリースがありました。
AWS S3では簡単にできていたのに、これまでGoogle Cloud Cloud StorageではできていなかったIPアドレスフィルタリングの機能!早速触ってみたので報告します。
Cloud StorageでのIPアドレスフィルタリング
社内向けのポータルサイトなどのシステムや、開発環境など、クラウド環境は使いたいもののパブリックなアクセスは禁止したいというニーズは多くあると思います。
これまでのGoogle CloudではCloud Storageのオブジェクトに対して接続元のIPアドレスでフィルタリングをしようと思うと、複雑な設定が必要でした。私もVPC-SCでサービス境界を作成し、その境界に対してAccess Context Managerで特定のIPアドレスのみを許可するアクセスレベルを設定するなどで対処していました。この方法ではプロジェクト単位でサービス境界を設定してしまうので、例えばCloud Storage APIに設定するとそのプロジェクトのすべてのバケットが影響を受けてしまいます。
Google Cloudでは2024年の11月14日に、Bucket IP filteringの機能をプレビュー版としてリリースしていました。このプレビュー版では東京リージョンでは利用できないようでしたので、GAを待っておりました。そして満を持して、先日ひっそりとGAされていたようなので、早速試してみることにしました。
まずドキュメントが現時点(2025年7月7日)で英語と日本語で書いていることが微妙に異なっています。ここは素直に英語のドキュメントに従っていきます。
基本的にはこのドキュメントの通りにやるとうまくいきます。横着な私は冒頭の
$ gcloud version | head -n1
でバージョンを確認せずに進み、その後正しいJSONファイルを作成しているにも関わらず、バケット作成コマンド実行時に
Found invalid JSON/YAML for the IP filter rule.
と怒られる羽目になりました。JSONやYAMLがinvalidと言われると、細かいところばかり気になって時間を溶かしがちですね。問題はもっと前段にありました。
続いて、そのJSONファイルの中身ですが、英語版のドキュメントのみに書いてある、
"allowAllServiceAgentAccess”:
を書き忘れると、同じくバケット作成コマンド実行時に
(ERROR: (gcloud.alpha.storage.buckets.create) HTTPError 400: The allow_all_service_agent_access field on an IP filter config must be set to either true or false. For more information on this field please refer to https://cloud.google.com/storage/docs/create-ip-filter.)
として怒られます。これはエラー内容を教えてくれるので親切です。日本語ドキュメントを読んでいる方は要注意なのですが、現時点で日本語版のドキュメントにはこの項目の言及すらありません。この時点でそっとドキュメントを日本語から英語に切り替えました。
英語ドキュメント
日本語ドキュメント
いくつかエラーを出してしまいましたが、無事JSONファイルを作成しました。せっかくなので東京リージョンで作ってみたいので、以下のコマンドを実行してバケットを作成します。
$ gcloud alpha storage buckets create gs://(bucket-name) --location=asia-northeast1 --ip-filter-file=(JSONファイル)
バケットの確認
ひとまずアクセスを許可したIPアドレスからGoogle CloudのGUIの管理コンソールにアクセスし、パブリックアクセスが可能な設定にしました。Permissions→Grant Accessと進み、allUsersプリンシパルに、Storage Object Viewerのロールを与えました。一方で、現時点ではGUIから先ほど設定したIPフィルタリングの設定は見ることはできないようです。
本来ならこれでオブジェクトのPublic URLさえ知っていれば誰でもアクセスできるようになるはずです。まずは許可したIPアドレスから確認します。これは当然確認が可能です。
続いて許可されていないIPアドレスからアクセスしてみると、IPフィルタリングによってアクセスができないことがわかります。
また、管理コンソールでバケットを確認した場合も以下のようにバケットの中身を確認することはできませんでした。
このバケットにどのようなフィルタリングルールが適用されているかは、以下のコマンドで確認できます。(参考:List bucket IP filtering rules | Google Cloud)
ちなみにこのコマンドはalphaを付けなくても実行可能でした。
$ gcloud alpha storage buckets describe gs://BUCKET_NAME --format=“default(ip_filter_config)” ↓ ip_filter_config: allowAllServiceAgentAccess: true mode: Enabled publicNetworkSource: allowedIpCidrRanges: - 202.255.102.250/32
なお、これらのCLIのコマンドの実行権限にもフィルタリングルールが適用されます。すなわち、設定を間違えるとまったく制御を失うバケットができてしまうことになりますのでご注意ください。
まとめ
上述のように運用に気をつけないといけないところはあるものの、これまでよりも簡単にIPフィルタリングができるようになったと思います。そのうちこれらの設定も、ブラウザのGUIコンソールからもできるようになると嬉しいですね!