部署至 Cloud Run 並查看安全性深入分析資訊
本快速入門導覽課程說明如何將容器映像檔部署至 Cloud Run,並在Google Cloud 控制台的「安全性」分頁中,查看部署作業的安全洞察資訊。您將學會以下內容:
- 使用 Cloud Deploy 將映像檔部署至 Cloud Run。 Cloud Deploy 是一項 Google Cloud 服務,可依照指定的推送順序,自動將應用程式推送至眾多目標環境。
查看部署作業的下列安全性深入分析:
- 部署作業的身分和加密資訊。
- 軟體構件供應鏈級別 (SLSA),可識別部署作業的保障等級。
- 建構成果中的安全漏洞。
- 建構構件的軟體物料清單 (SBOM)。
- 建構來源,這是建構作業的可驗證中繼資料集合。 包括建構的映像檔摘要、輸入來源位置、建構工具鍊、建構步驟和建構時間長度等詳細資料。
事前準備
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
Install the Google Cloud CLI.
-
If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
Create or select a Google Cloud project.
-
Create a Google Cloud project:
gcloud projects create PROJECT_ID
Replace
PROJECT_ID
with a name for the Google Cloud project you are creating. -
Select the Google Cloud project that you created:
gcloud config set project PROJECT_ID
Replace
PROJECT_ID
with your Google Cloud project name.
-
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Cloud Build, Artifact Registry, Cloud Deploy, Cloud Run, and Container Scanning APIs:
gcloud services enable cloudbuild.googleapis.com
artifactregistry.googleapis.com clouddeploy.googleapis.com run.googleapis.com containerscanning.googleapis.com -
Install the Google Cloud CLI.
-
If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
Create or select a Google Cloud project.
-
Create a Google Cloud project:
gcloud projects create PROJECT_ID
Replace
PROJECT_ID
with a name for the Google Cloud project you are creating. -
Select the Google Cloud project that you created:
gcloud config set project PROJECT_ID
Replace
PROJECT_ID
with your Google Cloud project name.
-
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Cloud Build, Artifact Registry, Cloud Deploy, Cloud Run, and Container Scanning APIs:
gcloud services enable cloudbuild.googleapis.com
artifactregistry.googleapis.com clouddeploy.googleapis.com run.googleapis.com containerscanning.googleapis.com
設定預設設定
設定專案 ID 的環境變數:
export PROJECT_ID=$(gcloud config get project)
設定 Cloud Deploy 的預設區域:
gcloud config set deploy/region us-central1
授予存取權
將 IAM 角色授予預設的 Compute Engine 服務帳戶。Cloud Deploy 必須具備這項權限,才能將工作負載部署至 Cloud Run。
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member=serviceAccount:$(gcloud projects describe $PROJECT_ID \
--format="value(projectNumber)")-compute@developer.gserviceaccount.com \
--role="roles/clouddeploy.jobRunner"
gcloud iam service-accounts add-iam-policy-binding $(gcloud projects describe $PROJECT_ID \
--format="value(projectNumber)")-compute@developer.gserviceaccount.com \
--member=serviceAccount:$(gcloud projects describe $PROJECT_ID \
--format="value(projectNumber)")-compute@developer.gserviceaccount.com \
--role="roles/iam.serviceAccountUser" \
--project=$PROJECT_ID
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member=serviceAccount:$(gcloud projects describe $PROJECT_ID \
--format="value(projectNumber)")-compute@developer.gserviceaccount.com \
--role="roles/run.developer"
如果無法新增上述任一角色,請與專案管理員聯絡。
在 Artifact Registry 中建立 Docker 存放區
在
us-central1
位置中新建名為containers
的 Docker 存放區,並將說明設為「Docker repository」(Docker 存放區):gcloud artifacts repositories create containers --repository-format=docker \ --location=us-central1 --description="Docker repository"
確認存放區是否已成功建立:
gcloud artifacts repositories list
顯示的存放區清單中會列出
containers
。
準備範例應用程式
您需要有一些範例原始碼才能建構及部署,在本節中,您將複製現有的來源存放區,其中包含 Java 程式碼範例。
複製包含 Java 程式碼範例的存放區:
git clone https://github.com/googlecloudplatform/software-delivery-shield-demo-java.git cd software-delivery-shield-demo-java/backend
更新
cloudrun.clouddeploy.yaml
,將PROJECT_ID
替換為您的專案 ID:sed -i "s/PROJECT_ID/${PROJECT_ID}/g" cloudrun.clouddeploy.yaml
建構應用程式
使用 Cloud Build 建構 Java 應用程式並容器化。下列指令會建構 Java 應用程式並容器化,然後將建構的容器儲存在 Artifact Registry Docker 存放區中:
gcloud builds submit --config=cloudbuild.yaml --region=us-central1
建構完成後,您會看到類似以下的成功狀態訊息:
DONE ----------------------------------------------------------------------------- ID: 3e08565f-7f57-4449-bc68-51c46cf33d03 CREATE_TIME: 2022-09-19T15:41:07+00:00 DURATION: 54S SOURCE: gs://sds-docs-project_cloudbuild/source/1663602066.777581-6ebe4b2d6fd741ffa18936d7f78055e9.tgz IMAGES: us-central1-docker.pkg.dev/sds-docs-project/containers/java-guestbook-backend:quickstart STATUS: SUCCESS
為建構的映像檔生成 SBOM
SBOM 是應用程式的完整清單,可識別軟體所依附的套件。內容可包括供應商的第三方軟體、內部構件和開放原始碼程式庫。
為您在上節建構的映像檔產生 SBOM:
gcloud artifacts sbom export \
--uri=us-central1-docker.pkg.dev/${PROJECT_ID}/containers/java-guestbook-backend:quickstart
使用 Cloud Deploy 將容器部署至 Cloud Run
向 Cloud Deploy 服務註冊管道和目標:
gcloud deploy apply --file cloudrun.clouddeploy.yaml
您現在已擁有包含目標的管道,可將應用程式部署到第一個目標。
如要確認管道是否存在,請前往 Google Cloud 控制台的「Delivery pipelines」(推送管道) 頁面:
系統會顯示您剛建立的推送管道
cloudrun-guestbook-backend-delivery
。按一下
cloudrun-guestbook-backend-delivery
即可監控進度。「Delivery pipeline details」(交付管道詳細資料) 頁面隨即開啟。在 Cloud Shell 中,於 Cloud Deploy 建立版本:
gcloud deploy releases create test-release-007 \ --delivery-pipeline=cloudrun-guestbook-backend-delivery \ --skaffold-file=cloudrun.skaffold.yaml \ --images=java-guestbook-backend=us-central1-docker.pkg.dev/${PROJECT_ID}/containers/java-guestbook-backend:quickstart
新版本會顯示在「推送 pipeline 詳細資料」頁面的「版本」部分。
在「Delivery pipeline details」(推送 pipeline 詳細資料) 頁面監控「Pipeline visualization」(pipeline 圖表) 檢視畫面,直到
dev-cluster
顯示「Promote」(升級) 按鈕為止。你可能需要重新整理頁面。在推送管道的視覺化圖表上,點選第一個目標
cloudrun-dev
,然後按一下「升級」。系統會顯示「Promote release」對話方塊。顯示您要宣傳的目標詳細資料。
點選「升級」。
系統已將版本加入佇列,準備部署至
cloudrun-prod
。部署完成後,交付管道的視覺化內容會顯示已部署:
在 Cloud Deploy 中查看安全性深入分析資訊
在Google Cloud 控制台中開啟 Cloud Deploy 的「推送管道」頁面。
在「推送管道」表格中,按一下「cloudrun-guestbook-backend-delivery」。
在「Delivery pipelines details」(推送 pipeline 詳細資料) 頁面中,按一下「test-release-008」。
在「發布內容詳細資料」頁面中,按一下「構件」分頁標籤。
在「建構構件」表格中,找出含有構件 java-guestbook-backend 的資料列,然後按一下對應「安全性洞察」欄下方的「查看」。
您會看到部署作業的「安全性」分頁。
這個分頁的「安全性洞察」部分會顯示下列資訊:
SLSA 等級:這項建構作業已達到 SLSA 第 3 級。按一下「瞭解詳情」連結,即可瞭解這個安全等級的意義。
安全漏洞:在構件中發現的任何安全漏洞。按一下映像檔名稱 (java-guestbook-backend),查看已掃描安全漏洞的構件。
建構構件的依附元件。
建構作業詳細資料:建構作業的詳細資料,例如建構者和查看記錄的連結。
在 Cloud Run 中查看安全性深入分析資訊
開啟 Cloud Run「服務」頁面。
在 Cloud Run「Services」(服務) 表格中,按一下「guestbook-backend-prod」。
在「服務詳細資料」頁面中,按一下「修訂版本」。
在「修訂版本」面板中,按一下「安全性」。
您會看到部署作業的「安全性」分頁。
這個分頁的「安全性洞察」部分會顯示下列資訊:
身分和加密:預設 Compute Engine 服務帳戶的電子郵件地址,以及用於部署作業的加密金鑰。
SLSA 等級:這項建構作業已達到 SLSA 第 3 級。按一下「瞭解詳情」連結,即可瞭解這個安全等級的意義。
安全漏洞:在構件中發現的任何安全漏洞。按一下映像檔名稱 (java-guestbook-backend),查看已掃描安全漏洞的構件。
建構構件的依附元件。
建構作業詳細資料:建構作業的詳細資料,例如建構者和查看記錄的連結。
清除所用資源
如要避免系統向您的 Google Cloud 帳戶收取本頁面所用資源的費用,請刪除含有這些資源的 Google Cloud 專案。
停用 Container Scanning API:
gcloud services disable containerscanning.googleapis.com --force
刪除
guestbook-backend-dev
Cloud Run 服務:gcloud run services delete guestbook-backend-dev --region=us-central1 \ --project=${PROJECT_ID}
刪除
guestbook-backend-prod
服務:gcloud run services delete guestbook-backend-prod --region=us-central1 \ --project=${PROJECT_ID}
刪除推送管道,包括版本和推出項目:
gcloud deploy delivery-pipelines delete cloudrun-guestbook-backend-delivery \ --force --region=us-central1 --project=${PROJECT_ID}
這個指令會刪除推送管道本身,以及軟體供應鏈安全防護機制為該管道建立的所有
release
和rollout
資源。刪除 Artifact Registry 存放區:
gcloud artifacts repositories delete containers \ --location=us-central1 --async
大功告成,您已經完成本快速入門導覽課程!
後續步驟
- 進一步瞭解 Cloud Run 的安全性深入分析。
- 瞭解如何在部署至 GKE 時查看安全性深入分析資訊。
- 瞭解如何查看建構版本的安全性深入分析資訊。
- 進一步瞭解軟體供應鏈安全。