G-gen の杉村です。当記事では、Google Cloud の IAM(Identity and Access Management)で最小権限の原則を実現するための手段をご紹介します。

IAM と最小権限の原則
IAM(Identity and Access Management)は、Google Cloud のリソースに対する権限管理の仕組みです。詳細は以下の記事をご確認ください。
セキュアなクラウド環境を維持するには、IAM で最小権限の原則を遵守することが重要です。最小権限の原則とは、「システムの利用主体に持たせるアクセス権限は、必要最小限に抑えるべきである」という設計思想であり、情報セキュリティの大原則です。
しかし Google Cloud でシステムをしばらく運用していると、IAM ロールが過剰に付与されてしまっていることに後から気がつくことが、度々あります。
当記事では、最小権限の原則を守る手段を、「過剰な権限を予防する」「適切な IAM ロールを選択する」「すでに付与された権限を整理する」の3パートにわけて解説します。
過剰な権限を予防する
IAM の仕組みを正確に理解する
プロジェクトのオーナーや組織の管理者にとって、最小権限を実現するためになにより重要なのは、Google Cloud の IAM の仕組みを正確に理解することです。以下のような概念を正確に理解するべきです。
- リソースの持つ IAM ポリシー
- IAM バインディング
- 継承
Google Cloud の IAM の仕組みは、Amazon Web Services(AWS)等のそれとは大きく異なります。まずは以下の記事を読み、Google Cloud の IAM の仕組みを正確に理解してください。
IAM ポリシーを編集できる人を限定する
組織やプロジェクト、各 Google Cloud リソースに過剰な権限が付与されてしまう状況を予防するには、IAM ポリシーを編集できる人(主体)を限定することが重要です。
例えば、組織レベルの IAM ポリシーを操作できる権限である resourcemanager.organizations.setIamPolicy は、以下のような IAM ロールに含まれています。
- 組織の管理者(
roles/privilegedaccessmanager.organizationServiceAgent) - セキュリティ管理者(
roles/iam.securityAdmin)
また、プロジェクトレベルの IAM ポリシーを操作できる権限である resourcemanager.projects.setIamPolicy は、以下のような IAM ロールに含まれています。
- オーナー(
roles/owner) - 組織の管理者(
roles/privilegedaccessmanager.organizationServiceAgent) - セキュリティ管理者(
roles/iam.securityAdmin) - プロジェクト IAM 管理者(
roles/resourcemanager.projectIamAdmin)
組織やフォルダ、プロジェクトの IAM 権限が容易に変更されないよう、これらのロールを付与するアカウントを限定的にすることが望ましいです。
ある権限がどの IAM ロールに含まれているかを調査するには、以下のドキュメントをご参照ください。
一時的な特権の管理
前述のように IAM 権限を操作できる人を限定すると、開発スピードが低下したり、運用性が低下することが考えられます。
必要なときに、必要な間だけ、必要な権限を付与するような運用を実現するには、Privileged Access Manager(PAM)が利用できます。PAM はフルマネージドの特権管理ワークフローであり「権限の申請」「承認」「所定時間が経過したあとの特権剥奪」といったワークフローを簡単に実装できます。

PAM によって承認フローを含めたジャスト・イン・タイム(JIT)な IAM 特権管理を行うことで、セキュアな最小権限を維持しながら、開発スピードや運用性の低下を防ぐことが可能です。
PAM の詳細は以下の記事をご確認ください。
適切な IAM ロールを選択する
ドキュメントの確認とロール選定
Google アカウントや Google グループなどのプリンシパルに IAM ロールを付与する際は、必要最小限の権限を持つ IAM ロールを選択します。
以下の公式ドキュメントを確認したり、あるいは Google Cloud プロダクトごとの IAM 関連のガイドを確認し、必要最小限の権限を持つ事前定義ロールを選択します。
実行したいアクションに対して、どの権限(permission)が必要なのかは、アクションが呼び出す API メソッドにより決まります。公式ガイドを確認したり、あるいはアクション実行時に出力される Cloud Logging ログ、また権限が足りなかったときに出力されるエラーメッセージなどが参考になります。
Gemini による支援
Google Cloud コンソールには、生成 AI モデル Gemini が、実現したいことに対する適切な IAM ロールを推奨してくれる機能があります。詳細は以下の記事を参照してください。
すでに付与された権限を整理する
IAM Recommender
IAM Recommender は、最近(デフォルトで90日間)の IAM 利用状況を機械学習で分析し、推奨される対策を提示してくれる機能です。あるプロジェクト(または組織やフォルダ)に付与された過剰な権限を洗い出したいときに利用できます。
IAM Recommender は、組織やフォルダ、プロジェクトの IAM 画面から確認することができます。


IAM Recommender は無料で利用できますが、以下の分析や推奨を生成するには、組織レベルで Security Command Center のプレミアムティアに登録している必要があります(一部抜粋)。
- 基本ロール(オーナー、編集者、閲覧者)以外の推奨事項
- 組織、フォルダ、プロジェクト以外に付与されたロールに関する推奨事項
無料版だとオーナー、編集者、閲覧者といった基本ロールに対してしか推奨事項が生成されません。
参考 : ロールの推奨事項の概要
Policy Analyzer
Policy Analyzer は、Google Cloud リソースの IAM ポリシーに対してクエリを行い、あるプリンシパル(Google アカウント等)やロール、リソースの権限を一覧表示させたいときに使います。
例えば、以下のようなことが実現可能です。
- あるプロジェクトにおいて、サービスアカウントの権限を借用できるプリンシパルを一覧化する
- あるプロジェクトにおいて、ファイアウォールルールを編集できるプリンシパルを一覧化する
- ある BigQuery データセットを編集または閲覧可能なプリンシパルを一覧化する
Policy Analyzer は、Google Cloud コンソールの「IAM と管理」の画面の「ポリシー アナライザ」から利用できます。無料で利用できますが、1日に20回のクエリまでという制限があります。20回を超えるクエリを実行するには、組織レベルでSecurity Command Center のプレミアムティアに登録する必要があります。
任意の検索ができるカスタムクエリに加えて、以下のようなプリセットのクエリが用意されています(スクリーンショットは2024年10月現在)。



参考 : IAM ポリシー用の Policy Analyzer
Cloud Assets Inventory
Cloud Assets Inventory には、あるプリンシパルがどのリソースに権限を持っているかをリストアップする機能があります。利用料金はありません。
Google Cloud コンソールの Cloud Asset Inventory 画面から、あるいは gcloud コマンド等を使ってクエリをかけることができます。

この機能は、以下のようなユースケースで利用できます。
- 特定のプリンシパルが、どのリソースに対してどのような権限を持っているかをリストアップする
- 組織全体で、オーナー権限を持っている Google アカウントやグループをリストアップする
- あるデータセットに対して、誰がアクセス権限(閲覧、編集)を持っているかをリストアップする
これらは、Policy Analyzer でできることとほとんど同様です。ただし、Cloud Assets Inventory でのクエリに実行回数制限はないため、利用方法を理解していれば、こちらの機能で代替することができます。
Cloud Assets Inventory の詳細については、以下の記事もご参照ください。
杉村 勇馬 (記事一覧)
執行役員 CTO
元警察官という経歴を持つ IT エンジニア。クラウド管理・運用やネットワークに知見。AWS 認定資格および Google Cloud 認定資格はすべて取得。X(旧 Twitter)では Google Cloud や Google Workspace のアップデート情報をつぶやいています。
Follow @y_sugi_it