推奨事項の確認と適用

このページでは、IAM Recommender によるレコメンデーションの情報の表示、確認、適用方法について説明します。IAM Recommender は、メンバーが実際に必要な権限のみを持つようにすることで、最小権限の原則を徹底するのに役立ちます。

このページを読む前に、IAM Recommender の概要を理解する必要があります。また、IAM Recommender を使用するために必要な IAM 権限があることもご確認ください。

推奨事項の確認と適用

Google Cloud Console を使用すると、レコメンデーションを最も簡単に確認して適用できます。一部のタスクを完了するには、Cloud Console を使用する必要があります。

  • レコメンデーションを受け取った理由の詳細を表示する
  • レコメンデーションを閉じる
  • レコメンデーションを適用するときにカスタムロールを自動的に作成する

また、レコメンデーションを確認して適用するには、gcloud コマンドライン ツールと Recommender API を使用します。

Console

  1. Cloud Console で [IAM] ページに移動します。

    IAM ページに移動

  2. プロジェクトのメンバーのリストで、過剰に付与された権限の列を見つけます。

    この列には、メンバーに付与された各ロールの過去 90 日間の未使用の権限の数と、そのロールの権限の合計数が表示されます。

    利用可能なレコメンデーションがある アイコンは、ロールを取り消すまたは権限のより少ないロールに置き換えるのに、ロールのレコメンデーションが利用可能であることを示しています。

    利用可能なレコメンデーションがない アイコンは、ロールに推奨される変更がないことを示しています。理由を確認するには、アイコンの上にポインタを置きます。

  3. 確認するレコメンデーションがある場合は、利用可能なレコメンデーションがある アイコンをクリックすると、レコメンデーションの詳細が表示されます。

    ロールの置き換えが推奨されている場合、IAM Recommender は、適用可能な事前定義ロール群を必ず提案します。

    場合によっては、IAM Recommender がプロジェクト レベルで新しいカスタムロールを作成することも提案します。カスタムロールのレコメンデーションがある場合は、Cloud Console にデフォルトで表示されます。事前定義ロールのレコメンデーションに切り替えるには、[おすすめの事前定義ロールを見る] をクリックします。

  4. レコメンデーションをよく確認し、メンバーによる Google Cloud リソースへのアクセス権がどのように変わるかを確認してください。レコメンデーションに含まれる可能性のある変更の種類については、レコメンデーションの確認をご覧ください。

  5. (省略可)カスタムロールを作成するレコメンデーションである場合は、必要に応じて、タイトル説明IDロールのリリース ステージを更新します。

    カスタムロールに権限を追加する必要がある場合は、[権限を追加] をクリックします。

    カスタムロールから権限を削除する必要がある場合は、削除する各権限のチェックボックスをオフにします。

  6. レコメンデーションに基づいて対処します。

    レコメンデーションを適用するには、[適用] または [作成して適用] をクリックし、選択した内容を確認します。90 日以内に変更したい場合は、IAM Recommender ログを使用して選択を元に戻してください。

    レコメンデーションを閉じるには、[閉じる] をクリックして選択した内容を確認します。レコメンデーションが有効である限りは、非表示にしたレコメンデーションを復元できます。

  7. 前の手順を繰り返し、すべてのレコメンデーションを確認します。

gcloud コマンド

レコメンデーションを表示するには、gcloud recommender recommendations list コマンドを実行します。

gcloud recommender recommendations list \
    --location=global \
    --recommender=google.iam.policy.Recommender \
    --project=project-id \
    --format=format

次の値を置き換えてください。

  • project-id: project-123 などのプロジェクトの識別子。
  • format: レスポンスの形式。json または yaml を使用してください。

レスポンスは次の例のようになります。この例では、サービス アカウントは過去 90 日間に Compute Admin ロール(roles/compute.admin)の権限を使用していません。そのため、IAM Recommender により、次のロールを取り消すことがレコメンドされます。

[
  {
    "content": {
      "operationGroups": [
        {
          "operations": [
            {
              "action": "remove",
              "path": "/iamPolicy/bindings/*/members/*",
              "pathFilter": {
                "/iamPolicy/bindings/*/condition/expression": "",
                "/iamPolicy/bindings/*/members/*": "serviceAccount:id-1234567890@example-project.iam.gserviceaccount.com",
                "/iamPolicy/bindings/*/role": "roles/compute.admin"
              },
              "resource": "//cloudresourcemanager.googleapis.com/projects/example-project",
              "resourceType": "cloudresourcemanager.googleapis.com/Project"
            }
          ]
        }
      ]
    },
    "description": "This role has not been used during the observation window.",
    "recommenderSubtype": "REMOVE_ROLE",
    "etag": "\"770237e2c0decf40\"",
    "lastRefreshTime": "2020-01-09T06:06:17Z",
    "name": "projects/example-project/locations/global/recommenders/google.iam.policy.Recommender/recommendations/fb927dc1-9695-4436-0000-f0f285007c0f",
    "primaryImpact": {
      "category": "SECURITY",
        "securityProjection": {
          "revokedIamPermissionsCount": 708
        }
    },
    "stateInfo": {
      "state": "ACTIVE"
    }
  }
]

レコメンデーションを慎重に確認し、それによってメンバーの Google Cloud リソースへのアクセスがどのように変化するかを見極めてください。

レコメンデーションを適用するには、次の手順を行います。

  1. gcloud recommender recommendations mark-claimed コマンドを使用して、レコメンデーションの状態を CLAIMED, に変更します。これにより、レコメンデーションを適用している間は変更できなくなります。

    gcloud recommender recommendations mark-claimed \
        recommendation-id \
        --location=global \
        --recommender=google.iam.policy.Recommender \
        --project=project-id \
        --format=format \
        --etag=etag \
        --state-metadata=state-metadata
    

    次の値を置き換えてください。

    • recommendation-id: レコメンデーションの一意の識別子。この値は、レコメンデーションの name フィールドの最後に表示されます。上記の例では、ID は fb927dc1-9695-4436-0000-f0f285007c0f です。
    • project-id: プロジェクトの識別子(project-123 など)。
    • format: レスポンスの形式。json または yaml を使用してください。
    • etag: レコメンデーションの etag フィールドの値("dd0686e7136a4cbb" など)。この値には引用符を含めることができます。
    • state-metadata: 省略可。レコメンデーションに関する任意のメタデータを含むカンマで区切られた Key-Value ペア。たとえば、--state-metadata=reviewedBy=alice,priority=high です。メタデータにより、レコメンデーションの stateInfo.stateMetadata フィールドが置き換わります。

    コマンドが成功した場合、レスポンスは次の例のように CLAIMED ステータスにレコメンデーションを表示します。この例では、わかりやすくするためにほとんどのフィールドを省略しています。

    [
      {
        "description": "This role has not been used during the observation window.",
        "recommenderSubtype": "REMOVE_ROLE",
        "etag": "\"df7308cca9719dcc\"",
        "name": "projects/example-project/locations/global/recommenders/google.iam.policy.Recommender/recommendations/fb927dc1-9695-4436-0000-f0f285007c0f",
        "stateInfo": {
          "state": "CLAIMED",
          "stateMetadata": {
            "reviewedBy": "alice",
            "priority": "high"
          }
        }
      }
    ]

  2. プロジェクトの IAM ポリシーを取得して、レコメンデーションが反映されるようにポリシーを変更します。

  3. レコメンデーションを適用できた場合はレコメンデーションのステータスを SUCCEEDED に更新し、レコメンデーションを適用できない場合は FAILED に更新します。

    gcloud recommender recommendations command \
        recommendation-id \
        --location=global \
        --recommender=google.iam.policy.Recommender \
        --project=project-id \
        --format=format \
        --etag=etag \
        --state-metadata=state-metadata
    

    次の値を置き換えてください。

    • command: レコメンデーションを適用できた場合は mark-succeeded を使用し、レコメンデーションを適用できなかった場合は mark-failed を使用します。
    • recommendation-id: レコメンデーションの一意の識別子。この値は、レコメンデーションの name フィールドの最後に表示されます。上記の例では、ID は fb927dc1-9695-4436-0000-f0f285007c0f です。
    • project-id: プロジェクトの識別子(project-123 など)。
    • format: レスポンスの形式。json または yaml を使用してください。
    • etag: レコメンデーションの etag フィールドの値("dd0686e7136a4cbb" など)。この値には引用符を含めることができます。
    • state-metadata: 省略可。レコメンデーションに関する任意のメタデータを含むカンマで区切られた Key-Value ペア。たとえば、--state-metadata=reviewedBy=alice,priority=high です。メタデータにより、レコメンデーションの stateInfo.stateMetadata フィールドが置き換わります。

    たとえば、レコメンデーションを「完了」に設定した場合、レスポンスにより SUCCEEDED ステータスにレコメンデーションが表示されます。この例では、わかりやすくするためにほとんどのフィールドを省略しています。

    [
      {
        "description": "This role has not been used during the observation window.",
        "recommenderSubtype": "REMOVE_ROLE",
        "etag": "\"dd0686e7136a4cbb\"",
        "name": "projects/example-project/locations/global/recommenders/google.iam.policy.Recommender/recommendations/fb927dc1-9695-4436-0000-f0f285007c0f",
        "stateInfo": {
          "state": "SUCCEEDED",
          "stateMetadata": {
            "reviewedBy": "alice",
            "priority": "high"
          }
        }
      }
    ]

REST API

レコメンデーションを確認するには、curl ツールを使用して REST API を呼び出します。project-id を、実際のプロジェクト ID に置き換えてください。

curl -H "Authorization: Bearer "$(gcloud auth print-access-token) \
    "https://recommender.googleapis.com/v1/projects/project-id/locations/global/recommenders/google.iam.policy.Recommender/recommendations"

レスポンスは次の例のようになります。この例では、サービス アカウントは過去 90 日間に Compute Admin ロール(roles/compute.admin)の権限を使用していません。そのため、IAM Recommender により、次のロールを取り消すことがレコメンドされます。

[
  {
    "content": {
      "operationGroups": [
        {
          "operations": [
            {
              "action": "remove",
              "path": "/iamPolicy/bindings/*/members/*",
              "pathFilter": {
                "/iamPolicy/bindings/*/condition/expression": "",
                "/iamPolicy/bindings/*/members/*": "serviceAccount:id-1234567890@example-project.iam.gserviceaccount.com",
                "/iamPolicy/bindings/*/role": "roles/compute.admin"
              },
              "resource": "//cloudresourcemanager.googleapis.com/projects/example-project",
              "resourceType": "cloudresourcemanager.googleapis.com/Project"
            }
          ]
        }
      ]
    },
    "description": "This role has not been used during the observation window.",
    "recommenderSubtype": "REMOVE_ROLE",
    "etag": "\"770237e2c0decf40\"",
    "lastRefreshTime": "2020-01-09T06:06:17Z",
    "name": "projects/example-project/locations/global/recommenders/google.iam.policy.Recommender/recommendations/fb927dc1-9695-4436-0000-f0f285007c0f",
    "primaryImpact": {
      "category": "SECURITY",
        "securityProjection": {
          "revokedIamPermissionsCount": 708
        }
    },
    "stateInfo": {
      "state": "ACTIVE"
    }
  }
]

レコメンデーションを慎重に確認し、それによってメンバーの Google Cloud リソースへのアクセスがどのように変化するかを見極めてください。

レコメンデーションを適用するには、次の手順を行います。

  1. 次のコマンドを使用して、レコメンデーションの状態を CLAIMED, に変更します。これにより、レコメンデーションを適用している間は変更できなくなります。

    curl -X POST \
        -H "Content-Type: application/json" \
        -H "Authorization: Bearer $(gcloud auth print-access-token)" \
        -H "X-Goog-User-Project: project-id" \
        --data-binary @- \
        "https://recommender.googleapis.com/v1/projects/project-id/locations/global/recommenders/google.iam.policy.Recommender/recommendations/recommendation-id:markClaimed" \
    << EOM
    {
      "etag": "etag",
      "stateMetadata": state-metadata
    }
    EOM
    

    次のすべての値の発生数を置換します。

    • recommendation-id: レコメンデーションの一意の識別子。この値は、レコメンデーションの name フィールドの最後に表示されます。上記の例では、ID は fb927dc1-9695-4436-0000-f0f285007c0f です。
    • project-id: プロジェクトの識別子(project-123 など)。
    • format: レスポンスの形式。json または yaml を使用してください。
    • etag: レコメンデーションの etag フィールドの値("dd0686e7136a4cbb" など)。引用符をエスケープするには、バックスラッシュを使用します。
    • state-metadata: 省略可。レコメンデーションに関する任意のメタデータと Key-Value ペアを含むオブジェクト。たとえば、{"reviewedBy": "alice", "priority": "high"} です。メタデータにより、レコメンデーションの stateInfo.stateMetadata フィールドが置き換わります。

    コマンドが成功した場合、レスポンスは次の例のように CLAIMED ステータスにレコメンデーションを表示します。この例では、わかりやすくするためにほとんどのフィールドを省略しています。

    [
      {
        "description": "This role has not been used during the observation window.",
        "recommenderSubtype": "REMOVE_ROLE",
        "etag": "\"df7308cca9719dcc\"",
        "name": "projects/example-project/locations/global/recommenders/google.iam.policy.Recommender/recommendations/fb927dc1-9695-4436-0000-f0f285007c0f",
        "stateInfo": {
          "state": "CLAIMED",
          "stateMetadata": {
            "reviewedBy": "alice",
            "priority": "high"
          }
        }
      }
    ]

  2. プロジェクトの IAM ポリシーを取得して、レコメンデーションが反映されるようにポリシーを変更します。

  3. レコメンデーションを適用できた場合はレコメンデーションのステータスを SUCCEEDED に更新し、レコメンデーションを適用できない場合は FAILED に更新します。

    curl -X POST \
        -H "Content-Type: application/json" \
        -H "Authorization: Bearer $(gcloud auth print-access-token)" \
        -H "X-Goog-User-Project: project-id" \
        --data-binary @- \
        "https://recommender.googleapis.com/v1/projects/project-id/locations/global/recommenders/google.iam.policy.Recommender/recommendations/recommendation-id:command" \
    << EOM
    {
      "etag": "etag",
      "stateMetadata": state-metadata
    }
    EOM
    

    次のすべての値の発生数を置換します。

    • command: レコメンデーションを適用できた場合は markSucceeded を使用し、レコメンデーションを適用できなかった場合は markFailed を使用します。
    • recommendation-id: レコメンデーションの一意の識別子。この値は、レコメンデーションの name フィールドの最後に表示されます。上記の例では、ID は fb927dc1-9695-4436-0000-f0f285007c0f です。
    • project-id: プロジェクトの識別子(project-123 など)。
    • format: レスポンスの形式。json または yaml を使用してください。
    • etag: レコメンデーションの etag フィールドの値("dd0686e7136a4cbb" など)。引用符をエスケープするには、バックスラッシュを使用します。
    • state-metadata: 省略可。レコメンデーションに関する任意のメタデータと Key-Value ペアを含むオブジェクト。たとえば、{"reviewedBy": "alice", "priority": "high"} です。メタデータにより、レコメンデーションの stateInfo.stateMetadata フィールドが置き換わります。

    たとえば、レコメンデーションを「完了」に設定した場合、レスポンスにより SUCCEEDED ステータスにレコメンデーションが表示されます。この例では、わかりやすくするためにほとんどのフィールドを省略しています。

    [
      {
        "description": "This role has not been used during the observation window.",
        "recommenderSubtype": "REMOVE_ROLE",
        "etag": "\"dd0686e7136a4cbb\"",
        "name": "projects/example-project/locations/global/recommenders/google.iam.policy.Recommender/recommendations/fb927dc1-9695-4436-0000-f0f285007c0f",
        "stateInfo": {
          "state": "SUCCEEDED",
          "stateMetadata": {
            "reviewedBy": "alice",
            "priority": "high"
          }
        }
      }
    ]

変更を表示、元に戻す、復元する

レコメンデーションを適用または拒否すると、その操作がレコメンデーション ログに表示されます。提案のログを表示するには、次の手順に従います。

  1. Cloud Console で [IAM] ページに移動します。

    IAM ページに移動

  2. 画面上部の [推奨事項ログ] をクリックします。

    Cloud Console に、IAM の推奨事項に対する以前のアクションの一覧が表示されます。

  3. レコメンデーションの詳細を表示するには、 展開矢印をクリックします。

    Cloud Console には、アクションを実行したメンバーを含む、実行されたアクションの詳細が表示されます。

  4. (任意)必要に応じて、レコメンデーションの変更の取り消しや、レコメンデーションを復元して、レコメンデーションを元に戻すことができます。

    以前に適用したレコメンデーションの変更を元に戻すには、[元に戻す] をクリックします。Cloud Console は、メンバーのロールへの変更を元に戻します。Cloud Console にレコメンデーションが表示されなくなります。

    閉じたレコメンデーションを復元するには、[復元] をクリックします。レコメンデーションは、Cloud Console の IAM ページに表示されます。ロールや権限は変更されません。

次のステップ