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
Antes de solicitar un certificado, asegúrate de que tienes los permisos necesarios y un archivo kubeconfig.
Permisos obligatorios
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 Solicitante del certificado del Servicio de Autoridades de Certificación (certificate-authority-service-certificate-requester). Para obtener más información sobre los roles, consulta el artículo Definiciones de roles.
Obtener el archivo kubeconfig
Para ejecutar comandos en el servidor de la API Management, haz lo siguiente:
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 de gestión para sustituir
MANAGEMENT_API_SERVER_KUBECONFIGen 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: Nombre de la AC, que puede ser una AC raíz o una AC secundaria.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
CertificateResourcee incluye un CSR en el recurso. - Crea un
CertificateResourcecon una clave privada generada automáticamente por GDC y proporciona las configuraciones del certificado como valores personalizados.
Solicitar un certificado mediante una CSR
Crea un recurso
CertificateRequesty guárdalo como un archivo YAML llamadocert-request.yaml. Usa tu clave privada para crear una solicitud de firma de certificado (CSR) y añádela a tu recurso.También puedes emitir el certificado con un conjunto preconfigurado de parámetros X.509 introduciendo el nombre de la plantilla en el 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_OVERRIDESustituye 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 Nombre de la AC, que puede ser una AC raíz o una AC secundaria. 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. Sustituye las siguientes variables opcionales:
Variable Descripción TEMPLATE_NAME El nombre de la plantilla de certificado predefinida que quieras usar. Para ver una lista de las plantillas disponibles y los detalles sobre los conflictos, consulta Plantillas de certificados predefinidas. VALIDITY_START_TIME La hora a partir de la cual se considera que el certificado es válido. Este valor debe tener el formato YYYY-MM-DDTHH:MM:SSZ(por ejemplo,2025-10-19T21:45:30Z). Si no se define, el certificado será válido inmediatamente después de emitirse.VALIDITY_END_TIME La hora a la que caduca el certificado. Este valor debe tener el formato YYYY-MM-DDTHH:MM:SSZ(por ejemplo,2026-01-17T18:25:40Z). Si no se define, el certificado caduca 90 días después de la hora de inicio.SUBJECT_OVERRIDE Un asunto personalizado que se usará en el certificado emitido, que anula la información del asunto de la CSR. Proporcione este valor como el asunto X.509 sin procesar y codificado en DER de ASN.1. Aplica el recurso personalizado a tu instancia de Distributed Cloud:
kubectl apply -f cert-request.yaml --kubeconfig MANAGEMENT_API_SERVER_KUBECONFIGSustituye
MANAGEMENT_API_SERVER_KUBECONFIGpor la ruta del archivo kubeconfig del servidor de la API Management.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" }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_NAMEque contiene el certificado firmado:test-jwk-1
Solicitar un certificado con una clave generada automáticamente
Crea un recurso
CertificateRequesty guárdalo como un archivo YAML llamadocert-request.yaml. Rellene los valores elegidos para el certificado.También puedes emitir el certificado con un conjunto preconfigurado de parámetros X.509 introduciendo el nombre de la plantilla en el 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_OVERRIDESustituye 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 Nombre de la AC, que puede ser una AC raíz o una AC secundaria. SECRET_NAME El nombre del secreto de Kubernetes que contiene la clave privada y el certificado de CA firmado. Sustituye las siguientes variables opcionales. Debe incluir al menos uno de los campos del bloque
spec.certificateConfig.subjectConfigdel recursoCertificateRequest:Variable Descripción COMMON_NAME El nombre común del certificado. 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 DNSNameses una lista dedNSName subjectAltNamesque se debe definir en el certificado.IP_ADDRESS Lista de ipAddress subjectAltNamesque se va a definir en el certificado.RFC822_NAMES Lista de rfc822Name subjectAltNamesque se va a definir en el certificado.URIS Lista de uniformResourceIdentifier subjectAltNamesque se va a definir en el certificado.TEMPLATE_NAME El nombre de la plantilla de certificado predefinida que quieras usar. Para ver una lista de las plantillas disponibles y los detalles sobre los conflictos, consulta Plantillas de certificados predefinidas. VALIDITY_START_TIME La hora a partir de la cual se considera que el certificado es válido. Este valor debe tener el formato YYYY-MM-DDTHH:MM:SSZ(por ejemplo,2025-10-19T21:45:30Z). Si no se define, el certificado será válido inmediatamente después de emitirse.VALIDITY_END_TIME La hora a la que caduca el certificado. Este valor debe tener el formato YYYY-MM-DDTHH:MM:SSZ(por ejemplo,2026-01-17T18:25:40Z). Si no se define, el certificado caduca 90 días después de la hora de inicio.SUBJECT_OVERRIDE Un asunto personalizado que se usará en el certificado emitido, que anula la información del asunto de la CSR. Proporcione este valor como el asunto X.509 sin procesar y codificado en DER de ASN.1. Aplica el recurso personalizado a tu instancia de Distributed Cloud:
kubectl apply -f cert-request.yaml --kubeconfig MANAGEMENT_API_SERVER_KUBECONFIGVerifica 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" }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_NAMEque 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