Merotasi sertifikat validasi paket

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:

  1. Tetapkan variabel lingkungan KUBECONFIG:

    $ KUBECONFIG=PATH_TO_KUBECONFIG_FILE
    

    Ganti PATH_TO_KUBECONFIG_FILE dengan jalur ke file kubeconfig yang Anda dapatkan dengan menjalankan gdcloud auth login di cluster admin root.

  2. Tentukan apakah upgrade diperlukan dengan membandingkan trust anchor saat ini dengan trust anchor terbaru. Data ConfigMap di harbor-system/package-validation-root-certs dibandingkan 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!
    
  3. 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.

  1. 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-system
    

    Ganti GDC_URL dengan URL untuk project GDC Anda.

  2. Meng-cloning repository

    git -c http.sslVerify=false clone -b main https://${USERNAME}:TOKEN@gitlab.${URL}/gdch/iac /tmp/${USERNAME}
    

    Ganti TOKEN dengan 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.

  3. Buat folder target yang akan berisi file output dari proses rotasi sertifikat:

    mkdir -p "${TARGET_FOLDER}"
    
  4. 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}")
      EOF
    
  5. Pastikan 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-system
    
  6. Hapus file sementara yang digunakan untuk mengganti nilai anchor tepercaya:

    $ rm "${TEMPLATE_FILE}" "${AWK_RULE_FILE}" "${LATEST_TRUST_ANCHOR_CA_FILE}"
    
  7. Validasi objek sebelum melakukan perubahan:

    $ /root/release/gdcloud system assets validate --config "${OUTPUT}" --level object
    
  8. Lakukan 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}-branch
    
  9. Buat permintaan penggabungan:

    $ git -c http.sslVerify=false push -o merge_request.create \
    https://${USERNAME}:TOKEN@gitlab.${URL}/gdch/iac ${USERNAME}-branch
    
  10. Output 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-branch
    
  11. Setelah 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:

  1. 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.

  2. Salin anchor tepercaya dari versi terbaru ke lingkungan yang terisolasi menggunakan drive USB.

  3. 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.crt
    

    Ganti 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, ringkasan 1.2.0-gdch.243 berbeda dengan ringkasan 1.2.0-gdch.321. Informasi ini diberikan secara manual karena alasan keamanan.
  4. Setujui perubahan jika data sertifikat ca.crt sama 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-----
    
  5. Konfirmasi apakah operasi berhasil dengan memeriksa resource RootSync. Resource RootSync dapat digunakan untuk mengelola resource apa pun di cluster yang memiliki izin cluster-admin. Periksa apakah resource RootSync telah berhasil dirender:

    $ kubectl --kubeconfig=$KUBECONFIG describe rootsync/root-sync -n config-management-system
    
  6. Jika rendering RootSync berhasil, output Anda akan menyertakan pesan: Rendering succeeded.

  7. Jika operasi tidak berhasil, masalahnya kemungkinan disebabkan oleh masalah konfigurasi IaC. Untuk mengetahui informasi selengkapnya, lihat Tips penelusuran bug untuk mengurangi masalah IaC umum.