Cloud Audit Logs イベントを受信する

このチュートリアルでは、Cloud Audit Logs を使用して Cloud Storage からイベントを受信する、認証済みの Cloud Run サービスをデプロイする方法について説明します。このチュートリアルを使用して、本番環境ワークロードをデプロイします。Eventarc トリガーは、Cloud Audit Logs エントリに基づいてイベントをフィルタします。詳細については、Cloud Audit Logs のイベント フィルタを決定するをご覧ください。

このチュートリアルは、 Google Cloud コンソールまたは Google Cloud CLI のいずれを使用しても行うことができます。

Artifact Registry 標準リポジトリを作成する

コンテナ イメージを保存する Artifact Registry 標準リポジトリを作成します。

コンソール

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

    [リポジトリ] に移動

  2. [ リポジトリを作成] をクリックします。
  3. リポジトリを構成します。
    1. 一意の [名前] を入力します。
    2. [形式] は [Docker] を選択します。
    3. [モード] は [標準] を選択します。
    4. [ロケーション タイプ] は [リージョン] を選択します。
    5. [リージョン] リストで、[us-central1(アイオワ)] を選択します。
  4. その他のデフォルト値はそのままにして、[作成] をクリックします。

gcloud

gcloud artifacts repositories create REPOSITORY \
    --repository-format=docker \
    --location=$REGION

REPOSITORY は、Artifact Registry リポジトリの一意の名前に置き換えます。

Cloud Storage バケットを作成する

このチュートリアルでは、イベントソースとして Cloud Storage を使用します。ストレージ バケットを作成するには:

コンソール

  1. Google Cloud コンソールで、[バケット] ページに移動します。

    [バケット] に移動

  2. [ バケットを作成] をクリックします。
  3. バケット情報を入力し、[続行] をクリックして各ステップを完了します。
    1. 一意の名前を入力します。例: eventarcbucket
    2. [ロケーション タイプ] で [Region] を選択します。
    3. [ロケーション] で [us-central1(アイオワ)] を選択します。
    4. [デフォルトのストレージ クラス] として [Standard] を選択します。
    5. [アクセス制御] で [均一] を選択します。
  4. [作成] をクリックします。

gcloud

gcloud storage buckets create gs://events-tutorial-PROJECT_ID/ --location=$REGION

イベントソースの作成後、Cloud Run にイベント レシーバ サービスをデプロイできます。

イベント レシーバー サービスを Cloud Run にデプロイする

イベントを受信してロギングする Cloud Run サービスをデプロイします。サンプル イベント レシーバ サービスをデプロイするには:

コンソール

  1. GitHub アカウントにサンプル リポジトリのクローンを作成します。
  2. Go

    1. GitHub で、GoogleCloudPlatform/golang-samples に移動します。
    2. [Fork] をクリックします。
    3. [Fork] ボタンのスクリーンショット
    4. プロンプトが表示されたら、リポジトリをフォークするロケーションを選択します。

    Java

    1. GitHub で GoogleCloudPlatform/java-docs-samples に移動します。
    2. [Fork] をクリックします。
    3. [Fork] ボタンのスクリーンショット
    4. プロンプトが表示されたら、リポジトリをフォークするロケーションを選択します。

    .NET

    1. GitHub で GoogleCloudPlatform/dotnet-docs-samples に移動します。
    2. [Fork] をクリックします。
    3. [Fork] ボタンのスクリーンショット
    4. プロンプトが表示されたら、リポジトリをフォークするロケーションを選択します。

    Node.js

    1. GitHub で GoogleCloudPlatform/nodejs-docs-samples に移動します。
    2. [Fork] をクリックします。
    3. [Fork] ボタンのスクリーンショット
    4. プロンプトが表示されたら、リポジトリをフォークするロケーションを選択します。

    Python

    1. GitHub で GoogleCloudPlatform/python-docs-samples に移動します。
    2. [Fork] をクリックします。
    3. [Fork] ボタンのスクリーンショット
    4. プロンプトが表示されたら、リポジトリをフォークするロケーションを選択します。
  3. Google Cloud コンソールで、[サービス] ページに移動します。
  4. [サービス] に移動

  5. [ サービスの作成] をクリックして、[サービスの作成] フォームを表示します。
  6. [リポジトリから継続的にデプロイする] を選択します。

    GitHub リポジトリに対する変更は、Artifact Registry のコンテナ イメージに自動的に反映され、Cloud Run にデプロイされます。

  7. [Cloud Build の設定] をクリックし、[Cloud Build の設定] フォームを開きます。
    1. 指示が表示された場合は、Cloud Build APIArtifact Analysis API を有効にします。
    2. [リポジトリ プロバイダ] で [GitHub] を選択します。 まだ認証されていない場合は、[認証] をクリックし、指示に沿って Cloud Build GitHub アプリを使用してリポジトリに接続します。
    3. プロンプトが表示されたら、[Google Cloud Build のインストール] をクリックします。
    4. [リポジトリ] で、フォークした GitHub リポジトリを選択します。
    5. [次へ] をクリックします。
    6. [ブランチ] フィールドに「^main$」と入力します。
    7. [ビルドタイプ] で [Dockerfile] を選択し、Dockerfile のソースの場所を指定します。
      • eventarc/audit-storage/Dockerfile

        or

      • eventarc/audit_storage/Dockerfile(Go)
    8. [保存] をクリックします。
  8. [サービスの作成] フォームに、サービス名を入力します。例: helloworld-events
  9. サービスを配置する [リージョン] として [us-central1(アイオワ)] を選択します。
  10. Cloud Run サービスで許可する上り(内向き)トラフィックに基づいて、[Ingress] オプションのいずれかを選択します。
  11. [認証が必要] を選択します。
  12. [作成] をクリックします。

gcloud

  1. GitHub リポジトリのクローンを作成します。

    Go

    git clone https://github.com/GoogleCloudPlatform/golang-samples.git
    cd golang-samples/eventarc/audit_storage
    

    Java

    git clone https://github.com/GoogleCloudPlatform/java-docs-samples.git
    cd java-docs-samples/eventarc/audit-storage

    .NET

    git clone https://github.com/GoogleCloudPlatform/dotnet-docs-samples.git
    cd dotnet-docs-samples/eventarc/audit-storage

    Node.js

    git clone https://github.com/GoogleCloudPlatform/nodejs-docs-samples.git
    cd nodejs-docs-samples/eventarc/audit-storage

    Python

    git clone https://github.com/GoogleCloudPlatform/python-docs-samples.git
    cd python-docs-samples/eventarc/audit-storage
  2. コンテナをビルドして、Cloud Build にアップロードします。
    gcloud builds submit --tag $REGION-docker.pkg.dev/PROJECT_ID/REPOSITORY/$SERVICE_NAME:v1
    
  3. コンテナ イメージを Cloud Run にデプロイします。
    gcloud run deploy $SERVICE_NAME \
        --image $REGION-docker.pkg.dev/PROJECT_ID/REPOSITORY/$SERVICE_NAME:v1
    

    未認証の呼び出しの許可を求めるメッセージには、「n」と入力します。

    デプロイに成功すると、コマンドラインにサービスの URL が表示されます。

これで helloworld-events というイベント レシーバ サービスが Cloud Run にデプロイされたので、トリガーを設定できます。

Eventarc トリガーを作成する

Eventarc トリガーは、Cloud Storage バケットから helloworld-events Cloud Run サービスにイベントを送信します。

コンソール

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

    [トリガー] に移動

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

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

  4. トリガーのタイプを選択します。
    • 自社: Google Cloudプロバイダから(直接または Cloud Audit Logs エントリを介して)送信されたイベント、または Pub/Sub メッセージを使用してプロバイダから送信されたイベントをフィルタリングします。
    • サードパーティ: サードパーティ プロバイダから送信されるイベントを除外します。
  5. [イベント プロバイダ] リストで、イベントのソースとして [Cloud Storage] を選択します。
  6. [イベントタイプ] リストで [storage.objects.create] を選択します。
  7. [リージョン] リストで、イベントを受信するリージョンとして [us-central1] を選択します。
  8. 作成したサービス アカウントを選択します。例: SERVICE_ACCOUNT_ID@PROJECT_ID。iam.gserviceaccount.com
  9. [イベントの宛先] リストで、[Cloud Run] を選択します。
  10. [Cloud Run サービスを選択] リストで、[helloworld-events] を選択します。
  11. [作成] をクリックします。
  12. Cloud Run コンソール ページを使用して Eventarc トリガーを作成することもできます。

gcloud

  1. Cloud Storage イベントをフィルタし、作成したサービス アカウントを使用するトリガーを作成します。
    gcloud eventarc triggers create events-tutorial-trigger \
        --destination-run-service=$SERVICE_NAME \
        --destination-run-region=$REGION \
        --event-filters="type=google.cloud.audit.log.v1.written" \
        --event-filters="serviceName=storage.googleapis.com" \
        --event-filters="methodName=storage.objects.create" \
        --service-account=sample-service-account@PROJECT_ID.iam.gserviceaccount.com
    PROJECT_ID は、 Google Cloudプロジェクト ID に置き換えます。

    ここで

    • type: トリガーのフィルタ条件が満たされたときに監査ログが作成されるよう指定します。
    • serviceName: 監査ログを書き込むサービス(Cloud Storage)。
    • methodName: 監査対象のオペレーション(storage.objects.create)。
    これにより、events-tutorial-trigger というトリガーが作成されます。
  2. events-tutorial-trigger が正常に作成されたことを確認するには、次のコマンドを実行します。
    gcloud eventarc triggers list --location=$REGION
  3. トリガー events-tutorial-triggerhelloworld-events のターゲットとともに表示されます。

イベントを生成して表示する

  1. イベントを生成するには:

    コンソール

    1. 「Hello World」というテキストを含むテキスト ファイルを random.txt という名前で保存します。
    2. Google Cloud コンソールで、[バケット] ページに移動します。

      [バケット] に移動

    3. 作成したストレージ バケットを選択します。
    4. [オブジェクト] タブで、[ファイルをアップロード] をクリックして random.txt ファイルをアップロードします。

    gcloud

    Cloud Storage にファイルをアップロードします。

    echo "Hello World" > random.txt
    gcloud storage cp random.txt gs://events-tutorial-PROJECT_ID/random.txt
  2. ログエントリを表示するには:
  3. コンソール

    1. Google Cloud コンソールで、[サービス] ページに移動します。

      [サービス] に移動

    2. サービスの一覧から、作成したサービスの名前をクリックして、[サービスの詳細] ページに移動します。
    3. このサービスのすべてのリビジョンのリクエストログとコンテナログを取得するには、[ログ] タブをクリックします。ログの重大度でフィルタリングできます。
    4. 次のようなログエントリを探します。
      Detected change in Cloud Storage bucket: storage.googleapis.com/projects/_/buckets/BUCKET_NAME/objects/random.txt
      ここで、BUCKET_NAME は、Cloud Storage バケットの名前です。

    gcloud

    1. gcloud logging read "resource.labels.service_name=helloworld-events AND textPayload:random.txt" --format=json
    2. 次のようなログエントリを探します。
      Detected change in Cloud Storage bucket: storage.googleapis.com/projects/_/buckets/BUCKET_NAME/objects/random.txt
      ここで、BUCKET_NAME は、Cloud Storage バケットの名前です。

イベント レシーバ サービスを Cloud Run にデプロイし、Eventarc トリガーを作成して、Cloud Storage からイベントを生成し、それを Cloud Run ログで確認できました。