Solicitar un certificado

En esta página se describen los pasos para solicitar un certificado mediante el Servicio de Autoridades de Certificación.

Para establecer la confianza y proteger la comunicación en tu air gap de Google Distributed Cloud (GDC), solicita un certificado habilitado o inhabilitado para ACME al servicio de autoridad de certificación.

Antes de empezar

Para obtener los permisos que necesitas para solicitar un certificado, pide al administrador de gestión de identidades y accesos de tu organización que te conceda el rol Administrador del servicio de autoridad de certificación (certificate-authority-service-admin).

Obtener el archivo kubeconfig

Para ejecutar comandos en el servidor de la API Management, asegúrate de tener los siguientes recursos:

Inicia sesión y genera el archivo kubeconfig del servidor de la API Management si no tienes uno.

Usa la ruta al archivo kubeconfig del servidor de la API Management para sustituir MANAGEMENT_API_SERVER_KUBECONFIG en estas instrucciones.

Solicitar un certificado mediante una CA con el modo ACME habilitado

Si la autoridad de certificación está alojada en modo ACME, mostrará la URL del servidor ACME en su estado cuando esté lista.

Obtén la URL del servidor ACME de la AC de tu entorno de Distributed Cloud:

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

Haz los cambios siguientes:

  • CA_NAME: el nombre de la CA, que puede ser una CA raíz o una sub-CA.
  • USER_PROJECT_NAMESPACE: nombre del espacio de nombres en el que reside el proyecto del usuario.

Solicitar un certificado mediante una AC con el modo ACME inhabilitado

Para crear una solicitud de certificado con el modo ACME inhabilitado, debes crear y aplicar un recurso CertificateRequest a tu instancia aislada de Distributed Cloud. Hay dos modos de hacerlo:

  • Crea un CertificateResource e incluye un CSR en el recurso.
  • Crea un CertificateResource con una clave privada generada automáticamente por GDC y proporciona las configuraciones del certificado como valores personalizados.

Solicitar un certificado mediante una CSR

  1. Crea un recurso CertificateRequest y guárdalo como un archivo YAML llamado cert-request.yaml. Usa tu clave privada para crear una solicitud de firma de certificado (CSR) y añádela a tu 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
    

    Sustituye las siguientes variables:

    Variable Descripción
    CERT_REQ_NAME El nombre del certificado.
    USER_PROJECT_NAMESPACE El nombre del espacio de nombres en el que reside el proyecto del usuario.
    CA_NAME El nombre de la CA, que puede ser una CA raíz o una sub-CA.
    CSR La solicitud de firma de certificado que se va a firmar con la autoridad de certificación.
    SECRET_NAME El nombre del secreto de Kubernetes que contiene la clave privada y el certificado de CA firmado.
  2. Aplica el recurso personalizado a tu instancia de Distributed Cloud:

    kubectl apply -f cert-request.yaml --kubeconfig MANAGEMENT_API_SERVER_KUBECONFIG
    

    Sustituye MANAGEMENT_API_SERVER_KUBECONFIG por la ruta del archivo kubeconfig del servidor de la API Management.

  3. Verifica que la solicitud de certificado esté lista:

    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))'
    

    El resultado debería ser similar al siguiente:

    {
      "lastTransitionTime": "2025-01-27T12:22:59Z",
      "message": "Certificate is issued",
      "observedGeneration": 1,
      "reason": "Issued",
      "status": "True",
      "type": "Ready"
    }
    
  4. Obtén el nombre del secreto del 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'
    

    El resultado muestra el SECRET_NAME que contiene el certificado firmado:

    test-jwk-1
    

Solicitar un certificado con una clave generada automáticamente

  1. Crea un recurso CertificateRequest y guárdalo como un archivo YAML llamado cert-request.yaml. Rellene los valores elegidos para el 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
    

    Sustituye COMMON_NAME por el nombre común del certificado.

    Sustituye las siguientes variables opcionales. Debe incluir al menos uno de estos valores en el recurso CertificateRequest:

    Variable Descripción
    ORGANIZATION Organización que se va a usar en el certificado.
    LOCALITY La localidad del certificado.
    STATE Estado o provincia que se usará en el certificado.
    COUNTRY El país del certificado.
    DNS_NAMES DNSNames es una lista de dNSName subjectAltNames que se debe definir en el certificado.
    IP_ADDRESS Lista de ipAddress subjectAltNames que se va a definir en el certificado.
    RFC822_NAMES Lista de rfc822Name subjectAltNames que se va a definir en el certificado.
    URIS Lista de uniformResourceIdentifier subjectAltNames que se va a definir en el certificado.
  2. Aplica el recurso personalizado a tu instancia de Distributed Cloud:

    kubectl apply -f cert-request.yaml --kubeconfig MANAGEMENT_API_SERVER_KUBECONFIG
    
  3. Verifica que la solicitud de certificado esté lista:

    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))'
    

    El resultado debería ser similar al siguiente:

    {
      "lastTransitionTime": "2025-01-27T12:22:59Z",
      "message": "Certificate is issued",
      "observedGeneration": 1,
      "reason": "Issued",
      "status": "True",
      "type": "Ready"
    }
    
  4. Obtén el nombre del secreto del 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'
    

    El resultado muestra el SECRET_NAME que contiene el certificado firmado:

    test-jwk-1
    

Mostrar solicitudes de certificados

Usa el parámetro certificaterequests para enumerar todos los recursos CertificateRequest:

   kubectl --kubeconfig MANAGEMENT_API_SERVER_KUBECONFIG -n USER_PROJECT_NAMESPACE get certificaterequests

El resultado es similar al siguiente:

   NAMESPACE    NAME               READY   AGE
   foo          cert-req           True    30s