ข้อมูลเชิงลึกด้านความปลอดภัยรันไทม์

1. บทนำ

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

สิ่งที่คุณจะได้เรียนรู้

  • ข้อมูลเชิงลึกด้านความปลอดภัยของ Artifact Registry
  • ข้อมูลเชิงลึกด้านความปลอดภัยของ Cloud Run
  • ท่าทางด้านความปลอดภัยของ GKE

2. การตั้งค่าและข้อกำหนด

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

  1. ลงชื่อเข้าใช้ Google Cloud Console แล้วสร้างโปรเจ็กต์ใหม่หรือใช้โปรเจ็กต์ที่มีอยู่ซ้ำ หากยังไม่มีบัญชี Gmail หรือ Google Workspace คุณต้องสร้างบัญชี

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • ชื่อโปรเจ็กต์คือชื่อที่แสดงสำหรับผู้เข้าร่วมโปรเจ็กต์นี้ ซึ่งเป็นสตริงอักขระที่ Google APIs ไม่ได้ใช้ โดยคุณจะอัปเดตได้ทุกเมื่อ
  • รหัสโปรเจ็กต์จะไม่ซ้ำกันในโปรเจ็กต์ Google Cloud ทั้งหมดและเปลี่ยนแปลงไม่ได้ (เปลี่ยนไม่ได้หลังจากตั้งค่าแล้ว) Cloud Console จะสร้างสตริงที่ไม่ซ้ำกันโดยอัตโนมัติ ซึ่งโดยปกติแล้วคุณไม่จำเป็นต้องสนใจว่าสตริงนั้นคืออะไร ใน Codelab ส่วนใหญ่ คุณจะต้องอ้างอิงรหัสโปรเจ็กต์ (โดยปกติจะระบุเป็น PROJECT_ID) หากไม่ชอบรหัสที่สร้างขึ้น คุณก็สร้างรหัสแบบสุ่มอีกรหัสหนึ่งได้ หรือคุณจะลองใช้ชื่อของคุณเองเพื่อดูว่าพร้อมใช้งานหรือไม่ก็ได้ คุณจะเปลี่ยนแปลงรหัสนี้หลังจากขั้นตอนนี้ไม่ได้ และรหัสจะยังคงอยู่ตลอดระยะเวลาของโปรเจ็กต์
  • โปรดทราบว่ายังมีค่าที่ 3 ซึ่งคือหมายเลขโปรเจ็กต์ที่ API บางตัวใช้ ดูข้อมูลเพิ่มเติมเกี่ยวกับค่าทั้ง 3 นี้ได้ในเอกสารประกอบ
  1. จากนั้นคุณจะต้องเปิดใช้การเรียกเก็บเงินใน Cloud Console เพื่อใช้ทรัพยากร/API ของ Cloud การทำตาม Codelab นี้ไม่ควรมีค่าใช้จ่ายมากนัก หรืออาจไม่มีเลย หากต้องการปิดทรัพยากรเพื่อไม่ให้มีการเรียกเก็บเงินนอกเหนือจากบทแนะนำนี้ คุณสามารถลบทรัพยากรที่สร้างขึ้นหรือลบทั้งโปรเจ็กต์ได้ ผู้ใช้ Google Cloud รายใหม่มีสิทธิ์เข้าร่วมโปรแกรมช่วงทดลองใช้ฟรีมูลค่า$300 USD

การตั้งค่าสภาพแวดล้อม

เปิดใช้งาน Cloud Shell โดยคลิกไอคอนทางด้านขวาของแถบค้นหา

ecdc43ada29e91b.png

จาก Cloud Shell ให้เปิดใช้ API ที่จำเป็นสำหรับแล็บนี้

gcloud services enable run.googleapis.com \
  cloudbuild.googleapis.com \
  artifactregistry.googleapis.com \
  container.googleapis.com \
  containersecurity.googleapis.com

หากระบบแจ้งให้ให้สิทธิ์ ให้คลิก "ให้สิทธิ์" เพื่อดำเนินการต่อ

6356559df3eccdda.png

ซึ่งควรจะแสดงข้อความว่าดำเนินการสำเร็จคล้ายกับข้อความนี้

Operation "operations/acf.p2-327036483151-73d90d00-47ee-447a-b600-a6badf0eceae" finished successfully.

เรียกใช้คำสั่งเพื่อสร้างคลัสเตอร์ GKE แบบไม่พร้อมกัน โดยจะใช้ในภายหลังใน Lab ดังนี้

gcloud beta container clusters create gke-cluster \
    --zone us-central1-a \
    --async

3. เตรียมแอปพลิเคชัน

ก่อนอื่น คุณจะต้องเตรียมแอปพลิเคชัน Node.js แบบง่ายที่อิงตาม Express ซึ่งตอบสนองต่อคำขอ HTTP

สร้างไดเรกทอรีใหม่ชื่อ starter-nodejs ใน Cloud Shell แล้วเปลี่ยนไปที่ไดเรกทอรีนั้นโดยใช้คำสั่งต่อไปนี้

mkdir starter-nodejs
cd starter-nodejs

สร้างไฟล์ package.json โดยเรียกใช้คำสั่งด้านล่าง

cat > ./package.json << EOF
{
  "name": "cloudrun-starter-app",
  "version": "1.0.0",
  "description": "Node.js Starter Application",
  "main": "index.js",
  "scripts": {
    "start": "node index.js"
  },
  "author": "",
  "license": "Apache-2.0",
  "dependencies": {
    "express": "^4.18.2"
  }
}
EOF

ไฟล์ด้านบนมีคำสั่งสคริปต์เริ่มต้นและทรัพยากร Dependency บนเฟรมเวิร์กเว็บแอปพลิเคชัน Express

จากนั้นในไดเรกทอรีเดียวกัน ให้สร้างไฟล์ index.js โดยเรียกใช้คำสั่งด้านล่าง

cat > ./index.js << EOF
const express = require('express');
const app = express();

app.get('/', (req, res) => {
  console.log('Received a request.');
  res.send("Hello Cloud Run!");
});

const port = process.env.PORT || 8080;

app.listen(port, () => {
  console.log('Listening on port', port);
});
EOF

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

4. ทำให้ใช้งานได้แอปพลิเคชัน Cloud Run

เรียกใช้คำสั่งด้านล่างเพื่อทำให้แอปพลิเคชันใช้งานได้

gcloud run deploy starter-app \
  --source . \
  --region us-central1 \
  --allow-unauthenticated \
  --max-instances=3

ยืนยันการสร้างที่เก็บ Artifact Registry

Deploying from source requires an Artifact Registry Docker repository to store built containers. A repository named [cloud-run-source-deploy] in region [us-central1] will be created.

Do you want to continue (Y/n)? y

5. ข้อมูลเชิงลึกด้านความปลอดภัยของ Artifact Registry และ Cloud Build

การบิลด์จะใช้เวลาสักครู่จึงจะเสร็จสมบูรณ์

เปิด Cloud Build แล้วตรวจสอบอาร์ติแฟกต์ของบิลด์สำหรับบิลด์ล่าสุด

UI ของ Cloud Build ในคอนโซล Google Cloud มีแผงข้อมูลเชิงลึกด้านความปลอดภัยของ Software Delivery Shield ซึ่งแสดงข้อมูลความปลอดภัยที่เกี่ยวข้องกับการสร้าง เช่น ระดับ SLSA, ช่องโหว่ในทรัพยากร Dependency และที่มาของการสร้าง

7d9fd2213f3704c4.png

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

กลับไปที่คอนโซล Cloud Shell แล้วตรวจสอบว่าการทําให้แอปพลิเคชัน Cloud Run ใช้งานได้เสร็จสมบูรณ์แล้ว

Done.
Service [starter-app] revision [starter-app-00001-maw] has been deployed and is serving 100 percent of traffic.
Service URL: https://starter-app-nin5jpgefq-uc.a.run.app

6. ข้อมูลเชิงลึกด้านความปลอดภัยของ Cloud Run

Cloud Run มีแผงความปลอดภัย (ตัวอย่าง) ที่แสดงข้อมูลเชิงลึกด้านความปลอดภัยของซัพพลายเชนซอฟต์แวร์ เช่น ข้อมูลการปฏิบัติตามข้อกำหนดระดับการสร้าง SLSA, แหล่งที่มาของการสร้าง และช่องโหว่ที่พบในบริการที่ทำงานอยู่

เปิด Cloud Run แล้วตรวจสอบข้อมูลเชิงลึกด้านความปลอดภัยในแท็บ REVISIONS / SECURITY

62a9f5d26207e58e.png

แผงนี้จะแสดงข้อมูลต่อไปนี้

  • ข้อมูลประจำตัวและการเข้ารหัส: อีเมลของบัญชีบริการเริ่มต้นของ Compute Engine และคีย์การเข้ารหัสที่ใช้สำหรับการติดตั้งใช้งาน
  • ระดับ SLSA: บิลด์นี้อยู่ที่ระดับ SLSA 3 ซึ่งระบุระดับความพร้อมของกระบวนการบิลด์ซอฟต์แวร์ตามข้อกำหนด SLSA
  • ช่องโหว่: ช่องโหว่ที่พบในการอ้างอิงของแอปพลิเคชัน
  • รายละเอียดบิลด์: รายละเอียดของบิลด์ เช่น เครื่องมือสร้างและลิงก์เพื่อดูบันทึก
  • สร้างที่มา: ที่มาของบิลด์ ซึ่งเป็นชุดข้อมูลเมตาที่ตรวจสอบได้เกี่ยวกับบิลด์ ซึ่งรวมถึงรายละเอียดต่างๆ เช่น ไดเจสต์ของอิมเมจที่สร้างขึ้น ตำแหน่งแหล่งที่มาของอินพุต เครื่องมือเชนสำหรับการสร้าง ขั้นตอนการสร้าง และระยะเวลาการสร้าง

7. ท่าทางด้านความปลอดภัยของ GKE

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

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

ตรวจสอบว่าคลัสเตอร์พร้อมใช้งานโดยเรียกใช้คำสั่งต่อไปนี้

gcloud beta container clusters list

ตัวอย่างเอาต์พุต

NAME: gke-cluster
LOCATION: us-central1-a
MASTER_VERSION: 1.24.9-gke.3200
MASTER_IP: 34.29.226.228
MACHINE_TYPE: e2-medium
NODE_VERSION: 1.24.9-gke.3200
NUM_NODES: 3
STATUS: RUNNING

รับข้อมูลเข้าสู่ระบบและการกำหนดค่าสำหรับคลัสเตอร์ GKE โดยใช้คำสั่งต่อไปนี้

gcloud container clusters get-credentials gke-cluster  \
    --region=us-central1-a

เรียกใช้คำสั่งเพื่อติดตั้งใช้งานแอปพลิเคชันโดยใช้อิมเมจที่สร้างขึ้นในขั้นตอนก่อนหน้า

export PROJECT_ID=$(gcloud config get-value project)

kubectl run starter-app \
  --image us-central1-docker.pkg.dev/${PROJECT_ID}/cloud-run-source-deploy/starter-app:latest \
  --port 8080

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

เปิดใช้การสแกนการกำหนดค่าเวิร์กโหลด

gcloud beta container clusters update gke-cluster \
    --region=us-central1-a \
    --enable-workload-config-audit

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

GKE จะสแกนอิมเมจคอนเทนเนอร์ในพ็อดที่มีสิทธิ์ทั้งหมดที่ทำงานในคลัสเตอร์ GKE โดยอัตโนมัติเพื่อหาช่องโหว่ที่ทราบ โดยใช้ข้อมูลช่องโหว่จากฐานข้อมูล CVE สาธารณะ เช่น NIST

หากพบช่องโหว่ในอิมเมจคอนเทนเนอร์ GKE จะกำหนดระดับความรุนแรงและแสดงผลลัพธ์ในแดชบอร์ดท่าทางด้านความปลอดภัยในคอนโซล Google Cloud นอกจากนี้ GKE ยังเพิ่มรายการลงใน Cloud Logging เพื่อการตรวจสอบและการตรวจสอบย้อนกลับด้วย

เปิดใช้การสแกนช่องโหว่ของเวิร์กโหลด

gcloud beta container clusters update gke-cluster \
    --region=us-central1-a \
    --enable-workload-vulnerability-scanning \
    --async

เปิดหน้าท่าทางด้านความปลอดภัยของ GKE

รอสักครู่เพื่อให้การตรวจสอบปริมาณงานเสร็จสมบูรณ์ แล้วตรวจสอบผลลัพธ์

5b1b8158bc55ce67.png

ตรวจสอบข้อกังวลเกี่ยวกับการกำหนดค่าและเวิร์กโหลดที่ได้รับผลกระทบ

58e6f4b6d8eaa99a.png

เหตุผลที่ควรใช้แดชบอร์ดท่าทางด้านความปลอดภัย

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

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

8. ยินดีด้วย

ยินดีด้วย คุณทำ Codelab เสร็จแล้ว

สิ่งที่เราได้พูดถึงไปแล้ว

  • ข้อมูลเชิงลึกด้านความปลอดภัยสำหรับอาร์ติแฟกต์บิลด์และแอปพลิเคชันที่ทำงานบน Cloud Run และ GKE

ล้างข้อมูล

โปรดลบโปรเจ็กต์ที่มีทรัพยากรหรือเก็บโปรเจ็กต์ไว้และลบทรัพยากรแต่ละรายการเพื่อหลีกเลี่ยงการเรียกเก็บเงินจากบัญชี Google Cloud สำหรับทรัพยากรที่ใช้ในบทแนะนำนี้

การลบโปรเจ็กต์

วิธีที่ง่ายที่สุดในการยกเลิกการเรียกเก็บเงินคือการลบโปรเจ็กต์ที่คุณสร้างขึ้นสำหรับบทแนะนำ

อัปเดตล่าสุด: 21/3/23