コレクションでコンテンツを整理 必要に応じて、コンテンツの保存と分類を行います。
クイックスタート: Cloud Audit Logs を使用したイベントの受信(Google Cloud CLI)

Cloud Audit Logs を使用してイベントを受信する(gcloud CLI)

このクイックスタートでは、Eventarc を使用して Cloud Storage からイベントを受信する宛先として Google Kubernetes Engine(GKE)サービスを設定する方法について説明します。

このクイックスタートでは、以下の作業を行います。

  1. イベントソースとなる Cloud Storage バケットを作成する。
  2. GKE クラスタを作成する。
  3. イベントをターゲットに転送するイベント フォワーダー コンポーネントを使用して、Pub/Sub からイベントを pull するようにサービス アカウントを設定する。
  4. Eventarc で GKE の宛先を初期化する。
  5. イベントを受信する GKE サービスをデプロイする。
  6. Cloud Storage から GKE サービスにイベントを送信する Eventarc トリガーを作成する。
  7. Cloud Storage バケットにファイルをアップロードしてイベントを生成し、GKE Pod のログでイベントを確認する。

始める前に

  1. Google Cloud アカウントにログインします。Google Cloud を初めて使用する場合は、アカウントを作成して、実際のシナリオでの Google プロダクトのパフォーマンスを評価してください。新規のお客様には、ワークロードの実行、テスト、デプロイができる無料クレジット $300 分を差し上げます。
  2. Google Cloud Console の [プロジェクト セレクタ] ページで、Google Cloud プロジェクトを選択または作成します。

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

  3. Cloud プロジェクトに対して課金が有効になっていることを確認します。詳しくは、プロジェクトで課金が有効になっているかどうかを確認する方法をご覧ください。

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

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

  5. Cloud プロジェクトに対して課金が有効になっていることを確認します。詳しくは、プロジェクトで課金が有効になっているかどうかを確認する方法をご覧ください。

  6. Google Cloud CLI をインストールして初期化します。デフォルトのコンピューティング リージョンを構成するように求められたら、「n」と入力します。
  7. gcloud コンポーネントを更新します。
    gcloud components update
  8. Google Cloud、Cloud Build、Resource Manager、Google Kubernetes Engine API、Container Registry、Eventarc API を有効にします。
    gcloud services enable cloudapis.googleapis.com
    gcloud services enable cloudbuild.googleapis.com
    gcloud services enable cloudresourcemanager.googleapis.com
    gcloud services enable container.googleapis.com
    gcloud services enable containerregistry.googleapis.com
    gcloud services enable eventarc.googleapis.com
  9. このクイックスタートで使用する構成変数を設定します。
    gcloud config set project PROJECT_ID
    gcloud config set run/cluster events-cluster
    gcloud config set run/cluster_location us-central1
    gcloud config set run/platform gke
    gcloud config set eventarc/location us-central1
    ここで PROJECT_ID は、Google Cloud プロジェクト ID です。
  10. (省略可)次のように入力すると、Google Cloud CLI を使用して構成設定を確認できます。
    gcloud config list
    出力例を以下に示します。
    [eventarc]
    location = us-central1
    [run]
    cluster = events-cluster
    cluster_location = us-central1
    platform = gke
  11. Google Cloud Storage で、Cloud Audit Logs の管理読み取りデータ読み取りデータ書き込みの各ログタイプを有効にします。
    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
      bindings:
      - members:
        - user:EMAIL_ADDRESS
        role: roles/owner
      etag: BwW_bHKTV5U=
      version: 1
      EMAIL_ADDRESS は実際のメールアドレスに置き換えます。
    3. 新しい IAM ポリシーを作成します。

      gcloud projects set-iam-policy PROJECT_ID /tmp/policy.yaml
      上記のコマンドで別の変更との競合が報告された場合は、プロジェクトの IAM ポリシーの読み取りからやり直してください。

Cloud Storage バケットを作成する

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

gsutil mb -l us-central1 gs://events-quickstart-$(gcloud config get-value project)/

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

GKE クラスタを作成する

HttpLoadBalancing アドオンを使用して GKE クラスタを作成します。Workload Identity を有効にして、GKE 内で実行されているアプリケーションから Google Cloud サービスにアクセスできるようにします。

PROJECT_ID=$(gcloud config get-value project)

gcloud beta container clusters create events-cluster \
  --addons=HttpLoadBalancing \
  --machine-type=n1-standard-4 \
  --enable-autoscaling --min-nodes=2 --max-nodes=10 \
  --no-issue-client-certificate --num-nodes=2  \
  --logging=SYSTEM,WORKLOAD \
  --monitoring=SYSTEM \
  --scopes=cloud-platform,logging-write,monitoring-write,pubsub \
  --zone us-central1 \
  --release-channel=rapid \
  --workload-pool=$PROJECT_ID.svc.id.goog

クラスタの作成が完了するまで待機します。作成プロセス中の警告は無視できます。クラスタの作成が完了すると、出力は次のようになります。

Creating cluster events-cluster...done.
Created [https://container.googleapis.com/v1beta1/projects/my-project/zones/us-central1/clusters/events-cluster].

ここで my-project は、Google Cloud プロジェクト ID です。

これにより、my-projectevents-cluster という名前の GKE クラスタが作成されます。

Google サービス アカウントを設定する

ユーザー提供のサービス アカウントを設定します。イベント フォワーダー コンポーネントが Pub/Sub からイベントを pull し、ターゲットに転送できるように、特定のロールを付与します。

  1. トリガーの作成に使用される TRIGGER_GSA というサービス アカウントを作成します。

    TRIGGER_GSA=eventarc-gke-triggers
    gcloud iam service-accounts create $TRIGGER_GSA
  2. サービス アカウントに pubsub.subscribermonitoring.metricWritereventarc.eventReceiver のロールを付与します。

    gcloud projects add-iam-policy-binding $PROJECT_ID \
      --member "serviceAccount:$TRIGGER_GSA@$PROJECT_ID.iam.gserviceaccount.com" \
      --role "roles/pubsub.subscriber"
    
    gcloud projects add-iam-policy-binding $PROJECT_ID \
      --member "serviceAccount:$TRIGGER_GSA@$PROJECT_ID.iam.gserviceaccount.com" \
      --role "roles/monitoring.metricWriter"
    
    gcloud projects add-iam-policy-binding $PROJECT_ID \
     --member "serviceAccount:$TRIGGER_GSA@$PROJECT_ID.iam.gserviceaccount.com" \
     --role "roles/eventarc.eventReceiver"

GKE の宛先を有効にする

Eventarc は、GKE サービスをターゲットとするトリガーごとに、Pub/Sub からイベントを pull してターゲットに転送するイベント フォワーダー コンポーネントを作成します。コンポーネントを作成し、GKE クラスタでリソースを管理するには、Eventarc サービス アカウントに権限を付与します。

  1. Eventarc 用に GKE の宛先を有効にします。

    gcloud eventarc gke-destinations init
    
  2. 必要なロールをバインドするよう求められたら、「y」と入力します。

    サービス アカウントに次のロールが割り当てられます。

    • compute.viewer
    • container.developer
    • iam.serviceAccountAdmin

GKE サービスの宛先を作成する

ビルド済みのイメージ gcr.io/cloudrun/hello を使用して、イベントを受信してログに記録する GKE サービスをデプロイします。

  1. Kubernetes Deployment を作成します。

    SERVICE_NAME=hello-gke
    kubectl create deployment $SERVICE_NAME \
    --image=gcr.io/cloudrun/hello
    
  2. これを Kubernetes Service として公開します。

    kubectl expose deployment $SERVICE_NAME \
    --type LoadBalancer --port 80 --target-port 8080
    

Cloud Audit Logs トリガーを作成する

ファイルを Cloud Storage にアップロードすると、Eventarc トリガーが Cloud Storage から hello-gke GKE サービスにイベントを送信します。

  1. Cloud Audit Logs トリガーを作成します。

    gcloud eventarc triggers create my-gke-trigger \
      --location=$TRIGGER_LOCATION \
      --destination-gke-cluster="events-cluster" \
      --destination-gke-location="us-central1" \
      --destination-gke-namespace="default" \
      --destination-gke-service="hello-gke" \
      --destination-gke-path="/" \
      --event-filters="type=google.cloud.audit.log.v1.written" \
      --event-filters="serviceName=storage.googleapis.com" \
      --event-filters="methodName=storage.objects.create" \
      --service-account=$TRIGGER_GSA@$PROJECT_ID.iam.gserviceaccount.com
    

    これにより、my-gke-trigger というトリガーが作成されます。

  2. トリガーが正常に作成されたことを確認します。

    gcloud eventarc triggers list
    

    出力例を以下に示します。

    NAME                 TYPE                                           DESTINATION                           ACTIVE
    my-gke-trigger       google.cloud.audit.log.v1.written              GKE: hello-gke                        Yes
    

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

Cloud Storage にテキスト ファイルをアップロードしてイベントを生成し、GKE サービスをトリガーします。その後、Pod ログでイベントのメッセージを確認できます。

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

    echo "Hello World" > random.txt
    gsutil cp random.txt gs://events-quickstart-$(gcloud config get-value project)/random.txt

    アップロードによりイベントが生成され、GKE Pod によってイベントのメッセージがログに記録されます。

  2. イベント メッセージを表示するには:

    1. Pod ID を見つけます。
      kubectl get pods
      
      出力例を以下に示します。
      NAME                                         READY   STATUS             RESTARTS   AGE
      hello-gke-645964f578-2mjjt                   1/1     Running            0          35s
      ここで、NAME は Pod の名前です。NAME をメモします。これは次の手順で使用します。
    2. Pod のログを確認します。
      kubectl logs NAME
      NAME は、コピーした Pod の名前に置き換えます。
    3. 次のようなログエントリを探します。
      2022/02/24 22:23:49 Hello from Cloud Run! The container started successfully and is listening for HTTP requests on $PORT
      {"severity":"INFO","eventType":"google.cloud.audit.log.v1.written","message":"Received event of type google.cloud.audit.log.v1.written. [...]}
      

クリーンアップ

サービスが使用されていない場合、Cloud Run の料金は発生しませんが、Container Registry へのコンテナ イメージの保存Eventarc リソースPub/Sub メッセージGKE クラスタに対して Cloud Run の料金が発生する場合があります。

イメージを削除し、ストレージ バケットを削除して、GKE クラスタを削除できます。

Eventarc トリガーを削除するには:

gcloud eventarc triggers delete my-gke-trigger

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

gcloud projects delete PROJECT_ID_OR_NUMBER

PROJECT_ID_OR_NUMBER は、プロジェクト ID またはプロジェクト番号に置き換えます。

次のステップ

Pub/Sub を使用してイベントを受信する(Google Cloud CLI)