패키지 유효성 검사 인증서 순환

이 페이지에서는 Google Distributed Cloud (GDC) 오프라인에서 패키지 검증에 사용되는 루트 인증 기관을 순환하는 방법을 설명합니다.

GDC 패키지 유효성 검사는 루트 인증서 기관 (CA)을 사용하여 출시 키 인증서를 검사합니다. 따라서 루트 CA 인증서를 정기적으로 순환하는 것이 중요합니다. 업그레이드를 실행할 때 표시될 수 있는 출시 공지 또는 경고 메시지를 통해 안내받은 경우 루트 CA를 순환해야 합니다. 업그레이드 프로세스에 관한 자세한 내용은 컨테이너 레지스트리에 아티팩트 푸시를 참고하세요.

시작하기 전에

패키지 유효성 검사 인증서를 순환하려면 필요한 ID 및 액세스 역할이 있어야 합니다.

  • 시스템 아티팩트 레지스트리 디버거: 모든 Harbor 리소스에 대한 읽기 및 쓰기 액세스 권한이 있습니다. 보안 관리자에게 시스템 아티팩트 레지스트리 디버거 (sar-debugger) 클러스터 역할을 부여해 달라고 요청합니다.

인증서 순환 확인 필요

작업을 실행하기 전에 패키지 유효성 검사 인증서 순환이 필요한지 확인합니다.

  1. KUBECONFIG 환경 변수를 설정합니다.

    $ KUBECONFIG=PATH_TO_KUBECONFIG_FILE
    

    PATH_TO_KUBECONFIG_FILE를 루트 관리자 클러스터에서 gdcloud auth login를 실행하여 kubeconfig 파일을 가져온 경로로 바꿉니다.

  2. 현재 신뢰 앵커를 최신 신뢰 앵커와 비교하여 업그레이드가 필요한지 확인합니다. harbor-system/package-validation-root-certsConfigMap 데이터가 로컬 신뢰 앵커와 비교됩니다.

    $ 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. 인증서를 순환해야 하는 경우 인증서 순환 및 업그레이드 실행을 참고하세요.

인증서 순환 및 업그레이드 실행

코드형 인프라 (IaC) 도구 및 프로세스를 사용하여 루트 관리자 클러스터의 harbor-system/package-validation-root-certs에 있는 ConfigMap 객체를 순환합니다.

  1. 다음 변수를 만들고 값을 할당합니다.

    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 프로젝트의 URL로 바꿉니다.

  2. 저장소를 복제합니다.

    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에서 개인 액세스 토큰을 만드는 방법을 참고하세요.

  3. 인증서 순환 프로세스의 출력 파일이 포함될 타겟 폴더를 만듭니다.

    mkdir -p "${TARGET_FOLDER}"
    
  4. 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. 신뢰 앵커가 올바르게 업데이트되었는지 확인합니다.

    $ 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. 신뢰 앵커 값을 대체하는 데 사용된 임시 파일을 삭제합니다.

    $ rm "${TEMPLATE_FILE}" "${AWK_RULE_FILE}" "${LATEST_TRUST_ANCHOR_CA_FILE}"
    
  7. 변경사항을 커밋하기 전에 객체를 검증합니다.

    $ /root/release/gdcloud system assets validate --config "${OUTPUT}" --level object
    
  8. 변경사항을 커밋합니다.

    $ 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. 병합 요청을 만듭니다.

    $ git -c http.sslVerify=false push -o merge_request.create \
    https://${USERNAME}:TOKEN@gitlab.${URL}/gdch/iac ${USERNAME}-branch
    
  10. 출력은 다음 예와 같이 표시되어야 합니다.

    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. 변경사항이 병합되면 다른 IO로부터 인증서 순환 승인을 받아야 합니다.

인증서 순환 승인 받기

다른 IO 사용자가 승인자 역할을 맡아 이 변경사항을 확인해야 합니다. 승인 IO는 다음 단계를 따라야 합니다.

  1. 타겟 업그레이드 버전의 보호된 신뢰 앵커를 USB 드라이브에 다운로드합니다. 이 파일을 다운로드하려면 Cloud Storage 버킷에 대한 액세스 권한이 있어야 합니다. 액세스 권한을 얻으려면 GDC 지원팀에 에스컬레이션하세요. GDC 배포 및 파일 다운로드에 관한 자세한 내용은 파일 다운로드를 참고하세요.

  2. USB 드라이브를 사용하여 최신 버전의 신뢰 앵커를 오프라인 환경에 복사합니다.

  3. 인증서를 가져오고 병합 요청의 인증서를 가져온 인증서와 비교합니다.

    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 다이제스트와 다릅니다. 이 정보는 보안상의 이유로 수동으로 제공됩니다.
  4. 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-----
    
  5. RootSync 리소스를 확인하여 작업이 성공했는지 확인합니다. RootSync 리소스를 사용하여 cluster-admin 권한이 있는 클러스터의 리소스를 관리할 수 있습니다. RootSync 리소스가 성공적으로 렌더링되었는지 확인합니다.

    $ kubectl --kubeconfig=$KUBECONFIG describe rootsync/root-sync -n config-management-system
    
  6. RootSync 렌더링이 성공하면 출력에 Rendering succeeded 메시지가 포함됩니다.

  7. 작업이 실패한 경우 IaC 구성 문제로 인해 문제가 발생했을 수 있습니다. 일반적인 IaC 문제를 완화하기 위한 자세한 내용은 디버깅 팁을 참고하세요.