Solicitar um certificado

Nesta página, descrevemos as etapas para solicitar um certificado usando o Certificate Authority Service.

Para estabelecer confiança e comunicação segura no seu Google Distributed Cloud (GDC) isolado, solicite um certificado ativado ou desativado para ACME do Certificate Authority Service.

Antes de começar

Para receber as permissões necessárias para solicitar um certificado, peça ao administrador do IAM da organização que conceda a você a função de administrador do serviço de autoridade certificadora (certificate-authority-service-admin).

Receber o arquivo kubeconfig

Para executar comandos no servidor da API Management, verifique se você tem os seguintes recursos:

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

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

Solicitar um certificado usando a CA com o modo ACME ativado

Se a autoridade certificadora estiver hospedada no modo ACME, ela vai gerar o URL do servidor ACME no status depois que estiver pronta.

Reúna o URL do servidor ACME da CA no seu ambiente do Distributed Cloud:

kubectl get certificateauthorities CA_NAME -n USER_PROJECT_NAMESPACE -ojson | jq -r '.status.acme.uri'

Substitua:

  • CA_NAME: o nome da CA, que pode ser uma CA raiz ou subordinada.
  • USER_PROJECT_NAMESPACE: o nome do namespace em que o projeto do usuário reside.

Solicitar um certificado usando a CA com o modo ACME desativado

Para criar uma solicitação de certificado com o modo ACME desativado, crie e aplique um recurso CertificateRequest à sua instância isolada do Distributed Cloud. Há duas maneiras de fazer isso:

  • Crie um CertificateResource e inclua uma CSR no recurso.
  • Crie um CertificateResource usando uma chave privada gerada automaticamente pelo GDC e forneça as configurações de certificado como valores personalizados.

Solicitar um certificado usando uma CSR

  1. Crie um recurso CertificateRequest e salve-o como um arquivo YAML chamado cert-request.yaml. Use sua chave privada para criar uma solicitação de assinatura de certificado (CSR) e adicione-a ao seu recurso:

    apiVersion: pki.security.gdc.goog/v1
    kind: CertificateRequest
    metadata:
      name: CERT_REQ_NAME
      namespace: USER_PROJECT_NAMESPACE
    spec:
      certificateAuthorityRef:
        name: CA_NAME
        namespace: USER_PROJECT_NAMESPACE
      csr: CSR
      signedCertificateSecret: SECRET_NAME
    

    Substitua as seguintes variáveis:

    Variável Descrição
    CERT_REQ_NAME O nome do certificado.
    USER_PROJECT_NAMESPACE O nome do namespace em que o projeto do usuário está localizado.
    CA_NAME O nome da CA, que pode ser uma CA raiz ou subordinada.
    CSR A solicitação de assinatura de certificado a ser assinada usando a CA.
    SECRET_NAME O nome do secret do Kubernetes que contém a chave privada e o certificado de CA assinado.
  2. Aplique o recurso personalizado à sua instância do Distributed Cloud:

    kubectl apply -f cert-request.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 solicitação de certificado está pronta:

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

    O resultado será assim:

    {
      "lastTransitionTime": "2025-01-27T12:22:59Z",
      "message": "Certificate is issued",
      "observedGeneration": 1,
      "reason": "Issued",
      "status": "True",
      "type": "Ready"
    }
    
  4. Consiga o nome do secret do certificado:

    kubectl --kubeconfig MANAGEMENT_API_SERVER_KUBECONFIG -n USER_PROJECT_NAMESPACE get certificaterequest.pki.security.gdc.goog/CERT_REQ_NAME -ojson | jq -r '.spec.signedCertificateSecret'
    

    A saída mostra o SECRET_NAME que contém o certificado assinado:

    test-jwk-1
    

Solicitar um certificado usando uma chave gerada automaticamente

  1. Crie um recurso CertificateRequest e salve-o como um arquivo YAML chamado cert-request.yaml. Preencha os valores escolhidos para o certificado:

    apiVersion: pki.security.gdc.goog/v1
    kind: CertificateRequest
    metadata:
      name: CERT_REQ_NAME
      namespace: USER_PROJECT_NAMESPACE
    spec:
      certificateAuthorityRef:
        name: CA_NAME
        namespace: USER_PROJECT_NAMESPACE
      certificateConfig:
        subjectConfig:
          commonName: COMMON_NAME
          organization: ORGANIZATION
          locality: LOCALITY
          state: STATE
          country: COUNTRY
          dnsNames: 
          - DNS_NAMES
          ipAddresses:
          - IP_ADDRESSES
          rfc822Names:
          - RFC822NAMES
          uris:
          - URIS
      signedCertificateSecret: SECRET_NAME
    

    Substitua COMMON_NAME pelo nome comum do certificado.

    Substitua as seguintes variáveis opcionais. É preciso incluir pelo menos um destes valores no recurso CertificateRequest:

    Variável Descrição
    ORGANIZATION Organização a ser usada no certificado.
    LOCALITY A localidade do certificado.
    STATE Estado ou província a ser usado no certificado.
    COUNTRY O país do certificado.
    DNS_NAMES DNSNames é uma lista de dNSName subjectAltNames a serem definidas no certificado.
    IP_ADDRESS Uma lista de ipAddress subjectAltNames a serem definidos no certificado.
    RFC822_NAMES Uma lista de rfc822Name subjectAltNames a serem definidos no certificado.
    URIS Uma lista de uniformResourceIdentifier subjectAltNames a serem definidos no certificado.
  2. Aplique o recurso personalizado à sua instância do Distributed Cloud:

    kubectl apply -f cert-request.yaml --kubeconfig MANAGEMENT_API_SERVER_KUBECONFIG
    
  3. Verifique se a solicitação de certificado está pronta:

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

    O resultado será assim:

    {
      "lastTransitionTime": "2025-01-27T12:22:59Z",
      "message": "Certificate is issued",
      "observedGeneration": 1,
      "reason": "Issued",
      "status": "True",
      "type": "Ready"
    }
    
  4. Consiga o nome do secret do certificado:

    kubectl --kubeconfig MANAGEMENT_API_SERVER_KUBECONFIG -n USER_PROJECT_NAMESPACE get certificaterequest.pki.security.gdc.goog/CERT_REQ_NAME -ojson | jq -r '.spec.signedCertificateSecret'
    

    A saída mostra o SECRET_NAME que contém o certificado assinado:

    test-jwk-1
    

Listar solicitações de certificado

Use o parâmetro certificaterequests para listar todos os recursos CertificateRequest:

   kubectl --kubeconfig MANAGEMENT_API_SERVER_KUBECONFIG -n USER_PROJECT_NAMESPACE get certificaterequests

A saída será assim:

   NAMESPACE    NAME               READY   AGE
   foo          cert-req           True    30s