IAM ポリシー用の Policy Analyzer

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 によって報告されます。ロール バインディングごとに、バインディングのプリンシパル、バインディングが付与するアクセス権(ロールと権限)、バインディングがアクセス権を付与するリソースが報告されます。

これらの結果を確認すると、プロジェクト、フォルダ、組織内のアクセス権を詳細に把握できます。たとえば、特定のリソースにアクセスできるプリンシパルを調べるためのクエリを実行した場合は、クエリ結果でプリンシパルを確認します。

クエリ オプションを有効にすると、クエリ結果の情報を調整できます。

サポートされているポリシータイプ

IAM Policy Analyzer では、IAM 許可ポリシーのみがサポートされます。

Policy Analyzer では、次の形式のアクセス制御はサポートされていません。

Policy Analyzer のクエリ結果では、サポートされていないポリシータイプは考慮されません。たとえば、許可ポリシーによりユーザーがプロジェクトに対する iam.roles.get 権限を持っているものの、拒否ポリシーによってユーザーが権限を使用できないとします。Policy Analyzer は、拒否ポリシーにかかわらず iam.roles.get 権限があることを報告します。

ポリシーの継承

ポリシーの継承を考慮するため、Policy Analyzer は、リソース階層のどこにあるかにかかわらず、指定されたスコープ内のすべての許可ポリシーを自動的に分析します。

たとえば、IAM サービス アカウントにアクセスできるユーザーを確認しようとしているとします。

  • クエリのスコープをプロジェクトに設定すると、Policy Analyzer はサービス アカウントの許可ポリシーとプロジェクトの許可ポリシーを分析します。
  • クエリのスコープを組織に設定すると、Policy Analyzer はサービス アカウントの許可ポリシー、サービス アカウントを所有するプロジェクトの許可ポリシー、プロジェクトを含むフォルダの許可ポリシー、組織の許可ポリシーを分析します。

条件付きアクセス

ロール バインディングに条件が存在する場合は、条件が満たされた場合にのみプリンシパルにアクセス権が付与されます。Policy Analyzer では、関連するロール バインディングに関連付けられている条件が常に報告されます。関連するロール バインディングは、分析クエリで指定したプリンシパル、アクセス権、リソースを含むロール バインディングです。

場合によっては、Policy Analyzer によって条件も分析できる可能性があります。つまり、条件が満たされているかどうかを報告できます。Policy Analyzer では、次のタイプの条件を分析できます。

関連するロール バインディングに条件が含まれている場合、Policy Analyzer は次のいずれかを行います。

  • Policy Analyzer で条件を分析できる場合は、次のいずれかを行います。

    • 条件が true と評価された場合、Policy Analyzer はクエリ結果にロール バインディングを含め、条件評価を TRUE としてマークします。
    • 条件が false と評価された場合、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 権限があるのは誰か」というクエリに対してグループ展開を有効にするとします。storage.buckets.delete 権限を持つグループが検出されると、クエリ結果にはグループ ID だけでなく、グループ内のすべてのメンバーも表示されます。

このオプションを使用すると、アクセス権がグループ内のメンバーシップによるものであっても、個々のユーザーのアクセス権を把握できます。

ロールの拡張

ロールの拡張を有効にすると、クエリ結果には、ロール自体に加えて、各ロール内のすべての権限が一覧表示されます。このオプションは、クエリで権限やロールを指定していない場合にのみ使用できます。

たとえば、「my-user@example.com がバケット bucket-1 に対して持つアクセス権」というクエリに対してロール拡張を有効にするとします。my-user@example.combucket-1 へのアクセス権を付与するロールが Policy Analyzer によって検出されると、クエリ結果には、ロール名だけでなくそのロールに含まれるすべての権限もリストされます。

このオプションでは、プリンシパルに付与されている正確な権限を確認できます。

リソース展開

Policy Analyzer クエリでリソース拡張を有効にすると、クエリ結果に、親リソース(プロジェクト、フォルダ、組織)の関連するすべての子孫リソースが一覧表示されます。この拡張は、Policy Analyzer のクエリでは親リソースあたり 1,000 個のリソース、長時間実行される Policy Analyzer のクエリでは親リソースごとに 100,000 個のリソースに制限されています。

たとえば、リソース拡張が次のクエリに与える影響について考えてみましょう。

  • project-1 に対する storage.buckets.delete 権限を付与されているユーザー。

    このクエリでリソース拡張を有効にすると、クエリ結果のリソース セクションに、プロジェクトだけでなくプロジェクト内のすべてのストレージ バケットが一覧表示されます。

  • my-user@example.comcompute.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 のプレミアム ティアを組織レベルで有効にする必要があります。詳細については、お支払いについてをご覧ください。

次のステップ