このドキュメントでは、Cloud Audit Logs の一部として VPC Service Controls によって作成される監査ログについて説明します。
概要
Google Cloud サービスにより監査ログが書き込まれ、Google Cloud リソース内で「誰が、いつ、どこで、何をしたか」を確認できます。
Google Cloud プロジェクトで記録されるのは、その Google Cloud プロジェクト内に直接存在するリソースの監査ログのみです。フォルダ、組織、請求先アカウントなど、その他の Google Cloud リソースには、そのエンティティ自体の監査ログが記録されます。
Cloud Audit Logs の概要については、Cloud Audit Logs の概要をご覧ください。監査ログ形式の詳細については、監査ログについてをご覧ください。
利用可能な監査ログ
VPC Service Controls では、次の種類の監査ログを使用できます。
-
ポリシー拒否監査ログ
セキュリティ ポリシー違反のため、ユーザーまたはサービス アカウントがアクセスを拒否された場合を特定します。 ポリシー拒否監査ログに記録されたサービス名とメソッド名は、ユーザーまたはサービス アカウントがアクセスを拒否されたリソースの名前を示します。
ポリシー拒否監査ログは無効にできません。ただし、
_Default
シンクの除外フィルタにLOG_ID("cloudaudit.googleapis.com/policy")
を追加して、ポリシー拒否監査ログを除外できます。また、Cloud Logging の_Default
シンクを無効にして、ログが_Default
バケットに転送されないようにすることもできます。
監査ログタイプの詳細については、監査ログのタイプをご覧ください。
監査対象のオペレーション
次の表は、VPC Service Controls の各監査ログタイプに対応する API オペレーションをまとめたものです。
監査ログのカテゴリ | VPC Service Controls メソッド |
---|---|
ポリシー拒否監査ログ | VPC Service Controls と統合されるサービスのメソッドがサポートされています。 |
監査ログレコードの内容
監査ログレコードには 2 種類の情報が含まれます。1 つは元の呼び出しに関する情報、もう 1 つはセキュリティ ポリシー違反に関する情報です。VPC Service Controls API が記録する情報は次のとおりです。
監査ログのフィールド | 説明 |
---|---|
serviceName |
サービス境界によってアクセスが制限されているサービス。このサービスに対するリクエストは VPC Service Controls のチェックに違反し、この監査ログが作成されました。 |
methodName
|
レコードに含まれるセキュリティ ポリシー違反の原因となったメソッド呼び出しの名前。多くの場合、methodName は、serviceName フィールドで指定された Google Cloud サービスに関連付けられたメソッドです。 |
authenticationInfo.principalEmail
|
リクエストを発行したユーザーまたはサービス アカウントのメールアドレス。 メールアドレスの一部は削除されている場合があります。詳細については、監査ログの呼び出し元 ID をご覧ください。 |
resourceName
|
クライアントからの元のリクエストで指定された Google Cloud リソース。resourceName は、プロジェクト、フォルダ、組織、または Google Cloud バケットなどのリソースです。 |
requestMetadata.callerIp |
発信者の IP アドレス。
呼び出しがインターネットから発信された場合、 呼び出しが Compute Engine VM から発信された場合、 呼び出しが Google の内部本番環境ネットワーク内から発信された場合、このフィールドの値は |
request_metadata.caller_network
|
呼び出し元のネットワークの名前。この値は、ネットワーク ホスト プロジェクトが、アクセスされたリソースが属する同じ Google Cloud の組織またはプロジェクトに属している場合にのみ設定されます。詳細については、VPC ネットワークをご覧ください。 |
status
|
レコードに記録されているオペレーションの全体的な処理ステータス。 |
metadata
|
セキュリティ ポリシー違反に関する情報。 |
metadata.resourceNames |
このレコードに含まれるセキュリティ ポリシー違反に関係するリソースの名前。 |
metadata.dryRun
|
監査ログがドライラン ポリシー チェック用の場合、True となるブール値。 |
metadata.vpcServiceControlsUniqueId
|
レコードに記載されている VPC Service Controls 違反の一意の識別子。 |
metadata.violationReason
|
違反の理由。たとえば、RESOURCE_NOT_IN_SAME_SERVICE_PERIMETER は、アクセスされるリソースが同じサービス境界に属していないことを意味します。 |
metadata.securityPolicyInfo
|
違反が発生したサービス境界の名前と、境界が属する組織の一意の識別子。 |
metadata.egressViolations
|
下り(外向き)違反は通常、送信元がサービス境界で保護されていて、ターゲット リソースが境界外にあるためにリクエストが失敗すると発生します。ソースはプロジェクトまたは VPC ネットワークです。 |
metadata.ingressViolations |
違反のタイプ。この違反は、多くの場合、サービス境界で保護されているターゲット リソースにアクセスしようとした場合に発生します。ソースは、プロジェクトまたは VPC ネットワークのいずれかです。このフィールドには、上り(内向き)違反を説明する構造が含まれます。 |
metadata.accessLevels
|
同じアクセス ポリシーに属する、組織内のすべての一致するアクセスレベル。これらのアクセスレベルは、違反した境界で指定されないため、NO_MATCHING_ACCESS_LEVEL 違反が発生する可能性があります。 |
metadata.intermediateServices
|
リクエスト チェーンに含まれるサービスのリスト。ユーザーが開始したリクエストの場合、このフィールドは空です。 |
metadata.deviceState
|
デバイス ポリシーが有効な場合にリクエストを作成するデバイスの状態。このフィールドのデフォルト値は Unknown です。 |
監査ログ形式
監査ログエントリには、次のオブジェクトが含まれます。
ログエントリ自体。
LogEntry
タイプのオブジェクトです。よく使用されるフィールドは次のとおりです。logName
には、リソース ID と監査ログの種類が含まれます。resource
には、監査対象オペレーションのターゲットが含まれます。timeStamp
には、監査対象オペレーションの時間が含まれます。protoPayload
には、監査対象の情報が含まれます。
監査ロギングデータ。ログエントリの
protoPayload
フィールドに保持されるAuditLog
オブジェクトです。任意のサービス固有の監査情報。サービス固有のオブジェクトです。前のインテグレーションでは、このオブジェクトは
AuditLog
オブジェクトのserviceData
フィールドに保持されています。後のインテグレーションでは、metadata
フィールドを使用します。
これらのオブジェクトのその他のフィールドと、その解釈方法については、監査ログについてをご覧ください。
ログ名
Cloud Audit Logs のログ名には、監査ログを所有する Google Cloud プロジェクトまたは他の Google Cloud エンティティ、およびログに管理アクティビティ、データアクセス、ポリシーの拒否、システム イベントの監査ログデータが含まれているかどうかを示すリソース識別子が含まれます。
リソース識別子の変数を含む監査ログ名は次のとおりです。
projects/PROJECT_ID/logs/cloudaudit.googleapis.com%2Factivity projects/PROJECT_ID/logs/cloudaudit.googleapis.com%2Fdata_access projects/PROJECT_ID/logs/cloudaudit.googleapis.com%2Fsystem_event projects/PROJECT_ID/logs/cloudaudit.googleapis.com%2Fpolicy folders/FOLDER_ID/logs/cloudaudit.googleapis.com%2Factivity folders/FOLDER_ID/logs/cloudaudit.googleapis.com%2Fdata_access folders/FOLDER_ID/logs/cloudaudit.googleapis.com%2Fsystem_event folders/FOLDER_ID/logs/cloudaudit.googleapis.com%2Fpolicy billingAccounts/BILLING_ACCOUNT_ID/logs/cloudaudit.googleapis.com%2Factivity billingAccounts/BILLING_ACCOUNT_ID/logs/cloudaudit.googleapis.com%2Fdata_access billingAccounts/BILLING_ACCOUNT_ID/logs/cloudaudit.googleapis.com%2Fsystem_event billingAccounts/BILLING_ACCOUNT_ID/logs/cloudaudit.googleapis.com%2Fpolicy organizations/ORGANIZATION_ID/logs/cloudaudit.googleapis.com%2Factivity organizations/ORGANIZATION_ID/logs/cloudaudit.googleapis.com%2Fdata_access organizations/ORGANIZATION_ID/logs/cloudaudit.googleapis.com%2Fsystem_event organizations/ORGANIZATION_ID/logs/cloudaudit.googleapis.com%2Fpolicy
サービス名
VPC Service Controls の監査ログでは、VPC Service Controls と統合されているサービスのサービス名が使用されます。
すべての Cloud Logging API サービス名とそれに対応するモニタリング対象リソースタイプの一覧については、サービスとリソースのマッピングをご覧ください。
リソースタイプ
VPC Service Controls の監査ログでは、VPC Service Controls と統合されているサービスでサポートされているリソースタイプが使用されます。
Cloud Logging でモニタリングされるすべてのリソースタイプのリストと記述情報については、モニタリング対象リソースタイプをご覧ください。
呼び出し元の ID
呼び出し元の IP アドレスは、AuditLog
オブジェクトの RequestMetadata.caller_ip
フィールドに保持されます。Logging は、特定の呼び出し元の ID と IP アドレスを秘匿化する場合があります。
監査ログで秘匿化される情報については、監査ログの呼び出し元の ID をご覧ください。
監査ロギングの有効化
管理アクティビティ監査ログは常に有効になっています。無効にすることはできません。
権限とロール
IAM の権限とロールにより、Google Cloud リソース内の監査ログデータにアクセス可能かどうか判断されます。
ユースケースに適用する Logging 固有の権限とロールを決定する際は、次の点を考慮してください。
ログ閲覧者のロール(
roles/logging.viewer
)は、管理アクティビティ、ポリシー拒否、システム イベントの監査ログに対する読み取り専用権限を付与します。このロールしかない場合は、_Default
バケット内のデータアクセス監査ログを閲覧できません。プライベート ログ閲覧者のロール(
(roles/logging.privateLogViewer
)には、roles/logging.viewer
に含まれる権限に加えて、_Default
バケット内のデータアクセス監査ログの読み取り権限が含まれます。これらのプライベート ログがユーザー定義バケットに保存されている場合、それらのバケット内のログを読み取る権限を持つユーザーは、プライベート ログを読み取ることができます。ログバケットの詳細については、転送とストレージの概要をご覧ください。
監査ログデータに適用される IAM の権限とロールの詳細については、IAM を使用したアクセス制御をご覧ください。
ログを表示
すべての監査ログに対してクエリを実行することも、監査ログ名でログをクエリすることもできます。監査ログ名には、監査ロギング情報を表示する Google Cloud プロジェクト、フォルダ、請求先アカウント、または組織のリソース識別子が含まれています。クエリでは、インデックス付きの LogEntry
フィールドを指定できます。ログのクエリの詳細については、ログ エクスプローラでクエリを作成するをご覧ください。
ログ エクスプローラでは、個々のログエントリをフィルタして表示できます。SQL を使用してログエントリのグループを分析する場合は、[ログ分析] ページを使用します。詳しくは以下をご覧ください。
ほとんどの監査ログは、Google Cloud コンソール、Google Cloud CLI、または Logging API を使用して Cloud Logging で表示できます。ただし、課金に関連する監査ログの場合は、Google Cloud CLI または Logging API のみを使用できます。
Console
Google Cloud コンソールでは、ログ エクスプローラを使用して、Google Cloud プロジェクト、フォルダ、または組織の監査ログエントリを取得できます。
-
Google Cloud コンソールで、[ログ エクスプローラ] ページに移動します。
検索バーを使用してこのページを検索する場合は、小見出しが [Logging] の結果を選択します。
既存の Google Cloud プロジェクト、フォルダ、または組織を選択します。
すべての監査ログを表示するには、次のいずれかのクエリを [クエリエディタ] フィールドに入力し、[クエリを実行] をクリックします。
logName:"cloudaudit.googleapis.com"
protoPayload."@type"="type.googleapis.com/google.cloud.audit.AuditLog"
特定のリソースと監査ログタイプの監査ログを表示するには、[クエリビルダー] ペインで次の操作を行います。
リソースタイプに、表示する監査ログを含む Google Cloud リソースを選択します。
[ログ名] で、表示する監査ログタイプを選択します。
- 管理アクティビティ監査ログの場合は、[activity] を選択します。
- データアクセス監査ログの場合は、[data_access] を選択します。
- システム イベント監査ログの場合は、[system_event] を選択します。
- ポリシー拒否監査ログの場合は、[policy] を選択します。
[クエリを実行] をクリックします。
これらのオプションが表示されない場合、Google Cloud プロジェクト、フォルダ、または組織で利用可能なその種類の監査ログは存在しないことを意味します。
ログ エクスプローラでログを表示する際に問題が発生した場合は、トラブルシューティングの情報をご覧ください。
ログ エクスプローラを使用したクエリの詳細については、ログ エクスプローラでクエリを作成するをご覧ください。
gcloud
Google Cloud CLI は、Logging API へのコマンドライン インターフェースを提供します。ログ名ごとに有効なリソース識別子を指定します。たとえば、クエリに PROJECT_ID が含まれている場合、指定するプロジェクト ID は、現在選択された Google Cloud プロジェクトを参照している必要があります。
Google Cloud プロジェクト レベルの監査ログエントリを読み取るには、次のコマンドを実行します。
gcloud logging read "logName : projects/PROJECT_ID/logs/cloudaudit.googleapis.com" \ --project=PROJECT_ID
フォルダレベルの監査ログエントリを読み取るには、次のコマンドを実行します。
gcloud logging read "logName : folders/FOLDER_ID/logs/cloudaudit.googleapis.com" \ --folder=FOLDER_ID
組織レベルの監査ログエントリを読み取るには、次のコマンドを実行します。
gcloud logging read "logName : organizations/ORGANIZATION_ID/logs/cloudaudit.googleapis.com" \ --organization=ORGANIZATION_ID
Cloud 請求先アカウント レベルの監査ログエントリを読み取るには、次のコマンドを実行します。
gcloud logging read "logName : billingAccounts/BILLING_ACCOUNT_ID/logs/cloudaudit.googleapis.com" \ --billing-account=BILLING_ACCOUNT_ID
1 日以上経過したログを読み取るには、コマンドに --freshness
フラグを追加します。
gcloud CLI の使用方法に関する詳細については、gcloud logging read
をご覧ください。
REST
クエリを作成するときは、ログ名ごとに有効なリソース識別子を指定します。たとえば、クエリに PROJECT_ID が含まれている場合、指定するプロジェクト ID は、現在選択された Google Cloud プロジェクトを参照している必要があります。
たとえば、Logging API を使用してプロジェクト レベルの監査ログエントリを表示する手順は次のとおりです。
entries.list
メソッドのドキュメント内の [Try this API] セクションに移動します。[Try this API] フォームのリクエストの本文に、次のコードを入力します。この事前入力されたフォームをクリックすると、リクエストの本文が自動的に入力されますが、それぞれのログ名に有効な PROJECT_ID を指定する必要があります。
{ "resourceNames": [ "projects/PROJECT_ID" ], "pageSize": 5, "filter": "logName : projects/PROJECT_ID/logs/cloudaudit.googleapis.com" }
[実行] をクリックします。
サンプルクエリ
次の表のサンプルクエリを使用するには、次の操作を行います。
クエリ式の変数を独自のプロジェクトの情報に置き換えてから、クリップボード アイコン content_copy を使用して式をコピーします。
-
Google Cloud コンソールで、[ログ エクスプローラ] ページに移動します。
検索バーを使用してこのページを検索する場合は、小見出しが [Logging] の結果を選択します。
[クエリを表示] を有効にしてクエリエディタ フィールドを開き、式をクエリエディタ フィールドに貼り付けます。
[クエリを実行] をクリックします。クエリに一致するログが [クエリ結果] ペインに一覧表示されます。
VPC Service Controls の監査ログを見つけるには、ログ エクスプローラで次のクエリを使用します。
クエリの説明 | 式 |
---|---|
拒否 ID に基づく違反の詳細 | log_id("cloudaudit.googleapis.com/policy") severity=ERROR resource.type="audited_resource" protoPayload.metadata."@type"="type.googleapis.com/google.cloud.audit.VpcServiceControlAuditMetadata" protoPayload.metadata.vpcServiceControlsUniqueId="UNIQUE_ID"
|
IP アドレスの違反 | log_id("cloudaudit.googleapis.com/policy") severity=ERROR resource.type="audited_resource" protoPayload.metadata."@type"="type.googleapis.com/google.cloud.audit.VpcServiceControlAuditMetadata" protoPayload.requestMetadata.callerIp="IP_ADDRESS"
|
サービスの違反 | log_id("cloudaudit.googleapis.com/policy") severity=ERROR resource.type="audited_resource" protoPayload.metadata."@type"="type.googleapis.com/google.cloud.audit.VpcServiceControlAuditMetadata" protoPayload.serviceName="SERVICE_NAME"
|
境界に対するアクセスレベルの変更 | logName="organizations/ORGANIZATION_ID/logs/cloudaudit.googleapis.com%2Factivity" severity=NOTICE protoPayload.serviceName="accesscontextmanager.googleapis.com" protoPayload.methodName="google.identity.accesscontextmanager.v1.AccessContextManager.UpdateServicePerimeter" -protoPayload.metadata.previousState:"ACCESS_LEVEL" protoPayload.request.servicePerimeter.status.accessLevels:"ACCESS_LEVEL"
|
Perimeter CRUD オペレーション | logName="organizations/ORGANIZATION_ID/logs/cloudaudit.googleapis.com%2Factivity" severity=NOTICE protoPayload.serviceName="accesscontextmanager.googleapis.com" protoPayload.methodName=~"google.identity.accesscontextmanager.v1.AccessContextManager.*ServicePerimeter" protoPayload.request.servicePerimeter.name=~".*PERIMETER_NAME$" PERIMETER_NAME は、境界の名前に置き換えます。 |
アクセスレベルの CRUD オペレーション | logName="organizations/ORGANIZATION_ID/logs/cloudaudit.googleapis.com%2Factivity" severity=NOTICE protoPayload.serviceName="accesscontextmanager.googleapis.com" protoPayload.methodName=~"google.identity.accesscontextmanager.v1.AccessContextManager.*AccessLevel" protoPayload.request.accessLevel.name=~".*ACCESS_LEVEL$" |
上り(内向き)ルールのオペレーションを作成および更新する | logName="organizations/ORGANIZATION_ID/logs/cloudaudit.googleapis.com%2Factivity" protoPayload.serviceName="accesscontextmanager.googleapis.com" protoPayload.methodName=~"google.identity.accesscontextmanager.v1.AccessContextManager.*ServicePerimeter" protoPayload.request.servicePerimeter.status.ingressPolicies:"*" |
下り(外向き)ルールのオペレーションの作成と更新 | logName="organizations/ORGANIZATION_ID/logs/cloudaudit.googleapis.com%2Factivity" protoPayload.serviceName="accesscontextmanager.googleapis.com" protoPayload.methodName=~"google.identity.accesscontextmanager.v1.AccessContextManager.*ServicePerimeter" protoPayload.request.servicePerimeter.status.egressPolicies:"*" |
監査ログを転送する
他の種類のログと同様に、サポートされている宛先に監査ログを転送できます。監査ログを転送する理由を以下に示します。
監査ログを長期間保持する場合や、より強力な検索機能を使用する場合は、監査ログのコピーを Cloud Storage、BigQuery、または Pub/Sub に転送します。Pub/Sub を使用すると、他のアプリケーション、他のリポジトリ、サードパーティ製品に転送できます。
組織全体の監査ログを管理するには、組織内の一部またはすべての Google Cloud プロジェクトからログを転送できる集約シンクを作成します。
ログの転送手順については、サポートされている宛先にログをルーティングするをご覧ください。
料金
料金の詳細については、Cloud Logging の料金概要をご覧ください。