การรักษาความปลอดภัยของระบบตรวจจับความปลอดภัยในที่ทำงาน

1. บทนำ

ใน Codelab นี้ คุณจะได้สร้างแอปพลิเคชันสาธิตพื้นฐานที่แสดงวิธีผสานรวมบริการต่างๆ ของ Google Cloud สำหรับบริการที่อยู่ในโปรเจ็กต์ที่มีข้อจำกัดด้านการปฏิบัติตามข้อกำหนด โปรเจ็กต์นี้ใช้ความสามารถด้านความปลอดภัยต่อไปนี้

  • ขอบเขตข้อมูลเพื่อช่วยจัดการการควบคุมสำหรับสภาพแวดล้อมที่มีการควบคุม
  • คีย์การเข้ารหัสที่จัดการโดยลูกค้า ( CMEK) เพื่อปกป้องข้อมูลที่ไม่มีการเคลื่อนไหว
  • โหนด GKE ที่มีการป้องกันและโหนด GKE Confidential เพื่อช่วยรักษาความปลอดภัยของข้อมูลในระหว่างการประมวลผล
  • Workload Identity สำหรับ GKE เพื่อจัดการการเข้าถึง Vertex AI ซึ่งใช้ Gemini สำหรับงานประมวลผลรูปภาพ
  • Generative AI ใน Vertex AI เพื่อจัดการการตรวจจับหมวกนิรภัยจากวิดีโอสตรีม

Codelab นี้มีไว้สำหรับนักพัฒนาแอปทุกระดับ รวมถึงผู้เริ่มต้น คุณจะใช้อินเทอร์เฟซบรรทัดคำสั่งใน Google Cloud Shell และโค้ด Python คุณไม่จำเป็นต้องเป็นผู้เชี่ยวชาญด้าน Python แต่ความเข้าใจพื้นฐานเกี่ยวกับวิธีอ่านโค้ดจะช่วยให้คุณเข้าใจแนวคิดต่างๆ ได้

หมายเหตุ: นี่เป็นเพียงการพิสูจน์แนวคิดแบบง่าย ไม่ใช่แอปพลิเคชันที่ใช้จริง ใช้มาตรการป้องกันเพิ่มเติม เช่น การเข้าถึงภายนอกที่ตรวจสอบสิทธิ์และปลอดภัยสำหรับบริการนี้ในสถานการณ์จริง

2. ก่อนเริ่มต้น

การตั้งค่าโปรเจ็กต์

../shared/_project-setup.md

เริ่มต้น Cloud Shell

Cloud Shell คือสภาพแวดล้อมบรรทัดคำสั่งที่ทำงานใน Google Cloud ซึ่งโหลดเครื่องมือที่จำเป็นไว้ล่วงหน้า

  1. คลิกเปิดใช้งาน Cloud Shell ที่ด้านบนของคอนโซล Google Cloud

404e4cce0f23e5c5.png

  1. เมื่อเชื่อมต่อกับ Cloud Shell แล้ว ให้เรียกใช้คำสั่งนี้เพื่อยืนยันการตรวจสอบสิทธิ์ใน Cloud Shell
gcloud auth list
  1. เรียกใช้คำสั่งต่อไปนี้เพื่อยืนยันว่าโปรเจ็กต์ได้รับการกำหนดค่าให้ใช้กับ gcloud แล้ว
gcloud config get project
  1. ยืนยันว่าโปรเจ็กต์เป็นไปตามที่คาดไว้ จากนั้นเรียกใช้คำสั่งด้านล่างเพื่อตั้งค่ารหัสโปรเจ็กต์
export PROJECT_ID=$(gcloud config get project)

สิทธิ์ IAM ที่จำเป็น

บัญชีที่คุณใช้สำหรับ Codelab นี้ต้องมีบทบาท IAM ต่อไปนี้ สิทธิ์เหล่านี้จำเป็นต่อการสร้างทรัพยากร Google Cloud ที่จำเป็น (โปรเจ็กต์ โฟลเดอร์ คลัสเตอร์ GKE คีย์ KMS บัญชีบริการ ฯลฯ) และกำหนดค่า Assured Workload

ที่ระดับองค์กร

  • roles/assuredworkloads.admin (ผู้ดูแลระบบ Assured Workloads): เพื่อสร้างและจัดการทรัพยากร Assured Workloads เอง เพื่อให้มั่นใจว่ามีการกำหนดค่าการปฏิบัติตามข้อกำหนด

ที่ระดับบัญชีสำหรับการเรียกเก็บเงิน (ในบัญชีสำหรับการเรียกเก็บเงิน)

  • roles/billing.accountUser (ผู้ใช้บัญชีสำหรับการเรียกเก็บเงิน): เพื่อลิงก์บัญชีสำหรับการเรียกเก็บเงินที่ระบุ

การกำหนดค่าตัวแปร Codelab

หากต้องการสร้างโครงสร้างพื้นฐานที่จำเป็น คุณต้องระบุตัวแปรสภาพแวดล้อมต่อไปนี้

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

3. การสร้างรากฐานของ Assured Workloads

ตอนนี้คุณสามารถวางรากฐานสำหรับการใช้งานในสภาพแวดล้อมที่มีการควบคุมได้แล้ว ใช้ Assured Workloads เพื่อช่วยบังคับใช้ข้อกำหนดด้านการปฏิบัติตามข้อกำหนดโดยการสร้างสภาพแวดล้อมที่มีการควบคุมสำหรับทรัพยากร

กำหนดค่าโปรเจ็กต์โควต้า

เปิดใช้ Assured Workloads API ในโปรเจ็กต์โควต้า ต้องใช้ API นี้ในการสร้างและจัดการ Assured Workloads

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

สร้างสภาพแวดล้อม Assured Workloads

คำสั่งต่อไปนี้จะสร้าง "Landing Zone" ที่ปลอดภัยสำหรับการสาธิต โดยจะสร้างโปรเจ็กต์ Google Cloud ใหม่ 2 โปรเจ็กต์ภายใต้โฟลเดอร์และบัญชีสำหรับการเรียกเก็บเงินที่คุณระบุ

  • โปรเจ็กต์หนึ่งโฮสต์คลัสเตอร์และแอปพลิเคชัน GKE
  • ส่วนอีกโปรเจ็กต์หนึ่งจะจัดการคีย์การเข้ารหัสที่จัดการโดยลูกค้า (CMEK)

โดยจะใช้การควบคุมการปฏิบัติตามข้อกำหนด IL5 ที่ระบุกับทั้ง 2 โปรเจ็กต์โดยอัตโนมัติตั้งแต่ตอนที่สร้าง

เรียกใช้คำสั่งต่อไปนี้เพื่อสร้างสภาพแวดล้อมภาระงาน

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

การเปิดใช้ Google Cloud APIs ที่จำเป็น

ก่อนที่จะสร้าง ให้เปิดใช้ API ที่จำเป็นสำหรับบริการที่ต้องการ

คำสั่งด้านล่างจะเปิดใช้งานบริการที่จำเป็นทั้งหมดสำหรับ Codelab นี้ภายในโปรเจ็กต์เวิร์กโหลดหลัก

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

4. การตั้งค่าโครงสร้างพื้นฐานของ GKE

สร้างโครงสร้างพื้นฐานหลักที่รองรับคลัสเตอร์ GKE ซึ่งรวมถึงการตั้งค่าเครือข่ายเฉพาะสำหรับคลัสเตอร์และการกำหนดค่าคีย์การเข้ารหัสของคุณเองเพื่อปกป้องข้อมูลในโหนด

การกำหนดค่าเครือข่าย VPC

สร้าง Virtual Private Cloud (VPC) และเครือข่ายย่อยที่กำหนดเอง แนวทางนี้ช่วยให้คุณควบคุมช่วงที่อยู่ IP ได้อย่างเต็มที่ และมั่นใจได้ว่าคลัสเตอร์จะแยกกันตามที่ต้องการ

เรียกใช้คำสั่งต่อไปนี้เพื่อสร้างเครือข่าย 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}"

การกำหนดค่าการเข้ารหัสด้วย Cloud KMS

ใช้คีย์การเข้ารหัสที่จัดการโดยลูกค้า (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"

5. การสร้างและการกำหนดค่าคลัสเตอร์ GKE

ตอนนี้คุณสร้างคลัสเตอร์ GKE ได้แล้ว คำสั่งต่อไปนี้จะจัดสรรคลัสเตอร์ GKE ที่เปิดใช้ฟีเจอร์ด้านความปลอดภัยหลายอย่าง

ขั้นตอนนี้อาจใช้เวลาหลายนาทีจึงจะเสร็จสมบูรณ์ เนื่องจาก Google Cloud จะจัดสรรโหนดและระนาบควบคุม

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

6. การกำหนดค่าข้อมูลประจำตัวของแอปพลิเคชัน

หากต้องการเชื่อมต่อบัญชีบริการ Kubernetes กับบัญชีบริการ Google Cloud IAM ให้กำหนดค่า Workload Identity

การสร้างบัญชีบริการ

สร้างบัญชีบริการ Kubernetes (KSA) เฉพาะภายในคลัสเตอร์

export GKE_NAMESPACE=default
export GKE_SA=ppe-sa

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

จากนั้น แอปพลิเคชันของคุณต้องมีข้อมูลประจำตัวภายใน Google Cloud สร้างบัญชีบริการ Google Cloud IAM สำหรับแอปพลิเคชัน หลังจากสร้างบัญชีบริการแล้ว ให้มอบหมายบทบาทที่จำเป็นให้กับบัญชี

# 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

เมื่อสร้างบัญชีบริการทั้ง 2 บัญชีแล้ว ขั้นตอนสุดท้ายคือการสร้างลิงก์ระหว่างบัญชีทั้ง 2 กระบวนการนี้มี 2 ส่วน ก่อนอื่น ให้เพิ่มนโยบาย IAM ลงในบัญชีบริการ Google Cloud

# 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 ได้

หมายเหตุ: คุณสามารถกำจัดการนำข้อมูลมาใช้ของบัญชีบริการเพื่อลดความซับซ้อนของการกำหนดค่านี้ได้ ดูรายละเอียดและข้อจำกัดได้ที่นี่

7. การสร้างและการติดตั้งใช้งานแอปพลิเคชัน

ถึงเวลาแพ็กเกจแอปพลิเคชัน จัดเก็บ และนำไปใช้งานในคลัสเตอร์ GKE แล้ว

การสร้างที่เก็บ Artifact Registry

ก่อนที่จะเรียกใช้แอปได้ คุณต้องแพ็กเกจแอปเป็นคอนเทนเนอร์ Docker และจัดเก็บไว้ในที่เก็บ Artifact Registry ใช้คำสั่งด้านล่างเพื่อสร้างที่เก็บนี้

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"

การสร้างและพุชอิมเมจ Docker

สร้างและพุชอิมเมจ Docker ไปยังที่เก็บ ก่อนอื่น ให้โคลนซอร์สโค้ดและสร้างอิมเมจคอนเทนเนอร์ จากนั้นติดแท็กด้วยเส้นทาง Artifact Registry แบบเต็ม แล้วพุชไปยังที่เก็บที่คุณสร้างไว้ก่อนหน้านี้

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

เมื่อมีอิมเมจคอนเทนเนอร์ใน Artifact Registry แล้ว ขั้นตอนสุดท้ายคือการสั่งให้ GKE ดึงและดำเนินการ ซึ่งทำได้โดยการกำหนดทรัพยากรของแอปพลิเคชันในไฟล์ Manifest ของ Kubernetes แล้วนำไปใช้กับคลัสเตอร์ คำสั่งนี้จะสร้างออบเจ็กต์การติดตั้งใช้งานและออบเจ็กต์บริการที่กำหนดไว้ในไฟล์

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

8. การทดสอบแอปพลิเคชัน

ขั้นตอนสุดท้ายคือการเข้าถึงและทดสอบแอปพลิเคชันเดโม ซึ่งเกี่ยวข้องกับการดึงที่อยู่ IP ภายนอกที่กำหนดให้กับบริการและโต้ตอบกับที่อยู่ดังกล่าวผ่านส่วนหน้าแบบง่าย

การดึงข้อมูล IP ภายนอกของบริการ

รับ IP ภายนอกของบริการที่เปิดเผย (ใช้เวลาประมาณ 30 วินาทีในการจัดสรร)

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 ใน Chrome

9. ล้าง

โปรดลบทรัพยากรที่สร้างขึ้นใน Codelab นี้เพื่อหลีกเลี่ยงการเรียกเก็บเงินอย่างต่อเนื่อง

ทำลายคลัสเตอร์ GKE

หากต้องการลบแอปพลิเคชันทั้งหมด คุณเพียงแค่ลบคลัสเตอร์ GKE โดยเรียกใช้คำสั่งต่อไปนี้

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

การลบ Assured Workloads

เรียกใช้คำสั่งต่อไปนี้เพื่อลบทรัพยากรที่เกี่ยวข้องกับ Assured Workloads ทั้งหมด

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

10. ขอแสดงความยินดี

ภารกิจสำเร็จ! คุณสร้างระบบตรวจหาความปลอดภัยในที่ทำงานสำหรับอุตสาหกรรมที่มีการกำกับดูแลโดยใช้ Gemini เพื่อตรวจหมวกนิรภัยได้สำเร็จ

สิ่งที่คุณทำสำเร็จ

  • การคุ้มครองข้อมูลและความเป็นส่วนตัว: คุณจัดสรรโหนด GKE แบบ Confidential ด้วย CMEK
  • ขอบเขตข้อมูล: คุณเปิดใช้การควบคุมการปฏิบัติตามข้อกำหนดของแพลตฟอร์มสำหรับสภาพแวดล้อมที่มีการควบคุม

เอกสารอ้างอิง