ロールの推奨事項を使用した最小権限の適用

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

ロールの推奨事項の概要

ロールの推奨事項は、Recommender が生成する推奨事項の種類の 1 つです。

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

Recommender は、ポリシーの分析情報を使用して、過剰な権限を特定します。ポリシーの分析情報は、プロジェクト、フォルダ、または組織での権限の使用状況に関する ML ベースの分析結果です。

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

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

Recommender は、過去 90 日間に各メンバーが使用した権限とそのメンバーが持つトータルの権限を比較して、ポリシーの分析情報を生成します。メンバーは、次に示すいくつかの方法で権限を使用する可能性があります。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

ラテラル ムーブメントは、組織のプロジェクトをまたがる移動が可能なため、インサイダーによるリスクが高まります。

Recommender は、プロジェクト レベルとサービス アカウント レベルで次の条件を満たすロール バインディングを特定することで、ラテラル ムーブメントの分析情報を生成します。

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

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

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

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

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

可用性

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

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

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

  • ロール バインディングがプロジェクト、フォルダ、または組織レベルで存在している。Recommender は、プロジェクト内のサービス固有のリソースに付与されているロールのポリシー分析情報を生成しません。
  • ロール バインディングに条件を含まれていない。Recommender は、条件付きロール バインディングのポリシー分析情報を生成しません。

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

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

Recommender がロール バインディングのラテラル ムーブメントの分析情報を生成するには、ロール バインディングがプロジェクト レベルまたはサービス アカウント レベルで存在している必要があります。

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

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

  • ロール バインディングにポリシー分析情報が関連付けられている。このポリシー分析情報は推奨事項のベースとなります。
  • ロール バインディングが 90 日以上経過している。これにより、Recommender は推奨事項の作成に十分な使用状況データを確保します。
  • ロール バインディングのメンバーが Google が管理するサービス アカウントの場合、ロール バインディングがオーナー、編集者、または閲覧者になっている。Recommender は、他のロールを持つ Google 管理のサービス アカウントに対するロール推奨事項を生成しません。詳細については、Google 管理サービス アカウントのロール推奨事項をご覧ください。

ロール バインディングに分析情報がないか、90 日間以上存在していない場合は、Cloud Console の分析された権限列には、 アイコンが表示されます。

Recommender が、90 日より前のロール バインディングと関連する分析情報に関するロール推奨事項を生成しないことがあります。理由としては以下のことが考えられます。

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

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

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

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

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

優先度と重要度

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

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

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

IAM レコメンデーションの優先度は、P2P4 のいずれかです。基本ロール(オーナー、編集者、閲覧者)のロール バインディングに関するレコメンデーションの優先度は、P2 です。基本ロールは高度な権限を持つため、これらのレコメンデーションの優先度は高くなります。これらのロールのレコメンデーションを適用することで、過剰に付与された権限を大幅に削減できます。他のすべてのレコメンデーションの優先度は P4 です。

gcloud ツールまたは REST API を使用して推奨事項を一覧表示することで、推奨事項の優先度を確認できます。

分析情報の重要度

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

ポリシー分析情報の重要度は LOW または HIGH です。基本ロール(オーナー、編集者、閲覧者)のロール バインディングに関する分析情報の重要度は、HIGH です。基本ロールは高度な権限を持つため、これらの分析情報の重要度は高くなります。これらのロールに関する分析情報を処理することで、過剰に付与された権限を大幅に削減できます。他のすべての分析情報の重要度は LOW です。

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

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

Recommender が推奨事項を自動的に適用することはありません。ユーザーが推奨事項を確認し、適用するかどうかを判断します。ロールの推奨事項を確認、適用、非表示にする方法については、推奨事項の確認と適用をご覧ください。

監査ロギング

1 つの推奨事項を適用または拒否するごとに、Recommender はログエントリを 1 つ作成します。これらのエントリはプロジェクトの推奨事項の履歴で確認できます。これらのエントリを Google Cloud Audit Logs で確認することもできます。

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

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

サブタイプ 説明
REMOVE_ROLE メンバーのロールを削除するよう提案する推奨事項。
REPLACE_ROLE メンバーのロールを、より権限が制限されたロールで置き換えるよう提案する推奨事項。推奨される代替ロールは、新しいカスタムロール、既存のカスタムロール、または 1 つ以上の事前定義ロールです。
SERVICE_AGENT_WITH_DEFAULT_ROLE Google マネージド サービス アカウントのオーナー、編集者、または閲覧者のロールを、サービス アカウントの作成時に自動的に付与されたロールに置き換えるよう提案する推奨事項。詳細については、Google マネージド サービス アカウントに対する推奨事項をご覧ください。
SERVICE_AGENT_WITHOUT_DEFAULT_ROLE Google マネージド サービス アカウントのオーナー、編集者、閲覧者のロールを、より権限が制限されたロールで置き換えるよう提案する推奨事項。詳細については、Google マネージド サービス アカウントに対する推奨事項をご覧ください。

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

Google マネージド サービス アカウントの場合、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 です。

ロールの推奨事項の例

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

既存のロールを取り消す

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

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

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

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

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

カスタムロールの作成

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

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

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

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

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

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

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

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

次のステップ