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

۱. مقدمه

cb762f29e9183a3f.png

Eventarc اتصال سرویس‌های مختلف (Cloud Run، Kubernetes، Workflows) را با رویدادهایی از منابع مختلف آسان می‌کند. این ابزار به شما امکان می‌دهد معماری‌های رویدادمحور بسازید که در آن‌ها میکروسرویس‌ها به صورت آزادانه جفت و توزیع شده‌اند. همچنین دریافت، تحویل، امنیت، مجوزدهی و مدیریت خطا را برای شما انجام می‌دهد که چابکی توسعه‌دهنده و انعطاف‌پذیری برنامه را بهبود می‌بخشد. برای آشنایی با Eventarc ، Trigger Cloud Run with events از Eventarc codelab را بررسی کنید.

در این آزمایشگاه کد، شما از Eventarc برای خواندن رویدادها از Pub/Sub، Cloud Storage و Cloud Audit Logs و ارسال آنها به یک سرویس Kubernetes که روی Google Kubernetes Engine (GKE) اجرا می‌شود، استفاده خواهید کرد.

آنچه یاد خواهید گرفت

  • یک کلاستر GKE ایجاد کنید.
  • یک سرویس GKE به عنوان یک سینک رویداد ایجاد کنید.
  • یک تریگر Pub/Sub ایجاد کنید.
  • ایجاد یک تریگر ذخیره‌سازی ابری
  • یک تریگر برای گزارش‌های حسابرسی ابری ایجاد کنید.

۲. تنظیمات و الزامات

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

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

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

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

شروع پوسته ابری

اگرچه می‌توان از راه دور و از طریق لپ‌تاپ، گوگل کلود را مدیریت کرد، اما در این آزمایشگاه کد، از گوگل کلود شل ، یک محیط خط فرمان که در فضای ابری اجرا می‌شود، استفاده خواهید کرد.

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

55efc1aaa7a4d3ad.png

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

7ffe5cbb04455448.png

این ماشین مجازی با تمام ابزارهای توسعه‌ای که نیاز دارید، مجهز شده است. این ماشین مجازی یک دایرکتوری خانگی پایدار ۵ گیگابایتی ارائه می‌دهد و روی فضای ابری گوگل اجرا می‌شود که عملکرد شبکه و احراز هویت را تا حد زیادی بهبود می‌بخشد. تمام کارهای شما در این آزمایشگاه کد را می‌توان در یک مرورگر انجام داد. نیازی به نصب چیزی ندارید.

قبل از اینکه شروع کنی

در داخل Cloud Shell، مطمئن شوید که شناسه پروژه شما تنظیم شده است:

PROJECT_ID=your-project-id
gcloud config set project $PROJECT_ID

۳. ایجاد یک خوشه 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

قبل از رفتن به مرحله بعدی، مطمئن شوید که ایجاد خوشه تکمیل شده است.

۴. یک سرویس 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>

۵. راه‌اندازی ایونتارک

در این مرحله، مراحلی را برای راه‌اندازی Eventarc و مقداردهی اولیه مقصدهای Eventarc GKE اجرا خواهید کرد.

ابتدا، سرویس‌های مورد نیاز را برای مقاصد Eventarc و Eventarc GKE فعال کنید:

gcloud services enable eventarc.googleapis.com \
  cloudresourcemanager.googleapis.com

سپس، Eventarc را برای مدیریت خوشه‌های GKE فعال کنید:

gcloud eventarc gke-destinations init

Eventarc برای هر trigger که یک سرویس GKE را هدف قرار می‌دهد، یک Event Forwarder Pod جداگانه ایجاد می‌کند و برای ایجاد تغییرات در کلاستر، مجوزهای صریحی را لازم دارد. این کار با اعطای مجوز به یک حساب کاربری سرویس ویژه برای مدیریت منابع در کلاستر انجام می‌شود. این کار باید یک بار در هر پروژه Google Cloud انجام شود.

۶. کشف رویداد

قبل از ایجاد تریگرها، می‌توانید منابع رویداد، انواع رویدادهایی که می‌توانند منتشر کنند و نحوه پیکربندی تریگرها برای مصرف آنها را کشف کنید.

می‌توانید صفحه مستندات مربوط به رویدادهای پشتیبانی‌شده توسط 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

۷. یک تریگر Pub/Sub ایجاد کنید

یکی از راه‌های دریافت رویدادها از طریق 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 (فقط برای triggerهای 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"
  }
}

۸. یک محرک ذخیره‌سازی ابری ایجاد کنید

راه دیگر دریافت رویدادها از طریق فضای ذخیره‌سازی ابری است. برای مثال، یک برنامه می‌تواند یک فایل را در یک سطل بارگذاری کند و آن رویداد می‌تواند از طریق Eventarc به سرویس‌ها تحویل داده شود.

راه‌اندازی

قبل از ایجاد تریگر فضای ابری، یک باکت (bucket) برای دریافت رویدادها از موارد زیر ایجاد کنید:

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"
  }
}

۹. یک تریگر برای گزارش‌های حسابرسی ابری ایجاد کنید

اگرچه تریگر Cloud Storage روش بهتری برای گوش دادن به رویدادهای Cloud Storage است، در این مرحله، شما یک تریگر Cloud Audit Log برای انجام همین کار ایجاد می‌کنید.

راه‌اندازی

برای دریافت رویدادها از یک سرویس، باید گزارش‌های حسابرسی (Audit Logs) را فعال کنید. از کنسول ابری گوگل (Google Cloud Console)، گزینه IAM & Admin و سپس Audit Logs از منوی بالا سمت چپ انتخاب کنید. در لیست سرویس‌ها، Google Cloud Storage ) را تیک بزنید:

۹۱d1bcef8f953fe3.png

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

ccb31db1e55fd2e3.png

همچنین باید نقش eventarc.eventReceiver را به حساب سرویس trigger برای triggerهای 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

تست

فعال‌سازی اولیه‌ی تریگرهای Audit Logs کمی زمان می‌برد. می‌توانید با فهرست کردن تمام تریگرها، از ایجاد شدن تریگر مطمئن شوید:

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"
  }
}

۱۰. تبریک می‌گویم!

تبریک می‌گویم که آزمایشگاه کد را تمام کردی.

آنچه ما پوشش داده‌ایم

  • یک کلاستر GKE ایجاد کنید.
  • یک سرویس GKE به عنوان یک سینک رویداد ایجاد کنید.
  • یک تریگر Pub/Sub ایجاد کنید.
  • یک تریگر ذخیره‌سازی ابری ایجاد کنید.
  • یک تریگر برای گزارش‌های حسابرسی ابری ایجاد کنید.