Policy Analyzer では、IAM 許可ポリシーに基づいて、どのプリンシパル(例: ユーザー、サービス アカウント、グループ、ドメイン)がどの Google Cloud リソースに対してどのようなアクセス権を付与されているかを調べることができます。
許可ポリシーの Policy Analyzer は、次のような質問に回答するのに役立ちます。
- この IAM サービス アカウントへのアクセス権を付与されているのはどのユーザーか。
- 個人を特定できる情報(PII)が含まれるこの BigQuery データセットのデータを読み取ることができるのはどのユーザーか。
dev-testers
グループには、このプロジェクトのリソースに対するどのようなロールと権限が付与されているか。- プロジェクト A で Tal が削除できるのはどの Compute Engine 仮想マシン(VM)インスタンスか。
- 午後 7 時にこの Cloud Storage バケットにアクセスできるのはどのユーザーか。
許可ポリシー用の Policy Analyzer の仕組み
許可ポリシーに Policy Analyzer を使用するには、分析クエリを作成し、分析のスコープを指定して、クエリを実行します。
分析クエリ
Policy Analyzer を使用するには、次の 1 つ以上のフィールドを指定する分析クエリを作成します。
- プリンシパル: アクセス権を確認する対象の ID(ユーザー、サービス アカウント、グループ、ドメインなど)
- アクセス権: 確認する権限とロール
- リソース: アクセス権を確認する対象リソース
- (API のみ)条件のコンテキスト: アクセスを確認する際のコンテキスト(時刻など)
通常、分析クエリでこれらのフィールドを 1 つまたは 2 つ指定し、クエリ結果を使用して、指定しなかったフィールドに関する詳細情報を取得します。たとえば、特定のリソースに対する特定の権限を付与されているユーザーを把握する場合は、分析クエリでアクセス権とリソースを指定しますが、プリンシパルは指定しません。
作成できるクエリの種類に関するその他の例については、一般的なクエリの種類をご覧ください。
分析対象範囲
分析クエリを実行するには、分析するスコープを指定する必要があります。スコープは、制限した分析を実施する対象の組織、フォルダ、またはプロジェクトです。スコープとして使用されているリソースとその子孫にアタッチされている IAM 許可ポリシーのみが分析されます。
REST API と gcloud CLI では、スコープを手動で指定します。Google Cloud コンソールでは、スコープは、現在管理しているプロジェクト、フォルダ、または組織に基づいて自動的に決定されます。
分析クエリを作成してスコープを指定したら、クエリを実行して対象スコープ内のポリシーを分析できます。
クエリ結果
分析クエリを実行すると、クエリに指定したプリンシパル、アクセス、リソースを含むロール バインディングが Policy Analyzer によって報告されます。ロール バインディングごとに、バインディングのプリンシパル、バインディングが付与するアクセス権(ロールと権限)、バインディングがアクセス権を付与するリソースが報告されます。
これらの結果を確認すると、プロジェクト、フォルダ、組織内のアクセス権を詳細に把握できます。たとえば、特定のリソースにアクセスできるプリンシパルを確認するためにクエリを実行した場合は、クエリ結果でプリンシパルを確認します。
クエリ結果の情報を調整するには、クエリ オプションを有効にします。
サポートされているポリシータイプ
許可ポリシー用の Policy Analyzer は、IAM 許可ポリシーのみをサポートします。
許可ポリシーの Policy Analyzer は、次の形式のアクセス制御をサポートしていません。
- IAM 拒否ポリシー
- IAM プリンシパル アクセス境界ポリシー
- Google Kubernetes Engine のロールベース アクセス制御
- Cloud Storage アクセス制御リスト
- Cloud Storage 公開アクセスの防止
Policy Analyzer のクエリ結果には、サポートされていないポリシータイプは含まれません。たとえば、許可ポリシーによりユーザーにプロジェクトに対する iam.roles.get
権限が付与されているものの、拒否ポリシーによりその権限を使用できない場合などです。Policy Analyzer は、拒否ポリシーにもかかわらず、iam.roles.get
権限があることを報告します。
ポリシーの継承
ポリシーの継承を考慮するため、Policy Analyzer は、リソース階層のどこにあるかにかかわらず、指定されたスコープ内のすべての許可ポリシーを自動的に分析します。
たとえば、IAM サービス アカウントにアクセスできるユーザーを確認しようとしているとします。
- クエリのスコープをプロジェクトに設定すると、Policy Analyzer はサービス アカウントの許可ポリシーとプロジェクトの許可ポリシーを分析します。
- クエリのスコープを組織に設定すると、Policy Analyzer はサービス アカウントの許可ポリシー、サービス アカウントを所有するプロジェクトの許可ポリシー、プロジェクトを含むフォルダの許可ポリシー、組織の許可ポリシーを分析します。
条件付きアクセス
ロール バインディングに条件が存在する場合は、条件が満たされた場合にのみプリンシパルにアクセス権が付与されます。Policy Analyzer は、関連するロール バインディングに適用されている条件を常に報告します。関連するロール バインディングは、分析クエリで指定したプリンシパル、アクセス権、リソースを含むロール バインディングです。
場合によっては、Policy Analyzer によって条件も分析できる可能性があります。つまり、条件が満たされているかどうかを報告できます。Policy Analyzer は、次のタイプの条件を分析できます。
- リソース属性に基づく条件。リソース名を指定するリソースタイプ向け。
- 日時条件(API と gcloud CLI のみ)。Policy Analyzer がこれらの条件を分析するには、分析クエリでアクセス時刻(
accessTime
)を指定する必要があります。このコンテキストを指定する方法については、特定の時刻におけるアクセス権を特定するをご覧ください。
関連するロール バインディングに条件が含まれている場合、Policy Analyzer は次のいずれかを行います。
Policy Analyzer が条件を分析できる場合は、次のいずれかを行います。
- 条件が true と評価された場合、Policy Analyzer はクエリ結果にロール バインディングを含め、条件評価を
TRUE
としてマークします。 - 条件が false と評価された場合、Policy Analyzer はクエリ結果にロールが含まるようにしません。
- 条件が true と評価された場合、Policy Analyzer はクエリ結果にロール バインディングを含め、条件評価を
Policy Analyzer が関連するロール バインディングの条件を分析することができない場合は、クエリ結果にロールが含まれ、条件評価が
CONDITIONAL
としてマークされます。
データの更新頻度
Policy Analyzer は、ベストエフォート型のデータの更新速度を提供する Cloud Asset API を使用します。ポリシー更新のほとんどが数分で Policy Analyzer に表示されますが、Policy Analyzer には最新のポリシー更新が含まれない可能性があります。
一般的なクエリの種類
このセクションでは、分析クエリを使用してアクセスに関する一般的な質問に回答する方法について説明します。
このリソースにアクセスできるプリンシパルはどれか
リソースにアクセスできるプリンシパルを特定するには、リソースを指定する分析クエリを作成し、必要に応じて確認するロールと権限も指定します。
これらの質問は、次のような疑問への答えを見つける際に活用できます。
- この IAM サービス アカウントへのアクセス権を付与されているユーザーは誰か?
- この IAM サービス アカウントになりすますための権限を付与されているユーザーは誰か?
- プロジェクト A の課金管理者は誰か?
- (API と gcloud CLI のみ): サービス アカウントになりすましてプロジェクト A を更新できるユーザーは誰か?
これらのクエリを作成して送信する方法については、リソースにアクセスできるプリンシパルを特定するをご覧ください。
これらのロールと権限を付与されているプリンシパル
特定のロールと権限を付与されているプリンシパルを特定するには、プリンシパルと確認する一連のロールと権限を指定する分析クエリを作成します。
これらの質問は、次のような疑問への答えを見つける際に活用できます。
- 組織内でサービス アカウントになりすますための権限を付与されているのはどのユーザーか?
- 組織の課金管理者はどのユーザーか?
- 個人を特定できる情報(PII)が含まれるこの BigQuery データセットのデータを読み取ることができるのはどのユーザーか。
- (API と gcloud CLI のみ): サービス アカウントになりすまして BigQuery データセットを読み取ることができる組織内のユーザーは誰か?
これらのクエリを作成して送信する方法については、特定のロールまたは権限を持つプリンシパルを特定するをご覧ください。
このリソースに対してこのプリンシパルに付与されているロールと権限
特定のリソースに対してプリンシパルに付与されているロールと権限を特定するには、プリンシパルと権限を確認する対象のリソースを指定する分析クエリを作成します。
これらの質問は、次のような疑問への答えを見つける際に活用できます。
- この BigQuery データセットに対してユーザー Sasha はどのロールと権限を付与されているか。
dev-testers
グループには、このプロジェクトのリソースに対してどのようなロールと権限が付与されているか。- (API と gcloud CLI のみ): Dana がサービス アカウントになりすました場合に、この BigQuery データセットに対して Dana に付与されているロールと権限。
これらのクエリを作成して送信する方法については、プリンシパルがリソースに対して持っているアクセス権を特定するをご覧ください。
このプリンシパルがアクセスできるリソース
特定のプリンシパルがアクセスできるリソースを特定するには、プリンシパルと確認するロールと権限を指定する分析クエリを作成します。
これらの質問は、次のような疑問への答えを見つける際に活用できます。
- ユーザー Mahan はどの BigQuery データセットの読み取り権限を持っているか。
dev-testers
グループがデータオーナーであるのは、どの BigQuery データセットか。- プロジェクト A で Tal が削除できるのはどの VM か。
- (API と gcloud CLI のみ): ユーザーの John がサービス アカウントになりすますことによって、削除できるのはどの VM か。
これらのクエリを作成して送信する方法については、プリンシパルがアクセスできるリソースを特定するをご覧ください。
保存された分析クエリ
REST API を使用している場合は、分析クエリを保存して再利用する、または他のユーザーと共有することができます。保存したクエリは、他のクエリと同様に実行できます。
クエリの保存の詳細については、保存したクエリを管理するをご覧ください。
クエリ結果をエクスポートする
analyzeIamPolicyLongrunning
を使用すると、クエリを非同期で実行し、クエリ結果を BigQuery または Cloud Storage にエクスポートできます。
クエリ結果を BigQuery にエクスポートする方法については、ポリシー分析を BigQuery に書き込むをご覧ください。
クエリ結果を Cloud Storage にエクスポートする方法については、ポリシー分析を Cloud Storage に書き込むをご覧ください。
クエリ オプション
Policy Analyzer には、クエリ結果に詳細を追加するオプションがいくつか用意されています。
これらのオプションを有効にする方法については、オプションを有効にするをご覧ください。
グループ展開
グループ展開を有効にすると、クエリ結果のすべてのグループが個々のメンバーに展開されます。この展開の上限は、グループあたり 1,000 メンバーに制限されています。十分なグループ権限を付与されている場合は、ネストされたグループも展開されます。このオプションは、クエリでプリンシパルを指定していない場合にのみ有効です。
たとえば、「project-1
に対する storage.buckets.delete
権限があるのは誰か」というクエリに対してグループ展開を有効にするとします。Policy Analyzer が storage.buckets.delete
権限を持つグループを検出すると、クエリ結果にはグループ ID だけでなく、グループ内のすべてのメンバーも表示されます。
このオプションを使用すると、グループのメンバーシップが原因でアクセス権が付与されている場合でも、個々のユーザーのアクセス権を把握できます。
ロールの拡張
ロールの拡張を有効にすると、クエリ結果には、ロール自体に加えて、各ロール内のすべての権限が一覧表示されます。このオプションは、クエリで権限やロールを指定していない場合にのみ使用できます。
たとえば、「my-user@example.com
がバケット bucket-1
に対して持つアクセス権」というクエリに対してロール拡張を有効にするとします。my-user@example.com
に bucket-1
へのアクセス権を付与するロールが Policy Analyzer によって検出されると、クエリ結果には、ロール名だけでなくそのロールに含まれるすべての権限もリストされます。
このオプションでは、プリンシパルに付与されている正確な権限を確認できます。
リソース展開
Policy Analyzer クエリでリソース拡張を有効にすると、クエリ結果に、親リソース(プロジェクト、フォルダ、組織)の関連するすべての子孫リソースが一覧表示されます。この拡張は、Policy Analyzer のクエリでは親リソースあたり 1,000 個のリソース、長時間実行される Policy Analyzer のクエリでは親リソースごとに 100,000 個のリソースに制限されています。
たとえば、リソース拡張が次のクエリにどのように影響するかについて考えてみましょう。
project-1
に対するstorage.buckets.delete
権限を付与されているユーザー。このクエリでリソース拡張を有効にすると、クエリ結果のリソース セクションには、プロジェクトだけでなく、プロジェクト内のすべてのストレージ バケットも一覧表示されます。
my-user@example.com
がcompute.instances.setIamPolicy
権限を付与されている対象リソースこのクエリでリソース拡張を有効にし、Policy Analyzer が
my-user@example.com
に対象の権限を含むプロジェクト レベルのロールがあることを検出した場合、クエリ結果のリソース セクションにはプロジェクトだけでなく、プロジェクト内のすべての Compute Engine インスタンスも一覧表示されます。
このオプションを使用すると、プリンシパルがアクセスできるリソースの詳細を確認できます。
サービス アカウントの権限借用
REST API または gcloud CLI を使用している場合は、サービス アカウントの権限借用の分析を有効にできます。
このオプションを有効にすると、Policy Analyzer によって追加の分析クエリが実行され、指定したリソースへの指定したアクセス権を付与されているサービス アカウントの権限を借用できるユーザーが特定されます。Policy Analyzer では、クエリ結果に含まれるサービス アカウントごとに 1 つのクエリが実行されます。これらのクエリは、サービス アカウントに対する次のいずれかの権限を付与されているユーザーを分析します。
iam.serviceAccounts.actAs
iam.serviceAccounts.getAccessToken
iam.serviceAccounts.getOpenIdToken
iam.serviceAccounts.implicitDelegation
iam.serviceAccounts.signBlob
iam.serviceAccounts.signJwt
割り当てと上限
Cloud Asset Inventory では、コンシューマ プロジェクトに基づいて、ポリシー分析リクエストを含む受信リクエストのレートが適用されます。Cloud Asset Inventory では、グループ メンバーシップ内のグループ展開とリソース階層内のリソース展開も制限されます。
Policy Analyzer のデフォルトの割り当てと上限を確認するには、Cloud Asset Inventory ドキュメントの割り当てと上限をご覧ください。
料金
各組織は、1 日に最大 20 件の分析クエリを無料で実行できます。この上限には、許可ポリシー分析と組織ポリシー分析の両方が含まれます。
1 日あたり 20 件を超える分析クエリを実行する場合は、Security Command Center のプレミアム ティアが組織レベルで有効になっている必要があります。詳細については、お支払いについてをご覧ください。
次のステップ
- Policy Analyzer を使用して許可ポリシーを分析する方法を確認する。
- REST API を使用してポリシー分析クエリを保存する方法を確認する。