ロールの推奨事項の概要

ロールの推奨事項を使用すると、プリンシパルの過剰な権限を特定して削除し、リソースのセキュリティ構成を改善できます。

ロールの推奨事項の概要

ロールの推奨事項は、IAM Recommender によって生成されます。IAM Recommender は、Recommender が提供する Recommender の 1 つです。

各ロールの推奨事項によって、プリンシパルに過剰な権限を付与しているロールの削除または置換が提案されます。大規模な環境の場合、これらの推奨事項を使用すると、プリンシパルが実際に必要な権限のみを持つようにすることで、最小権限の原則を適用する際に有効です。

IAM Recommender は、ポリシーの分析情報を使用して、過剰な権限を特定します。ポリシーの分析情報は、プリンシパルの権限の使用状況に関する ML ベースの分析結果です。

一部の推奨事項は、ラテラル ムーブメントの分析情報にも関連付けられています。これにより、プロジェクトのサービス アカウントが別のプロジェクトのサービス アカウントの権限を借用するためのロールを特定できます。詳しくは、ラテラル ムーブメントの分析情報の生成方法をご覧ください。

ポリシー分析情報の生成方法

ポリシーの分析情報では、プリンシパルが実際に使用した特定のロール バインディングの権限をハイライト表示します。

IAM Recommender は、プリンシパルの権限の総数と、プリンシパルが過去 90 日間に使用した権限を比較して、ポリシーの分析情報を生成します。ロール バインディングが作成されてから 90 日未満の場合、IAM Recommender は、バインディングが作成されてからの時間でプリンシパルの権限の使用状況を確認します。

プリンシパルは、次に示すいくつかの方法で権限を使用する可能性があります。

  • 権限が必要な API を呼び出し、直接的に使用する。

    たとえば、IAM REST API の roles.list メソッドには iam.roles.list 権限が必要です。roles.list メソッドを呼び出すときには、iam.roles.list 権限を使用します。

    同様に、あるリソースに関して testIamPermissions メソッドを呼び出すと、検査対象のすべての権限を実質的に使用することになります。

  • Google Cloud リソースの操作のために Google Cloud コンソールを使って間接的に使用する。

    たとえば、Google Cloud コンソールでは、Compute Engine 仮想マシン(VM)インスタンスを編集できますが、変更する設定に応じて異なる権限が必要です。ただし、Google Cloud コンソールには既存の設定も表示され、これには compute.instances.get 権限が必要です。

    そのため、Google Cloud コンソールで VM インスタンスを編集するときには compute.instances.get 権限を使用することになります。

IAM Recommender は機械学習を使用して、あるプリンシパルの現在のロールに含まれる権限の中で、最近使用されなかったが将来的に必要になると予想される権限を特定します。詳細については、このページのポリシー分析情報による機械学習をご覧ください。

すべての IAM ロール バインディングに対してポリシーの分析情報が生成されるわけではありません。ロール バインディングにポリシー分析情報がない理由については、このページの対象をご覧ください。

ポリシーの分析情報を管理する方法については、プロジェクト、フォルダ、組織のポリシーの分析情報を管理するまたは Cloud Storage バケットのポリシーの分析情報を管理するをご覧ください。

機械学習によるポリシー分析

プリンシパルの現在のロールに含まれる権限の中で、特定の権限が必要となる見込みのプリンシパルが存在しますが、最近はその権限を使用していない場合があります。このような権限を特定するため、IAM Recommender は、ポリシーの分析情報の生成時に、機械学習(ML)モデルを使用します。

この機械学習モデルは、複数のシグナルセットでトレーニングされます。

  • 観察された履歴の一般的な共起パターン: ユーザーが過去に権限 A、B、C を使用したという事実は、A、B、C がなんらかの形で関連している可能性があり、Google Cloud でタスクを実行するのにまとめて必要であるというヒントを提供します。機械学習モデルが適切な頻度でこのパターンを観察した場合、別のユーザーが権限 A と B を使用したときに、モデルはユーザーに権限 C も必要である可能性を提示します。

  • ロール定義にエンコードされたドメイン知識: IAM には、サービス固有のさまざまな事前定義ロールが多数用意されています。事前定義ロールに一連の権限が含まれている場合、これらの権限を一緒に付与する必要があるという強いシグナルになります。

これらのシグナルに加えて、モデルは単語の分類表現を使用して、その権限がどの程度意味的に似ているかを計算します。意味的に似ている複数の権限は、埋め込み後に互いに「類似」となり、一緒に付与される可能性が高くなります。たとえば、bigquery.datasets.getbigquery.tables.list は埋め込み後に互いに非常に近くなります。

IAM Recommender の機械学習パイプラインで使用されるすべてのデータには k- 匿名化が適用されます。これは、匿名化されたデータセット内の個人を再識別することはできないという意味です。このレベルの匿名化を実現する目的で、各権限の使用パターンに関連するユーザー ID などの個人情報(PII)はすべて破棄されます。次に、Google Cloud 全体でそれほど頻繁に出現しない使用パターンがすべて破棄されます。グローバル モデルは、この匿名化されたデータに基づいてトレーニングされます。

グローバル モデルは、フェデレーション ラーニング使用することで、組織ごとにさらにカスタマイズできます。これはデータをエクスポートせずに機械学習モデルをトレーニングする機械学習プロセスです。

ロールの推奨事項の生成方法

ポリシーの分析情報で、プリンシパルのロールのすべての権限が必要でないことが示されている場合、IAM Recommender はロールを評価して、取り消すことができるかどうか、またはより適した別のロールがあるかどうかを判断します。ロールを取り消すことができる場合、IAM Recommender はロールを取り消すためのロールの推奨事項を生成します。より適したロールがある場合、IAM Recommender はそのロールを提案するロールに置き換えるためのロールの推奨事項を生成します。提案されるロールは、新しいカスタムロール、既存のカスタムロール、または 1 つ以上の事前定義ロールの場合があります。Google マネージド サービス アカウントに対する推奨事項を除き、ロールの推奨事項がプリンシパルのアクセスレベルを引き上げるような変更を提案することはありません。

ロールの推奨事項は、IAM アクセス制御のみに基づいて生成されます。アクセス制御リスト(ACL)や Kubernetes のロールベースのアクセス制御(RBAC)など、他の種類のアクセス制御は考慮しません。他のタイプのアクセス制御を使用している場合は、推奨事項をより注意深く確認し、そのようなアクセス制御がどのようにポリシーに関連するかを考慮してください。

また、すべての IAM ロール バインディングに対してロールの推奨事項が生成されるわけではありません。ロール バインディングにロールの推奨事項がない理由については、このページの対象をご覧ください。

観察期間

ロールの推奨事項のモニタリング期間は、推奨事項のベースとなる権限の使用状況データの日数です。

ロールの推奨事項の最大モニタリング期間は 90 日です。つまり IAM Recommender は、最新の 90 日間の権限の使用状況データを使用してロールの推奨事項を生成します。

また、IAM Recommender は、特定の日数の権限使用状況データを取得するまでは、ロールの推奨事項の生成を開始しません。この期間は最小モニタリング期間と呼ばれます。デフォルトでは、最小モニタリング期間は 90 日ですが、プロジェクト レベルのロールの推奨事項では、30 日または 60 日に手動で設定できます。詳細については、ロールの推奨事項の生成を構成するをご覧ください。最小モニタリング期間を 90 日未満に設定すると、より短時間で推奨事項を取得できますが、推奨事項の精度には影響を受ける可能性があります。

ロール バインディングが最小モニタリング期間より古いが、90 日より新しい場合、モニタリング期間はロール バインディングの存続期間となります。

ロールの推奨事項の新しいカスタムロール

IAM Recommender でロールの置換が提案されるときには常に、プリンシパルのニーズにより適合すると予想される既存のカスタムロールまたは 1 つ以上の事前定義ロールが提案されます。

IAM Recommender で、既存の事前定義ロールまたはカスタムロールにマッピングされていない一般的な権限の使用パターンが識別されている場合は、新しいプロジェクト レベルのカスタムロールを作成することをおすすめします。このカスタムロールには、推奨の権限のみが含まれています。カスタムロールの推奨事項を変更して、権限の追加や削除を行うことができます。

最小権限の原則をできるだけ厳密に適用する必要がある場合は、新しいカスタムロールを選択してください。IAM Recommender は、カスタムロールをプロジェクト レベルで作成します。プロジェクトのカスタムロールを保守および更新する責任は、お客様にあります。

Google によって管理されるロールを使用するには、事前定義ロールを選択してください。Google Cloud は、これらのロールを定期的に更新して権限を追加または削除します。これらの更新について通知を受けるには、権限変更ログのニュース フィードに登録してください。事前定義ロールを選択すると、プリンシパルが一度も使用したことのない少数の権限(場合によっては多数の権限)がプリンシパルに引き続き付与されます。

次の場合、IAM Recommender は新しいカスタムロールを提案しません。

  • 推奨事項の対象がフォルダレベルまたは組織レベルのロールである。
  • 組織にすでに 100 個以上のカスタムロールがある。
  • プロジェクトにすでに 25 個以上のカスタムロールがある。

また IAM Recommender では新しいカスタムロールの推奨数に上限があり、プロジェクトごとに 1 日あたり 5 個以下、組織全体で 15 個以下の新しいカスタムロールを推奨します。

ラテラル ムーブメントの分析情報の生成方法

ラテラル ムーブメントとは、あるプロジェクトのサービス アカウントが別のプロジェクトのサービス アカウントの権限を借用することです。たとえば、プロジェクト A に作成されたサービス A が、プロジェクト B のサービス アカウントの権限を借用する場合を表します。

これらの権限により、複数のプロジェクトにまたがる権限借用の連鎖が発生し、リソースに対する意図しないアクセスがプリンシパルに許可される可能性があります。たとえば、プリンシパルがプロジェクト A のサービス アカウントの権限を借用している場合、そのサービス アカウントを使用してプロジェクト B のサービス アカウントを借用できます。プロジェクト B のサービス アカウントに、組織内の他のプロジェクトの他のサービス アカウントの権限借用が許可されている場合、プリンシパルは、引き続きサービス アカウントの権限借用を使用してプロジェクトからプロジェクトに移動し、権限を取得します。

IAM Recommender は、次の条件を満たすロール バインディングを特定することで、ラテラル ムーブメントの分析情報を生成します。

  • ロール バインディングのプリンシパルに、プロジェクトで作成されていないサービス アカウントが含まれている。
  • このロールに次のいずれかの権限が含まれている。これにより、プリンシパルがサービス アカウントの権限を借用できる。

    • iam.serviceAccounts.actAs
    • iam.serviceAccounts.getAccessToken
    • iam.serviceAccounts.getOpenIdToken
    • iam.serviceAccounts.implicitDelegation
    • iam.serviceAccounts.signBlob
    • iam.serviceAccounts.signJwt

ロール バインディングがこれらの条件を満たしている場合、IAM Recommender はバインディングのラテラル ムーブメントの分析情報を生成します。この分析情報には、権限借用が可能なサービス アカウント、過去 90 日間に権限借用に使用されたかどうかなど、サービス アカウントの権限借用に関する情報が含まれます。

IAM Recommender は、新しいロールの推奨事項を生成するために、ラテラル ムーブメントの分析情報を使用しません。これは、サービス アカウントが権限借用されている場合、IAM Recommender は権限を安全に削除できるかどうか提案できないためです。ただし、ロールの推奨事項で使用されていない権限の削除が提案されている場合、IAM Recommender はラテラル ムーブメントの分析情報をその推奨事項にリンクします。これにより、強力な権限があり、プロジェクト間の権限借用に使用されていないサービス アカウントに対するロールの推奨事項を優先することが可能になります。

ラテラル ムーブメントの分析情報を管理する方法については、ラテラル ムーブメントの分析情報の管理をご覧ください。

利用状況

ポリシー分析情報、ラテラル ムーブメントの分析情報、ロール推奨事項は、すべてのロール バインディングに対して生成されるわけではありません。ここでは、ポリシー分析情報、ラテラル ムーブメントの分析情報、推奨事項が生成されるロール バインディングについて説明します。

ポリシー分析情報の利用可否

IAM Recommender がロール バインディングのポリシー分析情報を生成するには、次の条件を満たしている必要があります。

  • ロール バインディングを含む IAM 許可ポリシーを、次のいずれかのリソースに接続する必要があります。

    • Cloud Storage バケット
    • BigQuery データセット
    • プロジェクト
    • フォルダ
    • 組織

    IAM Recommender は、これらのリソースに付与されているロールのポリシー分析情報のみを生成します。

  • ロール バインディングに条件を含まれていない。IAM Recommender は、条件付きロール バインディングのポリシー分析情報を生成しません。

IAM Recommender が新しいロール バインディングのポリシー分析を生成するまでに、最大で 10 日かかることがあります。

既存のポリシーの分析情報は、最近の権限の使用状況に基づいて毎日更新されます。ただし、ポリシーの分析情報に基づくデータは、通常は実際の使用状況より最大 2 日間遅れます。

ラテラル ムーブメントの分析情報の利用可否

ラテラル ムーブメントの分析情報は、次のリソースのロール バインディングに対して生成されます。

  • 組織
  • フォルダ
  • プロジェクト
  • サービス アカウント

ロールの推奨事項の利用可否

IAM Recommender がロール バインディングのロール推奨事項を生成するには、次の条件を満たしている必要があります。

  • ロール バインディングにポリシー分析情報が関連付けられている。このポリシー分析情報は推奨事項のベースとなります。
  • ロール バインディングは最小モニタリング期間より古い必要があります。これにより、IAM Recommender は推奨事項の作成に十分な使用状況データを確保します。デフォルトでは、最小モニタリング期間は 90 日ですが、30 日または 60 日に手動で設定できます。詳細については、ロールの推奨事項の生成を構成するをご覧ください。
  • ロール バインディングのプリンシパルが Google マネージド サービス アカウントの場合、ロール バインディングがオーナー、編集者、または閲覧者になっている。IAM Recommender は、他のロールを持つ Google マネージド サービス アカウントに対するロール推奨事項を生成しません。詳細については、Google 管理サービス アカウントのロール推奨事項をご覧ください。

ロール バインディングが新しい場合、またはインサイトがない場合は、Google Cloud コンソールの [分析された権限] 列に アイコンが表示されます。

IAM Recommender が、十分に時間が経過し、分析情報が関連付けられているものの、ロール バインディングと関連する分析情報に関するロール推奨事項を生成しないことがあります。理由としては以下のことが考えられます。

  • 現在のロールよりも適切な IAM 事前定義ロールがない。権限を最小限に抑える事前定義ロール、または他の事前定義ロールよりも少ない権限を持つ事前定義ロールがすでにプリンシパルに与えられている場合、IAM Recommender は別の事前定義ロールを推奨できません。

    そのプリンシパル用のカスタムロールを作成すると、プリンシパルの権限を減らすことができます。

  • プリンシパルは Google マネージド サービス アカウントであり、そのロールは基本ロールではありません。IAM Recommender は、サービス アカウントに基本ロール(オーナー、編集者、または閲覧者)が割り当てられている場合にのみ、Google マネージド サービス アカウントのロールの推奨事項を生成します。詳細については、Google マネージド サービス アカウントのロール推奨事項をご覧ください。

  • プロジェクトのオーナー基本ロールを持つプリンシパルが他に存在しない。各プロジェクトで少なくとも 1 つのプリンシパルがオーナーロール(roles/owner)を持っている必要があります。このロールを持つプリンシパルが 1 つのみである場合、IAM Recommender はそのロールの取り消しや置き換えを提案しません。

この場合、Google Cloud コンソールの [分析された権限] 列に、プリンシパルの権限の使用状況が表示されますが、利用可能な推奨事項 アイコンは表示されません。

既存のロールの推奨事項は、最近の権限の使用状況に基づいて毎日更新されます。ただし、ロールの推奨事項に基づくデータは、通常は実際の使用状況より最大 2 日間遅れます。

優先度と重要度

推奨事項の優先度と分析情報の重要度は、推奨事項または分析情報の緊急度を理解し、優先順位を付けるために役立ちます。

ロールの推奨事項の優先度

推奨事項には、緊急度に基づき優先度が割り当てられます。優先度の範囲は P0(最も高い優先度)から P4(最も低い優先度)までです。

ロールの推奨事項の優先度は、推奨事項の対象のロール バインディングによって異なります。

最適化案の詳細 優先度 説明
Cloud Storage バケットへの公開アクセスを許可するロール バインディングに関する推奨事項 P1 一般公開されているバケットには、インターネット上の誰でもアクセスできます。公開アクセス権を削除すると、データをより詳細に管理できるようになります。
BigQuery データセットへの公開アクセスを許可するロール バインディングに関する推奨事項 P1 一般公開されているデータセットには、インターネット上の誰でもアクセスできます。 公開アクセス権を削除すると、データをより詳細に管理できるようになります。
プロジェクト、フォルダ、または組織に対する基本ロール(オーナー、編集者、閲覧者)を付与するロール バインディングの分析情報 P2 基本ロールは高度な権限を持つため、これらのロールの推奨事項を適用することで、過剰に付与された権限を大幅に削減できます。
公開アクセスや基本ロールを付与しない推奨事項 P4 これらの推奨事項は過剰な権限の削減に役立ちますが、公開アクセスや高度な権限を持つ基本ロールは削除されないため、優先度は低くなります。

分析情報の重要度

分析情報には、緊急度に基づき重要度が割り当てられます。重要度は LOWMEDIUMHIGHCRITICAL のいずれかです。

ポリシー分析情報の重要度は、分析情報の対象となるロール バインディングによって異なります。

分析情報の詳細 重大度 説明
Cloud Storage バケットへの公開アクセス権を付与するロール バインディングに関する分析情報 CRITICAL 一般公開されているバケットには、インターネット上の誰でもアクセスできます。公開アクセス権を削除すると、データをより詳細に管理できるようになります。
BigQuery データセットへの公開アクセスを許可するロール バインディングの分析情報 CRITICAL 一般公開されているデータセットには、インターネット上の誰でもアクセスできます。 公開アクセス権を削除すると、データをより詳細に管理できるようになります。
プロジェクト、フォルダ、または組織に対する基本ロール(オーナー、編集者、閲覧者)を付与するロール バインディングの分析情報 HIGH 基本ロールは高度な権限を持つため、これらのロールに関する分析情報を処理することで、過剰に付与された権限を大幅に削減できます。
公開アクセスや基本ロールを付与しない分析情報 LOW これらの分析情報は過剰な権限をハイライト表示しますが、公開アクセスや高度な権限を持つ基本ロールは含まれないため、優先度は低くなります。

ラテラル ムーブメントの分析情報の重要度は LOW です。

ロールの推奨事項の適用方法

IAM Recommender は、レコメンデーションを自動的に適用することはありません。ユーザーが推奨事項を確認し、適用するかどうかを判断します。ロールの推奨事項を確認、適用、非表示にする方法については、次のいずれかのガイドをご覧ください。

監査ロギング

1 つのレコメンデーションを適用または拒否するごとに、IAM Recommender はログエントリを 1 つ作成します。これらのエントリは推奨事項の履歴で確認できます。これらのエントリを Google Cloud Audit Logs で確認することもできます。

ロールの推奨事項のサブタイプ

ロールの推奨事項は、推奨アクションに基づいて複数のサブタイプに分類されます。gcloud CLI または REST API を使用する場合、これらのサブタイプを使用して推奨事項をフィルタリングできます。

サブタイプ 説明
REMOVE_ROLE プリンシパルのプロジェクト レベル、フォルダレベル、または組織レベルのロールを削除するよう提案する推奨事項。
REMOVE_ROLE_BIGQUERY_DATASET プリンシパルのデータセットレベルのロールを削除するよう提案する推奨事項。
REMOVE_ROLE_STORAGE_BUCKET プリンシパルのバケットレベルのロールを削除するよう提案する推奨事項。
REPLACE_ROLE プリンシパルのプロジェクト レベル、フォルダレベル、または組織レベルのロールを、より権限が制限されたロールに置き換えることをおすすめします。推奨される代替ロールは、既存のカスタムロール 1 つか、1 つ以上の事前定義ロールです。
REPLACE_ROLE_CUSTOMIZABLE プリンシパルのロールを、現在のロールよりも制限の少ない新しいカスタムロールに置き換えることを提案する推奨事項。
REPLACE_ROLE_BIGQUERY_DATASET プリンシパルのデータセットレベルのロールを、より権限が制限されたロールに置き換えることをおすすめします。推奨される代替ロールは、既存のカスタムロール 1 つか、1 つ以上の事前定義ロールです。
REPLACE_ROLE_STORAGE_BUCKET プリンシパルのバケットレベルのロールを、より権限が制限されたロールに置き換えることをおすすめします。推奨される代替ロールは、既存のカスタムロール 1 つか、1 つ以上の事前定義ロールです。
SERVICE_AGENT_WITH_DEFAULT_ROLE Google マネージド サービス アカウントのオーナー、編集者、または閲覧者のロールを、サービス アカウントの作成時に自動的に付与されたロールに置き換えるよう提案する推奨事項。詳細については、Google マネージド サービス アカウントに対する推奨事項をご覧ください。
SERVICE_AGENT_WITHOUT_DEFAULT_ROLE Google マネージド サービス アカウントのオーナー、編集者、閲覧者のロールを、より権限が制限されたロールで置き換えるよう提案する推奨事項。詳細については、Google マネージド サービス アカウントに対する推奨事項をご覧ください。

Google マネージド サービス アカウントに対するロールの推奨事項

Google マネージド サービス アカウントの場合、IAM Recommender は、基本ロール(オーナー、編集者、閲覧者)のロール バインディングに対する推奨事項のみを提供します。

Google マネージド サービス アカウントの推奨事項は、2 つの推奨サブタイプに分類されます。

SERVICE_AGENT_WITH_DEFAULT_ROLE

作成時に、Google Cloud サービスが適切に機能するよう、一部の Google マネージド サービス アカウントには自動的にサービス エージェントのロールが付与されることがあります。このロールを基本ロール(オーナー、編集者、または閲覧者)で置き換えた場合、サービス エージェントが基本ロールにはない権限を持っていたとしても、ロールの推奨事項では、元のサービス エージェントのロールを復元して過剰なアクセス権限を削除することが提案されることがあります。これらの推奨事項のサブタイプは SERVICE_AGENT_WITH_DEFAULT_ROLE です。これにより、過剰な権限を安全に削除しながら、すべての Google Cloud サービスが適切に機能することを保証できます。

SERVICE_AGENT_WITH_DEFAULT_ROLE 推奨事項は、現在のロールにはない権限を持つロールを提案する可能性がある唯一の推奨事項のタイプです。

SERVICE_AGENT_WITHOUT_DEFAULT_ROLE

Google マネージド サービス アカウントの作成時にロールが自動的に付与されない場合、サービス アカウントに対する推奨事項は、そのサービス アカウントが使用する権限にのみ基づきます。これらの推奨事項のサブタイプは SERVICE_AGENT_WITHOUT_DEFAULT_ROLE です。

Security Command Center のロールの推奨事項

Security Command Center のプレミアム ティアを使用している場合は、ロールの推奨事項のうち、一部のサブタイプを Security Command Center の検出結果として表示できます。各サブタイプは検出機能に関連付けられています。

推奨事項サブタイプ 検出結果のカテゴリ
REMOVE_ROLE Unused IAM role
REPLACE_ROLE IAM role has excessive permissions
SERVICE_AGENT_WITH_DEFAULT_ROLE Service agent role replaced with basic role
SERVICE_AGENT_WITHOUT_DEFAULT_ROLE Service agent granted basic role

Security Command Center でロールの推奨事項を表示する方法の詳細については、Security Command Center のドキュメントの IAM Recommender をご覧ください。

ロールの推奨事項の例

次の例は、受け取る可能性がある推奨事項のタイプを示しています。

既存のロールを取り消す

ユーザー my-user@example.com には、プロジェクトのブラウザのロールが付与されています。ブラウザロールには、ユーザーにプロジェクト リソースの表示を許可する 6 つの権限が含まれています。ただし、過去 90 日間、my-user@example.com はリソースを閲覧していません。

したがって、IAM Recommender は、my-user@example.com からブラウザロールを取り消すことを提案するロールの推奨事項を生成します。

Console

gcloud

{
  "associatedInsights": [
    {
      "insight": "projects/123456789012/locations/global/insightTypes/google.iam.policy.Insight/insights/86c14538-dcfd-4326-afe5-ee8ac921e06a"
    }
  ],
  "content": {
    "operationGroups": [
      {
        "operations": [
          {
            "action": "remove",
            "path": "/iamPolicy/bindings/*/members/*",
            "pathFilters": {
              "/iamPolicy/bindings/*/condition/expression": "",
              "/iamPolicy/bindings/*/members/*": "user:my-user@example.com",
              "/iamPolicy/bindings/*/role": "roles/browser"
            },
            "resource": "//cloudresourcemanager.googleapis.com/projects/123456789012",
            "resourceType": "cloudresourcemanager.googleapis.com/Project"
          }
        ]
      }
    ],
    "overview": {
      "member": "user:my-user@example.com",
      "removedRole": "roles/browser",
      "resource": "//cloudresourcemanager.googleapis.com/projects/123456789012"
    }
  },
  "description": "This role has not been used during the observation window.",
  "etag": "\"9fc3241da8bfab51\"",
  "lastRefreshTime": "2022-05-20T07:00:00Z",
  "name": "projects/123456789012/locations/global/recommenders/google.iam.policy.Recommender/recommendations/fe512038-5455-49g1-8f9c-752e31c8c154",
  "primaryImpact": {
    "category": "SECURITY",
    "securityProjection": {
      "details": {
        "revokedIamPermissionsCount": 6
      }
    }
  },
  "priority": "P4",
  "recommenderSubtype": "REMOVE_ROLE",
  "stateInfo": {
    "state": "ACTIVE"
  }
}

REST

{
  "name": "projects/123456789012/locations/global/recommenders/google.iam.policy.Recommender/recommendations/fe512038-5455-49g1-8f9c-752e31c8c154",
  "description": "This role has not been used during the observation window.",
  "lastRefreshTime": "2022-05-20T07:00:00Z",
  "primaryImpact": {
    "category": "SECURITY",
    "securityProjection": {
      "details": {
        "revokedIamPermissionsCount": 6
      }
    }
  },
  "content": {
    "operationGroups": [
      {
        "operations": [
          {
            "action": "remove",
            "resourceType": "cloudresourcemanager.googleapis.com/Project",
            "resource": "//cloudresourcemanager.googleapis.com/projects/123456789012",
            "path": "/iamPolicy/bindings/*/members/*",
            "pathFilters": {
              "/iamPolicy/bindings/*/condition/expression": "",
              "/iamPolicy/bindings/*/members/*": "user:my-user@example.com",
              "/iamPolicy/bindings/*/role": "roles/browser"
            }
          }
        ]
      }
    ],
    "overview": {
      "resource": "//cloudresourcemanager.googleapis.com/projects/123456789012",
      "member": "user:my-user@example.com",
      "removedRole": "roles/browser"
    }
  },
  "stateInfo": {
    "state": "ACTIVE"
  },
  "etag": "\"9fc3241da8bfab51\"",
  "recommenderSubtype": "REMOVE_ROLE",
  "associatedInsights": [
    {
      "insight": "projects/123456789012/locations/global/insightTypes/google.iam.policy.Insight/insights/86c14538-dcfd-4326-afe5-ee8ac921e06a"
    }
  ],
  "priority": "P4"
}

既存のロールを置き換える

サービス アカウントに、プロジェクトの編集者のロール(roles/editor)が付与されています。この基本ロールには、3,000 を超える権限が含まれており、プロジェクトへの広範なアクセス権が付与されます。ただし、過去 90 日間、サービス アカウントはこれらの権限の一部しか使用していません。

したがって、IAM Recommender は、編集者のロールを取り消して他の 2 つのロールの組み合わせに置き換えることで、何千もの余分な権限を削除することを提案するロール推奨事項を生成します。

Console

gcloud

{
  "associatedInsights": [
    {
      "insight": "projects/123456789012/locations/global/insightTypes/google.iam.policy.Insight/insights/3d4ef3d6-bdf0-4330-975d-c65cb929c44d"
    }
  ],
  "content": {
    "operationGroups": [
      {
        "operations": [
          {
            "action": "add",
            "path": "/iamPolicy/bindings/*/members/-",
            "pathFilters": {
              "/iamPolicy/bindings/*/condition/expression": "",
              "/iamPolicy/bindings/*/role": "roles/iam.serviceAccountUser"
            },
            "resource": "//cloudresourcemanager.googleapis.com/projects/123456789012",
            "resourceType": "cloudresourcemanager.googleapis.com/Project",
            "value": "user:my-user@example.com"
          },
          {
            "action": "add",
            "path": "/iamPolicy/bindings/*/members/-",
            "pathFilters": {
              "/iamPolicy/bindings/*/condition/expression": "",
              "/iamPolicy/bindings/*/role": "roles/storage.objectAdmin"
            },
            "resource": "//cloudresourcemanager.googleapis.com/projects/123456789012",
            "resourceType": "cloudresourcemanager.googleapis.com/Project",
            "value": "user:my-user@example.com"
          },
          {
            "action": "remove",
            "path": "/iamPolicy/bindings/*/members/*",
            "pathFilters": {
              "/iamPolicy/bindings/*/condition/expression": "",
              "/iamPolicy/bindings/*/members/*": "user:my-user@example.com",
              "/iamPolicy/bindings/*/role": "roles/editor"
            },
            "resource": "//cloudresourcemanager.googleapis.com/projects/123456789012",
            "resourceType": "cloudresourcemanager.googleapis.com/Project"
          }
        ]
      }
    ],
    "overview": {
      "addedRoles": [
        "roles/iam.serviceAccountUser",
        "roles/storage.objectAdmin"
      ],
      "member": "user:my-user@example.com",
      "minimumObservationPeriodInDays": "0",
      "removedRole": "roles/editor",
      "resource": "//cloudresourcemanager.googleapis.com/projects/123456789012"
    }
  },
  "description": "Replace the current role with smaller predefined roles to cover the permissions needed.",
  "etag": "\"0da9a354c2a83d96\"",
  "lastRefreshTime": "2022-06-22T07:00:00Z",
  "name": "projects/123456789012/locations/global/recommenders/google.iam.policy.Recommender/recommendations/4637db3d-dba5-45eb-95ac-b4ee4b4cd14e",
  "primaryImpact": {
    "category": "SECURITY",
    "securityProjection": {
      "details": {
        "revokedIamPermissionsCount": 2998
      }
    }
  },
  "priority": "P2",
  "recommenderSubtype": "REPLACE_ROLE",
  "stateInfo": {
    "state": "ACTIVE"
  }
}

REST

{
  "name": "projects/123456789012/locations/global/recommenders/google.iam.policy.Recommender/recommendations/4637db3d-dba5-45eb-95ac-b4ee4b4cd14e",
  "description": "Replace the current role with smaller predefined roles to cover the permissions needed.",
  "lastRefreshTime": "2022-06-22T07:00:00Z",
  "primaryImpact": {
    "category": "SECURITY",
    "securityProjection": {
      "details": {
        "revokedIamPermissionsCount": 2998
      }
    }
  },
  "content": {
    "operationGroups": [
      {
        "operations": [
          {
            "action": "add",
            "resourceType": "cloudresourcemanager.googleapis.com/Project",
            "resource": "//cloudresourcemanager.googleapis.com/projects/123456789012",
            "path": "/iamPolicy/bindings/*/members/-",
            "value": "user:my-user@example.com",
            "pathFilters": {
              "/iamPolicy/bindings/*/condition/expression": "",
              "/iamPolicy/bindings/*/role": "roles/iam.serviceAccountOwner"
            }
          },
          {
            "action": "add",
            "resourceType": "cloudresourcemanager.googleapis.com/Project",
            "resource": "//cloudresourcemanager.googleapis.com/projects/123456789012",
            "path": "/iamPolicy/bindings/*/members/-",
            "value": "user:my-user@example.com",
            "pathFilters": {
              "/iamPolicy/bindings/*/condition/expression": "",
              "/iamPolicy/bindings/*/role": "roles/storage.objectAdmin"
            }
          },
          {
            "action": "remove",
            "resourceType": "cloudresourcemanager.googleapis.com/Project",
            "resource": "//cloudresourcemanager.googleapis.com/projects/123456789012",
            "path": "/iamPolicy/bindings/*/members/*",
            "pathFilters": {
              "/iamPolicy/bindings/*/condition/expression": "",
              "/iamPolicy/bindings/*/members/*": "user:my-user@example.com",
              "/iamPolicy/bindings/*/role": "roles/editor"
            }
          }
        ]
      }
    ],
    "overview": {
      "resource": "//cloudresourcemanager.googleapis.com/projects/123456789012",
      "member": "user:my-user@example.com",
      "removedRole": "roles/editor",
      "addedRoles": [
        "roles/iam.serviceAccountUser",
        "roles/storage.objectAdmin"
      ],
      "minimumObservationPeriodInDays": "0"
    }
  },
  "stateInfo": {
    "state": "ACTIVE"
  },
  "etag": "\"0da9a354c2a83d96\"",
  "recommenderSubtype": "REPLACE_ROLE",
  "associatedInsights": [
    {
      "insight": "projects/123456789012/locations/global/insightTypes/google.iam.policy.Insight/insights/3d4ef3d6-bdf0-4330-975d-c65cb929c44d"
    }
  ],
  "priority": "P2"
}

カスタムロールの作成

ユーザー my-user@example.com には、プロジェクトの Cloud Trace 管理者ロール(roles/cloudtrace.admin)が付与されています。このロールには 10 個を超える権限が含まれていますが、ポリシー分析情報では、過去 90 日間に my-user@example.com が使用した権限は 4 個のみだったことが示されています。

したがって、IAM Recommender は、my-user@example.com が実際に使用した権限のみを含むカスタムロールを作成することを提案するロール推奨事項を生成します。

Console

gcloud

REPLACE_ROLE_CUSTOMIZABLE サブタイプは、IAM Recommender が使用される権限を含むカスタムロールの作成を推奨していることを示します。使用される権限を確認するには、関連付けられたポリシー分析情報を取得します。

{
  "associatedInsights": [
    {
      "insight": "projects/123456789012/locations/global/insightTypes/google.iam.policy.Insight/insights/2799dc04-b12e-4cf6-86aa-d81907d31f58"
    }
  ],
  "associatedResourceNames": [
    "//cloudresourcemanager.googleapis.com/projects/123456789012"
  ],
  "content": {
    "operationGroups": [
      {
        "operations": [
          {
            "action": "add",
            "path": "/iamPolicy/bindings/*/members/-",
            "pathFilters": {
              "/iamPolicy/bindings/*/condition/expression": "",
              "/iamPolicy/bindings/*/role": "roles/cloudtrace.user"
            },
            "resource": "//cloudresourcemanager.googleapis.com/projects/123456789012",
            "resourceType": "cloudresourcemanager.googleapis.com/Project",
            "value": "user:my-user@example.com"
          },
          {
            "action": "remove",
            "path": "/iamPolicy/bindings/*/members/*",
            "pathFilters": {
              "/iamPolicy/bindings/*/condition/expression": "",
              "/iamPolicy/bindings/*/members/*": "user:my-user@example.com",
              "/iamPolicy/bindings/*/role": "roles/cloudtrace.admin"
            },
            "resource": "//cloudresourcemanager.googleapis.com/projects/123456789012",
            "resourceType": "cloudresourcemanager.googleapis.com/Project"
          }
        ]
      }
    ],
    "overview": {
      "minimumObservationPeriodInDays": "0"
    }
  },
  "description": "Replace the current role with a smaller role to cover the permissions needed.",
  "etag": "\"c7f57a4725d32d66\"",
  "lastRefreshTime": "2022-06-22T07:00:00Z",
  "name": "projects/123456789012/locations/global/recommenders/google.iam.policy.Recommender/recommendations/ba1fc977-fddd-3856-a829-f69649ae8075",
  "originalContent": {},
  "primaryImpact": {
    "category": "SECURITY",
    "securityProjection": {
      "details": {},
      "revokedIamPermissionsCount": 1
    }
  },
  "priority": "P4",
  "recommenderSubtype": "REPLACE_ROLE_CUSTOMIZABLE",
  "stateInfo": {
    "state": "ACTIVE"
  },
  "targetResources": [
    "//cloudresourcemanager.googleapis.com/projects/123456789012"
  ]
}

REST

REPLACE_ROLE_CUSTOMIZABLE サブタイプは、IAM Recommender が使用される権限を含むカスタムロールの作成を推奨していることを示します。使用される権限を確認するには、関連付けられたポリシー分析情報を取得します。

{
  "name": "projects/123456789012/locations/global/recommenders/google.iam.policy.Recommender/recommendations/ba1fc977-fddd-3856-a829-f69649ae8075",
  "description": "Replace the current role with a smaller role to cover the permissions needed.",
  "lastRefreshTime": "2022-06-22T07:00:00Z",
  "primaryImpact": {
    "category": "SECURITY",
    "securityProjection": {
      "details": {
        "revokedIamPermissionsCount": 1
      }
    }
  },
  "content": {
    "operationGroups": [
      {
        "operations": [
          {
            "action": "add",
            "resourceType": "cloudresourcemanager.googleapis.com/Project",
            "resource": "//cloudresourcemanager.googleapis.com/projects/123456789012",
            "path": "/iamPolicy/bindings/*/members/-",
            "value": "user:my-user@example.com",
            "pathFilters": {
              "/iamPolicy/bindings/*/condition/expression": "",
              "/iamPolicy/bindings/*/role": "roles/cloudtrace.user"
            }
          },
          {
            "action": "remove",
            "resourceType": "cloudresourcemanager.googleapis.com/Project",
            "resource": "//cloudresourcemanager.googleapis.com/projects/123456789012",
            "path": "/iamPolicy/bindings/*/members/*",
            "pathFilters": {
              "/iamPolicy/bindings/*/condition/expression": "",
              "/iamPolicy/bindings/*/members/*": "user:my-user@example.com",
              "/iamPolicy/bindings/*/role": "roles/cloudtrace.admin"
            }
          }
        ]
      }
    ],
    "overview": {
      "minimumObservationPeriodInDays": "0"
    }
  },
  "stateInfo": {
    "state": "ACTIVE"
  },
  "etag": "\"c7f57a4725d32d66\"",
  "recommenderSubtype": "REPLACE_ROLE_CUSTOMIZABLE",
  "associatedInsights": [
    {
      "insight": "projects/123456789012/locations/global/insightTypes/google.iam.policy.Insight/insights/2799dc04-b12e-4cf6-86aa-d81907d31f58"
    }
  ],
  "priority": "P4"
}

ロールの推奨事項では、別のオプションとして、既存のロールを Cloud Trace ユーザーロール(roles/cloudtrace.user)に置き換えることも提案します。この事前定義ロールには、Cloud Trace 管理者ロールよりも若干少ない権限が含まれています。

機械学習によって提案された権限を持つロールへの置換

サービス アカウントに、プロジェクトの編集者のロール(roles/editor)が付与されています。この基本ロールには、3,000 を超える権限が含まれており、プロジェクトへの広範なアクセス権が付与されます。ただし、ポリシー分析情報では、サービス アカウントは過去 90 日間に 10 未満の権限しか使用していなかったことが示されています。

また、ポリシー分析情報では、今後サービス アカウントで必要になる可能性のある権限も示されています。IAM Recommender は、これらの権限を機械学習を使用して特定しています。

IAM Recommender がロールの推奨事項を生成します。このロールでは、編集者のロールを取り消し、Cloud Storage バケット内のオブジェクトの完全な制御を許可するストレージ オブジェクト管理者のロール(roles/storage.objectAdmin)に置き換えることを提案します。この変更により、サービス アカウントに使用された権限と、サービス アカウントに今後必要となる可能性がある権限の両方を残したまま、何千もの過剰な権限が削除されます。

Console

IAM Recommender は、権限の使用状況ではなく、IAM Recommender の機械学習に基づいて追加された権限の識別に、機械学習 アイコンを使用します。この例では、機械学習に基づいて resourcemanager.projects.get 権限が推奨されています。

gcloud

権限の使用状況ではなく、IAM Recommender の機械学習に基づいて追加された権限は、推奨事項自体には追加されません。代わりに、レコメンデーションに関連付けられたポリシーの分析情報に追加されます。すべての ML ベースの権限は、分析情報の inferredPermissions フィールドに追加されます。この例では、機械学習に基づいて resourcemanager.projects.get 権限が推奨されています。

associatedRecommendations:
- recommendation: projects/123456789012/locations/global/recommenders/google.iam.policy.Recommender/recommendations/0573b702-96a5-4622-a916-c762e7b0731f
category: SECURITY
content:
  condition:
    description: ''
    expression: ''
    location: ''
    title: ''
  currentTotalPermissionsCount: '5069'
  exercisedPermissions:
  - permission: storage.objects.create
  - permission: storage.objects.delete
  - permission: storage.objects.get
  - permission: storage.objects.list
  inferredPermissions:
  - permission: resourcemanager.projects.get
  member: serviceAccount:my-service-account@my-project.iam.gserviceaccount.com
  role: roles/editor
description: 4 of the permissions in this role binding were used in the past 90 days.
etag: '"d3cdec23cc712bd0"'
insightSubtype: PERMISSIONS_USAGE
lastRefreshTime: '2020-07-11T07:00:00Z'
name: projects/123456789012/locations/global/insightTypes/google.iam.policy.Insight/insights/0d3ce433-f067-4e78-b6ae-03d7d1f6f040
observationPeriod: 7776000s
stateInfo:
  state: ACTIVE
targetResources:
- //cloudresourcemanager.googleapis.com/projects/123456789012
severity: HIGH

ポリシーの分析情報を取得する方法については、ポリシーの分析情報を確認するをご覧ください。

REST

権限の使用状況ではなく、IAM Recommender の機械学習に基づいて追加された権限は、推奨事項自体には追加されません。代わりに、レコメンデーションに関連付けられたポリシーの分析情報に追加されます。すべての ML ベースの権限は、分析情報の inferredPermissions フィールドに追加されます。この例では、機械学習に基づいて resourcemanager.projects.get 権限が推奨されています。

{
  "name": "projects/123456789012/locations/global/insightTypes/google.iam.policy.Insight/insights/07841f74-02ce-4de8-bbe6-fc4eabb68568",
  "description": "4 of the permissions in this role binding were used in the past 90 days.",
  "content": {
    "role": "roles/editor",
    "member": "serviceAccount:my-service-account@my-project.iam.gserviceaccount.com",
    "condition": {
      "expression": "",
      "title": "",
      "description": "",
      "location": ""
    },
    "exercisedPermissions": [
      {
        "permission": "storage.objects.create"
      },
      {
        "permission": "storage.objects.delete"
      },
      {
        "permission": "storage.objects.get"
      },
      {
        "permission": "storage.objects.list"
      }
    ],
    "inferredPermissions": [
      {
        "permission": "resourcemanager.projects.get"
      }
    ],
    "currentTotalPermissionsCount": "5069"
  },
  "lastRefreshTime": "2020-07-12T07:00:00Z",
  "observationPeriod": "7776000s",
  "stateInfo": {
    "state": "ACTIVE"
  },
  "category": "SECURITY",
  "associatedRecommendations": [
    {
      "recommendation": "projects/123456789012/locations/global/recommenders/google.iam.policy.Recommender/recommendations/b1932220-867d-43d1-bd74-fb95876ab656"
    }
  ],
  "targetResources": [
    "//cloudresourcemanager.googleapis.com/projects/123456789012"
  ],
  "insightSubtype": "PERMISSIONS_USAGE",
  "etag": "\"d3cdec23cc712bd0\"",
  "severity": "HIGH"
}

ポリシーの分析情報を取得する方法については、ポリシーの分析情報を確認するをご覧ください。

次のステップ