本頁面提供使用 Cloud Build 將映像檔部署至 Cloud Run 和 Google Kubernetes Engine 的安全性指示。
瞭解如何設定二進位授權,檢查建構認證,並封鎖非由 Cloud Build 產生的映像檔部署作業。這項程序可降低部署未經授權的軟體風險。
事前準備
Enable the Cloud Build, Binary Authorization, and Artifact Registry APIs.
如要使用本指南提供的指令列範例,請安裝並設定 Google Cloud SDK。
使用二進位授權控制部署作業
二進位授權中的政策是一組規則,用於控管映像檔的部署作業。您可以設定規則,要求數位簽名的認證。
Cloud Build 會在建構期間產生並簽署認證。透過二進位授權,您可以使用 built-by-cloud-build
認證者驗證認證,並只部署由 Cloud Build 建構的映像檔。
如要在專案中建立 built-by-cloud-build
認證工具,請在該專案中執行建構作業。
如要只允許部署由 Cloud Build 建構的映像檔,請執行下列步驟:
控制台
前往 Google Cloud 控制台的「二進位授權」頁面:
在「政策」分頁中,按一下「編輯政策」。
在「Edit Policy」對話方塊中,選取「Allow only images that have been approved by all of the following attestors」。
按一下「新增認證人」。
在「Add attestors」對話方塊中,執行下列操作:
- 選取「依專案和驗證者名稱新增」,然後執行下列步驟:
- 在「Project name」欄位中,輸入您執行 Cloud Build 的專案。
- 按一下「Attestor name」欄位,確認是否有可用的
built-by-cloud-build
認證者。 - 按一下「
built-by-cloud-build
」。
或者,選取「依驗證者資源 ID 新增」。在「Attestor resource ID」(驗證者資源 ID) 中輸入
projects/PROJECT_ID/attestors/built-by-cloud-build
將
PROJECT_ID
替換為您執行 Cloud Build 的專案。
- 選取「依專案和驗證者名稱新增」,然後執行下列步驟:
按一下「Add 1 attestor」。
點選 [儲存政策]。
gcloud
使用下列指令,將現有政策匯出至檔案:
gcloud container binauthz policy export > /tmp/policy.yaml
編輯政策檔案。
編輯下列任一規則:
defaultAdmissionRule
clusterAdmissionRules
istioServiceIdentityAdmissionRules
kubernetesServiceAccountAdmissionRules
如果規則中尚未有
requireAttestationsBy
區塊,請新增一個。在
requireAttestationsBy
區塊中新增projects/PROJECT_ID/attestors/built-by-cloud-build
將
PROJECT_ID
替換為您執行 Cloud Build 的專案。儲存政策檔案。
匯入政策檔案。
gcloud container binauthz policy import /tmp/policy.yaml
以下是包含
built-by-cloud-build-attestor
參照項目的政策檔案範例:defaultAdmissionRule: evaluationMode: REQUIRE_ATTESTATION enforcementMode: ENFORCED_BLOCK_AND_AUDIT_LOG requireAttestationsBy: - projects/PROJECT_ID/attestors/built-by-cloud-build name: projects/PROJECT_ID/policy
將
PROJECT_ID
替換為您執行 Cloud Build 的專案 ID。
您可以在 GKE 或 Cloud Run 的二進位授權記錄訊息中查看政策錯誤。
使用模擬測試模式
在模擬測試模式下,二進位授權會檢查政策是否符合規定,但不會實際封鎖部署作業。相反地,政策符合性狀態訊息會記錄至 Cloud Logging。您可以使用這些記錄檔判斷封鎖政策是否正常運作,並找出誤判的項目。
如要啟用模擬測試,請按照下列步驟操作:
主控台
前往 Google Cloud 控制台的「Binary Authorization」(二進位授權) 頁面。
按一下「編輯政策」。
在「預設規則」或特定規則中,選取「模擬測試模式」。
點選 [儲存政策]。
gcloud
將二進位授權政策匯出為 YAML 檔案:
gcloud container binauthz policy export > /tmp/policy.yaml
在文字編輯器中,將
enforcementMode
設為DRYRUN_AUDIT_LOG_ONLY
,然後儲存檔案。如要更新政策,請執行下列指令來匯入檔案:
gcloud container binauthz policy import /tmp/policy.yaml
您可以在 GKE 或 Cloud Run 的二進位授權記錄訊息中查看政策錯誤
限制
Cloud Build 和二進位授權必須位於同一個專案中。如果您在其他專案中執行部署平台,請為多專案設定設定 IAM 角色,並在二進位授權中新增
built-by-cloud-build
認證器時參考 Cloud Build 專案。使用明確的
docker push
建構步驟將映像檔推送至 Artifact Registry 時,Cloud Build 不會產生認證。請務必在docker build
建構步驟中使用images
欄位,將檔案推送至 Artifact Registry。如要進一步瞭解images
,請參閱「在 Artifact Registry 中儲存圖片的不同方式」。您必須為建構管道和部署管道使用不同的建構設定檔。這是因為 Cloud Build 只會在建構管道順利完成後產生認證。二進位授權會在部署映像檔前檢查認證。
在私人集區中啟用認證
根據預設,Cloud Build 不會為私人集區中的建構作業產生二進位授權認證。如要產生認證,請將 requestedVerifyOption: VERIFIED
選項新增至建構設定檔:
steps:
- name: 'gcr.io/cloud-builders/docker'
args: [ 'build', '-t', 'us-central1-docker.pkg.dev/$PROJECT_ID/quickstart-docker-repo/quickstart-image:tag1', '.' ]
images:
- 'us-central1-docker.pkg.dev/$PROJECT_ID/quickstart-docker-repo/quickstart-image:tag1'
options:
requestedVerifyOption: VERIFIED
新增 requestedVerifyOption
後,Cloud Build 會為映像檔啟用認證產生功能和來源中繼資料。
查看認證者中繼資料
您首次在專案中執行建構作業時,系統會建立認證者。認證者 ID 的格式為 projects/PROJECT_ID/attestors/built-by-cloud-build
,其中 PROJECT_ID
是專案 ID。
您可以使用下列指令檢查建構認證器中繼資料:
curl -X GET -H "Content-Type: application/json" \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
https://binaryauthorization.googleapis.com/v1beta1/projects/PROJECT_ID/attestors/built-by-cloud-build
將 PROJECT_ID
替換為您執行 Cloud Build 的專案。
輸出內容包含認證者和相應的公開金鑰相關資訊。例如:
name": "projects/PROJECT_ID/attestors/built-by-cloud-build", "userOwnedDrydockNote": { "noteReference": "projects/PROJECT_ID/notes/built-by-cloud-build", "publicKeys": [ { "id": "//cloudkms.googleapis.com/v1/projects/verified-builder/locations/asia/keyRings/attestor/cryptoKeys/builtByGCB/cryptoKeyVersions/1", "pkixPublicKey": { "publicKeyPem": "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEMMvFxZLgIiWOLIXsaTkjTmOKcaK7\neIZrgpWHpHziTFGg8qyEI4S8O2/2wh1Eru7+sj0Sh1QxytN/KE5j3mTvYA==\n-----END PUBLIC KEY-----\n", "signatureAlgorithm": "ECDSA_P256_SHA256" } }, ... } ], "delegationServiceAccountEmail": "service-942118413832@gcp-binaryauthorization.iam.gserviceaccount.com" }, "updateTime": "2021-09-24T15:26:44.808914Z", "description": "Attestor autogenerated by build ID fab07092-30f4-4f70-caf7-4545cbc404d6"
後續步驟
- 瞭解二進位授權。