ロールの推奨事項を使用すると、プリンシパルの過剰な権限を特定して削除し、リソースのセキュリティ構成を改善できます。
ロールの推奨事項の概要
ロールの推奨事項は、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 アクセスデータを使用します。IAM Recommender がこれらの分析情報に使用するデータをエクスポートする方法については、ロールに関する推奨事項のデータをエクスポートするをご覧ください。
IAM Recommender は機械学習を使用して、あるプリンシパルの現在のロールに含まれる権限の中で、最近使用されなかったが将来的に必要になると予想される権限を特定します。詳細については、このページのポリシー分析情報による機械学習をご覧ください。
プリンシパルに付与されたすべての IAM ロールに対してポリシーの分析情報が生成されるわけではありません。ロール にポリシー分析情報がない理由については、このページの対象をご覧ください。
ポリシーの分析情報を管理する方法については、プロジェクト、フォルダ、組織のポリシーの分析情報を管理するまたは Cloud Storage バケットのポリシーの分析情報を管理するをご覧ください。
機械学習によるポリシー分析
プリンシパルの現在のロールに含まれる権限の中で、特定の権限が必要となる見込みのプリンシパルが存在しますが、最近はその権限を使用していない場合があります。このような権限を特定するため、IAM Recommender は、ポリシーの分析情報の生成時に、機械学習(ML)モデルを使用します。
この機械学習モデルは、複数のシグナルセットでトレーニングされます。
観察された履歴の一般的な共起パターン: ユーザーが過去に権限 A、B、C を使用したという事実は、A、B、C がなんらかの形で関連している可能性があり、 Google Cloudでタスクを実行するのにまとめて必要であるというヒントを提供します。機械学習モデルが適切な頻度でこのパターンを観察した場合、別のユーザーが権限 A と B を使用したときに、モデルはユーザーに権限 C も必要である可能性を提示します。
ロール定義にエンコードされたドメイン知識: IAM には、サービス固有のさまざまな事前定義ロールが多数用意されています。事前定義ロールに一連の権限が含まれている場合、これらの権限を一緒に付与する必要があるという強いシグナルになります。
これらのシグナルに加えて、モデルは単語の分類表現を使用して、その権限がどの程度意味的に似ているかを計算します。意味的に似ている複数の権限は、埋め込み後に互いに「類似」となり、一緒に付与される可能性が高くなります。たとえば、bigquery.datasets.get
と bigquery.tables.list
は埋め込み後に互いに非常に近くなります。
IAM Recommender の機械学習パイプラインで使用されるすべてのデータには k- 匿名化が適用されます。これは、匿名化されたデータセット内の個人を再識別することはできないという意味です。このレベルの匿名化を実現する目的で、各権限の使用パターンに関連するユーザー ID などの個人情報(PII)はすべて破棄されます。次に、 Google Cloud全体でそれほど頻繁に出現しない使用パターンがすべて破棄されます。グローバル モデルは、この匿名化されたデータに基づいてトレーニングされます。
グローバル モデルは、フェデレーション ラーニング使用することで、組織ごとにさらにカスタマイズできます。これはデータをエクスポートせずに機械学習モデルをトレーニングする機械学習プロセスです。
ロールの推奨事項の生成方法
ポリシーの分析情報で、プリンシパルのロールのすべての権限が必要でないことが示されている場合、IAM Recommender はロールを評価して、取り消すことができるかどうか、またはより適した別のロールがあるかどうかを判断します。ロールを取り消すことができる場合、IAM Recommender はロールを取り消すためのロールの推奨事項を生成します。より適したロールがある場合、IAM Recommender はそのロールを提案するロールに置き換えるためのロールの推奨事項を生成します。提案されるロールは、新しいカスタムロール、既存のカスタムロール、または 1 つ以上の事前定義ロールの場合があります。サービス エージェントに対する推奨事項を除き、ロールの推奨事項がプリンシパルのアクセスレベルを引き上げるような変更を提案することはありません。
ロールの推奨事項は、IAM アクセス制御のみに基づいて生成されます。アクセス制御リスト(ACL)や Kubernetes のロールベースのアクセス制御(RBAC)など、他の種類のアクセス制御は考慮しません。他のタイプのアクセス制御を使用している場合は、推奨事項をより注意深く確認し、そのようなアクセス制御がどのようにポリシーに関連するかを考慮してください。
また、プリンシパルに付与されたすべての IAM ロールに対してロールの推奨事項が生成されるわけではありません。ロール にロールの推奨事項がない理由については、このページの対象をご覧ください。
観察期間
ロールの推奨事項のモニタリング期間は、推奨事項のベースとなる権限の使用状況データの日数です。
ロールの推奨事項の最大モニタリング期間は 90 日です。つまり IAM Recommender は、最新の 90 日間の権限の使用状況データを使用してロールの推奨事項を生成します。
また、IAM Recommender は、一定の日数の権限使用状況データが揃うまで、ロールの推奨事項の生成を開始しません。この期間を最小モニタリング期間と呼びます。デフォルトでは、最小モニタリング期間は 90 日ですが、プロジェクト レベルのロールの推奨事項では、30 日または 60 日に手動で設定できます。詳細については、ロールの推奨事項の生成を構成するをご覧ください。最小モニタリング期間を 90 日未満に設定すると、より短時間で推奨事項を取得できますが、推奨事項の精度には影響を受ける可能性があります。
ロールが付与されてから最小モニタリング期間より長く、90 日未満の場合、モニタリング期間はロールが付与されてからの期間となります。
ロールの推奨事項の新しいカスタムロール
IAM Recommender でロールの置換が提案されるときには常に、プリンシパルのニーズにより適合すると予想される既存のカスタムロールまたは 1 つ以上の事前定義ロールが提案されます。
IAM Recommender で、既存の事前定義ロールまたはカスタムロールにマッピングされていない一般的な権限の使用パターンが識別されている場合は、新しいプロジェクト レベルのカスタムロールを作成することをおすすめします。このカスタムロールには、推奨の権限のみが含まれています。カスタムロールの推奨事項を変更して、権限の追加や削除を行うことができます。
最小権限の原則をできるだけ厳密に適用する必要がある場合は、新しいカスタムロールを選択してください。IAM Recommender は、カスタムロールをプロジェクト レベルで作成します。プロジェクトのカスタムロールを保守および更新する責任は、お客様にあります。
管理されるロールを使用するには、事前定義ロールを選択してください。 Google Cloud は、これらのロールを定期的に更新して権限を追加または削除します。これらの更新について通知を受けるには、権限変更ログのニュース フィードに登録してください。事前定義ロールを選択すると、プリンシパルが一度も使用したことのない少数の権限(場合によっては多数の権限)がプリンシパルに引き続き付与されます。
IAM Recommender は、プロジェクトで付与されたロールに対してのみ新しいカスタムロールを推奨します。フォルダや組織など、他のリソースに付与されたロールに対して、新しいカスタムロールを推奨することはありません。
また、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 は、条件付きロール バインディングのポリシー分析情報を生成しません。
ロールが付与されるプリンシパルは、次のいずれかのプリンシパル タイプである必要があります。
- ユーザー
- サービス アカウント
- グループ
allUsers
allAuthenticatedUsers
- Cloud Storage の利便性の値
- BigQuery の特別なグループ メンバー
次のいずれかのタイプのフェデレーション ID。
- Workload Identity プール内のすべての ID
- Workload Identity プール内の単一の ID
- Workforce Identity プール内のすべての ID
- Workforce Identity プール内の単一の ID
特定の Kubernetes サービス アカウントを使用するすべての Google Kubernetes Engine Pod
各プリンシパル タイプの ID の形式については、プリンシパル ID をご覧ください。
IAM Recommender が新しく付与されたロールのポリシーの分析情報を生成するまでに、最大で 10 日かかることがあります。
既存のポリシーの分析情報は、最近の権限の使用状況に基づいて毎日更新されます。ただし、ポリシー分析の基盤となるデータは、通常、実際の使用状況から最大 2 日遅れます。
ラテラル ムーブメントの分析情報の利用可否
ラテラル ムーブメントの分析情報は、次のリソースに付与されたロールに対して生成されます。
- 組織
- フォルダ
- プロジェクト
- サービス アカウント
ロールの推奨事項の利用可否
IAM Recommender がロール のロール推奨事項を生成するには、次の条件を満たしている必要があります。
- ロールにポリシー分析情報が関連付けられている。このポリシー分析情報は推奨事項のベースとなります。
- ロールが付与されてから最小モニタリング期間より長い時間が経過している必要があります。これにより、IAM Recommender は推奨事項の作成に十分な使用状況データを確保します。デフォルトでは、最小モニタリング期間は 90 日ですが、30 日または 60 日に手動で設定できます。詳細については、ロールの推奨事項の生成を構成するをご覧ください。
- ロールが付与されたプリンシパルがサービス エージェントの場合、そのロールはオーナー、編集者、または閲覧者である必要があります。IAM Recommender は、他のロールを持つサービス エージェントに対するロール推奨事項を生成しません。詳細については、サービス エージェントに対するロール推奨事項をご覧ください。
ロールが付与されたあと十分な時間が経過しておらず、ロールに分析情報がない場合は、 Google Cloud コンソールの [分析された権限] 列に
アイコンが表示されます。IAM Recommender が、十分に時間が経過し、ロールに分析情報が関連付けられているにもかかわらず、ロールに関するロール推奨事項を生成しないことがあります。理由としては以下のことが考えられます。
現在のロールよりも適切な IAM 事前定義ロールがない。権限を最小限に抑える事前定義ロール、または他の事前定義ロールよりも少ない権限を持つ事前定義ロールがすでにプリンシパルに与えられている場合、IAM Recommender は別の事前定義ロールを推奨できません。
そのプリンシパル用のカスタムロールを作成すると、プリンシパルの権限を減らすことができます。
プリンシパルはサービス エージェントであり、そのロールは基本ロールではありません。IAM Recommender は、基本ロール(オーナー、編集者、閲覧者)を持つサービス エージェントのロールの推奨事項のみを生成します。詳細については、サービス エージェントに対するロール推奨事項をご覧ください。
プロジェクトのオーナー基本ロールを持つプリンシパルが他に存在しない。各プロジェクトで少なくとも 1 つのプリンシパルがオーナーロール(
roles/owner
)を持っている必要があります。このロールを持つプリンシパルが 1 つのみである場合、IAM Recommender はそのロールの取り消しや置き換えを提案しません。
この場合、Google Cloud コンソールの [分析された権限] 列に、プリンシパルの権限の使用状況が表示されますが、利用可能な推奨事項の
アイコンは表示されません。既存のロールの推奨事項は、最近の権限の使用状況に基づいて毎日更新されます。ただし、ロールの推奨事項のベースとなるデータは、通常、実際の使用状況から最大 2 日遅れます。
優先度と重要度
推奨事項の優先度と分析情報の重要度は、推奨事項または分析情報の緊急度を理解し、優先順位を付けるために役立ちます。
ロールの推奨事項の優先度
レコメンデーションには、緊急度に基づき優先度が割り当てられます。優先度の範囲は P1
(最も高い優先度)から P4
(最も低い優先度)までです。
ロールの推奨事項の優先度は、推奨事項の対象のロールによって異なります。
最適化案の詳細 | 優先度 | 説明 |
---|---|---|
Cloud Storage バケットへの一般公開アクセスを許可するロールの推奨事項 | P1 |
一般公開されているバケットには、インターネット上の誰でもアクセスできます。公開アクセスを削除すると、データをより詳細に管理できます。 |
BigQuery データセットへの一般公開アクセス権を付与するロールの推奨事項 | P1 |
一般公開されているデータセットには、インターネット上の誰でもアクセスできます。公開アクセスを削除すると、データをより詳細に管理できます。 |
プロジェクト、フォルダ、または組織に付与された基本ロール(オーナー、編集者、閲覧者)の推奨事項 | P2 |
基本ロールは高度な権限を持つため、これらのロールの推奨事項を適用することで、過剰な権限を大幅に削減できます。 |
公開アクセスまたは基本ロールを付与しない推奨事項 | P4 |
これらのレコメンデーションは過剰な権限を削減するのに役立ちますが、公開アクセスや高度な権限を持つ基本ロールは削除されないため、優先度は低くなります。 |
分析情報の重要度
分析情報には、緊急度に基づき重要度が割り当てられます。重要度は LOW
、MEDIUM
、HIGH
、CRITICAL
のいずれかです。
ポリシー分析情報の重大度は、分析情報の対象となるロールによって異なります。
分析情報の詳細 | 重大度 | 説明 |
---|---|---|
Cloud Storage バケットへの一般公開アクセス権を付与するロールの分析情報 | CRITICAL |
一般公開されているバケットには、インターネット上の誰でもアクセスできます。公開アクセスを削除すると、データをより詳細に管理できます。 |
BigQuery データセットへの一般公開アクセスを許可するロールの分析情報 | CRITICAL |
一般公開されているデータセットには、インターネット上の誰でもアクセスできます。公開アクセスを削除すると、データをより詳細に管理できます。 |
プロジェクト、フォルダ、または組織に付与された基本ロール(オーナー、編集者、閲覧者)の分析情報 | HIGH |
基本ロールは高度な権限を持つため、これらのロールに関する分析情報を処理することで、過剰な権限を大幅に削減できます。 |
公開アクセスまたは基本ロールを付与しない分析情報 | LOW |
これらの分析情報は過剰な権限をハイライト表示しますが、公開アクセスや高度な権限を持つ基本ロールは含まれないため、優先度は低くなります。 |
ラテラル ムーブメントの分析情報の重要度は LOW
です。
ロールの推奨事項の適用方法
IAM Recommender は、レコメンデーションを自動的に適用することはありません。ユーザーが推奨事項を確認し、適用するかどうかを判断します。ロールの推奨事項を確認、適用、非表示にする方法については、次のいずれかのガイドをご覧ください。
- プロジェクト、フォルダ、組織に対するロールの推奨事項を確認して適用する
- Cloud Storage バケットのロールの推奨事項を確認して適用する
- BigQuery データセットのロールの推奨事項を確認して適用する
監査ロギング
1 つのレコメンデーションを適用または拒否するごとに、IAM Recommender はログエントリを 1 つ作成します。これらのエントリは推奨事項の履歴で確認できます。これらのエントリを Google Cloud 監査ログで確認することもできます。
ロールの推奨事項のサブタイプ
ロールの推奨事項は、推奨アクションに基づいて複数のサブタイプに分類されます。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 |
サービス エージェントのオーナー、編集者、または閲覧者のロールを、サービス アカウントの作成時に自動的に付与されたロールに置き換えるよう提案する推奨事項。詳細については、サービス エージェントのロール推奨事項をご覧ください。 |
SERVICE_AGENT_WITHOUT_DEFAULT_ROLE |
Gサービス エージェントのオーナー、編集者、閲覧者のロールを、より権限が制限されたロールで置き換えるよう提案する推奨事項。詳細については、サービス エージェントのロール推奨事項をご覧ください。 |
サービス エージェントのロール推奨事項
サービス エージェントの場合、IAM Recommender は、基本ロール(オーナー、編集者、閲覧者)に対する推奨事項のみを提供します。
サービス エージェントの推奨事項は、2 つの推奨サブタイプに分類されます。
SERVICE_AGENT_WITH_DEFAULT_ROLE
作成時に、 Google Cloud サービスが適切に機能するよう、一部のサービス エージェントには自動的にサービス エージェントのロールが付与されることがあります。このロールを基本ロール(オーナー、編集者、または閲覧者)で置き換えた場合、サービス エージェントが基本ロールにはない権限を持っていたとしても、ロールの推奨事項では、元のサービス エージェントのロールを復元して過剰なアクセス権限を削除することが提案されることがあります。これらの推奨事項のサブタイプは SERVICE_AGENT_WITH_DEFAULT_ROLE
です。これにより、過剰な権限を安全に削除しながら、すべての Google Cloud サービスが適切に機能することを保証できます。
SERVICE_AGENT_WITH_DEFAULT_ROLE
推奨事項は、現在のロールにはない権限を持つロールを提案する可能性がある唯一の推奨事項のタイプです。
SERVICE_AGENT_WITHOUT_DEFAULT_ROLE
サービス エージェントの作成時にロールが自動的に付与されない場合、サービス エージェントに対する推奨事項は、そのサービス エージェントが使用する権限にのみ基づきます。これらの推奨事項のサブタイプは 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 をご覧ください。
料金
基本ロールのプロジェクト レベル、フォルダレベル、組織レベルのロール推奨事項は、無料でご利用いただけます。
次の高度な IAM Recommender 機能は、Security Command Center のプレミアム ティアまたはエンタープライズ ティアをプロジェクト レベルまたは組織レベルで有効にすると使用できます。
- 基本ロール以外のロールに関する推奨事項
- 組織、フォルダ、プロジェクト以外のリソースに付与されたロールに関する推奨事項(Cloud Storage バケットに付与されるロールに関する推奨事項など)
- カスタムロールを提案する推奨事項
- ポリシーの分析情報
- ラテラル ムーブメントの分析情報
詳細については、お支払いについてをご覧ください。
ロールの推奨事項の例
次の例は、受け取る可能性がある推奨事項のタイプを示しています。
既存のロールを取り消す
ユーザー 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"
}
ポリシーの分析情報を取得する方法については、次のいずれかをご覧ください。
次のステップ
- ロールの推奨事項の使用に関するベスト プラクティスを理解する。
- プロジェクト、フォルダ、組織のロールの推奨事項を確認して適用する。
- Cloud Storage バケットのロールの推奨事項を確認して適用する
- BigQuery データセットのロールの推奨事項を確認して適用する
- Recommender の詳細を確認する。
- IAM の事前定義ロールとカスタムロールについて理解する。