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

1. บทนำ

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

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 Workload

คำสั่งต่อไปนี้จะสร้าง "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 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}"

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

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

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

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

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