使用 Google Cloud 控制台建立驗證者

本頁說明如何使用 Google Cloud 控制台,在二進位授權作業中建立自訂驗證者。您也可以使用 Google Cloud CLIREST API 執行這些步驟。這項工作是設定二進位授權的一部分。

Cloud Build 使用者:您可以改用built-by-cloud-build驗證者,只部署 Cloud Build 建構的映像檔

事前準備

建立認證者之前,請先完成下列步驟:

  1. 啟用二進位授權。

  2. 為平台設定二進位授權。

總覽

認證者是二進位授權用來驗證認證的 Google Cloud 資源。如要進一步瞭解二進位授權,請參閱二進位授權總覽

如要建立認證者,請執行下列步驟:

  • 設定金鑰組,用於先簽署映像檔 (建立認證),然後在部署映像檔時驗證。PKIX 金鑰組是由 Cloud Key Management Service (Cloud KMS) 以 PKIX 相容格式產生。
  • 在二進位授權中建立驗證者,並建立您建立的公開金鑰關聯

單一專案設定中,您會在設定二進位授權政策的專案中建立驗證者。在多專案設定中,您很可能會有部署者專案 (用於設定政策) 和驗證者專案 (用於儲存驗證者)。

設定加密編譯金鑰

二進位授權可讓您使用 PKIX 金鑰安全地簽署映像檔,並在稍後驗證。確保只有經過驗證的當事人可以授權容器映像檔。如要使用認證,請設定非對稱金鑰 (例如公用金鑰基礎架構 (X.509) (PKIX) 金鑰),安全地驗證認證者的身分。部署映像檔時,二進位授權會使用驗證者中的公開金鑰,檢查以私密金鑰簽署的映像檔認證。

本指南建議使用橢圓曲線數位簽章演算法 (ECDSA) 產生 PKIX 金鑰組。您也可以使用 RSA 或 PGP 金鑰簽署。如要進一步瞭解簽署演算法,請參閱金鑰用途與演算法一文。

建立 PKIX 金鑰組

二進位授權可讓您使用非對稱式 PKIX 金鑰組簽署及驗證映像檔。

PKIX 金鑰組包含私密金鑰 (簽署者用來數位簽署認證) 和公開金鑰 (您新增至認證者)。部署時,Binary Authorization 會使用這個公開金鑰,驗證以私密金鑰簽署的驗證。

Cloud KMS 中產生及儲存的非對稱金鑰配對符合 PKIX 格式。如要建立 Cloud KMS 金鑰以搭配使用二進位授權,請參閱建立非對稱金鑰。建立金鑰時,請務必選擇「非對稱式簽署」做為金鑰用途。

PKIX (Cloud KMS)

如要在 Cloud KMS 中建立金鑰組,請按照下列步驟操作:

  1. 設定建立金鑰組所需的環境變數。

    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
    
  2. 建立金鑰環。

    gcloud kms keyrings create ${KMS_KEYRING_NAME} \
      --location ${KMS_KEY_LOCATION}
    
  3. 建立金鑰:

    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 金鑰配對,並儲存在檔案中,請執行下列操作:

  1. 產生金鑰:

    PRIVATE_KEY_FILE="/tmp/ec_private.pem"
    openssl ecparam -genkey -name prime256v1 -noout -out ${PRIVATE_KEY_FILE}
    
  2. 由於這個檔案同時包含公開和私密金鑰,您需要將公開金鑰擷取到另一個檔案,以便新增至驗證者:

    PUBLIC_KEY_FILE="/tmp/ec_public.pem"
    openssl ec -in ${PRIVATE_KEY_FILE} -pubout -out ${PUBLIC_KEY_FILE}
    

建立驗證者

下一步是建立驗證者本身,並建立 Artifact Analysis 附註和公開金鑰的關聯。

二進位授權會使用構件分析功能,儲存授權程序中使用的可信中繼資料。您建立的每個認證者都必須建立一個構件分析記事。每項認證都會儲存為這則附註的例項。

如要建立驗證者,請按照下列步驟操作:

  1. 前往驗證者專案的「二進位授權」頁面。

    前往二進位授權

  2. 在「Attestors」分頁中,按一下「Create」

  3. 按一下「Create New Attestor」(建立新認證者)。

  4. 在「Attestor Name」(認證者名稱) 中,輸入認證者名稱 (例如 build-secureprod-qa)。

  5. 如要將公開金鑰新增至驗證者,請按照下列步驟操作:

    PKIX (本機金鑰)

    1. 按一下「新增 PKIX 金鑰」
    2. 按一下「從檔案匯入」
    3. 瀏覽並選取您先前儲存的 PKIX 金鑰檔案。 注意:您也可以貼上 PEM 格式的公開金鑰。
    4. 選取「簽章演算法」。本指南中的範例金鑰是使用「橢圓曲線 P256 - SHA 摘要」演算法產生。

    PKIX (Cloud KMS)

    1. 按一下「新增 PKIX 金鑰」
    2. 按一下「從 Cloud KMS 匯入」
    3. 在開啟的視窗中輸入金鑰版本的資源 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}
      
    4. 按一下「提交」

  6. 如要使用先前建立的附註,請展開「進階設定」部分。

    1. 取消選取「自動產生構件分析附註」

    2. 在「構件分析附註 ID」欄位中輸入完整名稱。名稱的格式為 projects/PROJECT_ID/notes/NOTE_ID

  7. 點選「建立」

確認驗證者已建立

如要確認驗證者是否已建立,請執行下列步驟:

  1. 返回 Google Cloud 控制台的「Binary Authorization」(二進位授權) 頁面。

  2. 開啟「認證者」分頁。

多專案設定

如果您使用多專案設定 (有獨立的部署者和驗證者專案),則必須在驗證者資源上設定額外權限,部署者專案才能在部署期間使用驗證者專案建立的驗證。

為部署者專案新增 IAM 角色繫結

您必須為部署者專案服務帳戶新增身分與存取權管理角色繫結至驗證者。二進位授權評估政策時,會使用這項資訊判斷帳戶是否具備存取驗證者的權限。

您必須從指令列新增 IAM 角色繫結,因為 Google Cloud 控制台不支援這個步驟。

如要新增 IAM 角色繫結,請按照下列步驟操作:

  1. 設定環境變數,儲存專案名稱和編號。

    DEPLOYER_PROJECT_ID=PROJECT_ID
    DEPLOYER_PROJECT_NUMBER="$(
        gcloud projects describe "${DEPLOYER_PROJECT_ID}" \
          --format="value(projectNumber)"
    )"
    
  2. 設定環境變數,以儲存專案的服務帳戶名稱:

    DEPLOYER_SERVICE_ACCOUNT="service-${DEPLOYER_PROJECT_NUMBER}@gcp-sa-binaryauthorization.iam.gserviceaccount.com"
    
  3. 新增 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 角色繫結

您必須為在部署者專案的二進位授權政策中新增驗證者的使用者,新增 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

後續步驟