本頁說明如何在 Google Distributed Cloud (GDC) 氣隙環境中,輪替用於套件驗證的根憑證授權單位
GDC 套件驗證會使用根憑證授權單位 (CA) 驗證發布金鑰憑證。因此定期輪替根 CA 憑證至關重要。如果發布通知或升級時顯示的警告訊息指示您輪替根 CA,請務必輪替。如要進一步瞭解升級程序,請參閱「將構件推送至容器登錄檔」。
事前準備
如要輪替套件驗證憑證,您必須具備必要的 Identity and Access Management 角色:
- 系統構件登錄檔偵錯工具:具備所有 Harbor 資源的讀寫權限。請要求安全管理員授予您「系統構件登錄檔偵錯工具」(
sar-debugger) 叢集角色。
必須驗證憑證輪替
執行作業前,請先確認是否需要輪替套件驗證憑證:
設定
KUBECONFIG環境變數:$ KUBECONFIG=PATH_TO_KUBECONFIG_FILE將
PATH_TO_KUBECONFIG_FILE替換為您在根管理員叢集中執行gdcloud auth login時取得的kubeconfig檔案路徑。比較目前的信任錨點與最新信任錨點,判斷是否需要升級。系統會將
ConfigMap的資料與本機信任錨點進行比較:harbor-system/package-validation-root-certs$ CURRENT_TRUST_ANCHOR=$(kubectl --kubeconfig=$KUBECONFIG get cm package-validation-root-certs -n harbor-system -o jsonpath='{.data.ca\.crt}') $ LATEST_TRUST_ANCHOR=$(cat /root/release/staging_root_ca_certificate.crt) $ diff <( echo "$CURRENT_TRUST_ANCHOR" ) <( echo "$LATEST_TRUST_ANCHOR" ) && echo trust anchors are same || echo trust anchors are different, upgrade required!如果必須輪替憑證,請參閱「執行憑證輪替和升級」。
執行憑證輪替和升級
使用基礎架構即程式碼 (IaC) 工具和程序,輪替根管理員叢集 harbor-system/package-validation-root-certs 中的 ConfigMap 物件。
建立下列變數並指派值:
USERNAME=gitlab-admin URL=GDC_URL TEMPLATE_FILE="/tmp/package-validation-root-certs.yaml.tpl" TARGET_FOLDER=/tmp/${USERNAME}/infrastructure/zonal/zones/ZONE_NAME/root-admin/package-validation OUTPUT="${TARGET_FOLDER}/package-validation-root-certs.yaml" LATEST_TRUST_ANCHOR_CA_FILE=/root/release/staging_root_ca_certificate.crt CONFIGMAP_NAME=package-validation-root-certs NAMESPACE=harbor-system將
GDC_URL替換為 GDC 專案的網址。複製存放區:
git -c http.sslVerify=false clone -b main https://${USERNAME}:TOKEN@gitlab.${URL}/gdch/iac /tmp/${USERNAME}將
TOKEN替換成 GitLab 的個人存取權杖。詳情請參閱 https://docs.gitlab.com/ee/user/profile/personal_access_tokens.html#create-a-personal-access-token,瞭解如何建立個人存取權杖。建立目標資料夾,用於存放憑證輪替程序產生的輸出檔案:
mkdir -p "${TARGET_FOLDER}"更新並替換
LATEST_TRUST_ANCHOR的值:cat <<EOF > "${OUTPUT}" apiVersion: v1 kind: ConfigMap metadata: name: ${CONFIGMAP_NAME} namespace: ${NAMESPACE} data: ca.crt: | $(sed 's/^/ /' "${LATEST_TRUST_ANCHOR_CA_FILE}") EOF確認信任錨點已正確更新:
$ cat "${OUTPUT}" apiVersion: v1 data: ca.crt: | -----BEGIN CERTIFICATE----- MIID3DCCAsSgAwIBAgITb1SPkse7G8syTQUFfc8NOqY4RzANBgkqhkiG9w0BAQsF ADB2MQswCQYDVQQGEwJ1czETMBEGA1UECBMKY2FsaWZvcm5pYTETMBEGA1UEBxMK c3Vubnl2aWxsZTEPMA0GA1UEChMGZ29vZ2xlMQ0wCwYDVQQLEwRnZGNoMR0wGwYD VQQDExRnZGNoLWNvZGUtc2lnbmluZy1jYTAeFw0yMzAzMDUwNjMyMjlaFw0zMzAz MDIwNjMyMjhaMHYxCzAJBgNVBAYTAnVzMRMwEQYDVQQIEwpjYWxpZm9ybmlhMRMw EQYDVQQHEwpzdW5ueXZpbGxlMQ8wDQYDVQQKEwZnb29nbGUxDTALBgNVBAsTBGdk Y2gxHTAbBgNVBAMTFGdkY2gtY29kZS1zaWduaW5nLWNhMIIBIjANBgkqhkiG9w0B AQEFAAOCAQ8AMIIBCgKCAQEAsD2XLR9cxbP0dnJfqdiBr1ZX1oq3AklU0IG5p7ZL F7NA1/qoKDWe5RuoBM/X4snI/5gnz9zuHapXA9HLN7bfEpr7orXlK00jn2AGqiNk jBriDFqgOF33W+/AWDG8HujlMosYK+Gp4FU9ni5S2Ay2sMk83CC+eFh7T//ji8y9 PnUsLEwmNiCDb1UMqrcAXpmeTxd7PZlPIsujrkqLGAwjEE02XA7SqMPe/cPfzKEO 0mK1VvxYmHdLOJtyKWgYIwy6+8Ka6Js3WgjNi0fLnxH7kbVaIvbLSvZa00JsX4GQ v1bxLSRUvfuI66O/vOEWH3zzKReTjQKMflz4570gciAntQIDAQABo2MwYTAOBgNV HQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUWZ0gQZKNybd8 BAy2gamLf7Isiq4wHwYDVR0jBBgwFoAUWZ0gQZKNybd8BAy2gamLf7Isiq4wDQYJ KoZIhvcNAQELBQADggEBAGtifprappLxMaPQxGS8v2DYSlF3OYcBw2+JWISR62vB 7mRjhuwh6QmcDHxLu+9RQ7E6aNaADCKbw0/6/OtGhvaxNtmZuBaBRhYPf2juQSgW BtQbmdr3h99wAFtpfvt4FOFYvTMRByOm/imi8Oq1+1y3OQEp2ayiMZ9pBg8DDY59 juuszBKNZA99cMTtAQPCFkbMODRGFDYlaM5JhxVJ8/J9TCh4tNLx1BTJUtaZYjVF TlkzFdCoUnHWFPsapL1Mhje1vZBrhVKkSQETBfssvWQSNamOOLL139O428pxUUrH a7ahVae1mO4kQce3uBp3WyKcBx3pPNmYbRtGCe2xSB0= -----END CERTIFICATE----- kind: ConfigMap metadata: name: package-validation-root-certs namespace: harbor-system移除用於取代信任錨點值的暫時檔案:
$ rm "${TEMPLATE_FILE}" "${AWK_RULE_FILE}" "${LATEST_TRUST_ANCHOR_CA_FILE}"先驗證物件,再提交變更:
$ /root/release/gdcloud system assets validate --config "${OUTPUT}" --level object修訂變更:
$ cd "${TARGET_FOLDER}" $ git add -A $ git config user.name "GitlabAdmin" $ git config user.email "gitlab-admin@example.com" $ git commit -am "upgrade package-validation-root-certs" $ git checkout -b ${USERNAME}-branch建立合併要求:
$ git -c http.sslVerify=false push -o merge_request.create \ https://${USERNAME}:TOKEN@gitlab.${URL}/gdch/iac ${USERNAME}-branch輸出內容必須如以下範例所示:
warning: redirecting to https://gitlab.zone1.google.gdch.test/gdch/iac.git/ Enumerating objects: 8, done. Counting objects: 100% (8/8), done. Delta compression using up to 16 threads Compressing objects: 100% (4/4), done. Writing objects: 100% (7/7), 920 bytes | 920.00 KiB/s, done. Total 7 (delta 0), reused 0 (delta 0) remote: remote: View merge request for gitlab-admin-branch: remote: https://gitlab.GDC_URL/gdch/iac/-/merge_requests/1 remote: To https://gitlab.zone1.google.gdch.test/gdch/iac * [new branch] gitlab-admin-branch -> gitlab-admin-branch變更合併後,您必須向其他 IO 取得憑證輪替的核准。
取得憑證輪替的核准
其他 IO 使用者必須擔任核准者角色,並驗證這項變更。核准 IO 必須採取下列步驟:
將目標升級版本的受保護信任錨點下載至 USB 隨身碟。如要下載這個檔案,您必須有權存取 Cloud Storage bucket。如要取得存取權,請向 GDC 支援團隊回報問題。 如要進一步瞭解如何下載 GDC 發行內容和檔案,請參閱「下載檔案」。
使用 USB 隨身碟,將最新版本的信任錨點複製到無網路連線的環境。
擷取憑證,並比較合併要求中的憑證與擷取的憑證:
VERSION=VERSION DIGEST=DIGEST_INFORMATION export GCS_BUCKET=private-cloud-release DOWNLOADER=gdch-downloader-root-ca-$VERSION.sh gcloud storage cp "gs://$GCS_BUCKET/$VERSION/$DOWNLOADER" . echo "$DIGEST $DOWNLOADER" | sha256sum -c && chmod +x $DOWNLOADER && ./$DOWNLOADER --skip-unzip $ cat root_ca_certificate.crt更改下列內容:
VERSION:GDC 發布版本。例如:1.x.y-gdch.z。DIGEST_INFORMATION:您從 Google 聯絡窗口收到的摘要資訊。摘要資訊會因特定版本而異。舉例來說,1.2.0-gdch.243摘要與1.2.0-gdch.321摘要不同。 基於安全考量,這項資訊是手動提供。
如果
ca.crt憑證資料與下載的憑證相同,請核准變更。認證必須與下列範例類似:-----BEGIN CERTIFICATE----- MIID3DCCAsSgAwIBAgITb1SPkse7G8syTQUFfc8NOqY4RzANBgkqhkiG9w0BAQsF ADB2MQswCQYDVQQGEwJ1czETMBEGA1UECBMKY2FsaWZvcm5pYTETMBEGA1UEBxMK c3Vubnl2aWxsZTEPMA0GA1UEChMGZ29vZ2xlMQ0wCwYDVQQLEwRnZGNoMR0wGwYD VQQDExRnZGNoLWNvZGUtc2lnbmluZy1jYTAeFw0yMzAzMDUwNjMyMjlaFw0zMzAz MDIwNjMyMjhaMHYxCzAJBgNVBAYTAnVzMRMwEQYDVQQIEwpjYWxpZm9ybmlhMRMw EQYDVQQHEwpzdW5ueXZpbGxlMQ8wDQYDVQQKEwZnb29nbGUxDTALBgNVBAsTBGdk Y2gxHTAbBgNVBAMTFGdkY2gtY29kZS1zaWduaW5nLWNhMIIBIjANBgkqhkiG9w0B AQEFAAOCAQ8AMIIBCgKCAQEAsD2XLR9cxbP0dnJfqdiBr1ZX1oq3AklU0IG5p7ZL F7NA1/qoKDWe5RuoBM/X4snI/5gnz9zuHapXA9HLN7bfEpr7orXlK00jn2AGqiNk jBriDFqgOF33W+/AWDG8HujlMosYK+Gp4FU9ni5S2Ay2sMk83CC+eFh7T//ji8y9 PnUsLEwmNiCDb1UMqrcAXpmeTxd7PZlPIsujrkqLGAwjEE02XA7SqMPe/cPfzKEO 0mK1VvxYmHdLOJtyKWgYIwy6+8Ka6Js3WgjNi0fLnxH7kbVaIvbLSvZa00JsX4GQ v1bxLSRUvfuI66O/vOEWH3zzKReTjQKMflz4570gciAntQIDAQABo2MwYTAOBgNV HQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUWZ0gQZKNybd8 BAy2gamLf7Isiq4wHwYDVR0jBBgwFoAUWZ0gQZKNybd8BAy2gamLf7Isiq4wDQYJ KoZIhvcNAQELBQADggEBAGtifprappLxMaPQxGS8v2DYSlF3OYcBw2+JWISR62vB 7mRjhuwh6QmcDHxLu+9RQ7E6aNaADCKbw0/6/OtGhvaxNtmZuBaBRhYPf2juQSgW BtQbmdr3h99wAFtpfvt4FOFYvTMRByOm/imi8Oq1+1y3OQEp2ayiMZ9pBg8DDY59 juuszBKNZA99cMTtAQPCFkbMODRGFDYlaM5JhxVJ8/J9TCh4tNLx1BTJUtaZYjVF TlkzFdCoUnHWFPsapL1Mhje1vZBrhVKkSQETBfssvWQSNamOOLL139O428pxUUrH a7ahVae1mO4kQce3uBp3WyKcBx3pPNmYbRtGCe2xSB0= -----END CERTIFICATE-----檢查
RootSync資源,確認作業是否成功。RootSync資源可用於管理叢集上具有cluster-admin權限的任何資源。檢查RootSync資源是否已順利算繪:$ kubectl --kubeconfig=$KUBECONFIG describe rootsync/root-sync -n config-management-system如果
RootSync算繪成功,輸出內容會包含Rendering succeeded訊息。如果作業失敗,問題可能出在 IaC 設定。 詳情請參閱偵錯提示,瞭解如何解決常見的 IaC 問題。