কর্মক্ষেত্রের নিরাপত্তা সনাক্তকরণ ব্যবস্থা সুরক্ষিত করা

১. ভূমিকা

এই কোডল্যাবে, আপনি একটি মৌলিক ডেমোনস্ট্রেশন অ্যাপ্লিকেশন তৈরি করবেন যা দেখাবে কিভাবে কমপ্লায়েন্স বিধিনিষেধযুক্ত একটি প্রজেক্টে অবস্থিত সার্ভিসের জন্য বিভিন্ন গুগল ক্লাউড সার্ভিসকে ইন্টিগ্রেট করতে হয়। এই প্রজেক্টটি নিম্নলিখিত নিরাপত্তা সক্ষমতাগুলো ব্যবহার করে:

এই কোডল্যাবটি নতুনদের সহ সকল স্তরের ডেভেলপারদের জন্য। আপনি গুগল ক্লাউড শেল-এর কমান্ড-লাইন ইন্টারফেস এবং পাইথন কোড ব্যবহার করবেন। আপনাকে পাইথন বিশেষজ্ঞ হতে হবে না, তবে কোড কীভাবে পড়তে হয় সে সম্পর্কে প্রাথমিক ধারণা থাকলে বিষয়গুলো বুঝতে সুবিধা হবে।

দ্রষ্টব্য: এটি একটি সরলীকৃত প্রুফ-অফ-কনসেপ্ট, কোনো প্রোডাকশন অ্যাপ্লিকেশন নয়। বাস্তব পরিস্থিতিতে এই পরিষেবাটিতে প্রমাণীকৃত ও সুরক্ষিত বাহ্যিক অ্যাক্সেসের মতো অতিরিক্ত সতর্কতা অবলম্বন করুন।

২. শুরু করার আগে

প্রজেক্ট সেটআপ

../shared/_project-setup.md

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

ক্লাউড শেল হলো গুগল ক্লাউডে চালিত একটি কমান্ড-লাইন পরিবেশ, যা প্রয়োজনীয় টুলস সহ আগে থেকেই লোড করা থাকে।

  1. Google Cloud কনসোলের শীর্ষে থাকা Activate Cloud Shell-এ ক্লিক করুন:

404e4cce0f23e5c5.png

  1. ক্লাউড শেলে সংযুক্ত হওয়ার পর, আপনার প্রমাণীকরণ যাচাই করতে এই কমান্ডটি চালান:
gcloud auth list
  1. আপনার প্রজেক্টটি gcloud ব্যবহারের জন্য কনফিগার করা হয়েছে কিনা তা নিশ্চিত করতে নিম্নলিখিত কমান্ডটি চালান:
gcloud config get project
  1. প্রকল্পটি প্রত্যাশা অনুযায়ী আছে কিনা তা নিশ্চিত করুন, এবং তারপর আপনার প্রজেক্ট আইডি সেট করতে নিচের কমান্ডটি চালান:
export PROJECT_ID=$(gcloud config get project)

প্রয়োজনীয় IAM অনুমতি

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

সাংগঠনিক পর্যায়ে:

  • roles/assuredworkloads.admin (অ্যাসিওরড ওয়ার্কলোডস অ্যাডমিনিস্ট্রেটর): কমপ্লায়েন্স কনফিগারেশন নিশ্চিত করে অ্যাসিওরড ওয়ার্কলোডস রিসোর্সটি তৈরি ও পরিচালনা করার জন্য।

বিলিং অ্যাকাউন্ট স্তরে (আপনার বিলিং অ্যাকাউন্টে):

  • roles/billing.accountUser (Billing Account User): To link the specified billing account.

কোডল্যাব ভেরিয়েবল কনফিগার করা

প্রয়োজনীয় পরিকাঠামো তৈরি করার জন্য, আপনাকে নিম্নলিখিত এনভায়রনমেন্ট ভেরিয়েবলগুলো প্রদান করতে হবে:

# The ID of the Billing Account in the format (XXXXXX-XXXXXX-XXXXXX).
# This value will be used to attach in the projects created using Assured Workloads
export BILLING_ACCOUNT=

# The ID of a Google Cloud Platform organization
# Run `gcloud organizations list` to check all your available organizations
export GCP_ORGANIZATION=

# The numeric ID of a folder where the Assured Workloads will create the resources.
export FOLDER_ID=

# Region where the application will be deployed.
# Since you are using Assured Workloads, you MUST use one of the valid locations as described here: <https://docs.cloud.google.com/assured-workloads/docs/locations>
export REGION="us-central1"

# The ID of an existing Google Cloud project to be used for API quota and billing purposes.
# This project will only be used to enable the Assured Workloads API and create an Assured Workload.
export QUOTA_PROJECT_ID=

# Random suffix used to avoid naming collisions when creating the GCP projects.
export RANDOM_SUFFIX=$(cat /dev/urandom | tr -dc 'a-z0-9' | head -c 5 ; echo)

# The ID of the projects that will be created using Assured Workloads.
# You can modify this value if you want a custom id.
export PROJECT_ID="il5-gemini-vision-aw-${RANDOM_SUFFIX}"
export KMS_PROJECT_ID="il5-gemini-vision-kms-${RANDOM_SUFFIX}"

৩. অ্যাসিওরড ওয়ার্কলোডস-এর ভিত্তি তৈরি করা

এখন আপনি একটি নিয়ন্ত্রিত পরিবেশে আপনার অ্যাপ্লিকেশনের ভিত্তি স্থাপন করতে পারেন। আপনার রিসোর্সগুলির জন্য একটি নিয়ন্ত্রিত পরিবেশ তৈরি করে কমপ্লায়েন্সের প্রয়োজনীয়তাগুলি কার্যকর করতে অ্যাসিওরড ওয়ার্কলোডস ব্যবহার করুন।

আপনার কোটা প্রকল্প কনফিগার করুন

আপনার কোটা প্রজেক্টে অ্যাসিওরড ওয়ার্কলোডস এপিআই (Assured Workloads API) সক্রিয় করুন। অ্যাসিওরড ওয়ার্কলোড তৈরি এবং পরিচালনা করার জন্য এই এপিআইটি আবশ্যক।

gcloud services enable assuredworkloads.googleapis.com \
  --project="${QUOTA_PROJECT_ID}"

নিশ্চিত ওয়ার্কলোড পরিবেশ তৈরি করুন

নিম্নলিখিত কমান্ডটি আপনার ডেমোর জন্য একটি সুরক্ষিত 'ল্যান্ডিং জোন' তৈরি করে। এটি আপনার নির্দিষ্ট ফোল্ডার এবং বিলিং অ্যাকাউন্টের অধীনে দুটি নতুন গুগল ক্লাউড প্রজেক্ট তৈরি করে।

  • একটি প্রজেক্ট আপনার GKE ক্লাস্টার এবং অ্যাপ্লিকেশন হোস্ট করে।
  • অন্য প্রকল্পটি আপনার গ্রাহক-পরিচালিত এনক্রিপশন কী (CMEK) পরিচালনা করে।

এটি প্রকল্প দুটি তৈরি হওয়ার মুহূর্ত থেকেই স্বয়ংক্রিয়ভাবে সেগুলিতে নির্দিষ্ট IL5 কমপ্লায়েন্স কন্ট্রোলগুলি প্রয়োগ করে।

ওয়ার্কলোড এনভায়রনমেন্ট তৈরি করতে নিম্নলিখিতটি চালান।

export ASSURED_WORKLOAD_ID=$(gcloud assured workloads create \
    --project="${QUOTA_PROJECT_ID}" \
    --display-name="DoD IL5 Gemini Vision Demo" \
    --compliance-regime="IL5" \
    --billing-account="billingAccounts/${BILLING_ACCOUNT}" \
    --location="${REGION}" \
    --organization="${GCP_ORGANIZATION}" \
    --provisioned-resources-parent="folders/${FOLDER_ID}" \
    --resource-settings="consumer-project-id=${PROJECT_ID},consumer-project-name=DoD IL5 Workloads,encryption-keys-project-id=${KMS_PROJECT_ID},encryption-keys-project-name=DoD IL5 KMS" \
    --labels="codelab=gemini-vision-demo" \
    --format="value(name)")

echo "Assured Workload created: ${ASSURED_WORKLOAD_ID}"

export WORKLOAD_FOLDER_ID=$(gcloud assured workloads describe ${ASSURED_WORKLOAD_ID} \
    --location="${REGION}" \
    --project="${QUOTA_PROJECT_ID}" \
    --format="json" | grep -B 1 "CONSUMER_FOLDER" | grep -oE "[0-9]{10,}")

echo "Assured Workload folder created: ${WORKLOAD_FOLDER_ID}"

gcloud projects create "${PROJECT_ID}" \
    --folder="${WORKLOAD_FOLDER_ID}" \
    --name="DoD IL5 Workloads"

gcloud billing projects link "${PROJECT_ID}" \
    --billing-account="${BILLING_ACCOUNT}"

export PROJECT_NUMBER=$(gcloud projects describe "${PROJECT_ID}" --format="value(projectNumber)")

প্রয়োজনীয় গুগল ক্লাউড এপিআই সক্রিয় করা

বিল্ড করার আগে, প্রয়োজনীয় সার্ভিসগুলোর জন্য এপিআইগুলো সক্রিয় করুন।

নিচের কমান্ডটি আপনার প্রধান ওয়ার্কলোড প্রজেক্টের মধ্যে এই কোডল্যাবের জন্য প্রয়োজনীয় সমস্ত পরিষেবা সক্রিয় করে।

gcloud services enable \
    aiplatform.googleapis.com \
    artifactregistry.googleapis.com \
    cloudkms.googleapis.com \
    compute.googleapis.com \
    container.googleapis.com \
    iam.googleapis.com \
    logging.googleapis.com \
    monitoring.googleapis.com \
    --project="${PROJECT_ID}"

৪. GKE পরিকাঠামো স্থাপন

আপনার GKE ক্লাস্টারকে সমর্থন করে এমন মূল পরিকাঠামো তৈরি করুন। এর জন্য আপনার ক্লাস্টারের জন্য একটি ডেডিকেটেড নেটওয়ার্ক স্থাপন করতে হবে এবং আপনার নোডগুলিতে থাকা ডেটা সুরক্ষিত করার জন্য নিজস্ব এনক্রিপশন কী কনফিগার করতে হবে।

VPC নেটওয়ার্ক কনফিগার করা

একটি কাস্টম ভার্চুয়াল প্রাইভেট ক্লাউড (VPC) এবং সাবনেটওয়ার্ক তৈরি করুন। এই পদ্ধতিটি আপনাকে আইপি অ্যাড্রেস রেঞ্জের উপর সম্পূর্ণ নিয়ন্ত্রণ দেয় এবং আপনার ক্লাস্টারটি উদ্দেশ্য অনুযায়ী বিচ্ছিন্ন থাকে তা নিশ্চিত করে।

আপনার নির্দিষ্ট অঞ্চলের মধ্যে VPC নেটওয়ার্ক এবং একটি সাবনেটওয়ার্ক তৈরি করতে নিম্নলিখিত কমান্ডগুলো চালান।

export GKE_NETWORK_NAME="il5-gke-network"
export GKE_SUBNETWORK_NAME="il5-gke-subnet"

gcloud compute networks create "${GKE_NETWORK_NAME}" \
    --description="VPC network for GKE cluster in DoD IL5 Assured Workload" \
    --subnet-mode="custom" \
    --project="${PROJECT_ID}"

gcloud compute networks subnets create "${GKE_SUBNETWORK_NAME}" \
    --network="${GKE_NETWORK_NAME}" \
    --range="10.10.0.0/20" \
    --region="${REGION}" \
    --description="Subnet for GKE cluster nodes in DoD IL5 Assured Workload" \
    --project="${PROJECT_ID}"

ক্লাউড কেএমএস দিয়ে এনক্রিপশন কনফিগার করা

সংরক্ষিত ডেটার জন্য কঠোর কমপ্লায়েন্সের প্রয়োজনীয়তা পূরণের জন্য, কাস্টমার-ম্যানেজড এনক্রিপশন কী (CMEK) ব্যবহার করুন। এটি আপনাকে আপনার GKE নোডগুলির বুট ডিস্ক এনক্রিপ্ট করতে ব্যবহৃত কীগুলির উপর সরাসরি নিয়ন্ত্রণ দেয়।

export KMS_KEYRING_NAME="il5_gke_key_ring"
export KMS_KEY_NAME="il5_gke_key"

gcloud kms keyrings create "${KMS_KEYRING_NAME}" \
    --location="$REGION" \
    --project="${KMS_PROJECT_ID}"

gcloud kms keys create "${KMS_KEY_NAME}" \
    --keyring="${KMS_KEYRING_NAME}" \
    --location="${REGION}" \
    --purpose="encryption" \
    --project="${KMS_PROJECT_ID}"

যেহেতু এনক্রিপশন কী-টি যে সার্ভিসটির এটি ব্যবহার করা প্রয়োজন, তার থেকে একটি আলাদা KMS প্রজেক্টে থাকে, তাই ওয়ার্কলোড প্রজেক্টের Google Compute Engine সার্ভিস এজেন্টের ওই কী-টিতে অ্যাক্সেস প্রয়োজন।

আপনাকে অবশ্যই ওয়ার্কলোড প্রজেক্ট থেকে GCE সার্ভিস এজেন্টকে এই কী-টি ব্যবহার করার অনুমতি সুস্পষ্টভাবে প্রদান করতে হবে। নিচের কমান্ডটি কী-টির সাথে একটি IAM পলিসি বাইন্ডিং যোগ করে, যা সার্ভিস এজেন্টকে প্রয়োজনীয় রোলটি প্রদান করে।

gcloud kms keys add-iam-policy-binding "${KMS_KEY_NAME}" \
    --location="${REGION}" \
    --keyring="${KMS_KEYRING_NAME}" \
    --member="serviceAccount:service-${PROJECT_NUMBER}@compute-system.iam.gserviceaccount.com" \
    --role="roles/cloudkms.cryptoKeyEncrypterDecrypter" \
    --project="${KMS_PROJECT_ID}"

একটি GKE নোড পরিষেবা অ্যাকাউন্ট কনফিগার করা

export GKE_NODE_SA=gke-node-sa

gcloud iam service-accounts create "${GKE_NODE_SA}" \
    --display-name="GKE Node Service Account" \
    --project="${PROJECT_ID}"

gcloud projects add-iam-policy-binding "${PROJECT_ID}" \
    --member="serviceAccount:${GKE_NODE_SA}@${PROJECT_ID}.iam.gserviceaccount.com" \
    --role="roles/logging.logWriter"

gcloud projects add-iam-policy-binding "${PROJECT_ID}" \
    --member="serviceAccount:${GKE_NODE_SA}@${PROJECT_ID}.iam.gserviceaccount.com" \
    --role="roles/monitoring.metricWriter"

৫. GKE ক্লাস্টার তৈরি এবং কনফিগারেশন

এখন, আপনি GKE ক্লাস্টার তৈরি করতে পারেন। নিম্নলিখিত কমান্ডটি বেশ কিছু নিরাপত্তা বৈশিষ্ট্য সক্রিয় করে একটি GKE ক্লাস্টার প্রস্তুত করে।

এই প্রক্রিয়াটি সম্পন্ন হতে কয়েক মিনিট সময় লাগে, কারণ গুগল ক্লাউড নোড এবং কন্ট্রোল প্লেন প্রস্তুত করে।

export GKE_CLUSTER=ppe-app

gcloud beta container clusters create "${GKE_CLUSTER}" \
    --project="$PROJECT_ID" \
    --region="$REGION" \
    --service-account="${GKE_NODE_SA}@${PROJECT_ID}.iam.gserviceaccount.com" \
    --release-channel="regular" \
    --machine-type="n2d-standard-4" \
    --image-type="COS_CONTAINERD" \
    --disk-type="pd-ssd" \
    --disk-size="50" \
    --boot-disk-kms-key="projects/${KMS_PROJECT_ID}/locations/${REGION}/keyRings/${KMS_KEYRING_NAME}/cryptoKeys/${KMS_KEY_NAME}" \
    --metadata disable-legacy-endpoints=true \
    --num-nodes="1" \
    --network="projects/${PROJECT_ID}/global/networks/${GKE_NETWORK_NAME}" \
    --subnetwork="projects/${PROJECT_ID}/regions/${REGION}/subnetworks/${GKE_SUBNETWORK_NAME}" \
    --security-posture="standard" \
    --workload-vulnerability-scanning="disabled" \
    --workload-pool="${PROJECT_ID}.svc.id.goog" \
    --workload-metadata=GKE_METADATA \
    --addons="HorizontalPodAutoscaling,HttpLoadBalancing,NodeLocalDNS,GcePersistentDiskCsiDriver" \
    --max-surge-upgrade=1 \
    --max-unavailable-upgrade=0 \
    --binauthz-evaluation-mode="DISABLED" \
    --no-enable-basic-auth \
    --enable-autoupgrade \
    --enable-autorepair \
    --enable-confidential-nodes \
    --confidential-node-type=sev \
    --enable-ip-access \
    --enable-ip-alias \
    --enable-managed-prometheus \
    --enable-dns-access \
    --enable-shielded-nodes \
    --shielded-integrity-monitoring \
    --shielded-secure-boot

নতুন ক্লাস্টারে সংযোগ স্থাপন করা হচ্ছে

আপনার নতুন ক্লাস্টারের সাথে যোগাযোগ করতে, আপনার স্থানীয় kubectl কমান্ড-লাইন টুলটি কনফিগার করুন।

এই কমান্ডটি ক্লাস্টারের ক্রেডেনশিয়াল ও এন্ডপয়েন্ট সংগ্রহ করে এবং স্বয়ংক্রিয়ভাবে আপনার স্থানীয় kubeconfig ফাইলটি কনফিগার করে। এটি চালানোর পর, আপনার চালানো যেকোনো kubectl কমান্ড আপনার নতুন GKE ক্লাস্টারে নির্দেশিত হবে।

gcloud container clusters get-credentials "${GKE_CLUSTER}" \
    --region="${REGION}" \
    --project="${PROJECT_ID}" \
    --dns-endpoint

৬. অ্যাপ্লিকেশন পরিচয় কনফিগারেশন

একটি Kubernetes সার্ভিস অ্যাকাউন্টকে Google Cloud IAM সার্ভিস অ্যাকাউন্টের সাথে সংযুক্ত করতে, Workload Identity কনফিগার করুন।

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

আপনার ক্লাস্টারের ভিতরে একটি ডেডিকেটেড কুবারনেটিস সার্ভিস অ্যাকাউন্ট (KSA) তৈরি করুন।

export GKE_NAMESPACE=default
export GKE_SA=ppe-sa

kubectl create sa "${GKE_SA}" --namespace="${GKE_NAMESPACE}"

এরপর, আপনার অ্যাপ্লিকেশনটির গুগল ক্লাউডে একটি পরিচিতি প্রয়োজন। অ্যাপ্লিকেশনটির জন্য একটি গুগল ক্লাউড আইএএম সার্ভিস অ্যাকাউন্ট তৈরি করুন। সার্ভিস অ্যাকাউন্টটি তৈরি করার পর, এটিকে প্রয়োজনীয় ভূমিকাগুলো (role) প্রদান করুন।

# Create GCP service account
gcloud iam service-accounts create "${GKE_SA}" \
    --project="${PROJECT_ID}"
# Grant necessary roles
gcloud projects add-iam-policy-binding "${PROJECT_ID}" \
    --member="serviceAccount:${GKE_SA}@${PROJECT_ID}.iam.gserviceaccount.com" \
    --role="roles/aiplatform.user"

Kubernetes সার্ভিস অ্যাকাউন্টকে IAM অ্যাকাউন্টের ছদ্মবেশ ধারণ করার অনুমতি দেওয়া

উভয় সার্ভিস অ্যাকাউন্ট তৈরি হয়ে গেলে, চূড়ান্ত ধাপটি হলো সেগুলোর মধ্যে সংযোগ স্থাপন করা। এটি একটি দুই-ধাপের প্রক্রিয়া। প্রথমে, আপনার গুগল ক্লাউড সার্ভিস অ্যাকাউন্টে একটি IAM পলিসি যোগ করুন।

# Allow the Kubernetes service account to act as GCP service account by using Workload Identity
gcloud iam service-accounts add-iam-policy-binding "${GKE_SA}@${PROJECT_ID}.iam.gserviceaccount.com" \
    --project="${PROJECT_ID}" \
    --role="roles/iam.workloadIdentityUser" \
    --member="serviceAccount:${PROJECT_ID}.svc.id.goog[${GKE_NAMESPACE}/${GKE_SA}]"

দ্বিতীয়ত, আপনার Kubernetes সার্ভিস অ্যাকাউন্টটি টীকাযুক্ত করুন।

kubectl annotate --namespace="${GKE_NAMESPACE}" serviceaccount "$GKE_SA" \
    iam.gke.io/gcp-service-account="${GKE_SA}@${PROJECT_ID}.iam.gserviceaccount.com"

এটি সম্পন্ন হলে, আপনার ক্লাস্টারে Kubernetes সার্ভিস অ্যাকাউন্ট দিয়ে চলমান যেকোনো পড এখন Vertex API অ্যাক্সেস করতে পারবে।

দ্রষ্টব্য: এই কনফিগারেশনটি সহজ করার জন্য সার্ভিস অ্যাকাউন্ট ইমপার্সোনেশন বাদ দেওয়া সম্ভব। বিস্তারিত বিবরণ এবং সীমাবদ্ধতার জন্য এখানে দেখুন।

৭. অ্যাপ্লিকেশন বিল্ড এবং ডেপ্লয়মেন্ট

এখন আপনার অ্যাপ্লিকেশনটি প্যাকেজ করে, সংরক্ষণ করে, এবং আপনার GKE ক্লাস্টারে স্থাপন করার সময় এসেছে।

আর্টিফ্যাক্ট রেজিস্ট্রি রিপোজিটরি তৈরি করা

অ্যাপটি চালানোর আগে, এটিকে একটি ডকার কন্টেইনার হিসেবে প্যাকেজ করুন এবং একটি আর্টিফ্যাক্ট রেজিস্ট্রি রিপোজিটরিতে সংরক্ষণ করুন। এই রিপোজিটরিটি তৈরি করতে নিচের কমান্ডটি ব্যবহার করুন।

export REPOSITORY_ID=ppe-repo

gcloud artifacts repositories create "${REPOSITORY_ID}" \
  --repository-format=docker \
  --location="${REGION}" \
  --project="${PROJECT_ID}" \
  --description="Regional Docker repo for PPE App"

আপনাকে অবশ্যই GKE নোডগুলি দ্বারা ব্যবহৃত পরিষেবা অ্যাকাউন্টকে আপনার নতুন রিপোজিটরি থেকে পড়ার ক্ষমতা স্পষ্টভাবে প্রদান করতে হবে।

gcloud artifacts repositories add-iam-policy-binding "${REPOSITORY_ID}" \
    --location="${REGION}" \
    --role="roles/artifactregistry.reader" \
    --project="${PROJECT_ID}" \
    --member="serviceAccount:${GKE_NODE_SA}@${PROJECT_ID}.iam.gserviceaccount.com"

ডকার ইমেজ তৈরি এবং পুশ করা

ডকার ইমেজটি বিল্ড করে রিপোজিটরিতে পুশ করুন। প্রথমে, সোর্স কোড ক্লোন করে কন্টেইনার ইমেজটি বিল্ড করুন। তারপর, এটিকে এর সম্পূর্ণ আর্টিফ্যাক্ট রেজিস্ট্রি পাথ দিয়ে ট্যাগ করুন এবং আপনার পূর্বে তৈরি করা রিপোজিটরিতে পুশ করুন।

git clone https://github.com/GoogleCloudPlatform/next-26-sessions.git

cd BRK3-034-workplace-safety

cd ppe

export IMAGE_TAG="${REGION}-docker.pkg.dev/${PROJECT_ID}/${REPOSITORY_ID}/ppe-app:v15"
docker build -t "${IMAGE_TAG}" .
docker push "${IMAGE_TAG}"

GKE-তে স্থাপন করা হচ্ছে

আর্টিফ্যাক্ট রেজিস্ট্রি-তে কন্টেইনার ইমেজটি উপলব্ধ হয়ে গেলে, চূড়ান্ত ধাপটি হলো GKE-কে এটি পুল এবং রান করার নির্দেশ দেওয়া। এটি সম্পন্ন করা হয় একটি কুবারনেটিস ম্যানিফেস্ট ফাইলে আপনার অ্যাপ্লিকেশনের রিসোর্সগুলো সংজ্ঞায়িত করে এবং সেটিকে ক্লাস্টারে প্রয়োগ করার মাধ্যমে। এই কমান্ডটি ফাইলটিতে সংজ্ঞায়িত Deployment এবং Service অবজেক্টগুলো তৈরি করে।

export GKE_DEPLOY=ppe-detector

cat <<EOF | kubectl apply -f -
apiVersion: apps/v1
kind: Deployment
metadata:
  name: ${GKE_DEPLOY}
spec:
  replicas: 2
  selector:
    matchLabels:
      app: ${GKE_DEPLOY}
  template:
    metadata:
      labels:
        app: ${GKE_DEPLOY}
    spec:
      serviceAccountName: ${GKE_SA}
      containers:
      - name: ${GKE_DEPLOY}
        image: ${IMAGE_TAG}
        env:
        - name: PROJECT_ID
          value: ${PROJECT_ID}
        - name: LOCATION
          value: ${REGION}
        ports:
        - containerPort: 8080
        resources:
          requests:
            cpu: "250m"
            memory: "512Mi"
          limits:
            cpu: "500m"
            memory: "1Gi"
---
apiVersion: v1
kind: Service
metadata:
  name: ${GKE_DEPLOY}
spec:
  type: LoadBalancer
  selector:
    app: ${GKE_DEPLOY}
  ports:
  - protocol: TCP
    port: 80
    targetPort: 8080
EOF

৮. অ্যাপ্লিকেশনটি পরীক্ষা করা

চূড়ান্ত ধাপ হলো ডেমো অ্যাপ্লিকেশনটি অ্যাক্সেস করে পরীক্ষা করা। এর জন্য সার্ভিসটিতে বরাদ্দ করা এক্সটার্নাল আইপি অ্যাড্রেসটি সংগ্রহ করতে হয় এবং একটি সাধারণ ফ্রন্টএন্ডের মাধ্যমে সেটির সাথে ইন্টারঅ্যাক্ট করতে হয়।

পরিষেবাটির বাহ্যিক আইপি পুনরুদ্ধার করা হচ্ছে

এক্সপোজড সার্ভিসটির এক্সটার্নাল আইপি সংগ্রহ করুন (প্রোভিশন করতে প্রায় ৩০ সেকেন্ড সময় লাগে)।

export IP_ADDRESS=$(kubectl get service "${GKE_DEPLOY}" -o jsonpath='{.status.loadBalancer.ingress[0].ip}')
echo $IP_ADDRESS

ফ্রন্টএন্ড স্থানীয়ভাবে চালানো

এই প্রদর্শনের জন্য, ফ্রন্টএন্ডটি একটি সাধারণ HTML/JavaScript পৃষ্ঠা যা GKE ডেপ্লয়মেন্টের অংশ নয়। এটি আপনার স্থানীয় মেশিনে চালানোর জন্য ডিজাইন করা হয়েছে।

প্রোডাকশন অ্যাপ্লিকেশনে ফ্রন্ট-এন্ডটি GCP থেকে পরিবেশন করা উচিত। লোকাল মেশিনে:

# Update the index.html file with the server IP address
cd frontend

# For Linux
sed -i "s#\(const BACKEND_URL = \"http://\)[^/]\+\(\/analyze\";\)#\1${IP_ADDRESS}\2#g" "index.html"

# For MacOS
#sed -i '' "s#\(const BACKEND_URL = #\"http://\)[^/]*\(\/analyze\";\)#\1${IP_ADDRESS}\2#g" "index.html"

python3 -m http.server 8001

ক্রোমে http://localhost:8001/index.html খুলুন।

৯. পরিষ্কার করা

চলমান চার্জ এড়াতে, এই কোডল্যাবে তৈরি করা রিসোর্সগুলো মুছে ফেলুন।

GKE ক্লাস্টার ধ্বংস করা

সম্পূর্ণ অ্যাপ্লিকেশনটি মুছে ফেলার জন্য আপনাকে শুধু GKE ক্লাস্টারটি ডিলিট করতে হবে। তা করতে, চালান:

gcloud container clusters delete "${GKE_CLUSTER}" \
    --region="$REGION" \
    --project="${PROJECT_ID}"

নিশ্চিত ওয়ার্কলোডগুলি মুছে ফেলা

Assured Workload সম্পর্কিত সমস্ত রিসোর্স মুছে ফেলার জন্য নিম্নলিখিত কমান্ডগুলি চালান।

# Workload project deletion
gcloud billing projects unlink "${PROJECT_ID}"
gcloud projects delete "${PROJECT_ID}"

# KMS project deletion
gcloud billing projects unlink "${KMS_PROJECT_ID}"
gcloud projects delete "${KMS_PROJECT_ID}"

# Assured Workload folder deletion
gcloud resource-manager folders delete ${WORKLOAD_FOLDER_ID} --quiet

# Assured Workload deletion
gcloud assured workloads delete "${ASSURED_WORKLOAD_ID}" \
    --location="${REGION}" \
    --organization="${GCP_ORGANIZATION}" \
    --project="${QUOTA_PROJECT_ID}"

১০. অভিনন্দন

মিশন সম্পন্ন! আপনি নিয়ন্ত্রিত শিল্পখাতের জন্য সফলভাবে একটি কর্মক্ষেত্র নিরাপত্তা শনাক্তকরণ সিস্টেম তৈরি করেছেন, যা হার্ড হ্যাট শনাক্ত করতে জেমিনি ব্যবহার করে।

আপনি যা অর্জন করেছেন:

  • ডেটা সুরক্ষা ও গোপনীয়তা: আপনি CMEK সহ একটি গোপনীয় GKE নোড স্থাপন করেছেন।
  • ডেটার সীমানা: আপনি একটি নিয়ন্ত্রিত পরিবেশের জন্য প্ল্যাটফর্মের সম্মতি নিয়ন্ত্রণগুলো সক্রিয় করেছেন।

রেফারেন্স নথি