Usa una autoridad certificadora (AC) administrada por el cliente

En esta página, se describe cómo usar la opción de autoridad de certificación (AC) administrada por el cliente como el modo de AC del servidor para tu instancia de Cloud SQL.

Descripción general

Con la opción de CA administrada por el cliente, configuras tu propio grupo de CA y CA en Certificate Authority Service (servicio de CA). Cuando seleccionas la opción de AC administrada por el cliente, configuras la jerarquía de la AC y administras la rotación de los certificados de la AC para tus instancias de Cloud SQL.

Antes de configurar una instancia de Cloud SQL para usar la opción de CA administrada por el cliente, debes crear un grupo de CA en la misma región que tu instancia y, al menos, una CA en ese grupo con el servicio de CA. La CA puede ser una CA raíz o una CA subordinada. También tienes la opción de crear una CA subordinada en el servicio de CA y, luego, encadenarla a una CA raíz externa. Cuando configuras tu instancia, especificas el grupo de AC. Tu solicitud se delega a una cuenta de servicio específica del proyecto, que tiene permiso para usar el grupo de CA. La cuenta de servicio solicita una CA del grupo, y Cloud SQL usa esa CA para firmar el certificado del servidor de la instancia.

Para el modo de CA del servidor de tu instancia en Cloud SQL, puedes elegir entre las siguientes tres opciones:

  • CA interna por instancia
  • AC compartida administrada por Google
  • AC administrada por el cliente

Puedes elegir la opción de AC administrada por el cliente si necesitas administrar tu propia AC por motivos de cumplimiento. Para obtener más información sobre el uso de las otras opciones, consulta Autoriza con certificados SSL/TLS.

Flujo de trabajo

Para usar la opción de CA administrada por el cliente, el flujo de trabajo es el siguiente:

  1. Crea una cuenta de servicio para tu proyecto de Cloud SQL.
  2. Crea un grupo de CA en el servicio de CA.
  3. Crea una CA en el Servicio de CA.
  4. Configura la instancia de Cloud SQL para que use la CA. Cuando configuras tu instancia, delegas el permiso a la cuenta de servicio para firmar el certificado del servidor con el grupo de AC que creaste.

Antes de comenzar

Antes de usar la opción de CA administrada por el cliente, asegúrate de cumplir con los siguientes requisitos.

Roles obligatorios

Para obtener los permisos que necesitas para crear una cuenta de servicio específica de Cloud SQL, pídele a tu administrador que te otorgue el rol de IAM de Creador de cuentas de servicio (roles/iam.serviceAccountCreator) en cada proyecto individual. Para obtener más información sobre cómo otorgar roles, consulta Administra el acceso a proyectos, carpetas y organizaciones.

También puedes obtener los permisos necesarios a través de roles personalizados o cualquier otro rol predefinido.

Para obtener los permisos que necesitas para crear un grupo de CA y una CA, pídele a tu administrador que te otorgue el rol de IAM de CA Service Operation Manager(roles/privateca.caManager) en CA Service. Para obtener más información sobre cómo otorgar roles, consulta Administra el acceso a proyectos, carpetas y organizaciones.

También puedes obtener los permisos necesarios a través de roles personalizados o cualquier otro rol predefinido.

Crea una cuenta de servicio específica del proyecto

En el proyecto en el que planeas crear tus instancias de Cloud SQL, crea una cuenta de servicio dedicada que controlará la solicitud para crear y firmar los certificados del servidor para tus instancias de Cloud SQL.

gcloud

Ejecuta el siguiente comando para crear una cuenta de servicio para tu proyecto de Cloud SQL:

gcloud beta services identity create \
  --service=sqladmin.googleapis.com \
  --project=PROJECT_ID

Reemplaza PROJECT_ID por el ID del proyecto en el que planeas crear tus instancias de Cloud SQL.

El comando crea una cuenta de servicio llamada service-PROJECT_ID@gcp-sa-cloud-sql.iam.gserviceaccount.com en el proyecto. Toma nota del nombre de la cuenta de servicio Solicitante del certificado de servicio de CA.

Crear grupo de CA

Crea un grupo de CA en el servicio de CA.

Puedes crear un grupo de CA en el mismo proyecto en el que planeas crear tus instancias de Cloud SQL o en otro proyecto. Sin embargo, si creas el grupo de CA en un proyecto diferente, es posible que los Controles del servicio de VPC te impidan crear instancias de Cloud SQL según la política de la organización. Para solucionar el problema, asegúrate de que el proyecto que aloja el grupo de AC y la AC, y el proyecto que aloja Cloud SQL pertenezcan al mismo perímetro de servicio. Para obtener más información, consulta Perímetros de servicio y Administra perímetros de servicio.

Para crear un grupo de CA, sigue las instrucciones en Crea un grupo de CA. Puedes aceptar los valores predeterminados para el grupo de CA con los siguientes parámetros de configuración obligatorios:

  • Crea el grupo de CA en la misma región en la que planeas crear tu instancia de Cloud SQL. Para obtener una lista de las regiones compatibles con Cloud SQL, consulta Regiones.
  • Permite solicitudes de certificados basadas en la configuración.
  • Permite nombres de DNS en nombres alternativos de sujeto (SAN). Cuando configures las restricciones de identidad del grupo de entidades de certificación, no establezcas restricciones en el formato de los nombres de DNS que puedan entrar en conflicto con lo que Cloud SQL podría agregar al SAN.

Proporciona a la cuenta de servicio acceso al grupo de CA

Para asegurarte de que la cuenta de servicio tenga los permisos para solicitar y firmar certificados para tus instancias de Cloud SQL, otorga el siguiente rol a la cuenta de servicio para el grupo de AC que creaste:

  • roles/privateca.certificateRequester

gcloud

Ejecuta el comando gcloud privateca pools para otorgar acceso a la cuenta de servicio al grupo de CA:

gcloud privateca pools add-iam-policy-binding CA_POOL_ID \
  --project=PROJECT_ID \
  --location=REGION \
  --member serviceAccount:SERVICE_ACCOUNT_NAME \
  --role=roles/privateca.certificateRequester

Realiza los siguientes reemplazos:

  • CA_POOL_ID por el ID del grupo de CA que creaste.
  • PROJECT_ID por el ID del proyecto en el que planeas crear tus instancias de Cloud SQL.
  • REGION por la región en la que creaste el grupo de CA.
  • SERVICE_ACCOUNT_NAME por el nombre de la cuenta de servicio de solicitante de certificados de servicio de la AC que creaste para el proyecto anteriormente.

Crea una CA en el grupo de CA

Crea al menos una CA en el grupo de CA que creaste.

Puedes crear una CA raíz o una CA subordinada.

Para crear una CA raíz, sigue las instrucciones en Crea una CA raíz. Puedes aceptar los valores predeterminados para la CA, pero asegúrate de crearla en el estado Habilitada.

Cuando configures el algoritmo y el tamaño de la clave de CA, podrás seleccionar cualquier tamaño y algoritmo de clave. Cloud SQL genera sus certificados de servidor con claves de curva elíptica EC P-384 (SHA-384), pero las claves criptográficas de tu CA no tienen que coincidir.

Si creas una CA subordinada, primero debes crear y configurar tu CA raíz.

Configura una instancia de Cloud SQL para usar una CA administrada por el cliente

Puedes configurar una instancia de Cloud SQL para que use la opción de CA administrada por el cliente cuando crees la instancia. También puedes actualizar el modo de CA del servidor de una instancia existente para que use una CA administrada por el cliente en lugar de la opción de CA por instancia o CA compartida.

Crea una instancia

Para crear una instancia de Cloud SQL que use la opción de CA administrada por el cliente, haz lo siguiente.

Console

No puedes usar la consola de Google Cloud para crear instancias que usen la opción de CA administrada por el cliente. Si creas una instancia con la consola deGoogle Cloud , el modo predeterminado es la CA por instancia (GOOGLE_MANAGED_INTERNAL_CA).

Para seleccionar un modo de CA administrado por el cliente, usa el comando gcloud sql instances create.

gcloud

gcloud sql instances create "INSTANCE_NAME" \
  --database-version=DATABASE_VERSION \
  --project=PROJECT_ID \
  --region=REGION \
  --server-ca-mode=CUSTOMER_MANAGED_CAS_CA \
  --server-ca-pool=projects/PROJECT_ID_CAS/locations/REGION/caPools/CA_POOL_ID

Realiza los siguientes reemplazos:

  • INSTANCE_NAME por el nombre de la instancia de Cloud SQL que deseas crear.
  • DATABASE_VERSION con el enum de la versión de la instancia de Cloud SQL que deseas crear. La opción de CA administrada por el cliente solo es compatible con MySQL 8.0.30 y versiones posteriores.
  • PROJECT_ID por el ID del proyecto en el que planeas crear tus instancias de Cloud SQL.
  • PROJECT_ID_CAS con el ID del proyecto en el que creaste tu CA_POOL_ID Este proyecto puede ser el mismo o diferente del que deseas usar para crear tu instancia de Cloud SQL.
  • REGION por la región en la que creaste el grupo de CA. Debes crear la instancia en la misma región que el grupo de CA.
  • CA_POOL_ID por el ID del grupo de CA que creaste.

REST

Para crear una instancia de Cloud SQL que use la opción de CA administrada por el cliente, usa el método instances.insert y especifica las siguientes propiedades:

Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:

  • PROJECT_ID el ID del proyecto en el que planeas crear tus instancias de Cloud SQL
  • PROJECT_ID_CAS es el ID del proyecto en el que creaste tu CA_POOL_ID. Este proyecto puede ser el mismo o diferente del que deseas usar para crear tu instancia de Cloud SQL.
  • INSTANCE_ID es el nombre de la instancia de Cloud SQL que deseas crear.
  • REGION es la región en la que creaste el grupo de AC. Debes crear la instancia en la misma región que el grupo de CA.
  • CA_POOL_ID por el ID del grupo de CA que creaste.

Método HTTP y URL:

POST https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances

Cuerpo JSON de la solicitud:

{
  "name":"INSTANCE_ID",
  "region":"REGION",
  "databaseVersion": "DATABASE_VERSION",
  "settings":{
     "ipConfiguration":
      {
         "serverCaPool": "projects/PROJECT_ID_CAS/locations/REGION/caPools/CA_POOL_ID",
         "serverCaMode": "CUSTOMER_MANAGED_CAS_CA"
      }
   }
}

Para enviar tu solicitud, expande una de estas opciones:

Deberías recibir una respuesta JSON similar a la que se muestra a continuación:

{
  "kind": "sql#operation",
  "targetLink": "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances",
  "status": "PENDING",
  "user": "user@example.com",
  "insertTime": "2025-01-16T02:32:12.281Z",
  "operationType": "UPDATE",
  "name": "OPERATION_ID",
  "targetId": "INSTANCE_ID",
  "selfLink": "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID_CSQL/operations/OPERATION_ID",
  "targetProject": "PROJECT_ID"
}

Actualiza una instancia para usar una CA administrada por el cliente

Antes de actualizar una instancia para que use una CA administrada por el cliente, haz lo siguiente:

  • Revisa la lista de servicios Google Cloud que no admiten conexiones a instancias de Cloud SQL configuradas para usar una CA administrada por el cliente. Si tu implementación requiere el uso del servicio, es posible que debas retrasar la actualización.
  • Asegúrate de usar MySQL 8.0.30 o una versión posterior.
  • Si usas el proxy de Cloud SQL Auth o cualquiera de los conectores de lenguaje de Cloud SQL para conectarte a la instancia, asegúrate de que ejecuten las versiones mínimas requeridas. En el caso del proxy de autenticación de Cloud SQL, asegúrate de usar la versión 2.14.3 o posterior. Para conocer las versiones mínimas requeridas de los conectores de lenguaje de Cloud SQL, consulta Requisitos de los conectores de lenguaje de Cloud SQL.
  • Asegúrate de haber creado un grupo de CA y de haber proporcionado a la cuenta de servicio acceso al grupo de CA.
  • Asegúrate de que haya al menos una CA en el grupo de CA.
  • Para evitar interrupciones después de la actualización, descarga los certificados de tu CA administrada por el cliente y configura tus clientes de bases de datos para que confíen en tu CA.

Sigue el siguiente procedimiento para actualizar una instancia de Cloud SQL y usar la opción de CA administrada por el cliente.

Console

No puedes usar la consola de Google Cloud para editar el modo de CA del servidor de una instancia.

Para actualizar el modo de CA del servidor de tu instancia para usar una CA administrada por el cliente, usa el comando gcloud sql instances patch. Después de realizar el cambio, esa configuración aparecerá en la consola de Google Cloud cuando veas tu instancia.

gcloud

Para actualizar tu instancia, ejecuta el siguiente comando:

gcloud sql instances patch INSTANCE_NAME \
--server-ca-mode=CUSTOMER_MANAGED_CAS_CA \
--server-ca-pool=projects/PROJECT_ID_CAS/locations/REGION/caPools/CA_POOL_ID

Para la marca --server-ca-mode, asegúrate de especificar CUSTOMER_MANAGED_CAS_CA.

Reemplaza lo siguiente:

  • INSTANCE_NAME: Es el nombre de la instancia de Cloud SQL a la que deseas aplicar parches.
  • PROJECT_ID_CAS con el ID del proyecto en el que se encuentra tu CA_POOL_ID. Este proyecto puede ser el mismo o diferente del proyecto en el que se encuentra tu instancia de Cloud SQL.
  • REGION por la región en la que creaste el grupo de CA. Tu instancia debe estar en la misma región que el grupo de CA.
  • CA_POOL_ID: Es el ID del grupo de AC que deseas asignar a la instancia. También puedes usar este comando para cambiar el grupo de CA de una instancia que ya está configurada para usar CUSTOMER_MANAGED_CAS_CA.

REST

Para actualizar una instancia de Cloud SQL para que use la opción de CA administrada por el cliente, usa el método instances.patch y especifica las siguientes propiedades:

Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:

  • PROJECT_ID es el ID del proyecto en el que se encuentra tu instancia de Cloud SQL.
  • INSTANCE_ID el nombre de la instancia de Cloud SQL que deseas aplicar parches.
  • PROJECT_ID_CAS es el ID del proyecto en el que creaste tu CA_POOL_ID. Este proyecto puede ser el mismo o diferente del proyecto en el que se encuentra tu instancia de Cloud SQL.
  • REGION es la región en la que creaste el grupo de AC. Debes crear la instancia en la misma región que el grupo de CA.
  • CA_POOL_ID es el ID del grupo de entidades certificadoras que deseas asignar a la instancia. También puedes usar este comando para cambiar el grupo de CA de una instancia que ya está configurada para usar CUSTOMER_MANAGED_CAS_CA.

Método HTTP y URL:

PATCH https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID

Cuerpo JSON de la solicitud:

{
  "settings":{
     "ipConfiguration":
      {
         "serverCaPool": "projects/PROJECT_ID_CAS/locations/REGION/caPools/CA_POOL_ID",
         "serverCaMode": "CUSTOMER_MANAGED_CAS_CA"
      }
   }
}

Para enviar tu solicitud, expande una de estas opciones:

Deberías recibir una respuesta JSON similar a la que se muestra a continuación:

{
  "kind": "sql#operation",
  "targetLink": "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID",
  "status": "PENDING",
  "user": "user@example.com",
  "insertTime": "2025-01-16T02:32:12.281Z",
  "operationType": "UPDATE",
  "name": "OPERATION_ID",
  "targetId": "INSTANCE_ID",
  "selfLink": "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/operations/OPERATION_ID",
  "targetProject": "PROJECT_ID"
}

Cómo cambiar una instancia de CA administrada por el cliente a una CA compartida

Puedes actualizar una instancia que usa una CA administrada por el cliente para que use una CA compartida (GOOGLE_MANAGED_CAS_CA). Sin embargo, no puedes actualizar una instancia configurada para usar una CA administrada por el cliente para que use la CA por instancia (GOOGLE_MANAGED_INTERNAL_CA).

Antes de actualizar una instancia para que use una CA compartida, descarga los paquetes de CA globales y regionales, cópialos en tus clientes de bases de datos y permite que confíen en estas CA. Configurar los certificados antes de cambiar la configuración del modo de la AC del servidor puede ayudar a evitar posibles interrupciones para los clientes de tu base de datos.

Para cambiar el modo de CA del servidor de tu instancia para usar la CA compartida, sigue este procedimiento.

Console

No puedes usar la consola de Google Cloud para editar el modo de CA del servidor de una instancia.

Para actualizar el modo de la AC del servidor de tu instancia para que use una AC compartida en lugar de una AC administrada por el cliente, usa el comando gcloud sql instances patch. Después de realizar el cambio, esa configuración aparecerá en la consola de Google Cloud cuando veas tu instancia.

gcloud

Para actualizar tu instancia, ejecuta el siguiente comando:

gcloud sql instances patch INSTANCE_NAME \
--server-ca-mode=GOOGLE_MANAGED_CAS_CA \
--server-ca-pool=""

En el comando, haz lo siguiente:

  • Reemplaza INSTANCE_NAME por el nombre de la instancia de Cloud SQL a la que deseas aplicar parches.
  • Para la marca --server-ca-mode, especifica GOOGLE_MANAGED_CAS_CA.
  • Para la marca --server-ca-pool, debes especificar una cadena vacía o "".

REST

Para actualizar una instancia de Cloud SQL que usa la CA administrada por el cliente para que use la opción de CA compartida, usa el método instances.patch y especifica las siguientes propiedades:

Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:

  • PROJECT_ID es el ID del proyecto en el que se encuentra tu instancia de Cloud SQL.
  • INSTANCE_ID el nombre de la instancia de Cloud SQL que deseas aplicar parches.

Método HTTP y URL:

PATCH https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID

Cuerpo JSON de la solicitud:

{
  "settings":{
     "ipConfiguration":
      {
         "serverCaPool": "",
         "serverCaMode": "GOOGLE_MANAGED_CAS_CA"
      }
   }
}

Para enviar tu solicitud, expande una de estas opciones:

Deberías recibir una respuesta JSON similar a la que se muestra a continuación:

{
  "kind": "sql#operation",
  "targetLink": "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID",
  "status": "PENDING",
  "user": "user@example.com",
  "insertTime": "2025-01-16T02:32:12.281Z",
  "operationType": "UPDATE",
  "name": "OPERATION_ID",
  "targetId": "INSTANCE_ID",
  "selfLink": "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/operations/OPERATION_ID",
  "targetProject": "PROJECT_ID"
}

Solucionar problemas

Problema Soluciona problemas

Recibirás el siguiente mensaje de error:

PERMISSION_DENIED: Permission privateca.certificates.create denied on CA_POOL_ID
Asegúrate de haber otorgado el rol de roles/privateca.certificateRequester a la cuenta de servicio que creaste para tu proyecto de Cloud SQL. Para obtener más información, consulta Cómo proporcionar a la cuenta de servicio acceso al grupo de AC.

Recibirás el siguiente mensaje de error:

PERMISSION_DENIED: Request is prohibited by organization's policy vpcServiceControlsUniqueIdentifier VPC_SERVICE_CONTROLS_UNIQUE_IDENTIFIER.
Asegúrate de configurar los Controles del servicio de VPC de modo que el proyecto que aloja el grupo de entidades certificadoras y la entidad certificadora de CA Service, y el proyecto que aloja Cloud SQL pertenezcan al mismo perímetro de servicio. Para obtener más información, consulta Perímetros de servicio y Administra perímetros de servicio.

Recibes uno de los siguientes mensajes de error de INVALID ARGUMENT:

  • Public key algorithm is not permitted by the CaPool's issuance policy.
  • This CaPool's issuance policy does not permit passthrough subjects and/or subject alternative names, and thus can only be used with the REFLECTED_SPIFFE subject mode.
  • Config issuance mode is not permitted by the CaPool's issuance policy.

Verifica la configuración de tu grupo de AC y de tu AC. Asegúrate de cumplir con todos los requisitos que se indican en Crea un grupo de CA y Crea una CA en el grupo de CA.

Recibirás el siguiente mensaje de error:

RESOURCE_EXHAUSTED

Esto representa problemas de cuota con CA Service. Verifica la cuota del servicio de CA en tu proyecto. Verifica si es posible que estés usando solicitudes en tu grupo de CA fuera de Cloud SQL. Para obtener más información, consulta Cuotas y límites.

Recibirás el siguiente mensaje de error:

NOT FOUND: parent resource CA_POOL_ID not found.
Verifica el ID del proyecto, la ubicación y el nombre del grupo de CA que especificaste cuando creaste tu instancia de Cloud SQL. Asegúrate de no haber cometido errores tipográficos.

Recibirás el siguiente mensaje de error:

FAILED_PRECONDITION: There are no enabled CAs in the CaPool. Please ensure that there is at least one enabled Certificate Authority to issue a certificate.
Asegúrate de haber creado al menos una CA en el grupo de CA que especificaste cuando creaste tu instancia de Cloud SQL y de que la CA esté en estado habilitado.

Recibirás el siguiente mensaje de error:

FAILED_PRECONDITION: Per-Product Per-Project Service Account (P4 SA) SERVICE_ACCOUNT_NAME not found for project PROJECT_ID.
Asegúrate de haber creado la cuenta de servicio para tu proyecto de Cloud SQL. Para obtener más información, consulta Crea una cuenta de servicio específica del proyecto.

Recibirás el siguiente mensaje de error:

INVALID ARGUMENT: Invalid format for server CA pool.

Asegúrate de haber especificado el grupo de CA en el formato correcto:

projects/PROJECT_ID/locations/REGION/caPools/CA_POOL_ID

Recibirás el siguiente mensaje de error:

INVALID ARGUMENT: The instance's server CA pool must be in the same region as the instance.

Asegúrate de que el grupo de CA esté en la misma región que la instancia de Cloud SQL que deseas crear.

¿Qué sigue?