1. مقدمه
Eventarc اتصال سرویس های مختلف (Cloud Run، Kubernetes، Workflows) را با رویدادها از منابع مختلف آسان می کند. این به شما امکان میدهد معماریهای رویداد محور بسازید که در آن ریزسرویسها بهطور سست کوپل شده و توزیع میشوند. همچنین از انتقال رویداد، تحویل، امنیت، مجوز، و مدیریت خطا برای شما مراقبت می کند که چابکی توسعه دهنده و انعطاف پذیری برنامه را بهبود می بخشد. برای آشنایی با Eventarc ، Trigger Cloud Run با رویدادها را از Eventarc Codelab بررسی کنید.
در این لبه کد، از Eventarc برای خواندن رویدادها از Pub/Sub، Cloud Storage و Cloud Audit Logs استفاده میکنید و آنها را به سرویس Kubernetes در حال اجرا در Google Kubernetes Engine (GKE) منتقل میکنید.
چیزی که یاد خواهید گرفت
- یک خوشه GKE ایجاد کنید.
- یک سرویس GKE به عنوان سینک رویداد ایجاد کنید.
- یک تریگر Pub/Sub ایجاد کنید.
- یک محرک فضای ذخیره سازی ابری ایجاد کنید
- ایجاد یک محرک Cloud Audit Logs.
2. راه اندازی و الزامات
تنظیم محیط خود به خود
- به Google Cloud Console وارد شوید و یک پروژه جدید ایجاد کنید یا از یک موجود استفاده مجدد کنید. اگر قبلاً یک حساب Gmail یا Google Workspace ندارید، باید یک حساب ایجاد کنید .
- نام پروژه نام نمایشی برای شرکت کنندگان این پروژه است. این یک رشته کاراکتری است که توسط API های Google استفاده نمی شود. شما می توانید آن را در هر زمان به روز کنید.
- شناسه پروژه در تمام پروژههای Google Cloud منحصربهفرد است و تغییرناپذیر است (پس از تنظیم نمیتوان آن را تغییر داد). Cloud Console به طور خودکار یک رشته منحصر به فرد تولید می کند. معمولاً برای شما مهم نیست که چیست. در اکثر کدها، باید به شناسه پروژه ارجاع دهید (معمولاً به عنوان
PROJECT_ID
شناخته می شود). اگر شناسه تولید شده را دوست ندارید، ممکن است یک شناسه تصادفی دیگر ایجاد کنید. از طرف دیگر، میتوانید خودتان را امتحان کنید و ببینید آیا در دسترس است یا خیر. پس از این مرحله نمی توان آن را تغییر داد و در طول مدت پروژه باقی می ماند. - برای اطلاع شما، یک مقدار سوم وجود دارد، یک شماره پروژه که برخی از API ها از آن استفاده می کنند. در مورد هر سه این مقادیر در مستندات بیشتر بیاموزید.
- در مرحله بعد، برای استفاده از منابع Cloud/APIها باید صورتحساب را در کنسول Cloud فعال کنید . اجرا کردن از طریق این کد لبه نباید هزینه زیادی داشته باشد، اگر اصلاً باشد. برای اینکه منابع را خاموش کنید تا بیش از این آموزش متحمل صورتحساب نشوید، می توانید منابعی را که ایجاد کرده اید حذف کنید یا کل پروژه را حذف کنید. کاربران جدید Google Cloud واجد شرایط برنامه آزمایشی رایگان 300 دلاری هستند.
Cloud Shell را راه اندازی کنید
در حالی که Google Cloud را می توان از راه دور از لپ تاپ شما کار کرد، در این کد لبه از Google Cloud Shell استفاده خواهید کرد، یک محیط خط فرمان که در Cloud اجرا می شود.
از Google Cloud Console ، روی نماد Cloud Shell در نوار ابزار بالا سمت راست کلیک کنید:
تهیه و اتصال به محیط فقط چند لحظه طول می کشد. وقتی تمام شد، باید چیزی شبیه به این را ببینید:
این ماشین مجازی با تمام ابزارهای توسعه که شما نیاز دارید بارگذاری شده است. این یک فهرست اصلی 5 گیگابایتی دائمی را ارائه می دهد و در Google Cloud اجرا می شود و عملکرد و احراز هویت شبکه را تا حد زیادی افزایش می دهد. تمام کارهای شما در این کد لبه را می توان در یک مرورگر انجام داد. شما نیازی به نصب چیزی ندارید.
قبل از شروع
در داخل Cloud Shell، مطمئن شوید که ID پروژه شما تنظیم شده است:
PROJECT_ID=your-project-id gcloud config set project $PROJECT_ID
3. یک خوشه GKE ایجاد کنید
ابتدا خدمات مورد نیاز GKE را فعال کنید:
gcloud services enable container.googleapis.com
یک خوشه Autopilot GKE ایجاد کنید:
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 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 و مقداردهی اولیه مقاصد Eventarc GKE را اجرا می کنید.
ابتدا خدمات مورد نیاز را برای مقاصد Eventarc و Eventarc GKE فعال کنید:
gcloud services enable eventarc.googleapis.com \ cloudresourcemanager.googleapis.com
در مرحله بعد، Eventarc را برای مدیریت کلاسترهای GKE فعال کنید:
gcloud eventarc gke-destinations init
Eventarc یک غلاف Event Forwarder جداگانه برای هر تریگر که یک سرویس GKE را هدف قرار می دهد ایجاد می کند و برای ایجاد تغییرات در خوشه به مجوزهای صریح نیاز دارد. این کار با اعطای مجوز به یک حساب سرویس ویژه برای مدیریت منابع در خوشه انجام می شود. این باید یک بار در هر پروژه 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 trigger ایجاد کنید
یکی از راه های دریافت رویدادها از طریق Pub/Sub است. هر برنامه ای می تواند پیام ها را در Pub/Sub منتشر کند و این پیام ها را می توان از طریق Eventarc به سرویس ها تحویل داد.
راه اندازی
قبل از ایجاد هر گونه محرک، به یک حساب سرویس نیاز دارید که توسط تریگرها استفاده شود.
ایجاد یک حساب خدمات:
SERVICE_ACCOUNT=eventarc-gke-trigger-sa gcloud iam service-accounts create $SERVICE_ACCOUNT
حساب سرویس باید نقشهای زیر را برای محرکهایی با مقصدهای GKE داشته باشد:
-
roles/pubsub.subscriber
-
roles/monitoring.metricWriter
-
roles/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. یک محرک فضای ذخیره سازی ابری ایجاد کنید
راه دیگر دریافت رویدادها از طریق فضای ذخیره سازی ابری است. به عنوان مثال، یک برنامه می تواند یک فایل را در یک سطل آپلود کند و آن رویداد را می توان از طریق Eventarc به سرویس ها تحویل داد.
راه اندازی
قبل از ایجاد یک محرک Cloud Storage، یک سطل برای دریافت رویدادها ایجاد کنید:
BUCKET_NAME=eventarc-gcs-$PROJECT_ID gsutil mb -l $REGION gs://$BUCKET_NAME
همچنین باید نقش pubsub.publisher
را به حساب سرویس Cloud Storage برای محرکهای Cloud Storage اضافه کنید:
SERVICE_ACCOUNT_STORAGE=$(gsutil kms serviceaccount -p $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
یک فایل ایجاد کنید و از gsutil
برای آپلود فایل در سطل استفاده کنید:
echo "Hello World" > random.txt gsutil 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 Audit Logs ایجاد کنید
اگرچه راهانداز Cloud Storage بهترین راه برای گوش دادن به رویدادهای Cloud Storage است، در این مرحله، شما یک راهانداز Cloud Audit Log ایجاد میکنید تا همین کار را انجام دهید.
راه اندازی
برای دریافت رویدادها از یک سرویس، باید Audit Logs را فعال کنید. از Google Cloud Console، IAM & Admin
and Audit Logs
از منوی سمت چپ بالا انتخاب کنید. در لیست خدمات، Google Cloud Storage
بررسی کنید:
در سمت راست، مطمئن شوید که Admin
، Read
و Write
انتخاب شده اند و روی Save
کلیک کنید:
همچنین باید نقش eventarc.eventReceiver
را به حساب سرویس راهانداز برای محرکهای Cloud Audit Logs اضافه کنید:
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
یک فایل ایجاد کنید و از gsutil
برای آپلود فایل در سطل استفاده کنید:
echo "Hello World" > random.txt gsutil 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. تبریک می گویم!
برای تکمیل کد لبه تبریک می گویم.
آنچه را پوشش داده ایم
- یک خوشه GKE ایجاد کنید.
- یک سرویس GKE به عنوان سینک رویداد ایجاد کنید.
- یک تریگر Pub/Sub ایجاد کنید.
- یک محرک فضای ذخیره سازی ابری ایجاد کنید.
- ایجاد یک محرک Cloud Audit Logs.