1. 簡介
在本實驗室中,您將應用程式部署至 Cloud Run 和 GKE 叢集,並在 Software Delivery Shield 安全性面板中查看部署作業的安全性深入分析。
課程內容
- Artifact Registry 安全性深入分析
- Cloud Run 安全性深入分析
- GKE 安全防護機制
2. 設定和需求條件
設定 Cloud 專案
- 登入 Google Cloud 控制台,然後建立新專案或重複使用現有專案。如果沒有 Gmail 或 Google Workspace 帳戶,請先建立帳戶。



- 專案名稱是這個專案參與者的顯示名稱。這是 Google API 未使用的字元字串。你隨時可以更新該位置資訊。
- 專案 ID 在所有 Google Cloud 專案中都是不重複的,而且設定後即無法變更。Cloud 控制台會自動產生專屬字串,通常您不需要在意該字串為何。在大多數程式碼研究室中,您需要參照專案 ID (通常會標示為
PROJECT_ID)。如果您不喜歡產生的 ID,可以產生另一個隨機 ID。你也可以嘗試自訂名稱,看看是否可用。完成這個步驟後就無法變更,且專案期間都會維持這個設定。 - 請注意,部分 API 會使用第三個值,也就是「專案編號」。如要進一步瞭解這三種值,請參閱說明文件。
- 接著,您需要在 Cloud 控制台中啟用帳單,才能使用 Cloud 資源/API。完成本程式碼研究室的費用應該不高,甚至完全免費。如要關閉資源,避免產生本教學課程以外的費用,您可以刪除建立的資源或整個專案。Google Cloud 新使用者可參加價值$300 美元的免費試用計畫。
環境設定
按一下搜尋列右側的圖示,啟用 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. 準備應用程式
首先,您將準備一個以 Express 為基礎的簡易型 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
上述檔案包含 start 指令碼,以及 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
這段程式碼會建立基本的網路伺服器,用於監聽 PORT 環境變數定義的通訊埠。應用程式現已完成,您可以開始將應用程式容器化並部署。
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,並查看最新建構作業的建構成果。
Google Cloud 控制台中的 Cloud Build 使用者介面包含 Software Delivery Shield 安全洞察面板,可顯示與建構作業相關的安全資訊,例如軟體構件供應鏈級別:SLSA 級別、依附元件中的任何安全漏洞,以及建構作業來源資訊。

查看所建立容器映像檔的安全性洞察資料。按一下掃描構件的連結,即可在 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」(安全性) 分頁下方的安全性深入分析資訊。

這個面板會顯示下列資訊:
- 身分和加密:預設 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 會使用公開 CVE 資料庫 (例如 NIST) 的安全漏洞資料,自動掃描 GKE 叢集中每個符合資格的 Pod 內容器映像檔,找出已知安全漏洞。
如果容器映像檔中發現安全漏洞,GKE 會指派嚴重程度評分,並在 Google Cloud 控制台的資安態勢資訊主頁中顯示結果。GKE 也會將項目新增至 Cloud Logging,以供稽核和追蹤。
啟用工作負載安全漏洞掃描:
gcloud beta container clusters update gke-cluster \
--region=us-central1-a \
--enable-workload-vulnerability-scanning \
--async
請稍候幾分鐘,等待工作負載稽核完成,然後查看結果。

查看設定問題和受影響的工作負載。

使用資安態勢資訊主頁的原因
資安態勢資訊主頁是基礎安全措施,適用於任何符合資格的 GKE 叢集。Google Cloud 建議您在所有叢集中使用資安態勢資訊主頁,原因如下:
- 干擾程度極低:功能不會干擾或中斷正在執行的工作負載。
- 可做為行動依據的建議:安全資安態勢資訊主頁會提供可行的操作項目,協助您解決發現的問題。這些動作包括可執行的指令、可進行的設定變更範例,以及如何降低安全漏洞風險的建議。
- 視覺化:資安態勢資訊主頁會以高階視覺化方式呈現影響專案叢集的疑慮,並提供圖表,顯示您取得的進展和各項疑慮的潛在影響。
- 提供意見的結果:GKE 會根據 Google 安全團隊的專業知識和業界標準,為發現的問題指派嚴重程度評等。
- 可稽核的事件記錄:GKE 會將所有發現的問題新增至 Logging,以利產生報表及進行觀測。
8. 恭喜!
恭喜!您已完成程式碼研究室。
涵蓋內容:
- 建構構件和在 Cloud Run 和 GKE 上執行的應用程式的安全性深入分析資訊
清除所用資源
如要避免系統向您的 Google Cloud 帳戶收取本教學課程所用資源的費用,請刪除含有相關資源的專案,或者保留專案但刪除個別資源。
刪除專案
如要避免付費,最簡單的方法就是刪除您為了本教學課程所建立的專案。
—
上次更新時間:2023 年 3 月 21 日