Organiza tus páginas con colecciones
Guarda y categoriza el contenido según tus preferencias.
En esta página, se describen los pasos para crear una autoridad certificadora (CA) raíz en Google Distributed Cloud (GDC) aislado.
Una CA raíz, que se encuentra en la parte superior de la jerarquía de la infraestructura de clave pública (PKI), establece la entidad de confianza para la PKI. Para usar certificados dentro de una PKI, los dispositivos, el software y los componentes deben confiar en la AC raíz. Esta configuración garantiza la confianza en todos los certificados emitidos por la CA raíz, lo que permite confiar en la PKI en sí.
Antes de comenzar
Para obtener los permisos que necesitas para crear una entidad certificadora raíz, pídele al administrador de IAM de tu organización que te otorgue el rol de administrador del servicio de entidades certificadoras (certificate-authority-service-admin). Para obtener más información sobre los roles, consulta Definiciones de roles.
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.
Crea una autoridad certificadora raíz
Para crear una CA raíz, aplica un recurso personalizado a tu instancia aislada de Distributed Cloud.
Crea un recurso CertificateAuthority y guárdalo como un archivo YAML llamado root-ca.yaml:
Es el nombre del espacio de nombres en el que reside el proyecto del usuario.
COMMON_NAME
Nombre común del certificado de CA.
DURATION
Es la vida útil solicitada del certificado de CA.
SECRET_NAME
Nombre del secreto de Kubernetes que contiene la clave privada y el certificado de CA firmado.
Las siguientes variables son valores opcionales:
Variable
Descripción
RENEW_BEFORE
Es el tiempo de rotación antes de que venza el certificado de CA.
ORGANIZATION
Organización que se usará en el certificado.
ORGANIZATIONAL_UNITS
Son las unidades organizativas que se usarán en el certificado.
COUNTRIES
Son los países que se usarán en el certificado.
LOCALITIES
Son las ciudades que se usarán en el certificado.
PROVINCES
Estados o provincias que se usarán en el certificado.
STREET_ADDRESSES
Son las direcciones de la calle que se usarán en el certificado.
POSTAL_CODES
Códigos postales que se usarán en el certificado.
EXTENDED_KEY_USAGE
Es el uso extendido de la clave del certificado. Si se proporciona, los valores permitidos son serverAuth y clientAuth.
KEY_ALGORITHYM
Es el algoritmo de clave privada que se usa para este certificado. Los valores permitidos son RSA, Ed25519 o ECDSA. Si no se proporciona el tamaño, el valor predeterminado es 256 para ECDSA y 2,048 para RSA. Se ignora el tamaño de la clave para Ed25519.
KEY_SIZE
El tamaño, en bits, de la clave privada de este certificado depende del algoritmo. RSA permite 2048, 3072, 4096 u 8192 (2048 de forma predeterminada). ECDSA permite 256, 384 o 521 (256 de forma predeterminada).
Ed25519 ignora el tamaño.
ACME_ENABLED
Si se configura en true, la CA se ejecuta en modo ACME y genera la URL del servidor de ACME. Luego, puedes usar el cliente y el protocolo de ACME para administrar los certificados.
Aplica el recurso personalizado a tu instancia de Distributed Cloud:
[[["Fácil de comprender","easyToUnderstand","thumb-up"],["Resolvió mi problema","solvedMyProblem","thumb-up"],["Otro","otherUp","thumb-up"]],[["Difícil de entender","hardToUnderstand","thumb-down"],["Información o código de muestra incorrectos","incorrectInformationOrSampleCode","thumb-down"],["Faltan la información o los ejemplos que necesito","missingTheInformationSamplesINeed","thumb-down"],["Problema de traducción","translationIssue","thumb-down"],["Otro","otherDown","thumb-down"]],["Última actualización: 2025-09-04 (UTC)"],[],[],null,["# Create a root certificate authority\n\nThis page describes the steps to create a root certificate authority (CA) in\nGoogle Distributed Cloud (GDC) air-gapped.\n\nA root CA, which sits atop the public key infrastructure (PKI) hierarchy,\nestablishes the trust anchor for the PKI. To use certificates within a PKI,\ndevices, software, and components must trust the root CA. This configuration\nensures trust in all certificates issued by the root CA, thereby enabling trust\nin the PKI itself.\n\nBefore you begin\n----------------\n\nTo get the permissions you need to create a root certificate authority, ask your\nOrganization IAM Admin to grant you the Certificate Authority Service Admin\n(`certificate-authority-service-admin`) role. For more information on roles, see\n[Role definitions](/distributed-cloud/hosted/docs/latest/gdch/application/ao-user/iam/role-definitions).\n\n### Get the kubeconfig file\n\nTo run commands against the Management API server, ensure you have the following\nresources:\n\n1. [Sign in and generate](/distributed-cloud/hosted/docs/latest/gdch/application/ao-user/iam/sign-in#cli) the\n kubeconfig file for the Management API server if you don't have one.\n\n2. Use the path to the kubeconfig file of the Management API server to replace\n \u003cvar translate=\"no\"\u003eMANAGEMENT_API_SERVER_KUBECONFIG\u003c/var\u003e in these\n instructions.\n\nCreate a root certificate authority\n-----------------------------------\n\nTo create a root CA, apply a custom resource to your Distributed Cloud\nair-gapped instance.\n\n1. Create a `CertificateAuthority` resource and save it as a YAML file called\n `root-ca.yaml`:\n\n apiVersion: pki.security.gdc.goog/v1\n kind: CertificateAuthority\n metadata:\n name: \u003cvar translate=\"no\"\u003e\u003cspan class=\"devsite-syntax-l devsite-syntax-l-Scalar devsite-syntax-l-Scalar-Plain\"\u003eROOT_CA_NAME\u003c/span\u003e\u003c/var\u003e\n namespace: \u003cvar translate=\"no\"\u003e\u003cspan class=\"devsite-syntax-l devsite-syntax-l-Scalar devsite-syntax-l-Scalar-Plain\"\u003eUSER_PROJECT_NAMESPACE\u003c/span\u003e\u003c/var\u003e\n spec:\n caProfile:\n commonName: \u003cvar translate=\"no\"\u003e\u003cspan class=\"devsite-syntax-l devsite-syntax-l-Scalar devsite-syntax-l-Scalar-Plain\"\u003eCOMMON_NAME\u003c/span\u003e\u003c/var\u003e\n duration: \u003cvar translate=\"no\"\u003e\u003cspan class=\"devsite-syntax-l devsite-syntax-l-Scalar devsite-syntax-l-Scalar-Plain\"\u003eDURATION\u003c/span\u003e\u003c/var\u003e\n renewBefore: \u003cvar translate=\"no\"\u003e\u003cspan class=\"devsite-syntax-l devsite-syntax-l-Scalar devsite-syntax-l-Scalar-Plain\"\u003eRENEW_BEFORE\u003c/span\u003e\u003c/var\u003e\n organizations:\n - \u003cvar translate=\"no\"\u003e\u003cspan class=\"devsite-syntax-l devsite-syntax-l-Scalar devsite-syntax-l-Scalar-Plain\"\u003eORGANIZATION\u003c/span\u003e\u003c/var\u003e\n organizationalUnits:\n - \u003cvar translate=\"no\"\u003e\u003cspan class=\"devsite-syntax-l devsite-syntax-l-Scalar devsite-syntax-l-Scalar-Plain\"\u003eORGANIZATIONAL_UNITS\u003c/span\u003e\u003c/var\u003e\n countries:\n - \u003cvar translate=\"no\"\u003e\u003cspan class=\"devsite-syntax-l devsite-syntax-l-Scalar devsite-syntax-l-Scalar-Plain\"\u003eCOUNTRIES\u003c/span\u003e\u003c/var\u003e\n localities:\n - \u003cvar translate=\"no\"\u003e\u003cspan class=\"devsite-syntax-l devsite-syntax-l-Scalar devsite-syntax-l-Scalar-Plain\"\u003eLOCALTIES\u003c/span\u003e\u003c/var\u003e\n provinces:\n - \u003cvar translate=\"no\"\u003e\u003cspan class=\"devsite-syntax-l devsite-syntax-l-Scalar devsite-syntax-l-Scalar-Plain\"\u003ePROVINCES\u003c/span\u003e\u003c/var\u003e\n streetAddresses:\n - \u003cvar translate=\"no\"\u003e\u003cspan class=\"devsite-syntax-l devsite-syntax-l-Scalar devsite-syntax-l-Scalar-Plain\"\u003eSTREET_ADDRESSES\u003c/span\u003e\u003c/var\u003e\n postalCodes:\n - \u003cvar translate=\"no\"\u003e\u003cspan class=\"devsite-syntax-l devsite-syntax-l-Scalar devsite-syntax-l-Scalar-Plain\"\u003ePOSTAL_CODES\u003c/span\u003e\u003c/var\u003e\n caCertificate:\n selfSignedCA: {}\n certificateProfile:\n keyUsage:\n - digitalSignature\n - keyCertSign\n - crlSign\n extendedKeyUsage:\n - \u003cvar translate=\"no\"\u003e\u003cspan class=\"devsite-syntax-l devsite-syntax-l-Scalar devsite-syntax-l-Scalar-Plain\"\u003eEXTENDED_KEY_USAGE\u003c/span\u003e\u003c/var\u003e\n secretConfig:\n secretName: \u003cvar translate=\"no\"\u003e\u003cspan class=\"devsite-syntax-l devsite-syntax-l-Scalar devsite-syntax-l-Scalar-Plain\"\u003eSECRET_NAME\u003c/span\u003e\u003c/var\u003e\n privateKeyConfig:\n algorithm: \u003cvar translate=\"no\"\u003e\u003cspan class=\"devsite-syntax-l devsite-syntax-l-Scalar devsite-syntax-l-Scalar-Plain\"\u003eKEY_ALGORITHM\u003c/span\u003e\u003c/var\u003e\n size: \u003cvar translate=\"no\"\u003e\u003cspan class=\"devsite-syntax-l devsite-syntax-l-Scalar devsite-syntax-l-Scalar-Plain\"\u003eKEY_SIZE\u003c/span\u003e\u003c/var\u003e\n acme:\n enabled: \u003cvar translate=\"no\"\u003e\u003cspan class=\"devsite-syntax-l devsite-syntax-l-Scalar devsite-syntax-l-Scalar-Plain\"\u003eACME_ENABLED\u003c/span\u003e\u003c/var\u003e\n\n Replace the following variables:\n\n The following variables are optional values:\n\n \u003cbr /\u003e\n\n2. Apply the custom resource to your Distributed Cloud instance:\n\n kubectl apply -f root-ca.yaml --kubeconfig \u003cvar translate=\"no\"\u003eMANAGEMENT_API_SERVER_KUBECONFIG\u003c/var\u003e\n\n Replace \u003cvar translate=\"no\"\u003eMANAGEMENT_API_SERVER_KUBECONFIG\u003c/var\u003e with the\n path to the kubeconfig file of the Management API server.\n3. Verify the readiness of the root CA. It normally takes around 40 minutes for\n the CA to become ready:\n\n kubectl --kubeconfig \u003cvar translate=\"no\"\u003eMANAGEMENT_API_SERVER_KUBECONFIG\u003c/var\u003e -n \u003cvar translate=\"no\"\u003eUSER_PROJECT_NAMESPACE\u003c/var\u003e get certificateauthority.pki.security.gdc.goog/\u003cvar translate=\"no\"\u003eROOT_CA_NAME\u003c/var\u003e -ojson | jq -r ' \n .status.conditions[] | select( .type as $id | \"Ready\" | index($id))\n\n The output looks similar to the following: \n\n {\n \"lastTransitionTime\": \"2025-01-24T17:09:19Z\",\n \"message\": \"CA reconciled\",\n \"observedGeneration\": 2,\n \"reason\": \"Ready\",\n \"status\": \"True\",\n \"type\": \"Ready\"\n }\n\nList CAs\n--------\n\nTo list all of the Certificate Authority Service resources in your\nDistributed Cloud air-gapped instance, do the following:\n\nUse the `certificateauthorities` parameter to list all `CertificateAuthority`\nresources: \n\n kubectl --kubeconfig \u003cvar translate=\"no\"\u003eMANAGEMENT_API_SERVER_KUBECONFIG\u003c/var\u003e -n \u003cvar translate=\"no\"\u003eUSER_PROJECT_NAMESPACE\u003c/var\u003e get certificateauthorities\n\nThe output looks similar to the following: \n\n NAMESPACE NAME READY REASON AGE\n foo root-ca True Ready 7h24m\n foo sub-ca True Ready 7h24m"]]