Halaman ini menjelaskan cara mengganti otoritas sertifikat root yang digunakan untuk validasi paket dalam lingkungan air-gapped Google Distributed Cloud (GDC)
Validasi paket GDC menggunakan otoritas sertifikat root (CA) untuk memvalidasi sertifikat kunci rilis. Oleh karena itu, sertifikat CA root harus dirotasi secara berkala. Anda harus merotasi CA root jika Anda diinstruksikan untuk melakukannya melalui catatan rilis atau pesan peringatan yang mungkin ditampilkan saat Anda melakukan upgrade. Untuk mengetahui informasi selengkapnya tentang proses upgrade, lihat Mendorong artefak ke container registry.
Sebelum memulai
Untuk merotasi sertifikat validasi paket, Anda harus memiliki peran identitas dan akses yang diperlukan:
- Debugger Artifact Registry Sistem: memiliki akses baca dan tulis ke semua resource Harbor. Minta Admin Keamanan Anda untuk memberi Anda peran cluster System Artifact Registry Debugger (
sar-debugger).
Verifikasi rotasi sertifikat diperlukan
Verifikasi apakah rotasi sertifikat validasi paket diperlukan sebelum melakukan operasi:
Tetapkan variabel lingkungan
KUBECONFIG:$ KUBECONFIG=PATH_TO_KUBECONFIG_FILEGanti
PATH_TO_KUBECONFIG_FILEdengan jalur ke filekubeconfigyang Anda dapatkan dengan menjalankangdcloud auth logindi cluster admin root.Tentukan apakah upgrade diperlukan dengan membandingkan trust anchor saat ini dengan trust anchor terbaru. Data
ConfigMapdiharbor-system/package-validation-root-certsdibandingkan dengan trust anchor lokal:$ 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!Jika sertifikat harus dirotasi, lihat Melakukan rotasi dan upgrade sertifikat.
Melakukan rotasi dan upgrade sertifikat
Gunakan alat dan proses Infrastruktur sebagai Kode (IaC) untuk mengganti objek ConfigMap yang berada di harbor-system/package-validation-root-certs dalam cluster admin root.
Buat dan tetapkan nilai ke variabel berikut:
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-systemGanti
GDC_URLdengan URL untuk project GDC Anda.Meng-cloning repository
git -c http.sslVerify=false clone -b main https://${USERNAME}:TOKEN@gitlab.${URL}/gdch/iac /tmp/${USERNAME}Ganti
TOKENdengan token akses pribadi Anda dari GitLab. Untuk mengetahui informasi selengkapnya, lihat cara membuat token akses pribadi di https://docs.gitlab.com/ee/user/profile/personal_access_tokens.html#create-a-personal-access-token.Buat folder target yang akan berisi file output dari proses rotasi sertifikat:
mkdir -p "${TARGET_FOLDER}"Perbarui dan ganti nilai
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}") EOFPastikan anchor tepercaya telah diperbarui dengan benar:
$ 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-systemHapus file sementara yang digunakan untuk mengganti nilai anchor tepercaya:
$ rm "${TEMPLATE_FILE}" "${AWK_RULE_FILE}" "${LATEST_TRUST_ANCHOR_CA_FILE}"Validasi objek sebelum melakukan perubahan:
$ /root/release/gdcloud system assets validate --config "${OUTPUT}" --level objectLakukan commit perubahan:
$ 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}-branchBuat permintaan penggabungan:
$ git -c http.sslVerify=false push -o merge_request.create \ https://${USERNAME}:TOKEN@gitlab.${URL}/gdch/iac ${USERNAME}-branchOutput Anda harus terlihat seperti contoh berikut:
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-branchSetelah perubahan Anda digabungkan, Anda harus Mendapatkan persetujuan untuk rotasi sertifikat dari IO lain.
Mendapatkan persetujuan untuk rotasi sertifikat
Pengguna IO lain harus mengambil peran pemberi persetujuan dan memverifikasi perubahan ini. IO yang menyetujui harus mengikuti langkah-langkah berikut:
Download anchor kepercayaan yang dilindungi dari versi upgrade target ke drive USB. Untuk mendownload file ini, Anda harus memiliki akses ke bucket Cloud Storage. Untuk mendapatkan akses, eskalasikan ke dukungan GDC. Untuk mengetahui informasi selengkapnya tentang cara mendownload distribusi dan file GDC, lihat Mendownload file.
Salin anchor tepercaya dari versi terbaru ke lingkungan yang terisolasi menggunakan drive USB.
Ambil sertifikat dan bandingkan sertifikat dalam permintaan penggabungan dengan sertifikat yang diambil:
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.crtGanti kode berikut:
VERSION: versi rilis GDC. Contoh,1.x.y-gdch.z.DIGEST_INFORMATION: informasi ringkasan yang Anda terima dari kontak Google Anda. Informasi ringkasan bervariasi, bergantung pada rilis tertentu. Misalnya, ringkasan1.2.0-gdch.243berbeda dengan ringkasan1.2.0-gdch.321. Informasi ini diberikan secara manual karena alasan keamanan.
Setujui perubahan jika data sertifikat
ca.crtsama dengan sertifikat yang didownload. Sertifikat harus terlihat seperti contoh berikut:-----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-----Konfirmasi apakah operasi berhasil dengan memeriksa resource
RootSync. ResourceRootSyncdapat digunakan untuk mengelola resource apa pun di cluster yang memiliki izincluster-admin. Periksa apakah resourceRootSynctelah berhasil dirender:$ kubectl --kubeconfig=$KUBECONFIG describe rootsync/root-sync -n config-management-systemJika rendering
RootSyncberhasil, output Anda akan menyertakan pesan:Rendering succeeded.Jika operasi tidak berhasil, masalahnya kemungkinan disebabkan oleh masalah konfigurasi IaC. Untuk mengetahui informasi selengkapnya, lihat Tips penelusuran bug untuk mengurangi masalah IaC umum.