推奨事項を使用して最小権限を適用する

このページでは、IAM Recommender の概要について説明します。IAM Recommender は、メンバーが実際に必要な権限のみを持つようにすることで、最小権限の原則を徹底するのに役立ちます。

IAM Recommender の仕組み

IAM は Recommender を使用して、プロジェクト レベルのロール付与と、各メンバーが過去 90 日間に使用した権限とを比較します。あるメンバーにプロジェクト レベルのロールを付与した後、そのメンバーがそのロールのすべての権限を使用していない場合には、IAM Recommender がロールの取り消しを推奨することがあります。また IAM Recommender は、必要に応じて権限の低いロールを代わりに提案します。提案される置換は、新しいカスタムロール、既存のカスタムロール、または 1 つ以上の事前定義ロールの場合があります。IAM Recommender は、メンバーのアクセスレベルを引き上げるような変更を提案することはありません。

また IAM Recommender は機械学習を使用して、あるメンバーの現在のロールに含まれる権限の中で、過去 90 日間に使用されなかったが将来的に必要になると予想される権限を特定します。

IAM Recommender は、レコメンデーションを自動的に適用することはありません。そのため、実際にそれぞれの推奨事項を確認し、推奨を適用または拒否する必要があります。

IAM Recommender は、プロジェクト レベルで作成された、少なくとも 90 日間存続しているロール付与だけを評価します。次の項目は評価されません。

各メンバーが使用する権限

推奨事項を作成する目的で、IAM 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 権限を使用することになります。

機械学習

メンバーの現在のロールに含まれる権限のうち、過去 90 日間使用されていない特定の権限がいつか必要になる場合があります。このような権限を識別する目的で、IAM Recommender は機械学習(ML)モデルを使用します。

次に示すように、IAM Recommender の機械学習モデルは複数のシグナルセットでトレーニングされます。

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

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

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

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

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

分析情報

レコメンデーションは 1 つ以上の IAM の分析情報に基づいて作成されます。IAM ポリシーの分析情報は、プロジェクト内での権限の使用状況に関する ML ベースの知見です。

一部の分析情報はレコメンデーションの根拠となります。ただし、分析情報は推奨事項とは別に使用できます。分析情報の使用方法については、分析情報の使用をご覧ください。

監査ロギング

1 つのレコメンデーションを適用または拒否するごとに、IAM Recommender はログエントリを 1 つ作成します。このエントリは IAM Recommender または Google Cloud Audit Logs で表示できます。

その他のタイプのアクセス制御

一部の Google Cloud サービスは、IAM とは別個のアクセス制御を提供します。たとえば、Cloud Storage はアクセス制御リスト(ACL)を提供し、Google Kubernetes Engine(GKE)はロールベースのアクセス制御(RBAC)をサポートしています。

IAM Recommender は IAM アクセス制御のみを分析します。他のタイプのアクセス制御を使用している場合は、推奨事項をより注意深く確認し、そのようなアクセス制御がどのように IAM ポリシーに関連するかを考慮してください。

推奨事項の確認

Cloud Console で 1 つの推奨事項をクリックすると、権限のリストが色/記号付きで Cloud Console に表示されます。このリストは、推奨事項を適用した場合にメンバーの権限がどのように変化するかを示しています。

それぞれの色と記号に関連付けられている権限の種類は次のとおりです。

  • グレー、記号なし: メンバーの現在のロールと推奨されるロールの両方に含まれる権限。

  • 赤、マイナス記号付き: メンバーの現在のロールに含まれている権限のうち、過去 90 日間に使用されなかったため推奨ロールに含まれない権限。

  • 青色、機械学習アイコン付き: メンバーの現在のロールと推奨ロールの両方にある権限のうち、メンバーが過去 90 日間にその権限を使用したからではなく、機械学習を通じて今後必要になると判断されたために推奨事項に含まれている権限。このページでは、機械学習(ML)によって提案された権限が表示されるシナリオの例を示します。

カスタムロールに関するレコメンデーション

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

また、推奨される権限のみを含む新しいカスタムロールを作成するというオプションが提示されることもあります。カスタムロールのレコメンデーションを変更して、権限の追加や削除を行うことができます。

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

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

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

  • 組織にすでに 100 個以上のカスタムロールがある。
  • プロジェクトにすでに 25 個以上のカスタムロールがある。

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

ロールの推奨事項の例

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

既存のロールを取り消す

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

この場合、IAM Recommender は、my-user@example.com からブラウザロールを取り消すことを提案します。

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

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

このため、IAM Recommender は、編集者のロールを取り消して他の 2 つのロールの組み合わせに置き換えることで、過剰に付与された数千の権限を削除するよう提案します。

カスタムロールの作成

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

そのため IAM Recommender は次のように、my-user@example.com が実際に使用した権限のみを含むカスタムロールを作成するよう提案します。

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

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

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

IAM Recommender では、編集者のロールを取り消して、Cloud Storage バケット内のオブジェクトを完全に制御できるストレージ オブジェクト管理者のロール(roles/storage.objectAdmin)に置き換えることを推奨しています。この変更により、過剰に付与された何千もの権限が削除されます。

このロールには、サービス アカウントが過去 90 日間に使用しなかった編集者ロールの権限がいくつか含まれます。ただし、IAM Recommender は機械学習を使用して、将来的にこれらの権限がこのサービス アカウントで必要になると予測しています。

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

レコメンデーションの可用性

Cloud Console の [IAM] ページには、プロジェクトの全メンバーが表示され、各メンバーがそのプロジェクトで持っているロールが一覧表示されます。また、それぞれのロールにレコメンデーションがあるかどうかも示されます。

レコメンデーションがある場合、レコメンデーションが利用可能)アイコンが Cloud Console に表示されます。このアイコンは、メンバーにとって不要と思われる権限が存在することを示します。アイコンをクリックするとレコメンデーションを確認し、適用できます。

プロジェクトの一部のメンバーに推奨事項がほとんど(またはまったく)ないとしても、正常です。特定のロールでメンバーに推奨事項がない場合、その理由は次のとおりです。

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

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

  • メンバーの使用状況データが不十分。メンバーの Google Cloud 使用状況に関する十分な情報が IAM Recommender にない場合、そのメンバーのロールについて推奨を行うことはできません。

    今後、IAM Recommender がさらにデータを収集した後で、メンバーに関する推奨事項が表示される場合があります。

  • メンバーは Google が管理するサービス アカウントである。Google が管理するサービス アカウントが必要に応じてリソースに確実にアクセスできるようにするため、IAM Recommender は Google が管理するサービス アカウントに付与されたロールに対する分析は行いません。

  • ロール バインディングが条件付きである。ロール バインディングに条件が含まれている場合、特定の権限が一致する場合にのみロールが付与されます。IAM Recommender は、こうしたロール バインディングに関する推奨を行いません。

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

  • ロール バインディングに関する現在の推奨が拒否されたか、適用後に元に戻された。メンバーのロール変更に関する推奨を拒否した場合、または推奨を適用した後で取り消した場合、Cloud Console にはその推奨が再び表示されなくなります。

    将来、IAM Recommender でメンバーのロール変更のための新しいレコメンデーションが作成された場合、前のレコメンデーションを拒否または取り消した場合でも、新しいレコメンデーションが Cloud Console に表示されます。

    レコメンデーションの履歴で、拒否された推奨と取り消されたレコメンデーションを確認できます。拒否されたレコメンデーションは、その推奨が廃止されるまで使用可能になります。取り消されたレコメンデーションは 90 日間にわたり使用可能です。

必要な IAM 権限

このセクションでは、IAM Recommender を使用するために必要な IAM 権限について説明します。

推奨事項を表示

IAM Recommender の推奨事項を表示するには、表示対象のプロジェクトに関する次の権限が必要です。

  • iam.roles.get
  • iam.roles.list
  • recommender.iamPolicyRecommendations.get
  • recommender.iamPolicyRecommendations.list
  • resourcemanager.projects.getIamPolicy

最小権限の原則を満たしながらこれらの権限を取得するには、次の事前定義ロールを付与するよう管理者に依頼してください。

  • ロールの閲覧者(roles/iam.roleViewer
  • IAM Recommender の閲覧者(roles/recommender.iamViewerまたは IAM セキュリティ審査担当者(roles/iam.securityReviewer)のいずれか

あるいは、必要な権限を含む別のロールを管理者に付与してもらうこともできます。たとえばカスタムロールや、許容範囲がより広い事前定義ロールなどです。

推奨事項の適用と拒否

IAM Recommender の推奨事項を適用したり拒否したりするには、管理対象のプロジェクトに対する次の権限が必要です。

  • iam.roles.get
  • iam.roles.list
  • recommender.iamPolicyRecommendations.get
  • recommender.iamPolicyRecommendations.list
  • recommender.iamPolicyRecommendations.update
  • resourcemanager.projects.getIamPolicy
  • resourcemanager.projects.setIamPolicy

最小権限の原則を満たしながらこれらの権限を取得するには、次の事前定義ロールを付与するよう管理者に依頼してください。

  • ロールの閲覧者(roles/iam.roleViewer
  • IAM Recommender の管理者(roles/recommender.iamAdmin
  • プロジェクト IAM 管理者(roles/resourcemanager.projectIamAdmin

あるいは、必要な権限を含む別のロールを管理者に付与してもらうこともできます。たとえばカスタムロールや、許容範囲がより広い事前定義ロールなどです。

次のステップ