1. บทนำ

Eventarc ช่วยให้เชื่อมต่อบริการต่างๆ (Cloud Run, Kubernetes, Workflows) กับเหตุการณ์จากแหล่งที่มาต่างๆ ได้ง่าย ซึ่งช่วยให้คุณสร้างสถาปัตยกรรมที่ขับเคลื่อนด้วยเหตุการณ์ซึ่ง Microservice มีการเชื่อมต่อแบบหลวมๆ และกระจายอยู่ นอกจากนี้ยังจัดการการส่งผ่านข้อมูลเหตุการณ์ การนำส่ง ความปลอดภัย การให้สิทธิ์ และการจัดการข้อผิดพลาดให้คุณ ซึ่งจะช่วยเพิ่มความคล่องตัวของนักพัฒนาแอปและความยืดหยุ่นของแอปพลิเคชัน ดูข้อมูลเบื้องต้นเกี่ยวกับ Eventarc ได้ที่ เรียกใช้ Cloud Run ด้วยเหตุการณ์จาก Codelab ของ Eventarc
ใน Codelab นี้ คุณจะได้ใช้ Eventarc เพื่ออ่านเหตุการณ์จาก Pub/Sub, Cloud Storage และบันทึกการตรวจสอบระบบคลาวด์ แล้วส่งไปยังบริการ Kubernetes ที่ทำงานบน Google Kubernetes Engine (GKE)
สิ่งที่คุณจะได้เรียนรู้
- สร้างคลัสเตอร์ GKE
- สร้างบริการ GKE เป็น Event Sink
- สร้างทริกเกอร์ Pub/Sub
- สร้างทริกเกอร์ Cloud Storage
- สร้างทริกเกอร์บันทึก Cloud Audit
2. การตั้งค่าและข้อกำหนด
การตั้งค่าสภาพแวดล้อมแบบเรียนรู้ด้วยตนเอง
- ลงชื่อเข้าใช้ Google Cloud Console แล้วสร้างโปรเจ็กต์ใหม่หรือใช้โปรเจ็กต์ที่มีอยู่ซ้ำ หากยังไม่มีบัญชี Gmail หรือ Google Workspace คุณต้องสร้างบัญชี



- ชื่อโปรเจ็กต์คือชื่อที่แสดงสำหรับผู้เข้าร่วมโปรเจ็กต์นี้ ซึ่งเป็นสตริงอักขระที่ Google APIs ไม่ได้ใช้ โดยคุณจะอัปเดตได้ทุกเมื่อ
- รหัสโปรเจ็กต์จะไม่ซ้ำกันในโปรเจ็กต์ Google Cloud ทั้งหมดและเปลี่ยนแปลงไม่ได้ (เปลี่ยนไม่ได้หลังจากตั้งค่าแล้ว) Cloud Console จะสร้างสตริงที่ไม่ซ้ำกันโดยอัตโนมัติ ซึ่งโดยปกติแล้วคุณไม่จำเป็นต้องสนใจว่าสตริงนั้นคืออะไร ใน Codelab ส่วนใหญ่ คุณจะต้องอ้างอิงรหัสโปรเจ็กต์ (โดยปกติจะระบุเป็น
PROJECT_ID) หากไม่ชอบรหัสที่สร้างขึ้น คุณก็สร้างรหัสแบบสุ่มอีกรหัสหนึ่งได้ หรือคุณจะลองใช้ชื่อของคุณเองเพื่อดูว่าพร้อมใช้งานหรือไม่ก็ได้ คุณจะเปลี่ยนแปลงรหัสนี้หลังจากขั้นตอนนี้ไม่ได้ และรหัสจะยังคงอยู่ตลอดระยะเวลาของโปรเจ็กต์ - โปรดทราบว่ายังมีค่าที่ 3 ซึ่งคือหมายเลขโปรเจ็กต์ที่ API บางตัวใช้ ดูข้อมูลเพิ่มเติมเกี่ยวกับค่าทั้ง 3 นี้ได้ในเอกสารประกอบ
- จากนั้นคุณจะต้องเปิดใช้การเรียกเก็บเงินใน Cloud Console เพื่อใช้ทรัพยากร/API ของ Cloud การทำตาม Codelab นี้ไม่ควรมีค่าใช้จ่ายมากนัก หรืออาจไม่มีเลย หากต้องการปิดทรัพยากรเพื่อไม่ให้มีการเรียกเก็บเงินนอกเหนือจากบทแนะนำนี้ คุณสามารถลบทรัพยากรที่สร้างขึ้นหรือลบทั้งโปรเจ็กต์ได้ ผู้ใช้ Google Cloud รายใหม่มีสิทธิ์เข้าร่วมโปรแกรมช่วงทดลองใช้ฟรีมูลค่า$300 USD
เริ่มต้น Cloud Shell
แม้ว่าคุณจะใช้งาน Google Cloud จากระยะไกลจากแล็ปท็อปได้ แต่ใน Codelab นี้คุณจะใช้ Google Cloud Shell ซึ่งเป็นสภาพแวดล้อมบรรทัดคำสั่งที่ทำงานในระบบคลาวด์
จาก Google Cloud Console ให้คลิกไอคอน Cloud Shell ในแถบเครื่องมือด้านขวาบน

การจัดสรรและเชื่อมต่อกับสภาพแวดล้อมจะใช้เวลาเพียงไม่กี่นาที เมื่อเสร็จแล้ว คุณควรเห็นข้อความคล้ายกับตัวอย่างต่อไปนี้

เครื่องเสมือนนี้มาพร้อมเครื่องมือพัฒนาซอฟต์แวร์ทั้งหมดที่คุณต้องการ โดยมีไดเรกทอรีหลักแบบถาวรขนาด 5 GB และทำงานบน Google Cloud ซึ่งช่วยเพิ่มประสิทธิภาพเครือข่ายและการตรวจสอบสิทธิ์ได้อย่างมาก คุณสามารถทำงานทั้งหมดใน Codelab นี้ได้ภายในเบราว์เซอร์ คุณไม่จำเป็นต้องติดตั้งอะไร
ก่อนเริ่มต้น
ใน Cloud Shell ให้ตรวจสอบว่าได้ตั้งค่ารหัสโปรเจ็กต์แล้ว
PROJECT_ID=your-project-id gcloud config set project $PROJECT_ID
3. สร้างคลัสเตอร์ GKE
ก่อนอื่น ให้เปิดใช้บริการที่จำเป็นสำหรับ GKE ดังนี้
gcloud services enable container.googleapis.com
สร้างคลัสเตอร์ GKE Autopilot
CLUSTER_NAME=eventarc-cluster REGION=us-central1 gcloud container clusters create-auto $CLUSTER_NAME --region $REGION
โปรดตรวจสอบว่าการสร้างคลัสเตอร์เสร็จสมบูรณ์แล้วก่อนไปยังขั้นตอนถัดไป
4. ติดตั้งใช้งานบริการ GKE
ก่อนที่จะติดตั้งใช้งานบริการ ให้รับข้อมูลเข้าสู่ระบบการตรวจสอบสิทธิ์เพื่อโต้ตอบกับคลัสเตอร์ด้วย kubectl โดยทำดังนี้
gcloud container clusters get-credentials $CLUSTER_NAME \
--region $REGION
จากนั้น ให้ติดตั้งใช้งาน hello container ของ Cloud Run เป็นการติดตั้งใช้งาน Kubernetes บน GKE บริการนี้จะบันทึกคำขอ HTTP และ CloudEvents ที่ได้รับ
SERVICE_NAME=hello-gke
kubectl create deployment $SERVICE_NAME \
--image=gcr.io/cloudrun/hello
แสดงการทำให้ใช้งานได้เป็นบริการ Kubernetes ภายใน ซึ่งจะสร้างบริการที่มี IP แบบคงที่ที่เข้าถึงได้ภายในคลัสเตอร์
kubectl expose deployment $SERVICE_NAME \ --type ClusterIP --port 80 --target-port 8080
ก่อนที่จะไปยังขั้นตอนถัดไป โปรดตรวจสอบว่าพ็อดทำงานอยู่โดยทำดังนี้
kubectl get pods NAME READY STATUS hello-gke-df6469d4b-5vv22 1/1 Running
นอกจากนี้ คุณยังดูบริการได้โดย
kubectl get svc NAME TYPE CLUSTER-IP EXTERNAL-IP hello-gke LoadBalancer 10.51.1.26 <none>
5. ตั้งค่า Eventarc
ในขั้นตอนนี้ คุณจะเรียกใช้ขั้นตอนเพื่อตั้งค่า Eventarc และเริ่มต้นปลายทาง GKE ของ Eventarc
ก่อนอื่น ให้เปิดใช้บริการที่จำเป็นสำหรับปลายทาง Eventarc และ Eventarc GKE ดังนี้
gcloud services enable eventarc.googleapis.com \ cloudresourcemanager.googleapis.com
จากนั้นเปิดใช้ Eventarc เพื่อจัดการคลัสเตอร์ GKE โดยทำดังนี้
gcloud eventarc gke-destinations init
Eventarc จะสร้างพ็อดตัวส่งต่อเหตุการณ์แยกต่างหากสำหรับทริกเกอร์แต่ละรายการที่กำหนดเป้าหมายไปยังบริการ GKE และต้องมีสิทธิ์ที่ชัดเจนในการทำการเปลี่ยนแปลงคลัสเตอร์ โดยการให้สิทธิ์แก่บัญชีบริการพิเศษเพื่อจัดการทรัพยากรในคลัสเตอร์ โดยจำเป็นต้องดำเนินการอย่างน้อย 1 ครั้งต่อโปรเจ็กต์ Google Cloud
6. การค้นพบกิจกรรม
ก่อนสร้างทริกเกอร์ คุณสามารถค้นหาแหล่งที่มาของเหตุการณ์ ประเภทของเหตุการณ์ที่แหล่งที่มาปล่อยออกมา และวิธีกำหนดค่าทริกเกอร์เพื่อใช้เหตุการณ์เหล่านั้น
คุณสามารถดูหน้าเอกสารประกอบเกี่ยวกับเหตุการณ์ที่ Eventarc รองรับได้ นอกจากนี้ คุณยังสำรวจเหตุการณ์โดยใช้ gcloud ได้ด้วย
วิธีดูรายการเหตุการณ์ประเภทต่างๆ
gcloud beta eventarc attributes types list NAME DESCRIPTION google.cloud.audit.log.v1.written Cloud Audit Log written google.cloud.pubsub.topic.v1.messagePublished Cloud Pub/Sub message published google.cloud.storage.object.v1.archived Cloud Storage: Sent when a live version of an (object versioned) object is archived or deleted. google.cloud.storage.object.v1.deleted Cloud Storage: Sent when an object has been permanently deleted. google.cloud.storage.object.v1.finalized Cloud Storage: Sent when a new object (or a new generation of an existing object). google.cloud.storage.object.v1.metadataUpdated Cloud Storage: Sent when the metadata of an existing object changes.
ดูข้อมูลเพิ่มเติมเกี่ยวกับเหตุการณ์แต่ละประเภทได้โดยทำดังนี้
gcloud beta eventarc attributes types describe google.cloud.audit.log.v1.written attributes: type,serviceName,methodName,resourceName description: 'Cloud Audit Log: Sent when a log is written.' name: google.cloud.audit.log.v1.written
วิธีดูรายการบริการที่ปล่อยเหตุการณ์ประเภทหนึ่งๆ
gcloud beta eventarc attributes service-names list --type=google.cloud.audit.log.v1.written SERVICE_NAME DISPLAY_NAME accessapproval.googleapis.com Access Approval accesscontextmanager.googleapis.com Access Context Manager admin.googleapis.com Google Workspace Admin aiplatform.googleapis.com AI Platform (under Vertex AI) apigee.googleapis.com Apigee apigeeconnect.googleapis.com Apigee Connect ... workflows.googleapis.com Workflows
วิธีดูรายการชื่อเมธอด (เหตุการณ์ย่อย) ที่แต่ละบริการสามารถปล่อยได้
gcloud beta eventarc attributes method-names list --type=google.cloud.audit.log.v1.written --service-name=workflows.googleapis.com METHOD_NAME google.cloud.workflows.v1.Workflows.CreateWorkflow google.cloud.workflows.v1.Workflows.DeleteWorkflow google.cloud.workflows.v1.Workflows.GetWorkflow google.cloud.workflows.v1.Workflows.ListWorkflows google.cloud.workflows.v1.Workflows.UpdateWorkflow google.cloud.workflows.v1beta.Workflows.CreateWorkflow google.cloud.workflows.v1beta.Workflows.DeleteWorkflow google.cloud.workflows.v1beta.Workflows.GetWorkflow google.cloud.workflows.v1beta.Workflows.ListWorkflows google.cloud.workflows.v1beta.Workflows.UpdateWorkflow
7. สร้างทริกเกอร์ Pub/Sub
วิธีหนึ่งในการรับเหตุการณ์คือผ่าน Pub/Sub แอปพลิเคชันใดก็ได้สามารถเผยแพร่ข้อความไปยัง Pub/Sub และระบบจะส่งข้อความเหล่านี้ไปยังบริการผ่าน Eventarc ได้
ตั้งค่า
ก่อนสร้างทริกเกอร์ คุณต้องมีบัญชีบริการที่ทริกเกอร์จะใช้
สร้างบัญชีบริการ
SERVICE_ACCOUNT=eventarc-gke-trigger-sa gcloud iam service-accounts create $SERVICE_ACCOUNT
บัญชีบริการต้องได้รับบทบาทต่อไปนี้สำหรับทริกเกอร์ที่มีปลายทาง GKE
roles/pubsub.subscriberroles/monitoring.metricWriterroles/eventarc.eventReceiver(สําหรับทริกเกอร์ AuditLog เท่านั้น (ระบบจะเพิ่มในขั้นตอนถัดไป)
มอบบทบาทโดยทำดังนี้
gcloud projects add-iam-policy-binding $PROJECT_ID \ --member serviceAccount:$SERVICE_ACCOUNT@$PROJECT_ID.iam.gserviceaccount.com \ --role roles/pubsub.subscriber gcloud projects add-iam-policy-binding $PROJECT_ID \ --member serviceAccount:$SERVICE_ACCOUNT@$PROJECT_ID.iam.gserviceaccount.com \ --role roles/monitoring.metricWriter
สร้าง
สร้างทริกเกอร์เพื่อกำหนดเส้นทางข้อความ Pub/Sub ไปยังบริการของคุณ
TRIGGER_NAME=trigger-pubsub-gke gcloud eventarc triggers create $TRIGGER_NAME \ --destination-gke-cluster=$CLUSTER_NAME \ --destination-gke-location=$REGION \ --destination-gke-namespace=default \ --destination-gke-service=$SERVICE_NAME \ --destination-gke-path=/ \ --event-filters="type=google.cloud.pubsub.topic.v1.messagePublished" \ --location=$REGION \ --service-account=$SERVICE_ACCOUNT@$PROJECT_ID.iam.gserviceaccount.com
ทดสอบ
คุณตรวจสอบได้ว่ามีการสร้างทริกเกอร์โดยแสดงทริกเกอร์ทั้งหมดดังนี้
gcloud eventarc triggers list
ทริกเกอร์ Pub/Sub จะสร้างหัวข้อ Pub/Sub เบื้องหลัง มาดูกันว่าเราจะค้นหาและกำหนดค่าให้กับตัวแปรได้อย่างไร
TOPIC_ID=$(gcloud eventarc triggers describe $TRIGGER_NAME --location $REGION --format='value(transport.pubsub.topic)')
ใช้ gcloud เพื่อเผยแพร่ข้อความไปยังหัวข้อ
gcloud pubsub topics publish $TOPIC_ID --message="Hello World"
หากต้องการตรวจสอบว่าได้รับเหตุการณ์หรือไม่ ให้ค้นหาชื่อพ็อดก่อน
kubectl get pods NAME READY STATUS hello-gke-df6469d4b-5vv22 1/1 Running
และจัดเก็บไว้ในตัวแปร
POD_NAME=hello-gke-df6469d4b-5vv22
ตรวจสอบบันทึกของพ็อดเพื่อยืนยันเหตุการณ์ที่ได้รับ
kubectl logs $POD_NAME
{
"severity": "INFO",
"eventType": "google.cloud.pubsub.topic.v1.messagePublished",
"message": "Received event of type google.cloud.pubsub.topic.v1.messagePublished. Event data: Hello World",
"event": {
"data": {
"subscription": "projects/atamel-eventarc-gke/subscriptions/eventarc-us-central1-trigger-pubsub-gke-sub-270",
"message": {
"data": "SGVsbG8gV29ybGQ=",
"messageId": "6031025573654834",
"publishTime": "2022-10-19T14:13:07.990Z"
}
},
"datacontenttype": "application/json",
"id": "6031025573654834",
"source": "//pubsub.googleapis.com/projects/atamel-eventarc-gke/topics/eventarc-us-central1-trigger-pubsub-gke-729",
"specversion": "1.0",
"time": "2022-10-19T14:13:07.99Z",
"type": "google.cloud.pubsub.topic.v1.messagePublished"
}
}
8. สร้างทริกเกอร์ Cloud Storage
อีกวิธีหนึ่งในการรับเหตุการณ์คือผ่าน Cloud Storage เช่น แอปพลิเคชันสามารถอัปโหลดไฟล์ไปยังที่เก็บข้อมูล และส่งเหตุการณ์นั้นไปยังบริการผ่าน Eventarc ได้
ตั้งค่า
ก่อนสร้างทริกเกอร์ Cloud Storage ให้สร้างที่เก็บข้อมูลเพื่อรับเหตุการณ์จากแหล่งที่มาต่อไปนี้
BUCKET_NAME=eventarc-gcs-$PROJECT_ID gcloud storage buckets update gs://$BUCKET_NAME --location=$REGION
นอกจากนี้ คุณยังต้องเพิ่มpubsub.publisherบทบาทให้กับบัญชีบริการ Cloud Storage สำหรับทริกเกอร์ Cloud Storage ด้วย
SERVICE_ACCOUNT_STORAGE=$(gcloud storage service-agent --project=$PROJECT_ID)
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member serviceAccount:$SERVICE_ACCOUNT_STORAGE \
--role roles/pubsub.publisher
สร้าง
สร้างทริกเกอร์เพื่อกำหนดเส้นทางเหตุการณ์การสร้างไฟล์ใหม่จากที่เก็บข้อมูลไปยังบริการของคุณโดยทำดังนี้
TRIGGER_NAME=trigger-storage-gke gcloud eventarc triggers create $TRIGGER_NAME \ --destination-gke-cluster=$CLUSTER_NAME \ --destination-gke-location=$REGION \ --destination-gke-namespace=default \ --destination-gke-service=$SERVICE_NAME \ --destination-gke-path=/ \ --event-filters="type=google.cloud.storage.object.v1.finalized" \ --event-filters="bucket=$BUCKET_NAME" \ --location=$REGION \ --service-account=$SERVICE_ACCOUNT@$PROJECT_ID.iam.gserviceaccount.com
ทดสอบ
คุณตรวจสอบได้ว่ามีการสร้างทริกเกอร์โดยแสดงทริกเกอร์ทั้งหมดดังนี้
gcloud eventarc triggers list
สร้างไฟล์และใช้ gcloud storage เพื่ออัปโหลดไฟล์ไปยังที่เก็บข้อมูล
echo "Hello World" > random.txt gcloud storage cp random.txt gs://$BUCKET_NAME/random.txt
ตรวจสอบบันทึกของพ็อดเพื่อยืนยันเหตุการณ์ที่ได้รับ
kubectl logs $POD_NAME
{
"severity": "INFO",
"eventType": "google.cloud.storage.object.v1.finalized",
"message": "Received event of type google.cloud.storage.object.v1.finalized. Event data: {\n \"kind\": \"storage#object\",\n \"id\": \"eventarc-gcs-atamel-eventarc-gke/random.txt/1666190425669022\",\n \"selfLink\": \"https://www.googleapis.com/storage/v1/b/eventarc-gcs-atamel-eventarc-gke/o/random.txt\",\n \"name\": \"random.txt\",\n \"bucket\": \"eventarc-gcs-atamel-eventarc-gke\",\n \"generation\": \"1666190425669022\",\n \"metageneration\": \"1\",\n \"contentType\": \"text/plain\",\n \"timeCreated\": \"2022-10-19T14:40:25.678Z\",\n \"updated\": \"2022-10-19T14:40:25.678Z\",\n \"storageClass\": \"STANDARD\",\n \"timeStorageClassUpdated\": \"2022-10-19T14:40:25.678Z\",\n \"size\": \"12\",\n \"md5Hash\": \"5Z/5eUEET4XfUpfhwwLSYA==\",\n \"mediaLink\": \"https://storage.googleapis.com/download/storage/v1/b/eventarc-gcs-atamel-eventarc-gke/o/random.txt?generation=1666190425669022\u0026alt=media\",\n \"contentLanguage\": \"en\",\n \"crc32c\": \"R1jUOQ==\",\n \"etag\": \"CJ77zIPD7PoCEAE=\"\n}\n",
"event": {
"bucket": "eventarc-gcs-atamel-eventarc-gke",
"data": {
"kind": "storage#object",
"id": "eventarc-gcs-atamel-eventarc-gke/random.txt/1666190425669022",
"selfLink": "https://www.googleapis.com/storage/v1/b/eventarc-gcs-atamel-eventarc-gke/o/random.txt",
"name": "random.txt",
"bucket": "eventarc-gcs-atamel-eventarc-gke",
"generation": "1666190425669022",
"metageneration": "1",
"contentType": "text/plain",
"timeCreated": "2022-10-19T14:40:25.678Z",
"updated": "2022-10-19T14:40:25.678Z",
"storageClass": "STANDARD",
"timeStorageClassUpdated": "2022-10-19T14:40:25.678Z",
"size": "12",
"md5Hash": "5Z/5eUEET4XfUpfhwwLSYA==",
"mediaLink": "https://storage.googleapis.com/download/storage/v1/b/eventarc-gcs-atamel-eventarc-gke/o/random.txt?generation=1666190425669022\u0026alt=media",
"contentLanguage": "en",
"crc32c": "R1jUOQ==",
"etag": "CJ77zIPD7PoCEAE="
},
"datacontenttype": "application/json",
"id": "6031255652220627",
"source": "//storage.googleapis.com/projects/_/buckets/eventarc-gcs-atamel-eventarc-gke",
"specversion": "1.0",
"subject": "objects/random.txt",
"time": "2022-10-19T14:40:25.678152Z",
"type": "google.cloud.storage.object.v1.finalized"
}
}
9. สร้างทริกเกอร์บันทึกการตรวจสอบ Cloud
แม้ว่าทริกเกอร์ Cloud Storage จะเป็นวิธีที่ดีกว่าในการฟังเหตุการณ์ Cloud Storage แต่ในขั้นตอนนี้ คุณจะสร้างทริกเกอร์บันทึกการตรวจสอบ Cloud เพื่อทำสิ่งเดียวกัน
ตั้งค่า
หากต้องการรับเหตุการณ์จากบริการ คุณต้องเปิดใช้บันทึกการตรวจสอบ จาก Google Cloud Console ให้เลือก IAM & Admin และ Audit Logs จากเมนูด้านซ้ายบน ในรายการบริการ ให้ตรวจสอบ Google Cloud Storage ดังนี้

ทางด้านขวามือ ให้ตรวจสอบว่าได้เลือก Admin, Read และ Write แล้วคลิก Save

นอกจากนี้ คุณยังต้องเพิ่มบทบาท eventarc.eventReceiver ให้กับบัญชีบริการทริกเกอร์สำหรับทริกเกอร์บันทึกการตรวจสอบ Cloud ด้วย
gcloud projects add-iam-policy-binding $PROJECT_ID \ --member serviceAccount:$SERVICE_ACCOUNT@$PROJECT_ID.iam.gserviceaccount.com \ --role roles/eventarc.eventReceiver
สร้าง
สร้างทริกเกอร์เพื่อกำหนดเส้นทางเหตุการณ์การสร้างไฟล์ใหม่จากที่เก็บข้อมูลไปยังบริการของคุณโดยทำดังนี้
TRIGGER_NAME=trigger-auditlog-storage-gke gcloud eventarc triggers create $TRIGGER_NAME \ --destination-gke-cluster=$CLUSTER_NAME \ --destination-gke-location=$REGION \ --destination-gke-namespace=default \ --destination-gke-service=$SERVICE_NAME \ --destination-gke-path=/ \ --event-filters="type=google.cloud.audit.log.v1.written" \ --event-filters="serviceName=storage.googleapis.com" \ --event-filters="methodName=storage.objects.create" \ --event-filters-path-pattern="resourceName=/projects/_/buckets/$BUCKET_NAME/objects/*" \ --location=$REGION \ --service-account=$SERVICE_ACCOUNT@$PROJECT_ID.iam.gserviceaccount.com
ทดสอบ
ทริกเกอร์ของบันทึกการตรวจสอบจะใช้เวลาสักครู่ในการเริ่มต้น คุณตรวจสอบได้ว่ามีการสร้างทริกเกอร์โดยแสดงทริกเกอร์ทั้งหมดดังนี้
gcloud eventarc triggers list
คุณควรเห็นว่าActiveฟิลด์เป็น Yes ดังนี้
NAME TYPE DESTINATION ACTIVE trigger-auditlog-storage-gke google.cloud.audit.log.v1.written GKE: hello-gke Yes
สร้างไฟล์และใช้ gcloud storage เพื่ออัปโหลดไฟล์ไปยังที่เก็บข้อมูล
echo "Hello World" > random.txt gcloud storage cp random.txt gs://$BUCKET_NAME/random.txt
ตรวจสอบบันทึกของพ็อดเพื่อยืนยันเหตุการณ์ที่ได้รับ
kubectl logs $POD_NAME
{
"severity": "INFO",
"eventType": "google.cloud.audit.log.v1.written",
"message": "Received event of type google.cloud.audit.log.v1.written. Event data: {\"protoPayload\":{\"status\":{},\"authenticationInfo\":{\"principalEmail\":\"atameldev@gmail.com\"},\"requestMetadata\":{\"callerIp\":\"149.71.143.227\",\"callerSuppliedUserAgent\":\"apitools Python/3.10.4 gsutil/5.14 (darwin) analytics/disabled interactive/True command/cp google-cloud-sdk/405.0.1,gzip(gfe)\",\"requestAttributes\":{\"time\":\"2022-10-19T15:05:54.144615670Z\",\"auth\":{}},\"destinationAttributes\":{}},\"serviceName\":\"storage.googleapis.com\",\"methodName\":\"storage.objects.create\",\"authorizationInfo\":[{\"resource\":\"projects/_/buckets/eventarc-gcs-atamel-eventarc-gke/objects/random.txt\",\"permission\":\"storage.objects.delete\",\"granted\":true,\"resourceAttributes\":{}},{\"resource\":\"projects/_/buckets/eventarc-gcs-atamel-eventarc-gke/objects/random.txt\",\"permission\":\"storage.objects.create\",\"granted\":true,\"resourceAttributes\":{}}],\"resourceName\":\"projects/_/buckets/eventarc-gcs-atamel-eventarc-gke/objects/random.txt\",\"serviceData\":{\"@type\":\"type.googleapis.com/google.iam.v1.logging.AuditData\",\"policyDelta\":{\"bindingDeltas\":[{\"action\":\"ADD\",\"role\":\"roles/storage.legacyObjectOwner\",\"member\":\"projectOwner:atamel-eventarc-gke\"},{\"action\":\"ADD\",\"role\":\"roles/storage.legacyObjectOwner\",\"member\":\"projectEditor:atamel-eventarc-gke\"},{\"action\":\"ADD\",\"role\":\"roles/storage.legacyObjectOwner\",\"member\":\"user:atameldev@gmail.com\"},{\"action\":\"ADD\",\"role\":\"roles/storage.legacyObjectReader\",\"member\":\"projectViewer:atamel-eventarc-gke\"}]}},\"resourceLocation\":{\"currentLocations\":[\"us-central1\"]}},\"insertId\":\"-8vmrbve7pol2\",\"resource\":{\"type\":\"gcs_bucket\",\"labels\":{\"project_id\":\"atamel-eventarc-gke\",\"bucket_name\":\"eventarc-gcs-atamel-eventarc-gke\",\"location\":\"us-central1\"}},\"timestamp\":\"2022-10-19T15:05:54.138732321Z\",\"severity\":\"INFO\",\"logName\":\"projects/atamel-eventarc-gke/logs/cloudaudit.googleapis.com%2Fdata_access\",\"receiveTimestamp\":\"2022-10-19T15:05:54.839604461Z\"}",
"event": {
"data": {
"protoPayload": {
"status": {
},
"authenticationInfo": {
"principalEmail": "atameldev@gmail.com"
},
"requestMetadata": {
"callerIp": "149.71.143.227",
"callerSuppliedUserAgent": "apitools Python/3.10.4 gsutil/5.14 (darwin) analytics/disabled interactive/True command/cp google-cloud-sdk/405.0.1,gzip(gfe)",
"requestAttributes": {
"time": "2022-10-19T15:05:54.144615670Z",
"auth": {
}
},
"destinationAttributes": {
}
},
"serviceName": "storage.googleapis.com",
"methodName": "storage.objects.create",
"authorizationInfo": [
{
"resource": "projects/_/buckets/eventarc-gcs-atamel-eventarc-gke/objects/random.txt",
"permission": "storage.objects.delete",
"granted": true,
"resourceAttributes": {
}
},
{
"resource": "projects/_/buckets/eventarc-gcs-atamel-eventarc-gke/objects/random.txt",
"permission": "storage.objects.create",
"granted": true,
"resourceAttributes": {
}
}
],
"resourceName": "projects/_/buckets/eventarc-gcs-atamel-eventarc-gke/objects/random.txt",
"serviceData": {
"@type": "type.googleapis.com/google.iam.v1.logging.AuditData",
"policyDelta": {
"bindingDeltas": [
{
"action": "ADD",
"role": "roles/storage.legacyObjectOwner",
"member": "projectOwner:atamel-eventarc-gke"
},
{
"action": "ADD",
"role": "roles/storage.legacyObjectOwner",
"member": "projectEditor:atamel-eventarc-gke"
},
{
"action": "ADD",
"role": "roles/storage.legacyObjectOwner",
"member": "user:atameldev@gmail.com"
},
{
"action": "ADD",
"role": "roles/storage.legacyObjectReader",
"member": "projectViewer:atamel-eventarc-gke"
}
]
}
},
"resourceLocation": {
"currentLocations": [
"us-central1"
]
}
},
"insertId": "-8vmrbve7pol2",
"resource": {
"type": "gcs_bucket",
"labels": {
"project_id": "atamel-eventarc-gke",
"bucket_name": "eventarc-gcs-atamel-eventarc-gke",
"location": "us-central1"
}
},
"timestamp": "2022-10-19T15:05:54.138732321Z",
"severity": "INFO",
"logName": "projects/atamel-eventarc-gke/logs/cloudaudit.googleapis.com%2Fdata_access",
"receiveTimestamp": "2022-10-19T15:05:54.839604461Z"
},
"datacontenttype": "application/json; charset=utf-8",
"dataschema": "https://googleapis.github.io/google-cloudevents/jsonschema/google/events/cloud/audit/v1/LogEntryData.json",
"id": "projects/atamel-eventarc-gke/logs/cloudaudit.googleapis.com%2Fdata_access-8vmrbve7pol21666191954138732",
"methodname": "storage.objects.create",
"recordedtime": "2022-10-19T15:05:54.138732321Z",
"resourcename": "projects/_/buckets/eventarc-gcs-atamel-eventarc-gke/objects/random.txt",
"servicename": "storage.googleapis.com",
"source": "//cloudaudit.googleapis.com/projects/atamel-eventarc-gke/logs/data_access",
"specversion": "1.0",
"subject": "storage.googleapis.com/projects/_/buckets/eventarc-gcs-atamel-eventarc-gke/objects/random.txt",
"time": "2022-10-19T15:05:54.839604461Z",
"type": "google.cloud.audit.log.v1.written"
}
}
10. ยินดีด้วย
ขอแสดงความยินดีที่ทำ Codelab เสร็จสมบูรณ์
สิ่งที่เราได้พูดถึงไปแล้ว
- สร้างคลัสเตอร์ GKE
- สร้างบริการ GKE เป็น Event Sink
- สร้างทริกเกอร์ Pub/Sub
- สร้างทริกเกอร์ Cloud Storage
- สร้างทริกเกอร์บันทึก Cloud Audit