이 페이지에서는 Google Distributed Cloud (GDC) 오프라인에서 패키지 검증에 사용되는 루트 인증 기관을 순환하는 방법을 설명합니다.
GDC 패키지 유효성 검사는 루트 인증서 기관 (CA)을 사용하여 출시 키 인증서를 검사합니다. 따라서 루트 CA 인증서를 정기적으로 순환하는 것이 중요합니다. 업그레이드를 실행할 때 표시될 수 있는 출시 공지 또는 경고 메시지를 통해 안내받은 경우 루트 CA를 순환해야 합니다. 업그레이드 프로세스에 관한 자세한 내용은 컨테이너 레지스트리에 아티팩트 푸시를 참고하세요.
시작하기 전에
패키지 유효성 검사 인증서를 순환하려면 필요한 ID 및 액세스 역할이 있어야 합니다.
- 시스템 아티팩트 레지스트리 디버거: 모든 Harbor 리소스에 대한 읽기 및 쓰기 액세스 권한이 있습니다. 보안 관리자에게 시스템 아티팩트 레지스트리 디버거 (
sar-debugger) 클러스터 역할을 부여해 달라고 요청합니다.
인증서 순환 확인 필요
작업을 실행하기 전에 패키지 유효성 검사 인증서 순환이 필요한지 확인합니다.
KUBECONFIG환경 변수를 설정합니다.$ KUBECONFIG=PATH_TO_KUBECONFIG_FILEPATH_TO_KUBECONFIG_FILE를 루트 관리자 클러스터에서gdcloud auth login를 실행하여kubeconfig파일을 가져온 경로로 바꿉니다.현재 신뢰 앵커를 최신 신뢰 앵커와 비교하여 업그레이드가 필요한지 확인합니다.
harbor-system/package-validation-root-certs의ConfigMap데이터가 로컬 신뢰 앵커와 비교됩니다.$ 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-systemGDC_URL를 GDC 프로젝트의 URL로 바꿉니다.저장소를 복제합니다.
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 버킷에 대한 액세스 권한이 있어야 합니다. 액세스 권한을 얻으려면 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-systemRootSync렌더링이 성공하면 출력에Rendering succeeded메시지가 포함됩니다.작업이 실패한 경우 IaC 구성 문제로 인해 문제가 발생했을 수 있습니다. 일반적인 IaC 문제를 완화하기 위한 자세한 내용은 디버깅 팁을 참고하세요.