En esta página, se describen los pasos para solicitar un certificado con Certificate Authority Service.
Para establecer confianza y comunicación segura dentro de tu Google Distributed Cloud (GDC) aislado, solicita un certificado habilitado o inhabilitado para ACME desde Certificate Authority Service.
Antes de comenzar
Para obtener los permisos que necesitas para solicitar un certificado, pídele al administrador de IAM de tu organización que te otorgue el rol de administrador del servicio de la autoridad certificadora (certificate-authority-service-admin
).
Obtén el archivo kubeconfig
Para ejecutar comandos en el servidor de la API de Management, asegúrate de tener los siguientes recursos:
Accede y genera el archivo kubeconfig para el servidor de la API de Management si no tienes uno.
Usa la ruta de acceso al archivo kubeconfig del servidor de la API de administración para reemplazar MANAGEMENT_API_SERVER_KUBECONFIG
en estas instrucciones.
Solicita un certificado con la CA y el modo ACME habilitado
Si la autoridad certificadora se aloja en el modo ACME, genera la URL del servidor ACME en su estado después de que esté lista.
Recopila la URL del servidor de la AC de ACME de tu entorno de Distributed Cloud:
kubectl get certificateauthorities CA_NAME -n USER_PROJECT_NAMESPACE -ojson | jq -r '.status.acme.uri'
Reemplaza lo siguiente:
CA_NAME
: Es el nombre de la CA, que puede ser una CA raíz o una sub-CA.USER_PROJECT_NAMESPACE
: Es el nombre del espacio de nombres en el que reside el proyecto del usuario.
Solicita un certificado a la CA 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. Existen dos maneras de hacerlo:
- Crea un
CertificateResource
y, luego, incluye un CSR en el recurso. - Crea un
CertificateResource
con una clave privada generada automáticamente por el GDC y proporciona los parámetros de configuración del certificado como valores personalizados.
Solicita un certificado con 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 agrégala 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
Reemplaza las siguientes variables:
Variable Descripción CERT_REQ_NAME Es el nombre del certificado. USER_PROJECT_NAMESPACE Es el nombre del espacio de nombres en el que reside el proyecto del usuario. CA_NAME Nombre de la CA, que puede ser una CA raíz o una sub-CA. CSR Es la solicitud de firma de certificado que se firmará con la CA. SECRET_NAME 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
Reemplaza
MANAGEMENT_API_SERVER_KUBECONFIG
por la ruta de acceso al archivo kubeconfig del servidor de la API de administración.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 es similar a este:
{ "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
Solicita un certificado con una clave generada automáticamente
Crea un recurso
CertificateRequest
y guárdalo como un archivo YAML llamadocert-request.yaml
. Propaga 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
Reemplaza
COMMON_NAME
por el nombre común del certificado.Reemplaza las siguientes variables opcionales. Debes incluir al menos uno de estos valores en el recurso
CertificateRequest
:Variable Descripción ORGANIZATION Organización que se usará en el certificado. LOCALITY Es la localidad del certificado. STATE Estado o provincia que se usará en el certificado. COUNTRY Es el país del certificado. DNS_NAMES DNSNames
es una lista dedNSName subjectAltNames
que se configurarán en el certificado.IP_ADDRESS Es una lista de ipAddress subjectAltNames
que se configurarán en el certificado.RFC822_NAMES Es una lista de rfc822Name subjectAltNames
que se configurarán en el certificado.URIS Es una lista de uniformResourceIdentifier subjectAltNames
que se configurarán 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 es similar a este:
{ "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
Cómo mostrar las solicitudes de certificados
Usa el parámetro certificaterequests
para enumerar todos los recursos de 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