Criar uma autoridade certificadora raiz

Nesta página, descrevemos as etapas para criar uma autoridade de certificação (CA) raiz no Google Distributed Cloud (GDC) com isolamento físico.

Uma AC raiz, que fica no topo da hierarquia da infraestrutura de chave pública (PKI), estabelece a âncora de confiança para a PKI. Para usar certificados em uma PKI, dispositivos, softwares e componentes precisam confiar na AC raiz. Essa configuração garante a confiança em todos os certificados emitidos pela CA raiz, permitindo a confiança na própria ICP.

Antes de começar

Antes de criar uma autoridade de certificação raiz, verifique se você tem as permissões necessárias e um arquivo kubeconfig.

Permissões necessárias

Para receber as permissões necessárias para criar uma autoridade de certificação raiz, peça ao administrador do IAM da organização para conceder a você o papel de administrador do serviço de autoridade de certificação (certificate-authority-service-admin). Para mais informações sobre papéis, consulte Definições de papéis.

Receber o arquivo kubeconfig

Para executar comandos no servidor da API Management, faça o seguinte:

  1. Faça login e gere o arquivo kubeconfig para o servidor da API Management se você não tiver um.

  2. Use o caminho para o arquivo kubeconfig do servidor da API Management para substituir MANAGEMENT_API_SERVER_KUBECONFIG nestas instruções.

Criar uma autoridade certificadora raiz

Para criar uma CA raiz, aplique um recurso personalizado à sua instância isolada do Distributed Cloud.

  1. Crie um recurso CertificateAuthority e salve-o como um arquivo YAML chamado root-ca.yaml:

    apiVersion: pki.security.gdc.goog/v1
    kind: CertificateAuthority
    metadata:
      name: ROOT_CA_NAME
      namespace: USER_PROJECT_NAMESPACE
    spec:
      caProfile:
        commonName: COMMON_NAME
        duration: DURATION
        renewBefore: RENEW_BEFORE
        organizations:
        - ORGANIZATION
        organizationalUnits:
        - ORGANIZATIONAL_UNITS
        countries:
        - COUNTRIES
        localities:
        - LOCALTIES
        provinces:
        - PROVINCES
        streetAddresses:
        - STREET_ADDRESSES
        postalCodes:
        - POSTAL_CODES
      caCertificate:
        selfSignedCA: {}
      certificateProfile:
        keyUsage:
          - digitalSignature
          - keyCertSign
          - crlSign
        extendedKeyUsage:
          - EXTENDED_KEY_USAGE
      secretConfig:
        secretName: SECRET_NAME
        privateKeyConfig:
          algorithm: KEY_ALGORITHM
          size: KEY_SIZE
      acme:
        enabled: ACME_ENABLED
    

    Substitua as seguintes variáveis:

    Variável Descrição
    ROOT_CA_NAME O nome da CA raiz.
    USER_PROJECT_NAMESPACE O nome do namespace em que o projeto do usuário está localizado.
    COMMON_NAME O nome comum do certificado da CA.
    DURATION O ciclo de vida solicitado do certificado da CA.
    SECRET_NAME O nome do secret do Kubernetes que contém a chave privada e o certificado de CA assinado.

    As variáveis a seguir são valores opcionais:

    Variável Descrição
    RENEW_BEFORE O tempo de rotação antes da expiração do certificado de CA.
    ORGANIZATION Organização a ser usada no certificado.
    ORGANIZATIONAL_UNITS Unidades organizacionais a serem usadas no certificado.
    COUNTRIES Países a serem usados no certificado.
    LOCALITIES Cidades a serem usadas no certificado.
    PROVINCES Estado ou províncias a serem usadas no certificado.
    STREET_ADDRESSES Endereços a serem usados no certificado.
    POSTAL_CODES Códigos postais a serem usados no certificado.
    EXTENDED_KEY_USAGE O uso estendido da chave para o certificado. Se fornecidos, os valores permitidos são serverAuth e clientAuth.
    KEY_ALGORITHYM O algoritmo de chave privada usado para este certificado. Os valores permitidos são RSA, Ed25519 ou ECDSA. Se o tamanho não for fornecido, o padrão será 256 para ECDSA e 2048 para RSA. O tamanho da chave é ignorado para Ed25519.
    KEY_SIZE O tamanho, em bits, da chave privada para esse certificado depende do algoritmo. RSA permite 2048, 3072, 4096 ou 8192 (padrão 2048). ECDSA permite 256, 384 ou 521 (padrão 256). Ed25519 ignora o tamanho.
    ACME_ENABLED Se definido como true, a CA será executada no modo ACME e vai gerar o URL do servidor ACME. Em seguida, use o cliente e o protocolo ACME para gerenciar certificados.

  2. Aplique o recurso personalizado à sua instância do Distributed Cloud:

    kubectl apply -f root-ca.yaml –kubeconfig MANAGEMENT_API_SERVER_KUBECONFIG
    

    Substitua MANAGEMENT_API_SERVER_KUBECONFIG pelo caminho para o arquivo kubeconfig do servidor da API Management.

  3. Verifique se a CA raiz está pronta. Normalmente, leva cerca de 40 minutos para a CA ficar pronta:

    kubectl --kubeconfig MANAGEMENT_API_SERVER_KUBECONFIG -n USER_PROJECT_NAMESPACE get certificateauthority.pki.security.gdc.goog/ROOT_CA_NAME -ojson | jq -r ' 
    .status.conditions[] | select( .type as $id | "Ready" | index($id))
    

    A saída será assim:

    {
      "lastTransitionTime": "2025-01-24T17:09:19Z",
      "message": "CA reconciled",
      "observedGeneration": 2,
      "reason": "Ready",
      "status": "True",
      "type": "Ready"
    }
    

Listar CAs

Para listar todos os recursos do Certificate Authority Service na sua instância isolada do Distributed Cloud, faça o seguinte:

Use o parâmetro certificateauthorities para listar todos os recursos CertificateAuthority:

   kubectl --kubeconfig MANAGEMENT_API_SERVER_KUBECONFIG -n USER_PROJECT_NAMESPACE get certificateauthorities

A saída será assim:

   NAMESPACE    NAME              READY   REASON   AGE
   foo          root-ca           True    Ready    7h24m
   foo          sub-ca            True    Ready    7h24m