Eventarc ইভেন্ট সহ Kubernetes পরিষেবা ট্রিগার করুন

1. ভূমিকা

cb762f29e9183a3f.png

Eventarc বিভিন্ন উৎস থেকে ইভেন্টের সাথে বিভিন্ন পরিষেবা (ক্লাউড রান, কুবারনেটস, ওয়ার্কফ্লো) সংযোগ করা সহজ করে তোলে। এটি আপনাকে ইভেন্ট-চালিত আর্কিটেকচার তৈরি করতে দেয় যেখানে মাইক্রোসার্ভিসগুলি শিথিলভাবে সংযুক্ত এবং বিতরণ করা হয়। এটি আপনার জন্য ইভেন্ট ইনজেশন, ডেলিভারি, নিরাপত্তা, অনুমোদন, এবং ত্রুটি-হ্যান্ডলিং এর যত্ন নেয় যা বিকাশকারীর তত্পরতা এবং অ্যাপ্লিকেশন স্থিতিস্থাপকতা উন্নত করে। Eventarc-এর পরিচিতির জন্য Eventarc কোডল্যাব থেকে ইভেন্ট সহ ট্রিগার ক্লাউড রান দেখুন।

এই কোডল্যাবে, আপনি পাব/সাব, ক্লাউড স্টোরেজ এবং ক্লাউড অডিট লগ থেকে ইভেন্টগুলি পড়তে Eventarc ব্যবহার করবেন এবং সেগুলিকে Google Kubernetes Engine (GKE) এ চলমান একটি Kubernetes পরিষেবাতে পাঠাবেন।

আপনি কি শিখবেন

  • একটি GKE ক্লাস্টার তৈরি করুন।
  • একটি ইভেন্ট সিঙ্ক হিসাবে একটি GKE পরিষেবা তৈরি করুন৷
  • একটি পাব/সাব ট্রিগার তৈরি করুন।
  • একটি ক্লাউড স্টোরেজ ট্রিগার তৈরি করুন
  • একটি ক্লাউড অডিট লগ ট্রিগার তৈরি করুন।

2. সেটআপ এবং প্রয়োজনীয়তা

স্ব-গতিসম্পন্ন পরিবেশ সেটআপ

  1. Google ক্লাউড কনসোলে সাইন-ইন করুন এবং একটি নতুন প্রকল্প তৈরি করুন বা বিদ্যমান একটি পুনরায় ব্যবহার করুন৷ আপনার যদি ইতিমধ্যেই একটি Gmail বা Google Workspace অ্যাকাউন্ট না থাকে, তাহলে আপনাকে অবশ্যই একটি তৈরি করতে হবে।

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • প্রকল্পের নাম এই প্রকল্পের অংশগ্রহণকারীদের জন্য প্রদর্শনের নাম। এটি একটি অক্ষর স্ট্রিং যা Google API দ্বারা ব্যবহৃত হয় না। আপনি যে কোনো সময় এটি আপডেট করতে পারেন.
  • প্রোজেক্ট আইডি সমস্ত Google ক্লাউড প্রোজেক্ট জুড়ে অনন্য এবং অপরিবর্তনীয় (সেট করার পরে পরিবর্তন করা যাবে না)। ক্লাউড কনসোল স্বয়ংক্রিয়ভাবে একটি অনন্য স্ট্রিং তৈরি করে; সাধারণত আপনি এটা কি যত্ন না. বেশিরভাগ কোডল্যাবে, আপনাকে প্রজেক্ট আইডি উল্লেখ করতে হবে (এটি সাধারণত PROJECT_ID হিসাবে চিহ্নিত করা হয়)। আপনি যদি জেনারেট করা আইডি পছন্দ না করেন, তাহলে আপনি অন্য এলোমেলো আইডি তৈরি করতে পারেন। বিকল্পভাবে, আপনি নিজের চেষ্টা করে দেখতে পারেন এবং এটি উপলব্ধ কিনা। এই ধাপের পরে এটি পরিবর্তন করা যাবে না এবং প্রকল্পের সময়কালের জন্য থাকবে।
  • আপনার তথ্যের জন্য, একটি তৃতীয় মান রয়েছে, একটি প্রকল্প নম্বর যা কিছু API ব্যবহার করে। ডকুমেন্টেশনে এই তিনটি মান সম্পর্কে আরও জানুন।
  1. এরপরে, ক্লাউড রিসোর্স/এপিআই ব্যবহার করতে আপনাকে ক্লাউড কনসোলে বিলিং সক্ষম করতে হবে। এই কোডল্যাবের মাধ্যমে চালানোর জন্য খুব বেশি খরচ করা উচিত নয়, যদি কিছু থাকে। রিসোর্স বন্ধ করতে যাতে এই টিউটোরিয়ালের বাইরে আপনার বিলিং খরচ না হয়, আপনি আপনার তৈরি করা রিসোর্স মুছে ফেলতে পারেন বা পুরো প্রোজেক্ট মুছে ফেলতে পারেন। Google ক্লাউডের নতুন ব্যবহারকারীরা $300 USD বিনামূল্যের ট্রায়াল প্রোগ্রামের জন্য যোগ্য৷

ক্লাউড শেল শুরু করুন

যদিও Google ক্লাউড আপনার ল্যাপটপ থেকে দূরবর্তীভাবে পরিচালিত হতে পারে, এই কোডল্যাবে আপনি Google ক্লাউড শেল ব্যবহার করবেন, একটি কমান্ড লাইন পরিবেশ যা ক্লাউডে চলছে।

Google ক্লাউড কনসোল থেকে, উপরের ডানদিকে টুলবারে ক্লাউড শেল আইকনে ক্লিক করুন:

55efc1aaa7a4d3ad.png

পরিবেশের ব্যবস্থা করতে এবং সংযোগ করতে এটি শুধুমাত্র কয়েক মুহূর্ত নিতে হবে। এটি সমাপ্ত হলে, আপনি এই মত কিছু দেখতে হবে:

7ffe5cbb04455448.png

এই ভার্চুয়াল মেশিনটি আপনার প্রয়োজনীয় সমস্ত ডেভেলপমেন্ট টুল দিয়ে লোড করা হয়েছে। এটি একটি ক্রমাগত 5GB হোম ডিরেক্টরি অফার করে এবং Google ক্লাউডে চলে, যা নেটওয়ার্ক কর্মক্ষমতা এবং প্রমাণীকরণকে ব্যাপকভাবে উন্নত করে। এই কোডল্যাবে আপনার সমস্ত কাজ একটি ব্রাউজারে করা যেতে পারে। আপনার কিছু ইন্সটল করার দরকার নেই।

আপনি শুরু করার আগে

ক্লাউড শেলের ভিতরে, নিশ্চিত করুন যে আপনার প্রকল্প আইডি সেটআপ করা আছে:

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

3. একটি GKE ক্লাস্টার তৈরি করুন৷

প্রথমে, GKE-এর জন্য প্রয়োজনীয় পরিষেবাগুলি সক্ষম করুন:

gcloud services enable container.googleapis.com

একটি অটোপাইলট 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

এর পরে, ক্লাউড রানের হ্যালো কন্টেইনারটিকে জিকেই-তে কুবারনেটস স্থাপনার হিসাবে স্থাপন করুন। এই পরিষেবা লগগুলি HTTP অনুরোধ এবং CloudEvents পেয়েছে:

SERVICE_NAME=hello-gke

kubectl create deployment $SERVICE_NAME \
    --image=gcr.io/cloudrun/hello

একটি অভ্যন্তরীণ Kubernetes পরিষেবা হিসাবে স্থাপনার প্রকাশ করুন। এটি ক্লাস্টারের মধ্যে অ্যাক্সেসযোগ্য একটি স্থিতিশীল আইপি সহ একটি পরিষেবা তৈরি করে:

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

এর পরে, GKE ক্লাস্টারগুলি পরিচালনা করতে Eventarc সক্ষম করুন:

gcloud eventarc gke-destinations init

Eventarc একটি GKE পরিষেবাকে লক্ষ্য করে প্রতিটি ট্রিগারের জন্য একটি পৃথক ইভেন্ট ফরওয়ার্ডার পড তৈরি করে এবং ক্লাস্টারে পরিবর্তন করার জন্য সুস্পষ্ট অনুমতির প্রয়োজন৷ ক্লাস্টারে সংস্থানগুলি পরিচালনা করার জন্য একটি বিশেষ পরিষেবা অ্যাকাউন্টকে অনুমতি দেওয়ার মাধ্যমে এটি করা হয়। এটি Google ক্লাউড প্রকল্প প্রতি একবার করা প্রয়োজন।

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-এ বার্তা প্রকাশ করতে পারে এবং এই বার্তাগুলি Eventarc-এর মাধ্যমে পরিষেবাগুলিতে বিতরণ করা যেতে পারে।

সেটআপ

কোনো ট্রিগার তৈরি করার আগে, ট্রিগার দ্বারা ব্যবহার করার জন্য আপনার একটি পরিষেবা অ্যাকাউন্ট প্রয়োজন।

একটি পরিষেবা অ্যাকাউন্ট তৈরি করুন:

SERVICE_ACCOUNT=eventarc-gke-trigger-sa

gcloud iam service-accounts create $SERVICE_ACCOUNT

GKE গন্তব্যগুলির সাথে ট্রিগারগুলির জন্য পরিষেবা অ্যাকাউন্টকে অবশ্যই নিম্নলিখিত ভূমিকাগুলি প্রদান করতে হবে:

  • roles/pubsub.subscriber
  • roles/monitoring.metricWriter
  • roles/eventarc.eventReceiver (শুধুমাত্র অডিটলগ ট্রিগারের জন্য। এটি পরবর্তী ধাপে যোগ করা হবে)

ভূমিকা প্রদান করুন:

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

তৈরি করুন

আপনার পরিষেবাতে পাব/সাব বার্তাগুলি রুট করার জন্য একটি ট্রিগার তৈরি করুন:

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

পাব/সাব ট্রিগার কভারের অধীনে একটি পাব/সাব বিষয় তৈরি করে। আসুন এটি খুঁজে বের করি এবং একটি পরিবর্তনশীলকে বরাদ্দ করি:

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 এর মাধ্যমে পরিষেবাগুলিতে বিতরণ করা যেতে পারে।

সেটআপ

একটি ক্লাউড স্টোরেজ ট্রিগার তৈরি করার আগে, এর থেকে ইভেন্টগুলি পেতে একটি বালতি তৈরি করুন:

BUCKET_NAME=eventarc-gcs-$PROJECT_ID
gsutil mb -l $REGION gs://$BUCKET_NAME

এছাড়াও আপনাকে ক্লাউড স্টোরেজ ট্রিগারের জন্য ক্লাউড স্টোরেজ পরিষেবা অ্যাকাউন্টে pubsub.publisher ভূমিকা যোগ করতে হবে:

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. একটি ক্লাউড অডিট লগ ট্রিগার তৈরি করুন৷

যদিও ক্লাউড স্টোরেজ ট্রিগার হল ক্লাউড স্টোরেজ ইভেন্টগুলি শোনার আরও ভাল উপায়, এই ধাপে, আপনি একই কাজ করার জন্য একটি ক্লাউড অডিট লগ ট্রিগার তৈরি করেন৷

সেটআপ

একটি পরিষেবা থেকে ইভেন্টগুলি পেতে, আপনাকে অডিট লগগুলি সক্ষম করতে হবে৷ Google ক্লাউড কনসোল থেকে, উপরের বামদিকের মেনু থেকে IAM & Admin এবং Audit Logs নির্বাচন করুন৷ পরিষেবার তালিকায়, Google Cloud Storage চেক করুন:

91d1bcef8f953fe3.png

ডানদিকে, নিশ্চিত করুন যে Admin , Read এবং Write নির্বাচন করা হয়েছে এবং Save ক্লিক করুন:

ccb31db1e55fd2e3.png

এছাড়াও আপনাকে ক্লাউড অডিট লগ ট্রিগারগুলির জন্য ট্রিগার পরিষেবা অ্যাকাউন্টে eventarc.eventReceiver ভূমিকা যোগ করতে হবে:

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 পরিষেবা তৈরি করুন৷
  • একটি পাব/সাব ট্রিগার তৈরি করুন।
  • একটি ক্লাউড স্টোরেজ ট্রিগার তৈরি করুন।
  • একটি ক্লাউড অডিট লগ ট্রিগার তৈরি করুন।