アセット分析情報でセキュリティ ポスチャーを改善する

Cloud Asset Inventory の分析情報は、アセット構成の潜在的なリスクを検出し、セキュリティ ポスチャーを強化するのに役立ちます。これは Recommender サービスの一部であり、google.cloudasset.asset.Insight 分析情報タイプとして生成されます。

分析情報とは、適切なアクションを決定するために詳細な分析を必要とする、特定の異常を指します。それらの情報は、Cloud Asset Inventory に保存されているデータのスナップショットに基づいて毎日生成されます。

Cloud Asset Inventory が提供する分析情報は、組織のリソースに関連付けられた IAM ポリシーに基づいています。

始める前に

アセット分析情報を使用するには、まず次の手順を行う必要があります。

  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)のロール

制限事項

  • これらの分析情報では、グループのメンバーシップやサービス アカウントが検出結果の一部としては考慮されず、このリストが一致する脆弱性のすべてを網羅しているわけではありません。

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

アセット分析情報をリクエストする

アセット分析情報をリクエストする最も簡単な方法は、次の手順で分析情報を一覧表示することです。他の種類の分析情報の操作については、API の使用 - 分析情報をご覧ください。

gcloud

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

次の値を指定します。

  • SCOPE: 次のいずれかの値を使用できます。

    • project=PROJECT_ID。ここで、PROJECT_ID は分析情報を取得するプロジェクトの ID です。
    • folder=FOLDER_ID。ここで、FOLDER_ID は分析情報を取得するフォルダの ID です。

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

      Google Cloud コンソール

      Google Cloud フォルダの ID を確認する手順は次のとおりです。

      1. Google Cloud Console に移動します。

        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 を返しません。これを行うには、最上位フォルダの ID を使用して次のコマンドを実行します。

      gcloud resource-manager folders list --folder=FOLDER_ID
    • organization=ORGANIZATION_IDORGANIZATION_ID は分析情報を取得する組織の ID です。

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

      Google Cloud コンソール

      Google Cloud 組織の ID を確認する手順は次のとおりです。

      1. Google Cloud Console に移動します。

        Google Cloud コンソールに移動

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

      gcloud CLI

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

      gcloud organizations describe ORGANIZATION_NAME --format="value(name.segment(1))"
  • BILLING_PROJECT_ID: 省略可。 課金と割り当てを管理する権限を持つ、デフォルトの Cloud Asset Inventory サービス エージェントが存在するプロジェクト ID。課金プロジェクトの設定の詳細

  • SUBTYPE: アセット分析情報のサブタイプ。次のいずれかの値になります。

    • EXTERNAL_MEMBER: 組織のドメイン外部に存在するドメインに属するユーザーまたはグループを含む IAM ポリシーを検出します。
    • EXTERNAL_POLICY_EDITOR: IAM ポリシーを変更する権限を付与された組織のドメイン外部のユーザーまたはグループを含む IAM ポリシーを検出します。
    • EXTERNAL_CLOUD_STORAGE_OBJECT_VIEWER: ストレージ オブジェクト(storage.objects.list または storage.objects.get 権限)を取得または一覧表示する権限を付与された、組織のドメイン外部のユーザーまたはグループを含む IAM ポリシーを検出します。
    • EXTERNAL_SERVICE_ACCOUNT_IMPERSONATOR: サービス アカウントになりすます権限が付与されている組織外部のユーザーまたはグループを含む IAM ポリシーを検出します。
    • TERMINATED_MEMBER: 無効化、削除、またはパージされたアカウントを持つユーザーまたはグループを含む IAM ポリシーを検出します。
    • PUBLIC_IAM_POLICY: すべてのユーザーまたはすべての認証済みユーザーを含む IAM ポリシーを検出します。
    • OWNER_TERMINATED_PROJECT: プロジェクトの IAM ポリシーにアクティブなユーザーまたはグループが含まれないプロジェクトを検出します。
  • 指定しない場合は、すべてのサブタイプが返されます。

すべてのオプションについては、gcloud CLI リファレンスをご覧ください。

次のコマンドを実行して、my-project プロジェクトの分析情報を一覧表示します。

gcloud recommender insights list \
    --project=my-project \
    --location=global \
    --insight-type=google.cloudasset.asset.Insight

レスポンスの例

INSIGHT_ID: 00000000-0000-0000-0000-000000000000
CATEGORY: SECURITY
INSIGHT_STATE: ACTIVE
LAST_REFRESH_TIME: 2024-01-30T00:00:00Z
SEVERITY: LOW
INSIGHT_SUBTYPE: EXTERNAL_MEMBER
DESCRIPTION: Domain example.com detected in 1 IAM policies

REST

HTTP メソッドと URL:

GET https://recommender.googleapis.com/v1/SCOPE_PATH/locations/global/insightTypes/google.cloudasset.asset.Insight/insights

ヘッダー:

X-Goog-User-Project: BILLING_PROJECT_ID

次の値を指定します。

  • SCOPE_PATH: 次のいずれかの値を使用できます。

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

    • projects/PROJECT_ID。ここで、PROJECT_ID は分析情報を取得するプロジェクトの ID です。
    • projects/PROJECT_NUMBER。ここで、PROJECT_NUMBER は分析情報を取得するプロジェクトの数です。

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

      Google Cloud コンソール

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

      1. Google Cloud コンソールの [ようこそ] ページに移動します。

        [ようこそ] に移動

      2. メニューバーの切り替えボックスをクリックします。
      3. リストボックスから組織を選択し、プロジェクト名を検索します。プロジェクト名、プロジェクト番号、プロジェクト ID は [ようこそ] の見出しの近くに表示されます。

        最大 4,000 個のリソースが表示されます。目的のプロジェクトが表示されない場合は、[リソースの管理] ページに移動し、そのプロジェクトの名前を使用してリストをフィルタします。

      gcloud CLI

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

      gcloud projects describe PROJECT_ID --format="value(projectNumber)"
    • folders/FOLDER_ID。ここで、FOLDER_ID は分析情報を取得するフォルダの ID です。

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

      Google Cloud コンソール

      Google Cloud フォルダの ID を確認する手順は次のとおりです。

      1. Google Cloud Console に移動します。

        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 を返しません。これを行うには、最上位フォルダの ID を使用して次のコマンドを実行します。

      gcloud resource-manager folders list --folder=FOLDER_ID
    • organizations/ORGANIZATION_IDORGANIZATION_ID は分析情報を取得する組織の ID です。

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

      Google Cloud コンソール

      Google Cloud 組織の ID を確認する手順は次のとおりです。

      1. Google Cloud Console に移動します。

        Google Cloud コンソールに移動

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

      gcloud CLI

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

      gcloud organizations describe ORGANIZATION_NAME --format="value(name.segment(1))"
  • BILLING_PROJECT_ID: 課金と割り当てを管理する権限を持つ、デフォルトの Cloud Asset Inventory サービス エージェントが存在するプロジェクト ID。課金プロジェクトの設定の詳細

コマンドの例

次のいずれかのコマンドを実行して、my-project プロジェクトの分析情報を一覧表示します。

curl(Linux、macOS、Cloud Shell)

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

PowerShell(Windows)

$cred = gcloud auth print-access-token

$headers = @{ 
  "X-Goog-User-Project" = "BILLING_PROJECT_ID";
  "Authorization" = "Bearer $cred"
}


Invoke-WebRequest `
  -Method GET `
  -Headers $headers `
  -Uri "https://recommender.googleapis.com/v1/projects/my-project/locations/global/insightTypes/google.cloudasset.asset.Insight/insights" | Select-Object -Expand Content

レスポンスの例

{
   "name": "organizations/000000000000/locations/global/insightTypes/google.cloudasset.asset.Insight/insights/00000000-0000-0000-0000-000000000000",
   "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/000000000000",
            "project" :"projects/000000000000",
            "matchedBindings" :[
               {
                  "role" :"roles/viewer",
                  "matchedMembers" :[
                     "user:example@example.com"
                  ]
               }
            ]
         }
      ]
   },
   "lastRefreshTime": "2024-01-30T00:00:00Z",
   "observationPeriod": "0s",
   "stateInfo": {
      "state": "ACTIVE"
   },
   "category": "SECURITY",
   "targetResources": [
      "//cloudresourcemanager.googleapis.com/organizations/000000000000"
   ],
   "insightSubtype": "EXTERNAL_MEMBER",
   "etag": "\"00000000000\"",
   "initialRefreshTime": "2024-01-30T00:00:00Z"
}

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

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

分析情報のサブタイプ

アセット分析情報のサブタイプは次のとおりです。

  • 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 ポリシーにアクティブなユーザーまたはグループが含まれないプロジェクトを検出します。

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

アセット分析情報には、レスポンスの標準フィールドに加え、content フィールドにいくつかの特殊なフィールドが存在します。

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

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

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

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

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

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