Asset Insights の使用

このトピックでは、Asset Insights を使用してアセット構成内の潜在的なリスクを検出し、セキュリティ体制を強化する方法について説明します。

概要

Cloud Asset Insights は、組織のリソースに関連付けられた IAM ポリシーに基づいて分析情報を生成します。これは Recommender サービスの一部であり、google.cloudasset.asset.Insight 分析情報タイプとして生成されます。分析情報とは、適切なアクションを決定するために詳細な分析を必要とする、特定の異常を指します。それらの情報は、Cloud Asset Inventory に保存されているデータのスナップショットに基づいて毎日生成されます。

始める前に

Asset Insights を使用するには、まず次の手順を行う必要があります。

  1. Recommender API を有効にします

  2. アカウントに次の権限が付与されていることを確認します。

    • recommender.cloudAssetInsights.get

    • recommender.cloudAssetInsights.list

    • recommender.cloudAssetInsights.update

    これらの権限は、個別に付与することも、次のいずれかのロールを付与することもできます。

    • Cloud Asset Insights 閲覧者(roles/recommender.cloudAssetInsightsViewer)のロール

    • Cloud Asset Insights 管理者(roles/recommender.cloudAssetInsightsAdmin)のロール

アセット分析情報のリクエスト

アセット分析情報をリクエストする最も簡単な方法は、次の手順で分析情報を一覧表示することです。他の種類の分析情報インタラクションについては、Recommender API の分析情報ガイドをご覧ください。

プロジェクト分析情報のリクエスト

プロジェクトの分析情報をリクエストするには、次のいずれかのリクエストを行います。

gcloud

次の gcloud CLI コマンドを実行して、プロジェクト、フォルダ、組織の分析情報を一覧表示します。

プロジェクト

gcloud recommender insights list \
    --project=PROJECT_ID \
    --location=global \
    --insight-type=google.cloudasset.asset.Insight \
    --filter="insightSubtype:SUBTYPE" \
    --format="FORMAT"

次の値を指定します。

  • PROJECT_ID: 分析情報を取得するプロジェクトの ID。

その他のフラグ:

  • --filter: 省略可。結果を分析情報のサブタイプでフィルタします。

  • --format: 省略可。gcloud CLI でサポートされている出力形式。たとえば、分析情報の内容をフラット テーブルとして表示するには、次のようにします。

    gcloud recommender insights list \
        --project=PROJECT_ID \
        --location=global \
        --insight-type=google.cloudasset.asset.Insight \
        --flatten="content.matchedPolicies[].matchedBindings[].matchedMembers[]" \
        --format="table(insightSubtype, name,
            content.matchedPolicies.matchedBindings.matchedMembers,
            content.matchedPolicies.matchedBindings.role,
            content.matchedPolicies.resource)"
    

フォルダ

gcloud recommender insights list \
    --folder=FOLDER_ID \
    --location=global \
    --insight-type=google.cloudasset.asset.Insight \
    --filter="insightSubtype:SUBTYPE" \
    --format="FORMAT"

次の値を指定します。

  • FOLDER_ID: 分析情報を取得するフォルダの ID。

    Google Cloud フォルダ ID を確認する方法

    コンソール

    Google Cloud フォルダ ID を確認するには、次の手順を行います。

    1. Google Cloud コンソールに移動します。

      Google Cloud コンソールに移動

    2. メニューバーの切り替えボックスをクリックします。
    3. [選択元] ボックスをクリックして、組織を選択します。
    4. フォルダ名を検索します。フォルダ ID がフォルダ名の横に表示されます。

    gcloud CLI

    組織レベルの Google Cloud フォルダ ID を取得するには、次のコマンドを使用します。

    gcloud resource-manager folders list \
        --organization=$(gcloud organizations describe ORGANIZATION_NAME \
          --format="value(name.segment(1))") \
        --filter='"DISPLAY_NAME":"TOP_LEVEL_FOLDER_NAME"' \
        --format="value(ID)"

    ここで、TOP_LEVEL_FOLDER_NAME は文字列の完全一致または部分一致です。--format オプションを削除すると、検出されたフォルダに関する詳細情報が表示されます。

    別のフォルダ内のフォルダの ID を取得するには、以下のとおりサブフォルダを一覧表示します。

    gcloud resource-manager folders list --folder=FOLDER_ID

その他のフラグ:

  • --filter: 省略可。結果を分析情報のサブタイプでフィルタします。

  • --format: 省略可。gcloud CLI でサポートされている出力形式。たとえば、分析情報の内容をフラット テーブルとして表示するには、次のようにします。

    gcloud recommender insights list \
        --folder=FOLDER_ID \
        --location=global \
        --insight-type=google.cloudasset.asset.Insight \
        --flatten="content.matchedPolicies[].matchedBindings[].matchedMembers[]" \
        --format="table(insightSubtype, name,
            content.matchedPolicies.matchedBindings.matchedMembers,
            content.matchedPolicies.matchedBindings.role,
            content.matchedPolicies.resource)"
    

組織

gcloud recommender insights list \
    --organization=ORGANIZATION_ID \
    --location=global \
    --insight-type=google.cloudasset.asset.Insight \
    --filter="insightSubtype:SUBTYPE" \
    --format="FORMAT"

次の値を指定します。

  • ORGANIZATION_ID: 分析情報を取得する組織の ID。

    Google Cloud 組織 ID を確認する方法

    コンソール

    Google Cloud 組織 ID を確認するには、次の手順を行います。

    1. Google Cloud コンソールに移動します。

      Google Cloud コンソールに移動

    2. メニューバーの切り替えボックスをクリックします。
    3. [選択元] ボックスをクリックして、組織を選択します。
    4. [すべて] タブをクリックします。 組織 ID が組織名の横に表示されます。

    gcloud CLI

    Google Cloud 組織 ID を取得するには、次のコマンドを使用します。

    gcloud organizations describe ORGANIZATION_NAME --format="value(name.segment(1))"

その他のフラグ:

  • --filter: 省略可。結果を分析情報のサブタイプでフィルタします。

  • --format: 省略可。gcloud CLI でサポートされている出力形式。たとえば、分析情報の内容をフラット テーブルとして表示するには、次のようにします。

    gcloud recommender insights list \
        --organization=ORGANIZATION_ID \
        --location=global \
        --insight-type=google.cloudasset.asset.Insight \
        --flatten="content.matchedPolicies[].matchedBindings[].matchedMembers[]" \
        --format="table(insightSubtype, name,
            content.matchedPolicies.matchedBindings.matchedMembers,
            content.matchedPolicies.matchedBindings.role,
            content.matchedPolicies.resource)"
    

REST

次の curl コマンドを実行して、プロジェクト、フォルダ、組織の分析情報を一覧表示します。

curl -X GET \
     -H "Authorization: Bearer $(gcloud auth print-access-token)"  \
     https://recommender.googleapis.com/v1/SCOPE/locations/global/insightTypes/google.cloudasset.asset.Insight/insights

次の値を指定します。

  • SCOPE: プロジェクト、フォルダ、組織がスコープになります。

    使用できる値は次のとおりです。

    • projects/PROJECT_ID

    • projects/PROJECT_NUMBER

      Google Cloud プロジェクト番号を確認する方法

      コンソール

      Google Cloud プロジェクト番号を確認するには、次の手順を行います。

      1. Google Cloud コンソールの [ダッシュボード] ページに移動します。

        ダッシュボードに移動

      2. メニューバーの切り替えボックスをクリックします。
      3. [選択元] ボックスで組織を選択し、プロジェクト名を検索します。
      4. プロジェクト名をクリックして、そのプロジェクトに切り替えます。プロジェクト番号が [プロジェクト情報] カードに表示されます。

      gcloud CLI

      Google Cloud プロジェクト番号を取得するには、次のコマンドを使用します。

      gcloud projects describe PROJECT_ID --format="value(projectNumber)"

    • folders/FOLDER_ID

      Google Cloud フォルダ ID を確認する方法

      コンソール

      Google Cloud フォルダ ID を確認するには、次の手順を行います。

      1. Google Cloud コンソールに移動します。

        Google Cloud コンソールに移動

      2. メニューバーの切り替えボックスをクリックします。
      3. [選択元] ボックスをクリックして、組織を選択します。
      4. フォルダ名を検索します。フォルダ ID がフォルダ名の横に表示されます。

      gcloud CLI

      組織レベルの Google Cloud フォルダ ID を取得するには、次のコマンドを使用します。

      gcloud resource-manager folders list \
          --organization=$(gcloud organizations describe ORGANIZATION_NAME \
            --format="value(name.segment(1))") \
          --filter='"DISPLAY_NAME":"TOP_LEVEL_FOLDER_NAME"' \
          --format="value(ID)"

      ここで、TOP_LEVEL_FOLDER_NAME は文字列の完全一致または部分一致です。--format オプションを削除すると、検出されたフォルダに関する詳細情報が表示されます。

      別のフォルダ内のフォルダの ID を取得するには、以下のとおりサブフォルダを一覧表示します。

      gcloud resource-manager folders list --folder=FOLDER_ID

    • organizations/ORGANIZATION_ID

      Google Cloud 組織 ID を確認する方法

      コンソール

      Google Cloud 組織 ID を確認するには、次の手順を行います。

      1. Google Cloud コンソールに移動します。

        Google Cloud コンソールに移動

      2. メニューバーの切り替えボックスをクリックします。
      3. [選択元] ボックスをクリックして、組織を選択します。
      4. [すべて] タブをクリックします。 組織 ID が組織名の横に表示されます。

      gcloud CLI

      Google Cloud 組織 ID を取得するには、次のコマンドを使用します。

      gcloud organizations describe ORGANIZATION_NAME --format="value(name.segment(1))"

分析情報のレスポンスの解釈

Asset Insights には、標準の分析情報の属性に加え、いくつかの特殊なサブタイプとフィールドが存在します。

分析情報のサブタイプ

Asset Insights の個別のサブタイプは 7 種類あります。

  • EXTERNAL_MEMBER: 組織のドメイン外部に存在するドメインに属するユーザーまたはグループを含む IAM ポリシーを検出します。

  • EXTERNAL_POLICY_EDITOR: IAM ポリシーを変更する権限を付与された組織のドメイン外部のユーザーまたはグループを含む IAM ポリシーを検出します。

  • EXTERNAL_CLOUD_STORAGE_OBJECT_VIEWER: ストレージ オブジェクト(storage.objects.list または storage.objects.get permission)を取得または一覧表示する権限を付与された、組織のドメイン外部のユーザーまたはグループを含む IAM ポリシーを検出します。

  • EXTERNAL_SERVICE_ACCOUNT_IMPERSONATOR: サービス アカウントになりすます権限が付与されている組織外部のユーザーまたはグループを含む IAM ポリシーを検出します。

  • TERMINATED_MEMBER: 無効化、削除、またはパージされたアカウントを持つユーザーまたはグループを含む IAM ポリシーを検出します。

  • PUBLIC_IAM_POLICY: すべてのユーザーまたはすべての認証済みユーザーを含む IAM ポリシーを検出します。

  • OWNER_TERMINATED_PROJECT: プロジェクトの IAM ポリシーにアクティブなユーザーまたはグループが含まれないプロジェクトを検出します。

その他のコンテンツ フィールド

Asset Insights には、レスポンスの標準フィールドに加え、content フィールドにいくつかの特殊なフィールドが存在します。

  • user: この特定の分析情報のポリシー バインディングのメンバー内で検出された特定のユーザーのメールアドレス。このフィールドは、TERMINATED_MEMBER サブタイプに含まれています。

  • domain: この特定の分析情報のポリシー バインディングのメンバー内で検出された特定のドメイン。このフィールドは、EXTERNAL_MEMBEREXTERNAL_POLICY_EDITOREXTERNAL_CLOUD_STORAGE_OBJECT_VIEWEREXTERNAL_SERVICE_ACCOUNT_IMPERSONATOR のサブタイプに含まれています。

  • assetName: この特定の分析情報でアクセスが検出されたアセット名。このフィールドは、OWNER_TERMINATED_PROJECTPUBLIC_IAM_POLICY のサブタイプに含まれています。

  • policyCount: この特定の分析情報で検出された一致するメンバーの個別の IAM ポリシーの合計数。このフィールドは、すべての Asset Insights のサブタイプに含まれます。

  • matchedPolicies: 検出された分析情報に一致する IAM ポリシーのサンプリング。一致ポリシーには、検出された分析情報に一致するバインディングとバインディング メンバーのサブセットのみが含まれます。このフィールドは、すべての Asset Insights のサブタイプに含まれます。

  • policySearchQuery: 関連するすべてのポリシーをリアルタイムで取得するために Cloud Asset Inventory の IAM ポリシー検索 API で使用できるクエリ。

レスポンスの例

次のコード スニペットは、サンプル レスポンスの形式を示します。

{
   "name": "organizations/1234567/locations/global/insightTypes/google.cloudasset.asset.Insight/insights/0ab35ae7-afa8-42a3-a173-92da8771a489",
   "description": "Domain example.com detected in 1 IAM policies",
   "content": {
      "domain": "example.com",
      "policyCount": 1,
      "policySearchQuery": "policy: example.com",
      "matchedPolicies" :[
         {
            "resource" :"//cloudresourcemanager.googleapis.com/projects/5678910",
            "project" :"projects/5678910",
            "matchedBindings" :[
               {
                  "role" :"roles/viewer",
                  "matchedMembers" :[
                     "user:example@example.com"
                  ]
               }
            ]
         }
      ]
   },
   "lastRefreshTime": "2020-12-04T06:59:04Z",
   "observationPeriod": "0s",
   "stateInfo": {
      "state": "ACTIVE"
   },
   "category": "SECURITY",
   "targetResources": [
      "//cloudresourcemanager.googleapis.com/organizations/1234567"
   ],
   "insightSubtype": "EXTERNAL_MEMBER",
   "etag": "\"00000000000\"",
   "initialRefreshTime": "2020-12-01T06:58:03Z"
}

制限事項

  • これらの分析情報では、グループのメンバーシップは知見の一部としては考慮されず、一致する脆弱性をすべて網羅したものではありません。

  • 個々の分析情報には、各ポリシー 100 個を上限とする、一致 IAM ポリシーのサンプリングが含まれます。すべての一致ポリシーを取得するには、Cloud Asset Inventory のポリシー検索を呼び出します。

  • アセット分析情報では、分析情報の生成を目的とするサービス アカウントは考慮されません。