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

1. บทนำ

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

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

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

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

ตั้งค่าโปรเจ็กต์ที่อยู่ในระบบคลาวด์

  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 ของระบบคลาวด์ การใช้งาน 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 แบบไม่พร้อมกัน และจะนำไปใช้ในห้องทดลองภายหลัง:

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

3. เตรียมการสมัคร

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

ใน Cloud Shell ให้สร้างไดเรกทอรีใหม่ชื่อ starter-nodejs จากนั้นเปลี่ยนเป็นไดเรกทอรีดังกล่าว:

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

ไฟล์ด้านบนมีคำสั่งเริ่มต้นสคริปต์และขึ้นอยู่กับเฟรมเวิร์กเว็บแอปพลิเคชัน 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 และตรวจสอบอาร์ติแฟกต์ของบิลด์สำหรับบิลด์ล่าสุด

Cloud Build UI ในคอนโซล Google Cloud ประกอบด้วยแผงข้อมูลเชิงลึกด้านความปลอดภัยของ Software Delivery Shield Security ซึ่งแสดงข้อมูลความปลอดภัยที่เกี่ยวข้องกับบิลด์ เช่น ระดับ 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 แล้วตรวจสอบข้อมูลเชิงลึกด้านความปลอดภัยในแท็บ "การแก้ไข / ความปลอดภัย"

62a9f5d26207e58e.png

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

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

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/03/23