VPC Service Controls 監査ロギング

このドキュメントでは、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 アドレス。

呼び出しがインターネットから発信された場合、requestMetadata.callerIp はパブリック IPv4 または IPv6 アドレスです。

呼び出しが Compute Engine VM から発信された場合、requestMetadata.callerIp は VM の IP アドレスです。VM の IP アドレスは内部 IP アドレスでも外部 IP アドレスでもかまいません。

呼び出しが Google の内部本番環境ネットワーク内から発信された場合、このフィールドの値は private になります。この状況は、Google Cloud サービス間で呼び出しが送信された場合に発生します。

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 プロジェクト、フォルダ、または組織の監査ログエントリを取得できます。

  1. Google Cloud コンソールで、[ログ エクスプローラ] ページに移動します。

    [ログ エクスプローラ] に移動

    検索バーを使用してこのページを検索する場合は、小見出しが [Logging] の結果を選択します。

  2. 既存の Google Cloud プロジェクト、フォルダ、または組織を選択します。

  3. すべての監査ログを表示するには、次のいずれかのクエリを [クエリエディタ] フィールドに入力し、[クエリを実行] をクリックします。

    logName:"cloudaudit.googleapis.com"
    
    protoPayload."@type"="type.googleapis.com/google.cloud.audit.AuditLog"
    
  4. 特定のリソースと監査ログタイプの監査ログを表示するには、[クエリビルダー] ペインで次の操作を行います。

    • リソースタイプに、表示する監査ログを含む 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 を使用してプロジェクト レベルの監査ログエントリを表示する手順は次のとおりです。

  1. entries.list メソッドのドキュメント内の [Try this API] セクションに移動します。

  2. [Try this API] フォームのリクエストの本文に、次のコードを入力します。この事前入力されたフォームをクリックすると、リクエストの本文が自動的に入力されますが、それぞれのログ名に有効な PROJECT_ID を指定する必要があります。

    {
      "resourceNames": [
        "projects/PROJECT_ID"
      ],
      "pageSize": 5,
      "filter": "logName : projects/PROJECT_ID/logs/cloudaudit.googleapis.com"
    }
    
  3. [実行] をクリックします。

サンプルクエリ

次の表のサンプルクエリを使用するには、次の操作を行います。

  1. クエリ式の変数を独自のプロジェクトの情報に置き換えてから、クリップボード アイコン を使用して式をコピーします。

  2. Google Cloud コンソールで、[ログ エクスプローラ] ページに移動します。

    [ログ エクスプローラ] に移動

    検索バーを使用してこのページを検索する場合は、小見出しが [Logging] の結果を選択します。

  3. [クエリを表示] を有効にしてクエリエディタ フィールドを開き、式をクエリエディタ フィールドに貼り付けます。

    サンプルクエリを入力するクエリエディタ。

  4. [クエリを実行] をクリックします。クエリに一致するログが [クエリ結果] ペインに一覧表示されます。

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" 

UNIQUE_ID は、拒否の一意の 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"

IP_ADDRESS は呼び出し元の IP アドレスに置き換えます。

サービスの違反
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"

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"

ORGANIZATION_ID は組織の数値 ID に置き換え、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 の料金概要をご覧ください。