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. Google Cloud アカウントにログインします。Google Cloud を初めて使用する場合は、アカウントを作成して、実際のシナリオでの Google プロダクトのパフォーマンスを評価してください。新規のお客様には、ワークロードの実行、テスト、デプロイができる無料クレジット $300 分を差し上げます。
  2. Google Cloud Console の [プロジェクト セレクタ] ページで、Google Cloud プロジェクトを選択または作成します。

    プロジェクト セレクタに移動

  3. 必要な API を有効にします。

    API を有効にする

  4. Google Cloud CLI をインストールします。
  5. gcloud CLI を初期化するには:

    gcloud init
  6. Google Cloud Console の [プロジェクト セレクタ] ページで、Google Cloud プロジェクトを選択または作成します。

    プロジェクト セレクタに移動

  7. 必要な API を有効にします。

    API を有効にする

  8. Google Cloud CLI をインストールします。
  9. gcloud CLI を初期化するには:

    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 プロジェクト番号を確認する方法

      コンソール

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

  • 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 プロジェクト番号を確認する方法

      コンソール

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

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

      コンソール

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

      コンソール

      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. メタデータをエクスポートしたファイルを開きます。

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

次のステップ