Fazer upgrade do certificado de validação de pacote

Este documento descreve como fazer upgrade da autoridade certificadora raiz (CA) usada para validação de pacotes no appliance isolado do Google Distributed Cloud (GDC).

A validação de pacotes do GDC usa uma autoridade certificadora raiz (CA) para validar certificados de chave de lançamento. Faça upgrade dessa CA raiz se um aviso de lançamento exigir ou se você vir uma mensagem de aviso durante um upgrade do sistema.

Antes de começar

Para fazer upgrade do certificado de validação de pacote, você precisa ter as funções de identidade e acesso necessárias:

  • Verifique se você tem acesso de gravação ao ConfigMap harbor-system/package-validation-root-certs.
  • Peça ao administrador de segurança para conceder a você o papel de Upgrade Debugger (upgrade-debugger-cp).

Verificar se o upgrade do certificado é necessário

Verifique se é necessário fazer upgrade de um certificado de validação de pacote antes de realizar a operação. Para isso, compare o ConfigMap ativo no cluster com o certificado raiz de pré-produção mais recente no pacote de upgrade:

  1. Defina a variável de ambiente KUBECONFIG:

    $ KUBECONFIG=PATH_TO_KUBECONFIG_FILE
    

    Substitua PATH_TO_KUBECONFIG_FILE pelo caminho para o arquivo kubeconfig que você obteve ao executar gdcloud auth login no cluster de administrador raiz.

  2. Determine se um upgrade é necessário comparando a âncora de confiança atual com a mais recente. Os dados ConfigMap em harbor-system/package-validation-root-certs são comparados com a âncora de confiança local:

    $ 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!
    

Fazer upgrade do certificado

Se um upgrade for necessário, atualize o objeto ConfigMap localizado em harbor-system/package-validation-root-certs no cluster de administrador raiz. Você precisa ter acesso de gravação ao ConfigMap para concluir essa tarefa.

  1. Defina a variável de ambiente KUBECONFIG:

    $ KUBECONFIG=PATH_TO_KUBECONFIG_FILE
    

    Substitua PATH_TO_KUBECONFIG_FILE pelo caminho para o arquivo kubeconfig que você obteve ao executar gdcloud auth login no cluster de administrador raiz.

  2. Crie e atribua valores às seguintes variáveis:

    USERNAME=USER_NAME #IO
    TARGET_FOLDER=/tmp/${USERNAME}
    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
    

    Substitua USER_NAME pelo nome de usuário do IO.

  3. Crie a pasta de destino que vai conter os arquivos de saída do processo de upgrade do certificado:

    mkdir -p "${TARGET_FOLDER}"
    
  4. Receba a âncora de confiança atual e armazene-a em um arquivo temporário local:

    CURRENT_TRUST_ANCHOR=$(kubectl  --kubeconfig=$KUBECONFIG get configmap "${CONFIGMAP_NAME}" -n "${NAMESPACE}" -o jsonpath="{.data.ca\.crt}" )
    CURRENT_TRUST_ANCHOR_CA_FILE=$(mktemp)
    echo "$CURRENT_TRUST_ANCHOR" > "${CURRENT_TRUST_ANCHOR_CA_FILE}"
    
  5. Gere o arquivo de âncora de confiança atualizado:

    cat <<EOF  > "${OUTPUT}"
    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: ${CONFIGMAP_NAME}
      namespace: ${NAMESPACE}
    data:
      ca.crt: |
    $(sed 's/^/    /' "${LATEST_TRUST_ANCHOR_CA_FILE}")
    $(sed 's/^/    /' "${CURRENT_TRUST_ANCHOR_CA_FILE}")
    EOF
    
  6. Verifique se a âncora de confiança foi atualizada corretamente:

    A âncora de confiança precisa conter o certificado atual e o mais recente.

    $ cat "${OUTPUT}"
    apiVersion: v1
    data:
      ca.crt: |
        -----BEGIN CERTIFICATE-----
        (certificate content)
        -----END CERTIFICATE-----
        -----BEGIN CERTIFICATE-----
        (certificate content)
        -----END CERTIFICATE-----
        (other certificate)
    kind: ConfigMap
    metadata:
      name: package-validation-root-certs
      namespace: harbor-system
    
  7. Aplique a nova configuração com kubectl:

      kubectl --kubeconfig=$KUBECONFIG apply -f ${OUTPUT}
    
  8. Verifique se o ca.crt recém-aplicado está presente em ConfigMap:

      kubectl --kubeconfig=$KUBECONFIG describe configmap package-validation-root-certs -n harbor-system
    

Isso cuida da atualização de um novo certificado no package-validation-root-cert.