เกี่ยวกับ Codelab นี้
1 บทนำ
ในห้องทดลองนี้ คุณจะทำให้แอปพลิเคชันใช้งานได้กับคลัสเตอร์ Cloud Run และ GKE รวมถึงดูข้อมูลเชิงลึกด้านความปลอดภัยสำหรับการทำให้ใช้งานได้ใน Software Delivery Shield Security
สิ่งที่คุณจะได้เรียนรู้
- ข้อมูลเชิงลึกด้านความปลอดภัยของ Artifact Registry
- ข้อมูลเชิงลึกด้านความปลอดภัยของ Cloud Run
- ระดับความปลอดภัยของ GKE
2 การตั้งค่าและข้อกำหนด
ตั้งค่าโปรเจ็กต์ที่อยู่ในระบบคลาวด์
- ลงชื่อเข้าใช้ Google Cloud Console และสร้างโปรเจ็กต์ใหม่หรือใช้โปรเจ็กต์ที่มีอยู่ซ้ำ หากยังไม่มีบัญชี Gmail หรือ Google Workspace คุณต้องสร้างบัญชี
- ชื่อโครงการคือชื่อที่แสดงของผู้เข้าร่วมโปรเจ็กต์นี้ เป็นสตริงอักขระที่ Google APIs ไม่ได้ใช้ โดยคุณจะอัปเดตได้ทุกเมื่อ
- รหัสโปรเจ็กต์จะไม่ซ้ำกันในทุกโปรเจ็กต์ของ Google Cloud และจะเปลี่ยนแปลงไม่ได้ (เปลี่ยนแปลงไม่ได้หลังจากตั้งค่าแล้ว) Cloud Console จะสร้างสตริงที่ไม่ซ้ำกันโดยอัตโนมัติ ปกติแล้วคุณไม่สนว่าอะไรเป็นอะไร ใน Codelab ส่วนใหญ่ คุณจะต้องอ้างอิงรหัสโปรเจ็กต์ (โดยปกติจะระบุเป็น
PROJECT_ID
) หากคุณไม่ชอบรหัสที่สร้างขึ้น คุณสามารถสร้างรหัสแบบสุ่มอื่นได้ หรือคุณจะลองดำเนินการเองแล้วดูว่าพร้อมให้บริการหรือไม่ และไม่สามารถเปลี่ยนแปลงได้หลังจากขั้นตอนนี้และจะยังคงอยู่ตลอดระยะเวลาของโปรเจ็กต์ - สำหรับข้อมูลของคุณ ค่าที่ 3 คือหมายเลขโปรเจ็กต์ที่ API บางตัวใช้ ดูข้อมูลเพิ่มเติมเกี่ยวกับค่าทั้ง 3 ค่าได้ในเอกสารประกอบ
- ถัดไป คุณจะต้องเปิดใช้การเรียกเก็บเงินใน Cloud Console เพื่อใช้ทรัพยากร/API ของระบบคลาวด์ การใช้งาน Codelab นี้น่าจะไม่มีค่าใช้จ่ายใดๆ หากมี หากต้องการปิดทรัพยากรเพื่อไม่ให้มีการเรียกเก็บเงินนอกเหนือจากบทแนะนำนี้ คุณสามารถลบทรัพยากรที่คุณสร้างหรือลบทั้งโปรเจ็กต์ได้ ผู้ใช้ใหม่ของ Google Cloud จะมีสิทธิ์เข้าร่วมโปรแกรมทดลองใช้ฟรี$300 USD
การตั้งค่าสภาพแวดล้อม
เปิดใช้งาน Cloud Shell โดยคลิกไอคอนทางด้านขวาของแถบค้นหา
จาก Cloud Shell ให้เปิดใช้ API ที่จำเป็นสำหรับห้องทดลองนี้
gcloud services enable run.googleapis.com \
cloudbuild.googleapis.com \
artifactregistry.googleapis.com \
container.googleapis.com \
containersecurity.googleapis.com
หากได้รับข้อความแจ้งให้ให้สิทธิ์ ให้คลิก "ให้สิทธิ์" เพื่อดำเนินการต่อ
ซึ่งจะสร้างข้อความที่ประสบความสำเร็จในลักษณะเดียวกับข้อความต่อไปนี้
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 และต้นทางของบิลด์
ดูข้อมูลเชิงลึกด้านความปลอดภัยสำหรับอิมเมจคอนเทนเนอร์ที่สร้าง ไปที่ลิงก์ของอาร์ติแฟกต์ที่สแกนเพื่อดูรายละเอียดช่องโหว่ของอิมเมจนี้ใน 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 แล้วตรวจสอบข้อมูลเชิงลึกด้านความปลอดภัยในแท็บ "การแก้ไข / ความปลอดภัย"
แผงนี้จะแสดงข้อมูลต่อไปนี้
- ข้อมูลระบุตัวตนและการเข้ารหัส: อีเมลของบัญชีบริการ 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
รอสักครู่เพื่อให้การตรวจสอบภาระงานเสร็จสิ้น แล้วตรวจสอบผลลัพธ์
ตรวจสอบข้อกังวลเกี่ยวกับการกำหนดค่าและภาระงานที่ได้รับผลกระทบ
เหตุผลที่ควรใช้แดชบอร์ดระดับความปลอดภัย
หน้าแดชบอร์ดระดับความปลอดภัยเป็นมาตรการรักษาความปลอดภัยพื้นฐานที่คุณเปิดใช้สำหรับคลัสเตอร์ GKE ทั้งหมดที่มีสิทธิ์ได้ Google Cloud แนะนำให้ใช้หน้าแดชบอร์ดระดับความปลอดภัยของคลัสเตอร์ทั้งหมดเนื่องจากเหตุผลต่อไปนี้
- การหยุดชะงักน้อยที่สุด: ฟีเจอร์จะไม่รบกวนหรือขัดขวางภาระงานที่ทำงานอยู่
- คำแนะนำที่ใช้ได้จริง: หน้าแดชบอร์ดระดับความปลอดภัยจะแสดงรายการการทำงานเพื่อแก้ไขข้อกังวลที่ค้นพบ (หากมี) การดำเนินการเหล่านี้รวมถึงคำสั่งที่คุณเรียกใช้ได้ ตัวอย่างการเปลี่ยนแปลงการกำหนดค่าที่ต้องทำ และคำแนะนำเกี่ยวกับสิ่งที่ต้องทำเพื่อลดช่องโหว่
- การแสดงข้อมูลผ่านภาพ: แดชบอร์ดระดับการรักษาความปลอดภัยจะแสดงภาพระดับสูงของข้อกังวลที่ส่งผลต่อคลัสเตอร์ในโปรเจ็กต์ รวมถึงมีแผนภูมิและกราฟที่แสดงความคืบหน้าที่คุณทำและผลกระทบที่อาจเกิดขึ้นของข้อกังวลแต่ละรายการ
- ผลลัพธ์ที่เห็นด้วย: GKE จะให้คะแนนความรุนแรงเพื่อค้นหาข้อกังวลโดยอิงตามความเชี่ยวชาญของทีมรักษาความปลอดภัยและมาตรฐานอุตสาหกรรมของ Google
- บันทึกเหตุการณ์ที่ตรวจสอบได้: GKE เพิ่มข้อกังวลทั้งหมดที่ค้นพบลงใน Logging เพื่อความสามารถในการรายงานและการสังเกตที่ดียิ่งขึ้น
8 ยินดีด้วย
ยินดีด้วย คุณสร้าง Codelab เสร็จแล้ว
สิ่งที่เราได้พูดคุยกันมีดังนี้
- ข้อมูลเชิงลึกด้านความปลอดภัยสำหรับอาร์ติแฟกต์และแอปพลิเคชันของบิลด์ที่ทำงานบน Cloud Run และ GKE
ล้างข้อมูล
เพื่อหลีกเลี่ยงไม่ให้เกิดการเรียกเก็บเงินกับบัญชี Google Cloud สำหรับทรัพยากรที่ใช้ในบทแนะนำนี้ โปรดลบโปรเจ็กต์ที่มีทรัพยากรดังกล่าวหรือเก็บโปรเจ็กต์ไว้และลบทรัพยากรแต่ละรายการ
กำลังลบโปรเจ็กต์
วิธีที่ง่ายที่สุดในการยกเลิกการเรียกเก็บเงินคือการลบโปรเจ็กต์ที่คุณสร้างไว้สำหรับบทแนะนำ
—
อัปเดตครั้งล่าสุด: 21/03/23