本頁面說明如何使用 Google Cloud 控制台,在二進位授權中建立自訂驗證者。或者,您也可以使用 Google Cloud CLI 或 REST API 執行這些步驟。這項工作是設定二進位授權的一部分。
Cloud Build 使用者可以改用 built-by-cloud-build 驗證者,僅部署 Cloud Build 建構的映像檔。
事前準備
建立認證者前,請先完成下列事項:
總覽
驗證者是 Google Cloud 資源,二進位授權會使用該資源來驗證認證。如要進一步瞭解二進位授權,請參閱「二進位授權總覽」。
如要建立驗證者,請執行下列操作:
- 設定金鑰組,先用於簽署映像檔、建立認證,之後在部署映像檔時用於驗證。PKIX 金鑰組是由 Cloud Key Management Service (Cloud KMS) 以 PKIX 相容格式產生的金鑰組。
- 在二進位授權中建立驗證者,並建立關聯的公開金鑰
在單一專案設定中,您會在設定二進位授權政策的同一個專案中建立驗證者。在多專案設定中,您可能會有一個設定政策的部署者專案,以及一個儲存驗證者的驗證者專案。
設定加密編譯金鑰
二進位授權可讓您使用 PKIX 金鑰安全地簽署映像檔,並在日後驗證。確保只有經過驗證的對象才能授權容器映像檔。如要使用認證,請設定非對稱金鑰,例如公用金鑰基礎架構 (X.509) (PKIX) 金鑰,以安全地驗證認證者的身分。部署映像檔時,二進位授權會使用驗證者中的公開金鑰,檢查以私密金鑰簽署的映像檔認證。
本指南建議使用橢圓曲線數位簽章演算法 (ECDSA) 產生 PKIX 金鑰組。您也可以使用 RSA 或 PGP 金鑰簽署。如要進一步瞭解簽署演算法,請參閱「金鑰用途和演算法」。
建立 PKIX 金鑰組
二進位授權可讓您使用非對稱式 PKIX 金鑰組簽署及驗證映像檔。
PKIX 金鑰組包含私密金鑰和公開金鑰,簽署者會使用私密金鑰對認證進行數位簽署,而您會將公開金鑰新增至驗證者。部署時,二進位授權會使用這個公開金鑰,驗證由私密金鑰簽署的認證。
在 Cloud KMS 中產生及儲存的非對稱金鑰組符合 PKIX 格式。如要建立與二進位授權搭配使用的 Cloud KMS 金鑰,請參閱「建立非對稱金鑰」。建立金鑰時,請務必選擇「Asymmetric Sign」(非對稱式簽署) 做為金鑰用途。
PKIX (Cloud KMS)
如要在 Cloud KMS 中建立金鑰組,請按照下列步驟操作:
設定建立金鑰組所需的環境變數。
KMS_KEY_PROJECT_ID=${PROJECT_ID} KMS_KEYRING_NAME=my-binauthz-keyring KMS_KEY_NAME=my-binauthz-kms-key-name KMS_KEY_LOCATION=global KMS_KEY_PURPOSE=asymmetric-signing KMS_KEY_ALGORITHM=ec-sign-p256-sha256 KMS_PROTECTION_LEVEL=software KMS_KEY_VERSION=1建立金鑰環。
gcloud kms keyrings create ${KMS_KEYRING_NAME} \ --location ${KMS_KEY_LOCATION}建立金鑰:
gcloud kms keys create ${KMS_KEY_NAME} \ --location ${KMS_KEY_LOCATION} \ --keyring ${KMS_KEYRING_NAME} \ --purpose ${KMS_KEY_PURPOSE} \ --default-algorithm ${KMS_KEY_ALGORITHM} \ --protection-level ${KMS_PROTECTION_LEVEL}
PKIX (本機金鑰)
如要產生新的本機非對稱 PKIX 金鑰組並儲存至檔案,請按照下列步驟操作:
產生金鑰:
PRIVATE_KEY_FILE="/tmp/ec_private.pem" openssl ecparam -genkey -name prime256v1 -noout -out ${PRIVATE_KEY_FILE}由於這個檔案同時包含公開金鑰和私密金鑰,因此您必須將公開金鑰擷取至個別檔案,才能將其新增至驗證者:
PUBLIC_KEY_FILE="/tmp/ec_public.pem" openssl ec -in ${PRIVATE_KEY_FILE} -pubout -out ${PUBLIC_KEY_FILE}
建立驗證者
下一步是建立驗證者本身,並建立 Artifact Analysis 附註和公開金鑰的關聯。
二進位授權會使用 Artifact Analysis 儲存授權程序中使用的信任中繼資料。每建立一個驗證者,就必須建立一個 Artifact Analysis 記事。每項認證都會儲存為這份記事的發生項目。
如要建立驗證者,請按照下列步驟操作:
前往驗證者專案的「二進位授權」頁面。
在「認證者」分頁中,點選「建立」。
按一下「Create New Attestor」。
在「Attestor Name」(認證者名稱) 中,輸入認證者名稱 (例如 build-secure 或 prod-qa)。
如要將公開金鑰新增至驗證者,請按照下列步驟操作:
PKIX (本機金鑰)
- 按一下「Add a PKIX Key」。
- 按一下「從檔案匯入」。
- 找出並選取先前儲存的 PKIX 金鑰檔案。注意:您也可以貼上 PEM 格式的公開金鑰。
- 選取「Signature algorithm」。本指南中的範例金鑰是使用橢圓曲線 P256 - SHA 摘要演算法產生。
PKIX (Cloud KMS)
- 按一下「Add a PKIX Key」。
- 按一下「Import from Cloud KMS」(從 Cloud KMS 匯入)。
在開啟的視窗中,輸入金鑰版本的資源 ID。資源 ID 的格式如下:
projects/KMS_KEY_PROJECT_ID/locations/KMS_KEY_LOCATION/keyRings/KMS_KEYRING_NAME/cryptoKeys/KMS_KEY_NAME/cryptoKeyVersions/KMS_KEY_VERSION
其中:
- KMS_KEY_PROJECT_ID 是儲存金鑰的專案 ID
- KMS_KEY_LOCATION 是金鑰的位置 (
global為預設值) - KMS_KEYRING_NAME 是金鑰環的名稱
- KMS_KEY_NAME 是金鑰名稱
- KMS_KEY_VERSION 是金鑰版本
如果您使用本頁的範例環境變數建立 Cloud KMS 金鑰組,可以使用下列指令查看資源 ID:
echo projects/${KMS_KEY_PROJECT_ID}/locations/${KMS_KEY_LOCATION}/keyRings/${KMS_KEYRING_NAME}/cryptoKeys/${KMS_KEY_NAME}/cryptoKeyVersions/${KMS_KEY_VERSION}按一下「提交」。
如要使用先前建立的現有附註,請展開「Advanced Settings」(進階設定) 專區。
取消選取「Automatically generate an Artifact Analysis note」(自動產生 Artifact Analysis 附註)。
在「Artifact Analysis Note ID」(Artifact Analysis 附註 ID) 欄位中輸入完整名稱。名稱格式為
projects/PROJECT_ID/notes/NOTE_ID。
點選「建立」。
確認驗證者已建立
如要確認驗證者是否已建立,請按照下列指示操作:
返回 Google Cloud 控制台的「Binary Authorization」頁面。
開啟「Attestors」(認證者) 分頁。
多專案設定
如果您採用多專案設定,其中有獨立的部署者和驗證者專案,則必須在驗證者資源上設定額外權限,部署者專案才能使用部署期間建立的驗證。
為部署者專案新增 IAM 角色繫結
您必須為部署者專案服務帳戶新增 IAM 角色繫結至驗證者。二進位授權會使用這個角色評估政策,判斷帳戶是否有權存取驗證者。
您必須透過指令列新增 IAM 角色繫結,因為 Google Cloud 控制台不支援這個步驟。
如要新增 IAM 角色繫結,請按照下列步驟操作:
設定環境變數,儲存專案名稱和編號。
DEPLOYER_PROJECT_ID=PROJECT_ID DEPLOYER_PROJECT_NUMBER="$( gcloud projects describe "${DEPLOYER_PROJECT_ID}" \ --format="value(projectNumber)" )"設定環境變數,儲存專案的服務帳戶名稱:
DEPLOYER_SERVICE_ACCOUNT="service-${DEPLOYER_PROJECT_NUMBER}@gcp-sa-binaryauthorization."新增 IAM 角色繫結:
gcloud --project ATTESTOR_PROJECT_ID \ beta container binauthz attestors add-iam-policy-binding \ "projects/ATTESTOR_PROJECT_ID/attestors/ATTESTOR" \ --member="serviceAccount:${DEPLOYER_SERVICE_ACCOUNT}" \ --role=roles/binaryauthorization.attestorsVerifier
如果在授予 IAM 角色時收到 service account not found 錯誤,可能需要手動建立服務代理。
為設定二進位授權的使用者新增 IAM 角色繫結
您必須為在部署工具專案中,將驗證者新增至二進位授權政策的使用者,新增 IAM 角色繫結,因為使用者必須具備查看要新增驗證者的權限。如有需要,您可以在新增認證者後安全地撤銷這項權限。
您也必須透過指令列新增 IAM 角色繫結,因為 Google Cloud 控制台不支援這個步驟。
如要新增 IAM 角色繫結,請按照下列步驟操作:
gcloud --project ATTESTOR_PROJECT_ID \
beta container binauthz attestors add-iam-policy-binding \
"projects/ATTESTOR_PROJECT_ID/attestors/ATTESTOR" \
--member=ADMIN_EMAIL_ACCOUNT \
--role=roles/binaryauthorization.attestorsViewer
如要在新增驗證者後移除 IAM 角色繫結,請按照下列步驟操作:
gcloud --project ATTESTOR_PROJECT_ID \
beta container binauthz attestors remove-iam-policy-binding \
"projects/ATTESTOR_PROJECT_ID/attestors/ATTESTOR" \
--member=ADMIN_EMAIL_ACCOUNT \
--role=roles/binaryauthorization.attestorsViewer
後續步驟
- 瞭解如何為驗證者建立認證。
- 使用 Google Cloud 控制台、Google Cloud CLI 和 REST API 更新二進位授權政策,要求提供認證。