Cloud Asset Inventory を使用してアセットのメタデータをエクスポートする

このクイックスタートでは、Cloud Asset Inventory と Google Cloud CLIgcloud asset コマンドを使用して、アセット メタデータをエクスポートする方法を説明します。

始める前に

Cloud Asset Inventory の使用を開始する前に、Cloud Asset Inventory API と Google Cloud CLI を有効にして権限を割り当てる必要があります。Google Cloud CLI は Cloud Asset Inventory や他の Google Cloud サービスと相互に作用します。詳しくは gcloud CLI をご覧ください。

Cloud Asset Inventory API と Google Cloud CLI の有効化

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Enable the required API.

    Enable the API

  4. Install the Google Cloud CLI.
  5. To initialize the gcloud CLI, run the following command:

    gcloud init
  6. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  7. Enable the required API.

    Enable the API

  8. Install the Google Cloud CLI.
  9. To initialize the gcloud CLI, run the following command:

    gcloud init

権限の構成

Cloud Asset Inventory API を呼び出すには、まず権限の構成をする必要があります。

リソースの検索

リソース メタデータを検索するには、以下のコマンドを実行します。

gcloud asset search-all-resources \
    --scope=SCOPE \
    --query="QUERY" \
    --asset-types=ASSET_TYPE_1,ASSET_TYPE_2,... \
    --order-by="ORDER_BY" \
    --read-mask="READ_MASK"

次の値を指定します。

  • SCOPE: 省略可。プロジェクト、フォルダ、組織がスコープになります。検索の対象は、このスコープ内の Google Cloud リソースに制限されます。呼び出し元には、目的のスコープに対する cloudasset.assets.searchAllResources 権限を付与しておく必要があります。権限を指定しない場合は、構成されたプロジェクト プロパティが使用されます。

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

    • projects/PROJECT_ID

    • projects/PROJECT_NUMBER

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

      Console

      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 を確認する方法

      Console

      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 を確認する方法

      Console

      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))"

  • QUERY: 省略可。クエリ ステートメント。詳細については、クエリ構文をご覧ください。 指定しない場合や空の場合は、Cloud Asset Inventory は指定された scope 内のすべてのリソースを検索します。

    例:

    • name:Important: 名前に Important という単語が含まれている Google Cloud リソースを検索します。

    • name=Important: 名前が Important である Google Cloud リソースを検索します。

    • displayName:Impor*: 表示名に Impor という接頭辞が含まれる Google Cloud リソースを検索します。

    • location:us-west*: ロケーションに uswest の両方が接頭辞として含まれている Google Cloud リソースを検索します。

    • labels:prod: ラベルに prod というキーまたは値が含まれる Google Cloud リソースを検索します。

    • labels.env:prod: ラベルが env で、その値が「prod」である Google Cloud リソースを検索します。

    • labels.env:*: ラベルが env の Google Cloud リソースを検索します。

    • kmsKeys:key: 名前に key という単語が含まれる、顧客管理の暗号鍵によって暗号化された Google Cloud リソースを検索します。

    • sccSecurityMarks.key=value: キーが key で値が value のセキュリティ マークのペアが付加された Google Cloud リソースを検索します。

    • sccSecurityMarks.key:*: キーが key であるペアのセキュリティ マークが付加された Google Cloud リソースを検索します。

    • state:ACTIVE: 状態に ACTIVE という単語が含まれる Google Cloud リソースを検索します。

    • NOT state:ACTIVE: 状態に ACTIVE という単語が含まれていない Google Cloud リソースを検索します。

    • createTime<1609459200createTime<2021-01-01createTime<"2021-01-01T00:00:00": 2021-01-01 00:00:00 UTC より前に作成された Google Cloud リソースを検索します。1609459200 は、2021-01-01 00:00:00 UTC のエポック タイムスタンプです(秒単位)。

    • updateTime>1609459200updateTime>2021-01-01updateTime>"2021-01-01T00:00:00": 2021-01-01 00:00:00 UTC より後に更新された Google Cloud リソースを検索します。1609459200 は、2021-01-01 00:00:00 UTC のエポック タイムスタンプです(秒単位)。

    • project:12345: 番号が 12345 の Google Cloud プロジェクトに属する Google Cloud リソースを検索します。プロジェクト ID はサポートされていません。

    • folders:(123 or 456): 番号が 123 または 456 の Google Cloud フォルダの子孫である Google Cloud リソースを検索します。

    • organization:123: 番号が 123 の Google Cloud 組織の子孫である Google Cloud リソースを検索します。

    • parentFullResourceName:ImportantName: 親の名前に ImportantName が含まれている Google Cloud リソースを検索します。

    • parentAssetType:Project: 親のアセットタイプに Project が含まれている Google Cloud リソースを検索します。

    • Important: 検索可能ないずれかのフィールドに Important という単語を含む Google Cloud リソースを検索します。

    • Impor*: 検索可能ないずれかのフィールドに Impor という単語を含む Google Cloud リソースを検索します。

    • Important location:(us-west1 OR global): 検索可能ないずれかのフィールドに「Important」という単語が含まれ、さらに us-west1 リージョンまたは global ロケーションに存在する Google Cloud リソースを検索します。

  • ASSET_TYPE: 省略可。検索可能なアセットタイプのカンマ区切りのリスト。RE2 互換の正規表現がサポートされています。正規表現が、サポートされているアセットタイプと一致しない場合は、INVALID_ARGUMENT エラーが返されます。

  • ORDER_BY: 省略可。結果の並べ替え順序を指定するフィールドのカンマ区切りのリスト。デフォルトの順序は昇順です。降順を適用するには、フィールド名の後に " DESC" を追加します。重複したスペース文字は無視されます(例: "location DESC, name")。レスポンス内の単一のプリミティブ フィールドのみを並べ替えることができます。

    • name

    • assetType

    • project

    • displayName

    • description

    • location

    • createTime

    • updateTime

    • state

    • parentFullResourceName

    • parentAssetType

    繰り返しフィールド(例: networkTagskmsKeys)、マップ フィールド(例: labels)、構造体フィールド(例: additionalAttributes)などの他のフィールドはサポートされていません。

  • READ_MASK: 省略可。結果で返されるフィールドを示すフィールドのカンマ区切りのリスト。指定しない場合は、versionedResources を除くすべてのフィールドが返されます。"*" のみが指定されている場合、すべてのフィールドが返されます。例: "name,location""name,versionedResources""*"

リソースを検索する方法の詳細については、リソースの検索をご覧ください。

IAM ポリシーの検索

Identity and Access Management(IAM)ポリシーを検索するには、次のコマンドを実行します。

gcloud asset search-all-iam-policies \
  --scope=SCOPE \
  --query="QUERY" \
  --asset-types=ASSET_TYPE_1,ASSET_TYPE_2,... \
  --order-by="ORDER_BY"

次の値を指定します。

  • SCOPE: 省略可。プロジェクト、フォルダ、組織がスコープになります。検索は、このスコープ内の IAM リソースに限定されます。呼び出し元には、目的のスコープに対する cloudasset.assets.searchAllIamPolicies 権限を付与しておく必要があります。権限を指定しない場合は、構成されたプロジェクト プロパティが使用されます。

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

    • projects/PROJECT_ID

    • projects/PROJECT_NUMBER

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

      Console

      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 を確認する方法

      Console

      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 を確認する方法

      Console

      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))"

  • QUERY: 省略可。クエリ ステートメント。詳細については、クエリ構文をご覧ください。指定しない場合や空の場合は、Cloud Asset Inventory は指定された scope 内のすべての IAM ポリシーを検索します。クエリ文字列は、プリンシパル、ロール、IAM 条件を含む各 IAM ポリシー バインディングと比較されます。返される IAM ポリシーには、クエリに一致するバインディングのみが含まれます。IAM ポリシーの構造について詳しくは、ポリシーの構造をご覧ください。

    例:

    • policy:amy@gmail.com: ユーザー amy@gmail.com を指定する IAM ポリシー バインディングを検索します。

    • policy:roles/compute.admin: Compute Admin ロールを指定する IAM ポリシー バインディングを検索します。

    • policy:comp*: バインディングにいずれかの単語の接頭辞として comp が含まれる IAM ポリシー バインディングを検索します。

    • policy.role.permissions:storage.buckets.update: storage.buckets.update 権限を含むロールを指定する IAM ポリシー バインディングを検索します。ロールに含まれる権限に対する iam.roles.get アクセス権が呼び出し元にない場合、このロールを指定するポリシー バインディングは検索結果から除外されます。

    • policy.role.permissions:upd*: ロール権限でいずれかの単語の接頭辞として upd が含まれるロールを指定する IAM ポリシー バインディングを検索します。なお、ロールに含まれる権限に対する iam.roles.get アクセス権が呼び出し元にない場合、このロールを指定するポリシー バインディングは検索結果から除外されます。

    • resource:organizations/123456:「organizations/123456」に設定されている IAM ポリシー バインディングを検索します。

    • resource=//cloudresourcemanager.googleapis.com/projects/myproject: myproject という名前のプロジェクトで設定されている IAM ポリシー バインディングを検索します。

    • Important: 検索可能ないずれかのフィールドに Important という単語が含まれる IAM ポリシー バインディングを検索します(含まれている権限を除く)。

    • resource:(instance1 OR instance2) policy:amy: リソース instance1 または instance2 に設定されていて、さらにユーザー amy を指定する IAM ポリシー バインディングを検索します。

    • roles:roles/compute.admin: Compute Admin ロールを指定する IAM ポリシー バインディングを検索します。

    • memberTypes:user: user プリンシパル タイプが含まれる IAM ポリシー バインディングを検索します。

  • ASSET_TYPE: 省略可。IAM ポリシーがアタッチされている、検索可能なアセットタイプのカンマ区切りのリスト。空の場合、Cloud Asset Inventory は検索可能なすべてのアセットタイプにアタッチされている IAM ポリシーを検索します。正規表現がサポートされています。正規表現が、サポートされているアセットタイプと一致しない場合は、INVALID_ARGUMENT エラーが返されます。

  • ORDER_BY: 省略可。結果の並べ替え順序を指定するフィールドのカンマ区切りのリスト。デフォルトの順序は昇順です。降順を適用するには、フィールド名の後に " DESC" を追加します。重複したスペース文字は無視されます(例: "location DESC, name")。レスポンス内の単一のプリミティブ フィールドのみを並べ替えることができます。

    • resource

    • assetType

    • project

    繰り返しフィールド(folders など)や非プリミティブ フィールド(policy など)はサポートされていません。

IAM ポリシーの検索方法については、IAM ポリシーの検索をご覧ください。

Cloud Storage へのアセット スナップショットのエクスポート

Cloud Storage バケット内のファイルに、特定のタイムスタンプにおけるすべてのアセット メタデータをエクスポートするには、次の手順を行います。

  1. まだ作成していない場合は、新しいバケットを作成します。

  2. プロジェクト内のアセット メタデータをエクスポートするには、次のコマンドを実行します。このコマンドは、エクスポートされたスナップショットを gs://BUCKET_NAME/FILENAME のファイルに保存します。

    プロジェクト

    gcloud asset export \
        --project=PROJECT_ID \
        --billing-project=BILLING_PROJECT_ID \
        --content-type=CONTENT_TYPE \
        --snapshot-time="SNAPSHOT_TIME" \
        --output-path="gs://BUCKET_NAME/FILENAME"
    

    次の値を指定します。

    • PROJECT_ID: メタデータをエクスポートするプロジェクトの ID。

    • BILLING_PROJECT_ID: 省略可。Cloud Storage バケットへの書き込み権限がある、デフォルトの Cloud Asset Inventory サービス エージェントが存在するプロジェクト ID。gcloud config set project で課金プロジェクトに切り替えている場合は不要です。詳しくは、課金プロジェクトをご覧ください

    • CONTENT_TYPE: 省略可。エクスポートするアセットのコンテンツ タイプ。コンテンツ タイプが指定されていない場合は、アセット名のみが返されます。詳しくは、コンテンツ タイプをご覧ください

    • SNAPSHOT_TIME: 省略可。アセットのスナップショットを作成したい時刻。この値は、現在の時刻または過去 35 日以内の時刻である必要があります。指定しない場合、現在の時刻にスナップショットが作成されます。時刻形式については、gcloud topic datetimes をご覧ください。

    • BUCKET_NAME: 書き込み先の Cloud Storage バケットの名前。

    • FILENAME: 書き込み先の Cloud Storage バケット内のファイル。

    フォルダ

    gcloud asset export \
        --folder=FOLDER_ID \
        --billing-project=BILLING_PROJECT_ID \
        --content-type=CONTENT_TYPE \
        --snapshot-time="SNAPSHOT_TIME" \
        --output-path="gs://BUCKET_NAME/FILENAME"
    

    次の値を指定します。

    • FOLDER_ID: メタデータをエクスポートするフォルダの ID。

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

      Console

      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

    • BILLING_PROJECT_ID: 省略可。Cloud Storage バケットへの書き込み権限がある、デフォルトの Cloud Asset Inventory サービス エージェントが存在するプロジェクト ID。gcloud config set project で課金プロジェクトに切り替えている場合は不要です。詳しくは、課金プロジェクトをご覧ください

    • CONTENT_TYPE: 省略可。エクスポートするアセットのコンテンツ タイプ。コンテンツ タイプが指定されていない場合は、アセット名のみが返されます。詳しくは、コンテンツ タイプをご覧ください

    • SNAPSHOT_TIME: 省略可。アセットのスナップショットを作成したい時刻。この値は、現在の時刻または過去 35 日以内の時刻である必要があります。指定しない場合、現在の時刻にスナップショットが作成されます。時刻形式については、gcloud topic datetimes をご覧ください。

    • BUCKET_NAME: 書き込み先の Cloud Storage バケットの名前。

    • FILENAME: 書き込み先の Cloud Storage バケット内のファイル。

    組織

    gcloud asset export \
        --organization=ORGANIZATION_ID \
        --billing-project=BILLING_PROJECT_ID \
        --content-type=CONTENT_TYPE \
        --snapshot-time="SNAPSHOT_TIME" \
        --output-path="gs://BUCKET_NAME/FILENAME"
    

    次の値を指定します。

    • ORGANIZATION_ID: メタデータをエクスポートする組織の ID。

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

      Console

      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))"

    • BILLING_PROJECT_ID: 省略可。Cloud Storage バケットへの書き込み権限がある、デフォルトの Cloud Asset Inventory サービス エージェントが存在するプロジェクト ID。gcloud config set project で課金プロジェクトに切り替えている場合は不要です。詳しくは、課金プロジェクトをご覧ください

    • CONTENT_TYPE: 省略可。エクスポートするアセットのコンテンツ タイプ。コンテンツ タイプが指定されていない場合は、アセット名のみが返されます。詳しくは、コンテンツ タイプをご覧ください

    • SNAPSHOT_TIME: 省略可。アセットのスナップショットを作成したい時刻。この値は、現在の時刻または過去 35 日以内の時刻である必要があります。指定しない場合、現在の時刻にスナップショットが作成されます。時刻形式については、gcloud topic datetimes をご覧ください。

    • BUCKET_NAME: 書き込み先の Cloud Storage バケットの名前。

    • FILENAME: 書き込み先の Cloud Storage バケット内のファイル。

  3. (省略可)エクスポートのステータスを確認するには、次のコマンドを実行します。これは、エクスポート コマンドを実行すると、gcloud CLI に表示されます。

    gcloud asset operations describe OPERATION_PATH
    

アセット スナップショットの表示

Cloud Storage にエクスポートした後にアセット スナップショットを表示するには、次の手順を行います。

  1. Google Cloud コンソールで Cloud Storage の [バケット] ページに移動します。

    [バケット] に移動

  2. メタデータをエクスポートしたファイルを開きます。

エクスポート ファイルは、アセットとそのリソース名の一覧を表示します。

次のステップ