实验设置说明和要求
保护您的账号和进度。请务必在无痕浏览器窗口中,使用实验凭证运行此实验。

安全推送軟體:挑戰實驗室

实验 20 分钟 universal_currency_alt 5 积分 show_chart 中级
info 此实验可能会提供 AI 工具来支持您学习。
此内容尚未针对移动设备进行优化。
为获得最佳体验,请在桌面设备上访问通过电子邮件发送的链接。

GSP521

Google Cloud 自學實驗室標誌

總覽

在挑戰研究室中,您會在特定情境下完成一系列任務。挑戰研究室不會提供逐步說明,您將運用從課程研究室學到的技巧,自行找出方法完成任務!自動評分系統 (如本頁所示) 將根據您是否正確完成任務來提供意見回饋。

在您完成任務的期間,挑戰研究室不會介紹新的 Google Cloud 概念。您須靈活運用所學技巧,例如變更預設值或詳讀並研究錯誤訊息,解決遇到的問題。

若想滿分達標,就必須在時限內成功完成所有任務!

這個實驗室適合已參加安全推送軟體課程的學員。準備好迎接挑戰了嗎?

挑戰情境

您是 Cymbal Bank 的軟體工程師,負責將新的網頁應用程式安全地部署至雲端。這個應用程式會處理機密客戶資料,因此安全把關是第一要務。您的目標是實作健全的自動化管道,透過該管道建構、掃描、簽署及部署容器化應用程式,同時遵守嚴格的安全標準。在這項挑戰中,您將使用 Artifact Registry、二進位授權和 Cloud Build 等 Google Cloud 服務,在範例應用程式中達成上述目標。

測驗主題

  • 建立 Artifact Registry 存放區:設定 Artifact Registry 存放區,儲存用於掃描作業和正式環境的 Docker 映像檔。
  • 推送 Docker 映像檔:透過 Cloud Build 建構 Docker 映像檔並推送至 Artifact Registry,以進行安全漏洞掃描。
  • 設定二進位授權:為二進位授權設定驗證者和金鑰,以便強制執行映像檔簽署政策。
  • 查看安全漏洞掃描結果:在 Artifact Registry 中查看安全漏洞掃描結果,找出並瞭解潛在安全風險。
  • 建立安全的 CI/CD 管道:建構 Cloud Build 管道,自動執行映像檔建構、安全漏洞掃描和映像檔簽署作業。
  • 檢查與修正:分析因重大安全漏洞而失敗的建構作業,並在應用程式程式碼中修正問題。
  • 重新建構及部署:使用修正後的程式碼重新執行 CI/CD 管道,確保成功部署至 Cloud Run。

設定和需求

瞭解以下事項後,再點選「Start Lab」按鈕

請詳閱以下操作說明。實驗室活動會計時,且中途無法暫停。點選「Start Lab」後就會開始計時,顯示可使用 Google Cloud 資源的時間。

您將在真正的雲端環境完成實作實驗室活動,而不是模擬或示範環境。為此,我們會提供新的暫時憑證,供您在實驗室活動期間登入及存取 Google Cloud。

為了順利完成這個實驗室,請先確認:

  • 可以使用標準的網際網路瀏覽器 (Chrome 瀏覽器為佳)。
注意事項:請使用無痕模式 (建議選項) 或私密瀏覽視窗執行此實驗室,這可以防止個人帳戶和學員帳戶之間的衝突,避免個人帳戶產生額外費用。
  • 是時候完成實驗室活動了!別忘了,活動一旦開始將無法暫停。
注意事項:務必使用實驗室專用的學員帳戶。如果使用其他 Google Cloud 帳戶,可能會產生額外費用。

工作 1:啟用 API 並設定環境

在開始建構安全的 CI/CD 管道前,您需要啟用必要的 Google Cloud API 並設定開發環境。這樣可以確保您能存取所有必要的服務和工具。

  1. 啟用本實驗室所需的 API:
gcloud services enable \ cloudkms.googleapis.com \ run.googleapis.com \ cloudbuild.googleapis.com \ container.googleapis.com \ containerregistry.googleapis.com \ artifactregistry.googleapis.com \ containerscanning.googleapis.com \ ondemandscanning.googleapis.com \ binaryauthorization.googleapis.com
  1. 在 Cloud Shell 執行下列指令,下載範例 Python、Docker 和 Cloud Build 檔案:
mkdir sample-app && cd sample-app gcloud storage cp gs://spls/gsp521/* .
  1. 建立兩個 Artifact Registry 存放區,一個用於掃描作業,另一個用於正式環境,並且分別命名為 artifact-scanning-repoartifact-prod-repo

掃描存放區會用來儲存尚未接受安全漏洞掃描的 Docker 映像檔,正式環境存放區則用來儲存已簽署且可供部署的映像檔。

點選「Check my progress」,確認目標已達成。

啟用 API 並設定 Artifact Registry。

工作 2:建立 Cloud Build 管道

在這項工作中,您將建立基本的 Cloud Build 設定,為 CI/CD 管道奠定基礎,以便建構 Docker 映像檔並推送至 Artifact Registry。完成這個初始步驟後,您就能在實驗室的後續階段掃描映像檔,確認是否有安全漏洞。

  1. 首先,將下列角色新增至 Cloud Build 服務帳戶

    • roles/iam.serviceAccountUser
    • roles/ondemandscanning.admin
  2. Cloud Shell 編輯器中,開啟 sample-app/cloudbuild.yaml 檔案。

  3. 填妥 TODO 部分:在映像檔名稱預留位置 (<image-name>) 填寫實際名稱。在這個步驟,您需要參照 artifact-scanning-repo 存放區,而映像檔名稱應設為 sample-image。請務必使用 區域。

  4. 提交建構作業。

  5. 查看推送至 artifact-scanning-repo 存放區的映像檔,並確認掃描結果中顯示多項重大安全漏洞。

點選「Check my progress」,確認目標已達成。

建立 Cloud Build 管道。

工作 3:設定二進位授權

為了對容器部署作業強制執行嚴格的安全政策,您將使用二進位授權。這項服務可讓您定義誰可以在什麼條件下部署哪些映像檔。在這項工作中,您將建立及設定二進位授權的必要元素,包括驗證者、附註和 KMS 金鑰,以便做好準備,將二進位授權整合至 CI/CD 管道。

建立驗證者

  1. 在 Cloud Shell 中建立 JSON 檔案。這個檔案將用來定義含驗證提示的驗證者附註。驗證提示的 human_readable_name 應設為「Container Vulnerabilities attestation authority」。

  2. 使用 Container Analysis API 建立 ID 為 vulnerability_note 的新附註。附註的詳細資料應在上一步建立的附註檔案中定義。請務必在 API 要求中加入正確的驗證資訊,並設定適當的 Content-Type 標頭。

  3. 使用 Container Analysis API 擷取您剛建立的驗證者附註詳細資料。請務必在 API 要求中加入正確的驗證資訊。

  4. 使用 gcloud 指令列工具建立新的二進位授權驗證者。驗證者 ID 應為 vulnerability-attestor,且必須與您剛建立的驗證者附註建立關聯。

  5. 使用 gcloud 指令列工具,列出所有現有的二進位授權驗證者。請確認清單中包含您剛建立的驗證者。

  6. 建立 IAM 政策,將您建立的驗證者附註的 roles/containeranalysis.notes.occurrences.viewer 角色授予二進位授權服務帳戶,然後使用 Container Analysis API,對該附註設定這個 IAM 政策。

產生 KMS 金鑰組

在本節中,您將產生用來簽署驗證資料的 KMS 金鑰組。

  1. 設定金鑰管理機制:

    • global 位置建立名為 binauthz-keys 的 KMS 金鑰環,用來儲存金鑰。
    • 在這個金鑰環中,產生新的非對稱式簽署金鑰組。請將金鑰命名為 lab-key,且務必使用 版本 1
  2. 將金鑰連結至驗證者:

    • 使用 gcloud 指令列工具,將 lab-key (版本 1) 與二進位授權驗證者建立關聯。參照金鑰時,請務必指定 global 位置和 binauthz-keys 金鑰環。

更新二進位授權政策

  1. 修改政策:將二進位授權政策調整為針對預設規則強制執行驗證要求。

  2. 加入驗證者:將先前建立的 vulnerability-attestor 加入政策設定。

點選「Check my progress」,確認目標已達成。

建立驗證者、KMS 金鑰組,並更新政策。

工作 4:建立具備安全漏洞掃描功能的 Cloud Build CI/CD 管道

現在您將以在工作 2 中建立的基本管道為基礎,加入重要的安全防護功能來加以強化。這些功能包括安全漏洞掃描 (可找出容器映像檔中的潛在弱點) 和映像檔簽署 (確保映像檔完整性)。在這項工作中,您會將安全漏洞掃描和映像檔簽署功能整合至 CI/CD 管道,讓管道更加完善安全。

將必要角色新增至 Cloud Build 服務帳戶

  1. 在專案中,將下列 IAM 角色授予 Cloud Build 服務帳戶:

    • roles/binaryauthorization.attestorsViewer
    • roles/cloudkms.signerVerifier
    • roles/containeranalysis.notes.attacher
    • roles/iam.serviceAccountUser
    • roles/ondemandscanning.admin
  2. 此外,請確定 Compute Engine 預設服務帳戶也具備 cloudkms.signerVerifier 角色。

安裝自訂建構步驟

  1. 您將在 Cloud Build 中使用自訂建構步驟,簡化驗證程序。Google 提供的這個自訂建構步驟包含輔助函式,可簡化程序。在使用前,必須先將自訂建構步驟的程式碼建構成容器,並推送至 Cloud Build。請執行下列指令來進行這項操作:
git clone https://github.com/GoogleCloudPlatform/cloud-builders-community.git cd cloud-builders-community/binauthz-attestation gcloud builds submit . --config cloudbuild.yaml cd ../.. rm -rf cloud-builders-community

更新 Cloud Build 管道

在本節中,您將加入安全漏洞掃描、嚴重性檢查、映像檔簽署和部署至 Cloud Run 的功能,打造完整的 Cloud Build 管道。下方提供的程式碼是管道的部分實作內容。您需要填寫缺漏的部分,才能完成整個管道的建構作業。

  1. 填妥 TODO 部分:填寫管道的缺漏部分,包括:
    • 指定 Artifact Registry 中的映像檔位置,以進行安全漏洞掃描。請注意,要掃描的映像檔位於 artifact-scanning-repo 存放區。
    • 為安全漏洞檢查設定適當的嚴重性等級。如果發現任何 CRITICAL (重大) 安全漏洞,管道應會執行失敗。
    • 使用正確的驗證者和 KMS 金鑰資訊,設定映像檔簽署步驟。驗證者名稱為 vulnerability-attestor,金鑰版本則是 lab-key 版本 1 的完整路徑。
    • 為正式環境映像檔重新加上標記,並推送至正式環境存放區。在這個步驟中,應使用 artifact-prod-repo 存放區。
    • 將映像檔部署至 Cloud Run。在這個步驟中,您將使用 artifact-prod-repo 存放區的正式環境映像檔。
注意:在本實驗室的第二項工作中,您已填寫 cloudbuild.yaml 檔案中的前幾個 TODO 部分。請務必將其餘預留位置改成正確的值,填妥剩下的 TODO 部分。

cloudbuild.yaml

steps: # TODO: #1. 建構步驟。將 <image-name> 預留位置改成正確的值。 - id: "build" name: 'gcr.io/cloud-builders/docker' args: ['build', '-t', '<image-name>', '.'] waitFor: ['-'] # TODO: #2. 推送至 Artifact Registry。將 <image-name> 預留位置改成正確的值。 - id: "push" name: 'gcr.io/cloud-builders/docker' args: ['push', '<image-name>'] # TODO: #3. 執行安全漏洞掃描。將 <image-name> 預留位置改成正確的值。 - id: scan name: 'gcr.io/cloud-builders/gcloud' entrypoint: 'bash' args: - '-c' - | (gcloud artifacts docker images scan \ <image-name> \ --location us \ --format="value(response.scan)") > /workspace/scan_id.txt # TODO: #4. 分析掃描結果。如果發現 CRITICAL (重大) 安全漏洞,建構作業就會失敗。 # 將 <correct vulnerability> 預留位置改成正確的值,且須區分大小寫!- id: severity check name: 'gcr.io/cloud-builders/gcloud' entrypoint: 'bash' args: - '-c' - | gcloud artifacts docker images list-vulnerabilities $(cat /workspace/scan_id.txt) \ --format="value(vulnerability.effectiveSeverity)" | if grep -Fxq <correct vulnerability>; \ then echo "Failed vulnerability check for <correct vulnerability> level" && exit 1; else echo \ "No <correct vulnerability> vulnerability found, congrats !" && exit 0; fi # TODO: #5. 只有在前面的嚴重性檢查通過時,才簽署映像檔。 # 將 <image-name>、<attestor-name> 和 <key-version> 預留位置改成正確的值。 # 請注意,<key-version> 應為金鑰版本的「完整」路徑。 - id: 'create-attestation' name: 'gcr.io/${PROJECT_ID}/binauthz-attestation:latest' args: - '--artifact-url' - '<image-name>' - '--attestor' - '<attestor-name>' - '--keyversion' - '<key-version>' # TODO: #6. 為正式環境映像檔重新加上標記,並使用 latest 標記將映像檔推送至正式環境存放區。 # 將 <image-name> 和 <production-image-name> 預留位置改成正確的值。 - id: "push-to-prod" name: 'gcr.io/cloud-builders/docker' args: - 'tag' - '<image-name>' - '<production-image-name>' - id: "push-to-prod-final" name: 'gcr.io/cloud-builders/docker' args: ['push', '<production-image-name>'] # TODO: #7. 部署至 Cloud Run。請將 <image-name> 和 <your-region> 預留位置改成正確的值。 - id: 'deploy-to-cloud-run' name: 'gcr.io/cloud-builders/gcloud' entrypoint: 'bash' args: - '-c' - | gcloud run deploy auth-service --image=<image-name> \ --binary-authorization=default --region=<your-region> --allow-unauthenticated # TODO: #8. 將 <image-name> 預留位置改成建構步驟中的值。 images: - <image-name>
  1. 觸發建構作業

    • 提交您建立的 Cloud Build 設定,啟動建構程序。
    • 提交建構作業時,請注意使用的區域。
  2. 觀察建構失敗情形

    • 前往 Google Cloud 控制台的 Cloud Build「記錄」頁面。
    • 找出您剛觸發的建構作業,並檢查其狀態。
    • 確認建構作業因具有嚴重性為 CRITICAL (重大) 的安全漏洞而失敗。
注意:由於有嚴重性為 CRITICAL (重大) 的安全漏洞,建構作業應該會失敗。您會在接下來的工作中解決這個問題。

點選「Check my progress」,確認目標已達成。

將安全漏洞掃描功能整合至 CI/CD 管道。

工作 5:修正安全漏洞並重新部署 CI/CD 管道

在現實生活中,執行安全漏洞掃描後,常會發現需要解決的問題。這項工作將模擬這種情況,也就是建構作業因重大安全漏洞而失敗。在這項工作中,您將分析建構失敗問題、找出安全漏洞,並更新應用程式的依附元件來修正問題,然後重新觸發 Cloud Build 管道,確保建構作業順利完成,且沒有任何重大安全漏洞。

  1. 更新 Dockerfile:將 Dockerfile 修改成使用 python:3.8-alpine 基本映像檔,並將 FlaskGunicornWerkzeug 依附元件更新為下列版本:

    • Flask:3.0.3
    • Gunicorn:23.0.0
    • Werkzeug:3.0.4
  2. 重新觸發建構作業:提交更新後的 Cloud Build 設定,啟動新的建構作業。

  3. 確認建構成功:前往 Cloud Build 的「記錄」頁面,確認建構作業順利完成,且沒有任何 CRITICAL (重大) 安全漏洞問題。

  4. 為進行測試,請執行下列指令,允許未經驗證的 Cloud Run 服務存取要求,以便驗證部署結果。將 <your-region> 改成您部署服務的區域。

gcloud beta run services add-iam-policy-binding --region=<your-region> --member=allUsers --role=roles/run.invoker auth-service 注意:這個指令僅供測試之用,不應在正式環境中使用!
  1. 驗證部署結果:前往 Cloud Run 服務網址,確認應用程式已部署且運作正常。

點選「Check my progress」,確認目標已達成。

修正安全漏洞並重新部署 CI/CD 管道。

恭喜!

太棒了!在本實驗室中,您成功實作了能建構、掃描、簽署及部署網頁應用程式至雲端的安全 CI/CD 管道。透過這次實際操作,您已掌握以下必要技能:在雲端建構及部署安全應用程式、將安全性最佳做法融入開發工作流程,以及確保軟體推送程序的完整性。

「安全推送軟體」的技能徽章

後續步驟/瞭解詳情

歡迎參考下列資源,進一步瞭解本實驗室涵蓋的主題:

Google Cloud 教育訓練與認證

協助您瞭解如何充分運用 Google Cloud 的技術。我們的課程會介紹專業技能和最佳做法,讓您可以快速掌握要領並持續進修。我們提供從基本到進階等級的訓練課程,並有隨選、線上和虛擬課程等選項,方便您抽空參加。認證可協助您驗證及證明自己在 Google Cloud 技術方面的技能和專業知識。

使用手冊上次更新日期:2025 年 12 月 10 日

實驗室上次測試日期:2025 年 9 月 4 日

Copyright 2026 Google LLC 保留所有權利。Google 和 Google 標誌是 Google LLC 的商標,其他公司和產品名稱則有可能是其關聯公司的商標。

准备工作

  1. 实验会创建一个 Google Cloud 项目和一些资源,供您使用限定的一段时间
  2. 实验有时间限制,并且没有暂停功能。如果您中途结束实验,则必须重新开始。
  3. 在屏幕左上角,点击开始实验即可开始

使用无痕浏览模式

  1. 复制系统为实验提供的用户名密码
  2. 在无痕浏览模式下,点击打开控制台

登录控制台

  1. 使用您的实验凭证登录。使用其他凭证可能会导致错误或产生费用。
  2. 接受条款,并跳过恢复资源页面
  3. 除非您已完成此实验或想要重新开始,否则请勿点击结束实验,因为点击后系统会清除您的工作并移除该项目

此内容目前不可用

一旦可用,我们会通过电子邮件告知您

太好了!

一旦可用,我们会通过电子邮件告知您

一次一个实验

确认结束所有现有实验并开始此实验

使用无痕浏览模式运行实验

使用无痕模式或无痕浏览器窗口是运行此实验的最佳方式。这可以避免您的个人账号与学生账号之间发生冲突,这种冲突可能导致您的个人账号产生额外费用。