執行階段安全性深入分析資訊

1. 簡介

在本研究室中,您將將應用程式部署至 Cloud Run 和 GKE 叢集,並查看 Software Delivery Shield Security 部署作業的安全性深入分析資訊

課程內容

  • Artifact Registry 安全性深入分析資訊
  • Cloud Run 安全性深入分析
  • GKE 安全防護機制

2. 設定和需求

Cloud 專案設定

  1. 登入 Google Cloud 控制台,建立新專案或重複使用現有專案。如果您還沒有 Gmail 或 Google Workspace 帳戶,請先建立帳戶

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • 「專案名稱」是這項專案參與者的顯示名稱。這是 Google API 未使用的字元字串。您可以隨時更新。
  • 所有 Google Cloud 專案的專案 ID 均不得重複,而且設定後即無法變更。Cloud 控制台會自動產生一個不重複的字串。但通常是在乎它何在在大部分的程式碼研究室中,您必須參照專案 ID (通常為 PROJECT_ID)。如果您對產生的 ID 不滿意,可以隨機產生一個 ID。此外,您也可以自行嘗試,看看系統是否提供該付款方式。在完成這個步驟後就無法變更,而且在專案期間仍會保持有效。
  • 資訊中的第三個值是專案編號,部分 API 會使用這個編號。如要進一步瞭解這三個值,請參閱說明文件
  1. 接下來,您需要在 Cloud 控制台中啟用計費功能,才能使用 Cloud 資源/API。執行這個程式碼研究室並不會產生任何費用,如果有的話。如要關閉資源,以免系統產生本教學課程結束後產生的費用,您可以刪除自己建立的資源,或刪除整個專案。Google Cloud 的新使用者符合 $300 美元免費試用計畫的資格。

環境設定

如要啟用 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. 準備申請

首先,您會準備一個以 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 UI 含有「Software Delivery Shield Security Insights」面板,可顯示與版本相關的安全性資訊 (例如 SLSA 級別、依附元件中的任何安全漏洞,以及建構來源)。

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 規格指出軟體建構程序的成熟度
  • 安全漏洞:應用程式依附元件中發現的任何安全漏洞。
  • 建構作業詳細資料:建構作業的詳細資料,例如建構工具和查看記錄檔的連結。
  • 建構來源:建構來源,是一組可驗證的版本中繼資料。其中包含建構映像檔的摘要、輸入來源位置、建構工具鍊、建構步驟和建構時間長度等詳細資料。

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 會使用 NIST 等公開 CVE 資料庫的安全漏洞資料,自動掃描 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「安全防護機制」頁面。

請稍等幾分鐘,讓工作負載稽核完成,然後查看結果。

5b1b8158bc55ce67.png

查看設定疑慮和受影響的工作負載。

58e6f4b6d8eaa99a.png

使用安全防護機制資訊主頁的好處

安全防護機制資訊主頁是基本的安全性措施,您可以為任何符合資格的 GKE 叢集啟用。Google Cloud 建議您在所有叢集中使用安全防護機制資訊主頁,原因如下:

  • 盡可能避免干擾:功能不會幹擾或中斷執行中的工作負載。
  • 可採取行動的建議:如果可行,安全防護機制資訊主頁會提供操作項目,以修正發現的疑慮。這些動作包括可執行的指令、要進行的設定變更範例,以及如何處理安全漏洞的相關建議。
  • 視覺化:資安狀態資訊主頁提供高層級的圖表,讓您瞭解影響整個專案叢集的疑慮,並提供圖表與圖形,顯示問題進展以及每個疑慮可能帶來的影響。
  • 徵詢意見:GKE 會依據 Google 安全性團隊的專業知識和業界標準,為發現的疑慮判定嚴重性等級。
  • 可稽核的事件記錄檔:GKE 會將發現的所有疑慮新增至 Logging,提升可報告性及觀測能力。

8. 恭喜!

恭喜!您已完成程式碼研究室。

本文涵蓋的內容:

  • 在 Cloud Run 和 GKE 上執行建構構件和應用程式的安全性深入分析資訊

清除所用資源

如要避免系統向您的 Google Cloud 帳戶收取本教學課程所用資源的費用,請刪除含有相關資源的專案,或者保留專案但刪除個別資源。

刪除專案

如要避免付費,最簡單的方法就是刪除您針對教學課程建立的專案。

上次更新時間:2023 年 3 月 21 日