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
Crea un recurso
CertificateRequest
y 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: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. 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.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_NAME
que contiene el certificado firmado:test-jwk-1
Solicitar un certificado con una clave generada automáticamente
Crea un recurso
CertificateRequest
y guárdalo como un archivo YAML llamadocert-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 dedNSName 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.Aplica el recurso personalizado a tu instancia de Distributed Cloud:
kubectl apply -f cert-request.yaml --kubeconfig MANAGEMENT_API_SERVER_KUBECONFIG
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_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