Cloud Asset Inventory を使用してアセットのメタデータをエクスポートする
このクイックスタートでは、Cloud Asset Inventory と Google Cloud CLI の gcloud 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 の有効化
- 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.
-
Google Cloud Console の [プロジェクト セレクタ] ページで、Google Cloud プロジェクトを選択または作成します。
-
Enable the required API.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
Google Cloud Console の [プロジェクト セレクタ] ページで、Google Cloud プロジェクトを選択または作成します。
-
Enable the required API.
- Install the Google Cloud CLI.
-
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 プロジェクト番号を確認する方法
コンソール
Google Cloud プロジェクト番号を確認するには、次の手順を行います。
-
Google Cloud コンソールの [ダッシュボード] ページに移動します。
- メニューバーの切り替えボックスをクリックします。
- [選択元] ボックスで組織を選択し、プロジェクト名を検索します。
- プロジェクト名をクリックして、そのプロジェクトに切り替えます。プロジェクト番号が [プロジェクト情報] カードに表示されます。
gcloud CLI
Google Cloud プロジェクト番号を取得するには、次のコマンドを使用します。
gcloud projects describe PROJECT_ID --format="value(projectNumber)"
-
folders/FOLDER_ID
Google Cloud フォルダ ID を確認する方法
コンソール
Google Cloud フォルダ ID を確認するには、次の手順を行います。
-
Google Cloud コンソールに移動します。
- メニューバーの切り替えボックスをクリックします。
- [選択元] ボックスをクリックして、組織を選択します。
- フォルダ名を検索します。フォルダ 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 を確認するには、次の手順を行います。
-
Google Cloud コンソールに移動します。
- メニューバーの切り替えボックスをクリックします。
- [選択元] ボックスをクリックして、組織を選択します。
- [すべて] タブをクリックします。 組織 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*
: ロケーションに接頭辞としてus
とwest
の両方が含まれる 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<1609459200
、createTime<2021-01-01
、createTime<"2021-01-01T00:00:00"
: 2021-01-01 00:00:00 UTC より前に作成された Google Cloud リソースを検索します。1609459200 は、2021-01-01 00:00:00 UTC のエポック タイムスタンプです(秒単位)。updateTime>1609459200
、updateTime>2021-01-01
、updateTime>"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
繰り返しフィールド(例:
networkTags
、kmsKeys
)、マップ フィールド(例: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 プロジェクト番号を確認するには、次の手順を行います。
-
Google Cloud コンソールの [ダッシュボード] ページに移動します。
- メニューバーの切り替えボックスをクリックします。
- [選択元] ボックスで組織を選択し、プロジェクト名を検索します。
- プロジェクト名をクリックして、そのプロジェクトに切り替えます。プロジェクト番号が [プロジェクト情報] カードに表示されます。
gcloud CLI
Google Cloud プロジェクト番号を取得するには、次のコマンドを使用します。
gcloud projects describe PROJECT_ID --format="value(projectNumber)"
-
folders/FOLDER_ID
Google Cloud フォルダ ID を確認する方法
コンソール
Google Cloud フォルダ ID を確認するには、次の手順を行います。
-
Google Cloud コンソールに移動します。
- メニューバーの切り替えボックスをクリックします。
- [選択元] ボックスをクリックして、組織を選択します。
- フォルダ名を検索します。フォルダ 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 を確認するには、次の手順を行います。
-
Google Cloud コンソールに移動します。
- メニューバーの切り替えボックスをクリックします。
- [選択元] ボックスをクリックして、組織を選択します。
- [すべて] タブをクリックします。 組織 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 バケット内のファイルに、特定のタイムスタンプにおけるすべてのアセット メタデータをエクスポートするには、次の手順を行います。
まだ作成していない場合は、新しいバケットを作成します。
プロジェクト内のアセット メタデータをエクスポートするには、次のコマンドを実行します。このコマンドは、エクスポートされたスナップショットを
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 を確認するには、次の手順を行います。
-
Google Cloud コンソールに移動します。
- メニューバーの切り替えボックスをクリックします。
- [選択元] ボックスをクリックして、組織を選択します。
- フォルダ名を検索します。フォルダ 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 を確認するには、次の手順を行います。
-
Google Cloud コンソールに移動します。
- メニューバーの切り替えボックスをクリックします。
- [選択元] ボックスをクリックして、組織を選択します。
- [すべて] タブをクリックします。 組織 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 バケット内のファイル。
(省略可)エクスポートのステータスを確認するには、次のコマンドを実行します。これは、エクスポート コマンドを実行すると、gcloud CLI に表示されます。
gcloud asset operations describe OPERATION_PATH
アセット スナップショットの表示
Cloud Storage にエクスポートした後にアセット スナップショットを表示するには、次の手順を行います。
Google Cloud コンソールで Cloud Storage の [バケット] ページに移動します。
メタデータをエクスポートしたファイルを開きます。
エクスポート ファイルは、アセットとそのリソース名の一覧を表示します。
次のステップ
Cloud Asset Inventory について学習する。
アセットの履歴を取得する方法について学習する。