このトピックでは、Asset Insights を使用してアセット構成内の潜在的なリスクを検出し、セキュリティ体制を強化する方法について説明します。
概要
Cloud Asset Insights は、組織のリソースに関連付けられた IAM ポリシーに基づいて分析情報を生成します。これは Recommender サービスの一部であり、google.cloudasset.asset.Insight
分析情報タイプとして生成されます。分析情報とは、適切なアクションを決定するために詳細な分析を必要とする、特定の異常を指します。それらの情報は、Cloud Asset Inventory に保存されているデータのスナップショットに基づいて毎日生成されます。
始める前に
Asset Insights を使用するには、まず次の手順を行う必要があります。
アカウントに次の権限が付与されていることを確認します。
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 を確認する方法
Console
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
-
その他のフラグ:
--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 を確認する方法
Console
Google Cloud 組織 ID を確認するには、次の手順を行います。
-
Google Cloud コンソールに移動します。
- メニューバーの切り替えボックスをクリックします。
- [選択元] ボックスをクリックして、組織を選択します。
- [すべて] タブをクリックします。組織 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 プロジェクト番号を確認する方法
Console
Google Cloud プロジェクト番号を確認するには、次の手順を行います。
-
Google Cloud コンソールの [ダッシュボード] ページに移動します。
- メニューバーの切り替えボックスをクリックします。
- [選択元] ボックスで組織を選択し、プロジェクト名を検索します。
- プロジェクト名をクリックして、そのプロジェクトに切り替えます。プロジェクト番号が [プロジェクト情報] カードに表示されます。
gcloud CLI
Google Cloud プロジェクト番号を取得するには、次のコマンドを使用します。
gcloud projects describe PROJECT_ID --format="value(projectNumber)"
-
folders/FOLDER_ID
Google Cloud フォルダ ID を確認する方法
Console
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 を確認する方法
Console
Google Cloud 組織 ID を確認するには、次の手順を行います。
-
Google Cloud コンソールに移動します。
- メニューバーの切り替えボックスをクリックします。
- [選択元] ボックスをクリックして、組織を選択します。
- [すべて] タブをクリックします。組織 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_MEMBER
、EXTERNAL_POLICY_EDITOR
、EXTERNAL_CLOUD_STORAGE_OBJECT_VIEWER
、EXTERNAL_SERVICE_ACCOUNT_IMPERSONATOR
のサブタイプに含まれています。assetName
: この特定の分析情報でアクセスが検出されたアセット名。このフィールドは、OWNER_TERMINATED_PROJECT
、PUBLIC_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 のポリシー検索を呼び出します。
アセット分析情報では、分析情報の生成を目的とするサービス アカウントは考慮されません。