G-gen の杉村です。当記事では、Google Cloud の IAM(Identity and Access Management)で最小権限の原則を実現するための手段をご紹介します。
IAM と最小権限の原則
IAM(Identity and Access Management)は、Google Cloud のリソースに対する権限管理の仕組みです。詳細は以下の記事をご確認ください。
セキュアなクラウド環境を維持するには、IAM で最小権限の原則を遵守することが重要です。最小権限の原則とは、「システムの利用主体に持たせるアクセス権限は、必要最小限に抑えるべきである」という設計思想であり、情報セキュリティの大原則です。
しかし Google Cloud でシステムをしばらく運用していると、IAM ロールが過剰に付与されてしまっていることに後から気がつくことが、度々あります。
当記事では、最小権限の原則を守る手段を、「過剰な権限を予防する」「すでに付与された権限を整理する」の2パートにわけて解説します。
過剰な権限を予防する
IAM の仕組みを正確に理解する
プロジェクトのオーナーや組織の管理者にとって、最小権限を実現するためになにより重要なのは、Google Cloud の IAM の仕組みを正確に理解することです。以下のような概念を正確に理解するべきです。
- リソースの持つ IAM ポリシー
- IAM バインディング
- 継承
Google Cloud の IAM の仕組みは、Amazon Web Services(AWS)等のそれとは大きく異なります。詳細は以下の記事をご参照ください。
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 permissions reference
一時的な特権の管理
前述のように IAM 権限を操作できる人を限定すると、開発スピードが低下したり、運用性が低下することが考えられます。
必要なときに、必要な間だけ、必要な権限を付与するような運用を実現するには、Privileged Access Manager(PAM)が利用できます。PAM はフルマネージドの特権管理ワークフローであり「権限の申請」「承認」「所定時間が経過したあとの特権剥奪」といったワークフローを簡単に実装できます。
PAM によって承認フローを含めたジャスト・イン・タイムな IAM 特権管理を行うことで、セキュアな最小権限を維持しながら、開発スピードや運用性の低下を防ぐことが可能です。
PAM の詳細は以下の記事をご確認ください。
すでに付与された権限を整理する
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 12資格、Google Cloud認定資格11資格。X (旧 Twitter) では Google Cloud や AWS のアップデート情報をつぶやいています。
Follow @y_sugi_it