Cloud Audit Logs を使用してイベントを受信する(gcloud CLI)
このクイックスタートでは、Eventarc を使用して Cloud Storage からイベントを受信する宛先として Google Kubernetes Engine(GKE)サービスを設定する方法について説明します。
このクイックスタートでは、以下の作業を行います。
- Eventarc がイベントを pull してターゲットに転送できるように、サービス アカウントを設定します。
- イベントソースとなる Cloud Storage バケットを作成します。
- GKE クラスタを作成する。
- Eventarc で GKE の宛先を初期化する。
- イベントを受信する GKE サービスをデプロイする。
- Cloud Storage から GKE サービスにイベントを送信する Eventarc トリガーを作成する。
- Cloud Storage バケットにファイルをアップロードしてイベントを生成し、GKE Pod のログでイベントを確認する。
始める前に
- 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.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
Create or select a Google Cloud project.
-
Create a Google Cloud project:
gcloud projects create PROJECT_ID
Replace
PROJECT_ID
with a name for the Google Cloud project you are creating. -
Select the Google Cloud project that you created:
gcloud config set project PROJECT_ID
Replace
PROJECT_ID
with your Google Cloud project name.
-
-
Make sure that billing is enabled for your Google Cloud project.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
Create or select a Google Cloud project.
-
Create a Google Cloud project:
gcloud projects create PROJECT_ID
Replace
PROJECT_ID
with a name for the Google Cloud project you are creating. -
Select the Google Cloud project that you created:
gcloud config set project PROJECT_ID
Replace
PROJECT_ID
with your Google Cloud project name.
-
-
Make sure that billing is enabled for your Google Cloud project.
- Google Cloud CLI のコンポーネントを更新します。
gcloud components update
- Eventarc、Resource Manager、Google Kubernetes Engine の各 API を有効にします。
gcloud services enable eventarc.googleapis.com \ cloudresourcemanager.googleapis.com \ container.googleapis.com
- このクイックスタートで使用する構成変数を設定します。
PROJECT_ID=$(gcloud config get-value project) TRIGGER_SA=eventarc-sa CLUSTER_NAME=events-cluster SERVICE_NAME=hello-gke
-
プロジェクト作成者には、オーナーロール(
roles/owner
)が付与されます。デフォルトでは、この Identity and Access Management(IAM)ロールには、ほとんどの Google Cloud リソースへの完全アクセス権に必要な権限が含まれており、この手順は省略できます。プロジェクト作成者でない場合は、プロジェクトで適切なプリンシパルに必要な権限を付与する必要があります。プリンシパルは Google アカウント(エンドユーザーの場合)やサービス アカウント(アプリケーションとコンピューティング ワークロードの場合)になることもあります。詳細については、イベントの宛先のロールと権限のページをご覧ください。
必要な権限
このクイックスタートを完了するために必要な権限を取得するには、プロジェクトに対する次の IAM ロールを付与するよう管理者に依頼してください。
-
Eventarc 管理者(
roles/eventarc.admin
) -
Kubernetes Engine 管理者(
roles/container.admin
) -
ログ表示アクセス者(
roles/logging.viewAccessor
) -
プロジェクト IAM 管理者(
roles/resourcemanager.projectIamAdmin
) - サービス アカウント管理者(
roles/iam.serviceAccountAdmin
) -
サービス アカウント ユーザー(
roles/iam.serviceAccountUser
) - Service Usage 管理者 (
roles/serviceusage.serviceUsageAdmin
) -
ストレージ管理者(
roles/storage.admin
)
ロールの付与については、プロジェクト、フォルダ、組織へのアクセスを管理するをご覧ください。
-
Eventarc 管理者(
Compute Engine のデフォルトのサービス アカウントをメモしておいてください。テスト目的で、Eventarc トリガーに関連付けて、トリガーの ID を示すためです。このサービス アカウントは、Compute Engine を使用する Google Cloud サービスを有効にするか、使用すると自動的に作成されます。メールアドレスの形式は次のとおりです。
PROJECT_NUMBER-compute@developer.gserviceaccount.com
PROJECT_NUMBER
は、実際の Google Cloud プロジェクトの番号に置き換えます。プロジェクト番号は、Google Cloud コンソールの [ようこそ] ページで確認できます。また、次のコマンドで確認することもできます。gcloud projects describe PROJECT_ID --format='value(projectNumber)'
本番環境では、新しいサービス アカウントを作成して、必要最小限の権限を含む、最小権限の原則に従った 1 つ以上の IAM ロールを付与することを強くおすすめします。
- プロジェクトの Pub/Sub サブスクライバーのロール(
roles/pubsub.subscriber
)を Compute Engine のデフォルト サービス アカウントに付与して、Eventarc トリガーが Pub/Sub からイベントを pull できるようにします。gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com \ --role=roles/pubsub.subscriber
- プロジェクトの Eventarc イベント レシーバーのロール(
roles/eventarc.eventReceiver
)を Compute Engine のデフォルト サービス アカウントに付与して、Eventarc トリガーがイベント プロバイダからイベントを受信できるようにします。gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com \ --role=roles/eventarc.eventReceiver
- 2021 年 4 月 8 日以前に、認証済みの Pub/Sub push リクエストをサポートするために Cloud Pub/Sub サービス エージェントを有効にした場合は、サービス アカウント トークン作成者のロール(
roles/iam.serviceAccountTokenCreator
)をサービス エージェントに付与します。それ以外の場合、このロールはデフォルトで付与されます。gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:service-PROJECT_NUMBER@gcp-sa-pubsub.iam.gserviceaccount.com \ --role=roles/iam.serviceAccountTokenCreator
- Google Cloud Storage の場合、管理読み取り、データ読み取り、データ書き込みの各サービスに対するログタイプを有効にします。
- プロジェクトの IAM ポリシーを読み取り、ファイルに保存します。
gcloud projects get-iam-policy PROJECT_ID > /tmp/policy.yaml
- /tmp/policy.yaml 内のポリシーを編集し、データアクセス監査ログの構成のみを追加または変更します。注意: bindings: セクションと etag: セクションは、変更せずにそのままの状態にしておく必要があります。このようにしないと、プロジェクトを使用できなくなる場合があります。
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
は、実際のメールアドレスに置き換えます。 - 新しい IAM ポリシーを作成します。
上記のコマンドで別の変更との競合が報告された場合は、プロジェクトの IAM ポリシーの読み取りからやり直してください。gcloud projects set-iam-policy PROJECT_ID /tmp/policy.yaml
- プロジェクトの IAM ポリシーを読み取り、ファイルに保存します。
Cloud Storage バケットを作成する
このクイックスタートでは、イベントソースとして Cloud Storage を使用します。Cloud Storage バケットを作成します。
gcloud storage buckets create gs://events-quickstart-$(gcloud config get-value project) / --location=us-central1
イベントソースの作成後、イベント レシーバ サービスを GKE にデプロイできます。
GKE クラスタを作成する
GKE クラスタは、少なくとも 1 つのクラスタ コントロール プレーン マシンと、ノードと呼ばれる複数のワーカーマシンで構成されます。ノードは Compute Engine 仮想マシン(VM)インスタンスであり、自身をクラスタの一部にするために必要な Kubernetes プロセスを実行します。アプリケーションをクラスタにデプロイすると、そのアプリケーションがこれらのノードで実行されます。
events-cluster
という名前の Autopilot クラスタを作成します。
gcloud container clusters create-auto $CLUSTER_NAME --region us-central1
クラスタの作成が完了するまでに数分かかることがあります。クラスタの作成が完了すると、出力は次のようになります。
Creating cluster events-cluster...done.
Created [https://container.googleapis.com/v1/projects/MY_PROJECT
/zones/us-central1/clusters/events-cluster].
[...]
STATUS: RUNNING
これにより、Google Cloud プロジェクト ID が MY_PROJECT
のプロジェクトに、events-cluster
という名前の GKE クラスタが作成されます。
GKE の宛先を有効にする
Eventarc は、GKE サービスをターゲットとするトリガーごとに、Pub/Sub からイベントを pull してターゲットに転送するイベント フォワーダー コンポーネントを作成します。コンポーネントを作成し、GKE クラスタでリソースを管理するには、Eventarc サービス エージェントに権限を付与します。
Eventarc 用に GKE の宛先を有効にします。
gcloud eventarc gke-destinations init
必要なロールをバインドするよう求められたら、「
y
」と入力します。サービス アカウントに次のロールが割り当てられます。
compute.viewer
container.developer
iam.serviceAccountAdmin
GKE Service の宛先を作成する
ビルド済みのイメージ us-docker.pkg.dev/cloudrun/container/hello
を使用して、イベントを受信してログに記録する GKE Service をデプロイします。
Kubernetes は、
kubeconfig
という名前の YAML ファイルを使用して、kubectl
のクラスタ認証情報を格納します。GKE クラスタのkubectl
を指すように、認証情報とエンドポイント情報を使用してkubeconfig
ファイルを更新します。gcloud container clusters get-credentials $CLUSTER_NAME \ --region us-central1
Kubernetes Deployment を作成します。
kubectl create deployment $SERVICE_NAME \ --image=us-docker.pkg.dev/cloudrun/container/hello
これを Kubernetes Service として公開します。
kubectl expose deployment $SERVICE_NAME \ --type ClusterIP --port 80 --target-port 8080
Eventarc トリガーを作成する
ファイルを Cloud Storage にアップロードすると、Eventarc トリガーが Cloud Storage から hello-gke
GKE サービスにイベントを送信します。
Cloud Audit Logs トリガーを作成します。
gcloud eventarc triggers create my-gke-trigger \ --location="us-central1" \ --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="PROJECT_NUMBER-compute@developer.gserviceaccount.com"
これにより、
my-gke-trigger
というトリガーが作成されます。トリガーが正常に作成されたことを確認します。
gcloud eventarc triggers list
出力例を以下に示します。
NAME: my-gke-trigger TYPE: google.cloud.audit.log.v1.written DESTINATION: GKE: hello-gke ACTIVE: By 20:39:43 LOCATION: us-central1
イベントを生成して表示する
Cloud Storage にテキスト ファイルをアップロードしてイベントを生成し、GKE サービスをトリガーします。その後、Pod ログでイベントのメッセージを確認できます。
Cloud Storage にファイルをアップロードします。
echo "Hello World" > random.txt gcloud storage cp random.txt gs://events-quickstart-$(gcloud config get-value project)/random.txt
アップロードによりイベントが生成され、GKE Pod によってイベントのメッセージがログに記録されます。
イベント メッセージを表示するには:
Pod ID を見つけます。
kubectl get pods
出力例を以下に示します。
NAME READY STATUS RESTARTS AGE hello-gke-645964f578-2mjjt 1/1 Running 0 35s
次のステップで使用する Pod の
NAME
をコピーします。Pod のログを確認します。
kubectl logs NAME
NAME
は、コピーした Pod の名前に置き換えます。次のようなログエントリを探します。
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. [...]}
クリーンアップ
このドキュメントに記載されているタスクの完了後、作成したリソースを削除すると、それ以上の請求は発生しません。
次のことが可能です。
また、Google Cloud プロジェクトを削除して、料金が発生しないようにすることもできます。Google Cloud プロジェクトを削除すると、そのプロジェクト内で使用されているすべてのリソースに対する課金が停止します。
Delete a Google Cloud project:
gcloud projects delete PROJECT_ID
複数のチュートリアルとクイックスタートを実施する予定がある場合は、プロジェクトを再利用すると、プロジェクトの割り当て上限を超えないようにできます。