監査ログイベントを Cloud Run に転送する

Eventarc トリガーは、特定のイベントまたは一連のイベントに関心があることを宣言します。イベント ルーティングを構成するには、トリガーのフィルタ(イベントソースとターゲット Cloud Run サービスを含む)を指定します。

Eventarc は、HTTP リクエストを使用して CloudEvents 形式のイベント レシーバーにイベントを配信します。

以下では、トリガーのフィルタ条件に一致する監査ログの作成時にトリガーされる、Cloud Run サービスへのルーティングを構成する方法について説明します。serviceNamemethodName の値など、Eventarc でサポートされている監査ログイベントのリストについては、Eventarc でサポートされるイベントタイプをご覧ください。

トリガーのフィルタ条件に一致する監査ログの作成時にトリガーされるイベントの詳細については、Cloud Audit Logs のイベント フィルタを決定するをご覧ください。

トリガーを作成する準備

トリガーを作成する前に、次の前提条件を満たす必要があります。

コンソール

  1. Google Cloud コンソールのプロジェクト セレクタ ページで、Google Cloud プロジェクトを選択または作成します。

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

  2. Cloud Logging、Eventarc、Eventarc Publishing API を有効にします。

    API を有効にする

  3. 該当する場合は、Cloud Audit Logs イベントに関連する API を有効にします。たとえば、Cloud Functions の監査ログの場合は、Cloud Functions API を有効にします。

  4. アカウントがない場合は、ユーザー管理のサービス アカウントを作成し、Eventarc がターゲット サービスのイベントを管理できるように、必要なロールと権限を付与します。

    1. Google Cloud コンソールで [サービス アカウントの作成] ページに移動します。

      [サービス アカウントの作成] に移動

    2. プロジェクトを選択します。

    3. [サービス アカウント名] フィールドに名前を入力します。Google Cloud コンソールでは、この名前に基づいて [サービス アカウント ID] フィールドに値が設定されます。

      [サービス アカウントの説明] フィールドに説明を入力します。例: Service account for event trigger

    4. [作成して続行] をクリックします。

    5. 適切なアクセス権を付与するには、[ロールを選択] リストで、認証された呼び出しまたは未認証の呼び出しのためにサービス アカウントに付与する必要がある Identity and Access Management(IAM)ロールを選択します。詳細については、Cloud Run ターゲットのロールと権限をご覧ください。

      ロールを追加するには、[別のロールを追加] をクリックして各ロールを追加します。

    6. [続行] をクリックします。

    7. アカウントの作成を完了するには、[完了] をクリックします。

gcloud

  1. In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

  2. Cloud Logging、Eventarc、Eventarc Publishing API を有効にします。

    gcloud services enable logging.googleapis.com \
      eventarc.googleapis.com \
      eventarcpublishing.googleapis.com
    
  3. 該当する場合は、Cloud Audit Logs イベントに関連する API を有効にします。たとえば、Cloud Functions の監査ログの場合は cloudfunctions.googleapis.com を有効にします。

  4. アカウントがない場合は、ユーザー管理のサービス アカウントを作成し、Eventarc がターゲット サービスのイベントを管理できるように、必要なロールと権限を付与します。

    1. サービス アカウントを作成します。

      gcloud iam service-accounts create SERVICE_ACCOUNT_NAME
      

      SERVICE_ACCOUNT_NAME は、サービス アカウントの名前に置き換えます。6~30 文字にする必要があり、小文字の英数字とダッシュを使用できます。作成したサービス アカウントの名前は変更できません。

    2. 認証済み呼び出しまたは未認証の呼び出しのために必要な Identity and Access Management(IAM)のロールまたは権限を付与します。詳細については、Cloud Run ターゲットのロールと権限をご覧ください。

トリガーを作成する

Eventarc トリガーは、Google Cloud CLI または Google Cloud コンソールを使用して作成できます。

コンソール

  1. Google Cloud コンソールで、[Eventarc] の [トリガー] ページに移動します。

    [トリガー] に移動

  2. [トリガーを作成] をクリックします。
  3. トリガー名を入力します。

    これはトリガーの ID で、先頭は英字にする必要があります。63 文字以下とし、小文字、数字、ハイフンを使用できます。

  4. [トリガーのタイプ] で、[Google のソース] を選択します。
  5. イベント プロバイダを選択します。

    これは、監査ログを介してイベントのソースとなる Google サービスです。たとえば、BigQuery を選択します。

    関連する Google Cloud のドキュメントでは、イベント プロバイダ名の前に Cloud または Google Cloud が付いていない場合があります。たとえば、Memorystore for Redis はコンソールで Google Cloud Memorystore for Redis と表示されます。

  6. [イベントタイプ] リストで、[Cloud Audit Logs 経由] のイベントからイベントタイプを選択します。
  7. 次のいずれかを選択します。
    • 任意のリソース - これがデフォルトです。動的に作成され、作成時に ID が生成されるリソースが含まれます。
    • 特定のリソース - 完全なリソース名を指定する必要があります。
    • パスパターン - パスパターンを使用してリソースをフィルタできます。たとえば、「projects/_/buckets/eventarc-bucket/objects/random.txt」または「projects/_/buckets/**/r*.txt」と入力します。
  8. イベント ペイロードのエンコードを指定するには、[イベントデータのコンテンツ タイプ] リストで application/json または application/protobuf を選択します。

    JSON 形式のイベント ペイロードは、Protobuf 形式のイベント ペイロードよりも大きくなります。イベントの宛先とイベントサイズの制限によっては、信頼性に影響する可能性があります。詳細については、既知の問題をご覧ください。

  9. [リージョン] リストでリージョンを選択します。

    Eventarc の Cloud Audit Logs のトリガーは特定のリージョンとグローバル リージョンで使用できますが、デュアルリージョンとマルチリージョンのロケーションでは使用できません。グローバル トリガーによるパフォーマンスやデータ所在地の問題を回避するため、このロケーションと、イベントを生成している Google Cloud サービスのロケーションを一致させることをおすすめします。詳細については、Eventarc のロケーションをご覧ください。

    グローバル ロケーションを指定すると、イベント フィルタに一致するすべてのロケーションからイベントを受信します。たとえば、グローバル Eventarc トリガーを作成すると、EU と米国のマルチリージョンのリソースからイベントを受信できます。

    Compute Engine の Cloud Audit Logs のトリガーに既知の問題があり、単一リージョン us-central1 からのイベントが発生します。これは、仮想マシン インスタンスの実際の場所に関係ありません。トリガーを作成するときに、トリガーのロケーションを us-central1 または global のいずれかに設定します。

  10. ?
  11. サービスまたはワークフローを呼び出すサービス アカウントを選択します。

    新しいサービス アカウントを作成することもできます。

    これにより、トリガーに関連付けられた Identity and Access Management(IAM)サービス アカウントのメールアドレスが設定されます。このメールアドレスには、Eventarc が必要とする特定のロールがすでに付与されています。

  12. [イベントの宛先] リストで、[Cloud Run] を選択します。
  13. サービスを選択します。

    これは、トリガーのイベントを受信するサービスの名前です。サービスはトリガーと同じプロジェクトに配置する必要があり、イベントが生成されるたびに、ルート URL パス(/)に送信された HTTP POST リクエストとしてイベントを受信します。

  14. 必要に応じて、受信リクエストの送信先であるサービスの URL パスを指定できます。

    これは、トリガーのイベントの送信先である宛先サービスの相対パスです。例: //routerouteroute/subroute

  15. [作成] をクリックします。
  16. トリガーの作成後は、イベントソースのフィルタを変更できません。代わりに、新しいトリガーを作成して古いトリガーを削除します。詳しくは、トリガーの管理をご覧ください。

gcloud

トリガーを作成するには、必須フラグとオプションのフラグを指定して gcloud eventarc triggers create コマンドを実行します。

gcloud eventarc triggers create TRIGGER \
    --location=LOCATION \
    --destination-run-service=DESTINATION_RUN_SERVICE \
    --destination-run-region=DESTINATION_RUN_REGION \
    --event-filters="type=google.cloud.audit.log.v1.written" \
    --event-filters="serviceName=SERVICE_NAME" \
    --event-filters="methodName=METHOD_NAME" \
    --event-data-content-type="EVENT_DATA_CONTENT_TYPE" \
    --service-account=SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com

次のように置き換えます。

  • TRIGGER: トリガーの ID または完全修飾識別子。
  • LOCATION: Eventarc トリガーのロケーション。eventarc/location プロパティを設定することもできます(例: gcloud config set eventarc/location us-central1)。

    Eventarc の Cloud Audit Logs のトリガーは特定のリージョンとグローバル リージョンで使用できますが、デュアルリージョンとマルチリージョンのロケーションでは使用できません。グローバル トリガーによるパフォーマンスやデータ所在地の問題を回避するため、このロケーションと、イベントを生成している Google Cloud サービスのロケーションを一致させることをおすすめします。詳細については、Eventarc のロケーションをご覧ください。

    グローバル ロケーションを指定すると、イベント フィルタに一致するすべてのロケーションからイベントを受信します。たとえば、グローバル Eventarc トリガーを作成すると、EU と米国のマルチリージョンのリソースからイベントを受信できます。

    Compute Engine の Cloud Audit Logs のトリガーに既知の問題があり、単一リージョン us-central1 からのイベントが発生します。これは、仮想マシン インスタンスの実際の場所に関係ありません。トリガーを作成するときに、トリガーのロケーションを us-central1 または global のいずれかに設定します。

  • DESTINATION_RUN_SERVICE: トリガーのイベントを受け取る Cloud Run サービスの名前。サービスは、Cloud Run でサポートされているどのロケーションにも配置できます。トリガーと同じロケーションに配置する必要はありません。ただし、サービスはトリガーと同じプロジェクトに配置する必要があり、イベントが生成されるたびに、ルート URL パス(/)に送信された HTTP POST リクエストとしてイベントを受信します。
  • DESTINATION_RUN_REGION: (省略可)宛先の Cloud Run サービスがあるリージョン。指定しない場合、サービスはトリガーと同じリージョンにあるとみなされます。
  • SERVICE_NAME: Google Cloud サービスの識別子
  • METHOD_NAME: オペレーションの ID
  • EVENT_DATA_CONTENT_TYPE:(省略可)イベント ペイロードのエンコード。値は application/json または application/protobuf です。デフォルトのエンコードは application/json です。

    JSON 形式のイベント ペイロードは、Protobuf 形式のイベント ペイロードよりも大きくなります。イベントの宛先とイベントサイズの制限によっては、信頼性に影響する可能性があります。詳細については、既知の問題をご覧ください。

  • SERVICE_ACCOUNT_NAME: ユーザー管理のサービス アカウントの名前。
  • PROJECT_ID: Google Cloud プロジェクト ID。

注:

  • 以下のフラグは必須です。

    • --event-filters="type=google.cloud.audit.log.v1.written"
    • --event-filters="serviceName=VALUE"
    • --event-filters="methodName=VALUE"
  • --event-filters="resourceName=VALUE" フラグを使用してリソースの完全なパスを指定することで、特定のリソースのイベントをフィルタリングすることもできます。動的に作成され、作成時に ID が生成されるリソースの場合は、このフラグを省略します。または、--event-filters-path-pattern="resourceName=VALUE" フラグを使用してリソースパス パターンを指定し、一連のリソースのイベントをフィルタリングします。

  • 各トリガーには複数のイベント フィルタを指定できます。その場合は、--event-filters=[ATTRIBUTE=VALUE,...] フラグにカンマ区切りで指定する必要があります。さらにフィルタを追加するには、このフラグを繰り返し指定します。すべてのフィルタに一致するイベントのみが宛先に送信されます。ワイルドカードと正規表現はサポートされていません。
  • トリガーの作成後に、イベント フィルタのタイプを変更することはできません。別のイベントタイプには、新しいトリガーを作成する必要があります。
  • --service-account フラグには、トリガーに関連付けられた Identity and Access Management(IAM)サービス アカウントのメールアドレスを指定します。
  • --destination-run-path フラグを使用して、トリガーのイベントが送信される宛先の Cloud Run サービスの相対パスを指定することもできます。

例:

  gcloud eventarc triggers create helloworld-trigger \
      --location=us-central1 \
      --destination-run-service=helloworld-events \
      --destination-run-region=us-central1 \
      --event-filters="type=google.cloud.audit.log.v1.written" \
      --event-filters="serviceName=bigquery.googleapis.com" \
      --event-filters="methodName=google.cloud.bigquery.v2.JobService.InsertJob" \
      --service-account=${SERVICE_ACCOUNT_NAME}@${PROJECT_ID}.iam.gserviceaccount.com

これにより、bigquery.googleapis.com によって書き込まれた監査ログと、google.cloud.bigquery.v2.JobService.InsertJob として識別されるオペレーションに helloworld-trigger というトリガーが作成されます。

Terraform

Terraform を使用して、Cloud Run の宛先のトリガーを作成できます。詳細については、Terraform を使用してトリガーを作成するをご覧ください。

トリガーを一覧表示する

トリガーの作成を確認するには、Google Cloud CLI または Google Cloud コンソールを使用して Eventarc トリガーを一覧表示します。

コンソール

  1. Google Cloud コンソールで、[Eventarc] の [トリガー] ページに移動します。

    [トリガー] に移動

    このページには、すべてのロケーションのトリガーが一覧表示されます。また、名前、リージョン、イベント プロバイダ、宛先などの詳細情報も表示されます。

  2. トリガーをフィルタするには:

    1. [ フィルタ] フィールドまたは [トリガーをフィルタリング] フィールドをクリックします。
    2. [プロパティ] リストで、トリガーをフィルタするオプションを選択します。

    1 つのプロパティを選択することも、論理演算子 OR を使用して複数のプロパティを追加することもできます。

  3. トリガーを並べ替えるには、サポートされている列見出しの横にある [ 並べ替え] をクリックします。

gcloud

次のコマンドを実行してトリガーを一覧表示します。

gcloud eventarc triggers list --location=-

すべてのロケーションのトリガーが一覧表示されます。名前、タイプ、宛先、ステータスなどの詳細情報も表示されます。

次のステップ