Peça um certificado

Esta página descreve os passos para pedir um certificado através do serviço de autoridade de certificação.

Para estabelecer confiança e comunicação segura no seu Google Distributed Cloud (GDC) isolado, peça um certificado com ou sem ACME ao serviço de autoridade de certificação.

Antes de começar

Antes de poder pedir um certificado, certifique-se de que tem as autorizações necessárias e um ficheiro kubeconfig.

Autorizações necessárias

Para receber as autorizações necessárias para pedir um certificado, peça ao administrador do IAM da sua organização para lhe conceder a função de requerente de certificado do serviço de AC (certificate-authority-service-certificate-requester). Para mais informações sobre as funções, consulte o artigo Definições de funções.

Obtenha o ficheiro kubeconfig

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

  1. Inicie sessão e gere o ficheiro kubeconfig para o servidor da API Management, se não tiver um.

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

Peça um certificado através da AC com o modo ACME ativado

Se a autoridade de certificação estiver alojada no modo ACME, apresenta o URL do servidor ACME no respetivo estado depois de ficar pronta.

Recolha o URL do servidor ACME da AC a partir do seu ambiente de nuvem distribuída:

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

Substitua o seguinte:

  • CA_NAME: O nome da AC, que pode ser uma AC raiz ou secundária.
  • USER_PROJECT_NAMESPACE: o nome do espaço de nomes onde reside o projeto do utilizador.

Peça um certificado através da AC com o modo ACME desativado

Para criar um pedido de certificado com o modo ACME desativado, tem de criar e aplicar um recurso CertificateRequest à sua instância isolada do Distributed Cloud. Existem duas formas de o fazer:

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

Peça um certificado através de um CSR

  1. Crie um recurso CertificateRequest e guarde-o como um ficheiro YAML denominado cert-request.yaml. Use a sua chave privada para criar um pedido de assinatura de certificado (CSR) e adicione-o ao seu recurso.

    Opcionalmente, pode emitir o certificado com um conjunto pré-configurado de parâmetros X.509 introduzindo o nome do modelo no campo certificateTemplate.

    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
      certificateTemplate: TEMPLATE_NAME
      signedCertificateSecret: SECRET_NAME
      notBefore: VALIDITY_START_TIME
      notAfter: VALIDITY_END_TIME
      subjectOverride: SUBJECT_OVERRIDE
    

    Substitua as seguintes variáveis:

    Variável Descrição
    CERT_REQ_NAME O nome do certificado.
    USER_PROJECT_NAMESPACE O nome do espaço de nomes onde reside o projeto do utilizador.
    CA_NAME O nome da AC, que pode ser uma AC raiz ou uma sub-AC.
    CSR O pedido de assinatura de certificado para assinar com a CA.
    SECRET_NAME O nome do segredo do Kubernetes que contém a chave privada e o certificado da CA assinado.

    Substitua as seguintes variáveis opcionais:

    Variável Descrição
    TEMPLATE_NAME O nome do modelo de certificado predefinido que quer usar. Para ver uma lista dos modelos disponíveis e detalhes relativos a conflitos, consulte o artigo Modelos de certificados predefinidos.
    VALIDITY_START_TIME A hora a partir da qual o certificado é considerado válido. Este valor tem de estar no formato YYYY-MM-DDTHH:MM:SSZ (por exemplo, 2025-10-19T21:45:30Z). Se não for definido, o certificado é válido imediatamente após a emissão.
    VALIDITY_END_TIME A hora em que o certificado expira. Este valor tem de estar no formato YYYY-MM-DDTHH:MM:SSZ (por exemplo, 2026-01-17T18:25:40Z). Se não for definido, o certificado expira 90 dias após a hora de início.
    SUBJECT_OVERRIDE Um assunto personalizado a usar no certificado emitido, substituindo as informações do assunto no CSR. Indique este valor como o assunto X.509 codificado em DER ASN.1 não processado.
  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 ficheiro kubeconfig do servidor da API Management.

  3. Verifique a prontidão do pedido de certificado:

    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 é semelhante ao seguinte:

    {
      "lastTransitionTime": "2025-01-27T12:22:59Z",
      "message": "Certificate is issued",
      "observedGeneration": 1,
      "reason": "Issued",
      "status": "True",
      "type": "Ready"
    }
    
  4. Obtenha 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
    

Peça um certificado com uma chave gerada automaticamente

  1. Crie um recurso CertificateRequest e guarde-o como um ficheiro YAML denominado cert-request.yaml. Preencha os valores escolhidos para o certificado.

    Opcionalmente, pode emitir o certificado com um conjunto pré-configurado de parâmetros X.509 introduzindo o nome do modelo no campo certificateTemplate.

    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
      certificateTemplate: TEMPLATE_NAME
      signedCertificateSecret: SECRET_NAME
      notBefore: VALIDITY_START_TIME
      notAfter: VALIDITY_END_TIME
      subjectOverride: SUBJECT_OVERRIDE
    

    Substitua as seguintes variáveis:

    Variável Descrição
    CERT_REQ_NAME O nome do certificado.
    USER_PROJECT_NAMESPACE O nome do espaço de nomes onde reside o projeto do utilizador.
    CA_NAME O nome da AC, que pode ser uma AC raiz ou uma sub-AC.
    SECRET_NAME O nome do segredo do Kubernetes que contém a chave privada e o certificado da CA assinado.

    Substitua as seguintes variáveis opcionais. Tem de incluir, pelo menos, um dos campos do bloco spec.certificateConfig.subjectConfig do recurso CertificateRequest:

    Variável Descrição
    COMMON_NAME O nome comum do certificado.
    ORGANIZATION Organização a usar no certificado.
    LOCALITY A localidade do certificado.
    STATE Estado ou província a usar no certificado.
    COUNTRY O país do certificado.
    DNS_NAMES DNSNames é uma lista de dNSName subjectAltNames a definir no certificado.
    IP_ADDRESS Uma lista de ipAddress subjectAltNames a definir no certificado.
    RFC822_NAMES Uma lista de rfc822Name subjectAltNames a definir no certificado.
    URIS Uma lista de uniformResourceIdentifier subjectAltNames a serem definidos no certificado.
    TEMPLATE_NAME O nome do modelo de certificado predefinido que quer usar. Para ver uma lista dos modelos disponíveis e detalhes relativos a conflitos, consulte o artigo Modelos de certificados predefinidos.
    VALIDITY_START_TIME A hora a partir da qual o certificado é considerado válido. Este valor tem de estar no formato YYYY-MM-DDTHH:MM:SSZ (por exemplo, 2025-10-19T21:45:30Z). Se não for definido, o certificado é válido imediatamente após a emissão.
    VALIDITY_END_TIME A hora em que o certificado expira. Este valor tem de estar no formato YYYY-MM-DDTHH:MM:SSZ (por exemplo, 2026-01-17T18:25:40Z). Se não for definido, o certificado expira 90 dias após a hora de início.
    SUBJECT_OVERRIDE Um assunto personalizado a usar no certificado emitido, substituindo as informações do assunto no CSR. Indique este valor como o assunto X.509 codificado em DER ASN.1 não processado.
  2. Aplique o recurso personalizado à sua instância do Distributed Cloud:

    kubectl apply -f cert-request.yaml --kubeconfig MANAGEMENT_API_SERVER_KUBECONFIG
    
  3. Verifique a prontidão do pedido de certificado:

    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 é semelhante ao seguinte:

    {
      "lastTransitionTime": "2025-01-27T12:22:59Z",
      "message": "Certificate is issued",
      "observedGeneration": 1,
      "reason": "Issued",
      "status": "True",
      "type": "Ready"
    }
    
  4. Obtenha 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
    

Liste os pedidos de certificados

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

   kubectl --kubeconfig MANAGEMENT_API_SERVER_KUBECONFIG -n USER_PROJECT_NAMESPACE get certificaterequests

O resultado tem um aspeto semelhante ao seguinte:

   NAMESPACE    NAME               READY   AGE
   foo          cert-req           True    30s