Cloud Audit Logs イベントの受信


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

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

目標

このチュートリアルの内容は次のとおりです。

  1. イベントソースとなる Cloud Storage バケットを作成する。

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

  3. Eventarc トリガーを作成する。

  4. Cloud Storage バケットにファイルをアップロードしてイベントを生成し、Cloud Run のログで確認する。

費用

このドキュメントでは、Google Cloud の次の課金対象のコンポーネントを使用します。

料金計算ツールを使うと、予想使用量に基づいて費用の見積もりを生成できます。 新しい Google Cloud ユーザーは無料トライアルをご利用いただける場合があります。

始める前に

組織で定義されているセキュリティの制約により、次の手順を完了できない場合があります。トラブルシューティング情報については、制約のある Google Cloud 環境でアプリケーションを開発するをご覧ください。

プロジェクト作成者には、オーナーロールroles/owner)が付与されます。デフォルトでは、この Identity and Access Management(IAM)ロールには、ほとんどの Google Cloud リソースへの完全アクセス権に必要な権限が含まれており、この手順は省略できます。

プロジェクト作成者でない場合は、プロジェクトで適切なプリンシパルに必要な権限を付与する必要があります。プリンシパルは Google アカウント(エンドユーザーの場合)やサービス アカウント(アプリケーションとコンピューティング ワークロードの場合)になることもあります。詳細については、イベントの宛先のロールと権限のページをご覧ください。

デフォルトでは、Cloud Build の権限には、Artifact Registry アーティファクトをアップロードおよびダウンロードするための権限が含まれています

必要な権限

このチュートリアルを完了するために必要な権限を取得するには、プロジェクトに対して次の IAM ロールを付与するよう管理者に依頼してください。

ロールの付与の詳細については、アクセスの管理をご覧ください。

必要な権限は、カスタムロールや他の事前定義ロールから取得することもできます。

Google Cloud コンソールまたは gcloud CLI を使用して次の操作を行います。

コンソール

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. Google Cloud Console の [プロジェクト セレクタ] ページで、Google Cloud プロジェクトを選択または作成します。

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

  3. Google Cloud プロジェクトで課金が有効になっていることを確認します

  4. Artifact Registry、Cloud Build、Logging、Pub/Sub、Cloud Run、Cloud Storage、Eventarc API を有効にします。

    API を有効にする

  5. Google Cloud Console の [プロジェクト セレクタ] ページで、Google Cloud プロジェクトを選択または作成します。

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

  6. Google Cloud プロジェクトで課金が有効になっていることを確認します

  7. Artifact Registry、Cloud Build、Logging、Pub/Sub、Cloud Run、Cloud Storage、Eventarc API を有効にします。

    API を有効にする

  8. 監査ログに記録されるデータアクセスを構成するには、Google Cloud Storage管理読み取りデータ読み取りデータ書き込みのログタイプを有効にします。

    [監査ログ] に移動

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

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

  10. [サービス アカウントを作成] をクリックします。
  11. Google Cloud コンソールに表示するサービス アカウント名を入力します。

    この名前に基づいてサービス アカウント ID が生成され、Google Cloud コンソールに表示されます。必要に応じて ID を編集します。後で ID を変更することはできません。

  12. 省略可: サービス アカウントの説明を入力します。
  13. アクセス制御を今すぐ設定しない場合は、[完了] をクリックしてサービス アカウントの作成を終了します。

    アクセス制御を今すぐ設定するには、[作成して続行] をクリックして次の手順に進みます。

  14. プロジェクトの Cloud Run 起動元Eventarc イベント受信者のロールを選択し、Eventarc トリガーに関連付けられたサービス アカウントに付与します。

    この操作を行うと、テスト目的のために、プロジェクト内の Cloud Run のすべてのサービスとジョブに関する Cloud Run 起動元のロールが付与されます。Cloud Run の特定のサービスに関するこのロールを付与することもできます。詳細については、Cloud Run サービスの権限を付与するをご覧ください。

    Cloud Run 起動元のロールを付与せずに認証済みの Cloud Run サービスのトリガーを作成すると、トリガーは正常に作成され、アクティブになります。ただし、トリガーは期待どおりに機能せず、次のようなメッセージがログに記録されます。

    The request was not authenticated. Either allow unauthenticated invocations or set the proper Authorization header.
  15. ロールを追加したら、[続行]、[完了] をクリックしてサービス アカウントの作成を終了します。

gcloud

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. Google Cloud CLI をインストールします。
  3. gcloud CLI を初期化するには:

    gcloud init
  4. Google Cloud プロジェクトを作成または選択します

    • Google Cloud プロジェクトを作成します。

      gcloud projects create PROJECT_ID

      PROJECT_ID は、作成する Google Cloud プロジェクトの名前に置き換えます。

    • 作成した Google Cloud プロジェクトを選択します。

      gcloud config set project PROJECT_ID

      PROJECT_ID は、実際の Google Cloud プロジェクト名に置き換えます。

  5. Google Cloud プロジェクトで課金が有効になっていることを確認します

  6. Artifact Registry、Cloud Build、Logging、Pub/Sub、Cloud Run、Cloud Storage、Eventarc API を有効にします。

    gcloud services enable artifactregistry.googleapis.comcloudbuild.googleapis.com、logging.googleapis.com、pubsub.googleapis.com、run.googleapis.com、storage.googleapis.com、eventarc.googleapis.com
  7. Google Cloud CLI をインストールします。
  8. gcloud CLI を初期化するには:

    gcloud init
  9. Google Cloud プロジェクトを作成または選択します

    • Google Cloud プロジェクトを作成します。

      gcloud projects create PROJECT_ID

      PROJECT_ID は、作成する Google Cloud プロジェクトの名前に置き換えます。

    • 作成した Google Cloud プロジェクトを選択します。

      gcloud config set project PROJECT_ID

      PROJECT_ID は、実際の Google Cloud プロジェクト名に置き換えます。

  10. Google Cloud プロジェクトで課金が有効になっていることを確認します

  11. Artifact Registry、Cloud Build、Logging、Pub/Sub、Cloud Run、Cloud Storage、Eventarc API を有効にします。

    gcloud services enable artifactregistry.googleapis.comcloudbuild.googleapis.com、logging.googleapis.com、pubsub.googleapis.com、run.googleapis.com、storage.googleapis.com、eventarc.googleapis.com
  12. gcloud コンポーネントを更新します。
    gcloud components update
  13. アカウントを使用してログインします。
    gcloud auth login
    
  14. このチュートリアルで使用する構成変数を設定します。
    export REGION=us-central1
    gcloud config set run/region ${REGION}
    gcloud config set run/platform managed
    gcloud config set eventarc/location ${REGION}
    export SERVICE_NAME=helloworld-events
    
  15. 監査ログに記録されるデータアクセスを構成するには、storage.googleapis.com サービスの ADMIN_READDATA_READDATA_WRITE のログタイプを有効にします。
    1. プロジェクトの IAM ポリシーを読み取り、ファイルに保存します。
      gcloud projects get-iam-policy PROJECT_ID > /tmp/policy.yaml
    2. /tmp/policy.yaml 内のポリシーを編集し、データアクセス監査ログの構成のみを追加または変更します。
      auditConfigs:
      - auditLogConfigs:
      - logType: ADMIN_READ
      - logType: DATA_WRITE
      - logType: DATA_READ
      service: storage.googleapis.com
    3. 新しい IAM ポリシーを作成します。
      gcloud projects set-iam-policy PROJECT_ID /tmp/policy.yaml
      上記のコマンドで別の変更との競合が報告された場合は、プロジェクトの IAM ポリシーの読み取りからやり直してください。
  16. プロジェクトのサービス アカウントを作成します。
    gcloud iam service-accounts create sample-service-account \
        --description="A sample service account" \
        --display-name="Sample service account"
    サービス アカウントを作成した後、サービス アカウントを使用できるようになるまで最大で 7 分かかることがあります。サービス アカウントを作成した直後に使用しようとしてエラーが表示された場合は、60 秒以上待ってからもう一度お試しください。
  17. sample-service-account が作成されたことを確認するには、次のコマンドを実行します。
    gcloud iam service-accounts list
    出力例を以下に示します。
    DISPLAY NAME                     EMAIL                                                               DISABLED
    Default compute service account  PROJECT_NUMBER-compute@developer.gserviceaccount.com                False
    Sample service account           sample-service-account@PROJECT_ID.iam.gserviceaccount.com           False
  18. Eventarc トリガーに関連付けられたサービス アカウントに、プロジェクトの Cloud Run 起動元run.invoker)と Eventarc イベント受信者roles/eventarc.eventReceiver)のロールを付与します。
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member="serviceAccount:sample-service-account@PROJECT_ID.iam.gserviceaccount.com" \
        --role="roles/run.invoker"
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member="serviceAccount:sample-service-account@PROJECT_ID.iam.gserviceaccount.com" \
        --role="roles/eventarc.eventReceiver"

    PROJECT_ID は、実際の Google Cloud プロジェクト ID に置き換えます。

    この操作を行うと、テスト目的のために、プロジェクト内の Cloud Run のすべてのサービスとジョブに関する Cloud Run 起動元のロールが付与されます。Cloud Run の特定のサービスに関するこのロールを付与することもできます。詳細については、Cloud Run サービスの権限を付与するをご覧ください。

    Cloud Run 起動元のロールを付与せずに認証済みの Cloud Run サービスのトリガーを作成すると、トリガーは正常に作成され、アクティブになります。ただし、トリガーは期待どおりに機能せず、次のようなメッセージがログに記録されます。

    The request was not authenticated. Either allow unauthenticated invocations or set the proper Authorization header.

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

gsutil mb -l $REGION gs://events-tutorial-PROJECT_ID/

イベントソースの作成後、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
    gsutil 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 ログで確認できました。

クリーンアップ

サービスが使用されていない場合、Cloud Run の料金は発生しませんが、Artifact Registry にコンテナ イメージを保存すると料金が発生します。また、Cloud Storage バケットにファイルを保存した場合や、Eventarc リソースを使用した場合にも料金が発生します。

次のことが可能です。

  1. コンテナ イメージを削除する

  2. ストレージ バケットを削除する

  3. Eventarc トリガーを削除する

また、Google Cloud プロジェクトを削除して、料金が発生しないようにすることもできます。Google Cloud プロジェクトを削除すると、そのプロジェクト内で使用されているすべてのリソースに対する課金が停止します。

Google Cloud プロジェクトを削除します。

gcloud projects delete PROJECT_ID

次のステップ