خدمات Kubernetes را با رویدادهای Eventarc فعال کنید

1. مقدمه

cb762f29e9183a3f.png

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. راه اندازی و الزامات

تنظیم محیط خود به خود

  1. به Google Cloud Console وارد شوید و یک پروژه جدید ایجاد کنید یا از یک موجود استفاده مجدد کنید. اگر قبلاً یک حساب Gmail یا Google Workspace ندارید، باید یک حساب ایجاد کنید .

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • نام پروژه نام نمایشی برای شرکت کنندگان این پروژه است. این یک رشته کاراکتری است که توسط API های Google استفاده نمی شود. شما می توانید آن را در هر زمان به روز کنید.
  • شناسه پروژه در تمام پروژه‌های Google Cloud منحصربه‌فرد است و تغییرناپذیر است (پس از تنظیم نمی‌توان آن را تغییر داد). Cloud Console به طور خودکار یک رشته منحصر به فرد تولید می کند. معمولاً برای شما مهم نیست که چیست. در اکثر کدها، باید به شناسه پروژه ارجاع دهید (معمولاً به عنوان PROJECT_ID شناخته می شود). اگر شناسه تولید شده را دوست ندارید، ممکن است یک شناسه تصادفی دیگر ایجاد کنید. از طرف دیگر، می‌توانید خودتان را امتحان کنید و ببینید آیا در دسترس است یا خیر. پس از این مرحله نمی توان آن را تغییر داد و در طول مدت پروژه باقی می ماند.
  • برای اطلاع شما، یک مقدار سوم وجود دارد، یک شماره پروژه که برخی از API ها از آن استفاده می کنند. در مورد هر سه این مقادیر در مستندات بیشتر بیاموزید.
  1. در مرحله بعد، برای استفاده از منابع Cloud/APIها باید صورتحساب را در کنسول Cloud فعال کنید . اجرا کردن از طریق این کد لبه نباید هزینه زیادی داشته باشد، اگر اصلاً باشد. برای اینکه منابع را خاموش کنید تا بیش از این آموزش متحمل صورتحساب نشوید، می توانید منابعی را که ایجاد کرده اید حذف کنید یا کل پروژه را حذف کنید. کاربران جدید Google Cloud واجد شرایط برنامه آزمایشی رایگان 300 دلاری هستند.

Cloud Shell را راه اندازی کنید

در حالی که Google Cloud را می توان از راه دور از لپ تاپ شما کار کرد، در این کد لبه از Google Cloud Shell استفاده خواهید کرد، یک محیط خط فرمان که در Cloud اجرا می شود.

از Google Cloud Console ، روی نماد Cloud Shell در نوار ابزار بالا سمت راست کلیک کنید:

55efc1aaa7a4d3ad.png

تهیه و اتصال به محیط فقط چند لحظه طول می کشد. وقتی تمام شد، باید چیزی شبیه به این را ببینید:

7ffe5cbb04455448.png

این ماشین مجازی با تمام ابزارهای توسعه که شما نیاز دارید بارگذاری شده است. این یک فهرست اصلی 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 بررسی کنید:

91d1bcef8f953fe3.png

در سمت راست، مطمئن شوید که Admin ، Read و Write انتخاب شده اند و روی Save کلیک کنید:

ccb31db1e55fd2e3.png

همچنین باید نقش 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.