本頁說明如何使用 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
attestor 驗證認證,並只部署 Cloud Build 建構的映像檔。
如要在專案中建立 built-by-cloud-build
簽署人,請在該專案中執行建構作業。
如要只允許部署 Cloud Build 建構的映像檔,請執行下列步驟:
控制台
前往 Google Cloud 控制台的「二進位授權」頁面:
在「政策」分頁中,按一下「編輯政策」。
在「編輯政策」對話方塊中,選取「僅接受下列所有驗證者均核准的映像檔」。
按一下「新增認證者」。
在「新增認證者」對話方塊中,執行下列操作:
- 選取「依專案和驗證者名稱新增」,然後執行下列步驟:
- 在「專案名稱」欄位中,輸入您執行 Cloud Build 的專案。
- 按一下「認證者名稱」欄位,並注意
built-by-cloud-build
認證者是否可用。 - 按一下「
built-by-cloud-build
」。
或者,選取「依驗證者資源 ID 新增」。 在「驗證者資源 ID」中輸入
projects/PROJECT_ID/attestors/built-by-cloud-build
將
PROJECT_ID
替換為執行 Cloud Build 的專案。
- 選取「依專案和驗證者名稱新增」,然後執行下列步驟:
按一下「新增 1 位認證者」。
點選 [儲存政策]。
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 控制台的「二進位授權」頁面。
按一下「編輯政策」。
在「預設規則」或特定規則中,選取「模擬測試模式」。
點選 [儲存政策]。
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 和 Binary Authorization 必須位於同一個專案中。 如果您在其他專案中執行部署平台,請為多專案設定設定 IAM 角色,並在 Binary Authorization 中新增
built-by-cloud-build
驗證者時,參照 Cloud Build 專案。使用明確的
docker push
建構步驟將映像檔推送至 Artifact Registry 時,Cloud Build 不會產生認證。請務必使用docker build
建構步驟中的images
欄位,將映像檔推送至 Artifact Registry。如要進一步瞭解images
,請參閱「在 Artifact Registry 中儲存映像檔的各種方式」。您必須為建構管道和部署管道使用不同的建構設定檔。這是因為 Cloud Build 只會在建構管道成功完成後,才會產生驗證。二進位授權會先檢查認證,再部署映像檔。
在私人集區中啟用認證
根據預設,Cloud Build 不會為私人集區中的建構作業產生 Binary Authorization 驗證。如要產生認證,請將 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"
後續步驟
- 瞭解二進位授權。