Control de acceso a proyectos

En esta página, se describe cómo controlar los permisos y el acceso a un proyecto de Cloud SQL mediante la administración de identidades y accesos (IAM).

Descripción general

Google Cloud ofrece la administración de identidades y accesos (IAM), que te permite brindar acceso más detallado a recursos específicos de Google Cloud y evita el acceso no deseado a otros recursos. En esta página, se describen las funciones y los permisos de IAM en Cloud SQL. Para obtener una descripción detallada de Google Cloud IAM, consulta la documentación de IAM.

Cloud SQL proporciona un conjunto de funciones predefinidas diseñadas para ayudarte a controlar el acceso a tus recursos de Cloud SQL. También puedes crear tus propias funciones personalizadas si las funciones predefinidas no proporcionan los conjuntos de permisos que necesitas. Las funciones básicas heredadas (Editor, Visualizador y Propietario) también están disponibles, aunque no proporcionan el mismo control detallado que las funciones de Cloud SQL. En particular, las funciones básicas brindan acceso a recursos en todo Google Cloud, en lugar de solo a los de Cloud SQL. Para obtener más información sobre las funciones básicas, consulta Funciones básicas.

Puedes establecer una política de IAM en cualquier nivel de la jerarquía de recursos: el nivel de organización, de carpeta, de proyecto o de recurso. Los recursos heredan las políticas de todos sus recursos superiores.

Cloud SQL también admite las condiciones de IAM, que pueden definir mejor las funciones y los permisos a nivel de recursos individuales de Cloud SQL, como las instancias dentro de un proyecto. Puedes agregar una condición como propiedad de una vinculación de política de IAM para especificar un subconjunto de instancias a las que los principales pueden acceder.

Las condiciones de IAM te permiten otorgar funciones basadas en una variedad de atributos. Por ejemplo, puedes permitir el acceso solo en ciertas fechas y horas, o bien otorgar acceso solo a los recursos de Cloud SQL con ciertos nombres. En esta página, se incluyen algunos ejemplos del uso de las condiciones de IAM con Cloud SQL. Para obtener más información sobre las condiciones de IAM, consulta la página Descripción general de las condiciones de IAM.

Permisos y funciones

En esta sección, se resumen los permisos y las funciones que admite Cloud SQL.

Funciones predefinidas

Cloud SQL brinda algunas funciones predefinidas que puedes usar para proporcionar permisos más detallados a las principales. La función que otorgas a una principal controla qué acciones puede realizar. Los principales pueden ser personas, grupos o cuentas de servicio.

Puedes otorgar múltiples funciones a la misma principal y cambiarlas en cualquier momento, siempre que tengas los permisos para hacerlo.

Las funciones más amplias incluyen las más específicas. Por ejemplo, la función de Editor de Cloud SQL incluye todos los permisos de la función del Lector, junto con los permisos adicionales de la función de Editor. Del mismo modo, la función de Administrador de Cloud SQL incluye todos los permisos de la función de Editor de Cloud SQL, junto con sus propios permisos adicionales.

Las funciones básicas (Propietario, Editor y Visualizador) proporcionan permisos en Google Cloud. Las funciones específicas de Cloud SQL solo proporcionan permisos en Cloud SQL, excepto los siguientes permisos de Google Cloud, que son necesarios para el uso general de Google Cloud:

  • resourcemanager.projects.get
  • resourcemanager.projects.list
  • serviceusage.quotas.get
  • serviceusage.services.get
  • serviceusage.services.use

La siguiente tabla enumera las funciones predefinidas disponibles para Cloud SQL, junto con sus permisos de Cloud SQL:

Nombre
de la función
Descripción
Permisos de Cloud SQL
roles/owner
Propietario (función heredada)
Acceso y control totales para todos los recursos de Google Cloud; administración del acceso de los usuarios

cloudsql.*
roles/editor
Editor (función heredada)
Acceso de lectura y escritura a todos los recursos de Google Cloud y Cloud SQL (control total, excepto para modificar permisos)

Todos los permisos de cloudsql, excepto
cloudsql.*.getIamPolicy
cloudsql.*.setIamPolicy
roles/viewer
Visualizador (función heredada)
Acceso de solo lectura a todos los recursos de Google Cloud, incluidos los recursos de Cloud SQL

cloudsql.*.export
cloudsql.*.get
cloudsql.*.list
roles/cloudsql.admin
Administrador de Cloud SQL
Control total de todos los recursos de Cloud SQL

cloudsql.*
recommender.cloudsqlInstanceDiskUsageTrendInsights.*
recommender.cloudsqlInstanceOutOfDiskRecommendations.* recommender.cloudsqlInstanceDiskUsageTrendInsights.*
recommender.cloudsqlInstanceOutOfDiskRecommendations.* recommender.cloudsqlInstanceDiskUsageTrendInsights.*
recommender.cloudsqlInstanceOutOfDiskRecommendations.*
recommender.cloudsqlInstanceCpuUsageInsights.*
recommender.cloudsqlInstanceMemoryUsageInsights.*
recommender.cloudsqlOverprovisionedInstanceRecommendations.*
recommender.cloudsqlInstanceActivityInsights.*
recommender.cloudsqlIdleInstanceRecommendations.*
roles/cloudsql.editor
Editor de Cloud SQL
Administra los recursos de Cloud SQL. sin capacidad para ver o modificar permisos, ni modificar usuarios o sslCerts; sin capacidad de importar datos o restablecer desde una copia de seguridad, ni de clonar, borrar o ascender instancias; Sin capacidad de iniciar o detener réplicas. sin capacidad de borrar bases de datos, réplicas o copias de seguridad

cloudsql.instances.addServerCa
cloudsql.instances.connect
cloudsql.instances.export
cloudsql.instances.failover
cloudsql.instances.get
cloudsql.instances.list
cloudsql.instances.listServerCas
cloudsql.instances.restart
cloudsql.instances.rotateServerCa
cloudsql.instances.truncateLog
cloudsql.instances.update
cloudsql.databases.create
cloudsql.databases.get
cloudsql.databases.list
cloudsql.databases.update
cloudsql.backupRuns.create
cloudsql.backupRuns.get
cloudsql.backupRuns.list
cloudsql.sslCerts.get
cloudsql.sslCerts.list
cloudsql.users.list
recommender.cloudsqlInstanceDiskUsageTrendInsights.get
recommender.cloudsqlInstanceDiskUsageTrendInsights.list
recommender.cloudsqlInstanceDiskUsageTrendInsights.update
recommender.cloudsqlInstanceOutOfDiskRecommendations.get
recommender.cloudsqlInstanceOutOfDiskRecommendations.list
recommender.cloudsqlInstanceOutOfDiskRecommendations.update
recommender.cloudsqlInstanceCpuUsageInsights.get
recommender.cloudsqlInstanceCpuUsageInsights.list
recommender.cloudsqlInstanceCpuUsageInsights.update
recommender.cloudsqlInstanceMemoryUsageInsights.get
recommender.cloudsqlInstanceMemoryUsageInsights.list
recommender.cloudsqlInstanceMemoryUsageInsights.update
recommender.cloudsqlOverprovisionedInstanceRecommendations.get
recommender.cloudsqlOverprovisionedInstanceRecommendations.list
recommender.cloudsqlOverprovisionedInstanceRecommendations.update
recommender.cloudsqlInstanceActivityInsights.get
recommender.cloudsqlInstanceActivityInsights.list
recommender.cloudsqlInstanceActivityInsights.update
recommender.cloudsqlIdleInstanceRecommendations.get
recommender.cloudsqlIdleInstanceRecommendations.list
recommender.cloudsqlIdleInstanceRecommendations.update
roles/cloudsql.viewer
Lector de Cloud SQL
Acceso de solo lectura a todos los recursos de Cloud SQL

cloudsql.*.export
cloudsql.*.get
cloudsql.*.list
cloudsql.instances.listServerCa
recommender.cloudsqlInstanceOutOfDiskRecommendations.get
recommender.cloudsqlInstanceOutOfDiskRecommendations.list
recommender.cloudsqlInstanceDiskUsageTrendInsights.get
recommender.cloudsqlInstanceDiskUsageTrendInsights.list
recommender.cloudsqlInstanceCpuUsageInsights.get
recommender.cloudsqlInstanceCpuUsageInsights.list
recommender.cloudsqlInstanceMemoryUsageInsights.get
recommender.cloudsqlInstanceMemoryUsageInsights.list
recommender.cloudsqlOverprovisionedInstanceRecommendations.get
recommender.cloudsqlOverprovisionedInstanceRecommendations.list
recommender.cloudsqlInstanceActivityInsights.get
recommender.cloudsqlInstanceActivityInsights.list
recommender.cloudsqlIdleInstanceRecommendations.get
recommender.cloudsqlIdleInstanceRecommendations.list
roles/cloudsql.client
Cliente de Cloud SQL
Acceso de conectividad a las instancias de Cloud SQL desde App Engine y el proxy de Cloud SQL Auth. (no es necesario para acceder a una instancia que usa direcciones IP)

cloudsql.instances.connect
cloudsql.instances.get
roles/cloudsql.instanceUser
Usuario de instancia de Cloud SQL
Función que permite el acceso a una instancia de Cloud SQL

cloudsql.instances.get
cloudsql.instances.login

Funciones personalizadas

Si las funciones predefinidas no responden a tus requisitos comerciales particulares, puedes definir tus propias funciones personalizadas con los permisos que especifiques. Para ello, IAM ofrece funciones personalizadas.

Cuando crees funciones personalizadas para Cloud SQL, asegúrate de incluir cloudsql.instances.list y cloudsql.instances.get. De lo contrario, Cloud Console no funcionará de forma correcta con Cloud SQL.

Permisos necesarios para realizar tareas comunes en Cloud Console

Tarea Permisos adicionales necesarios
Mostrar la página del listado de instancias cloudsql.instances.list
resourcemanager.projects.get
Crear una instancia cloudsql.instances.create
cloudsql.instances.get
cloudsql.instances.list
resourcemanager.projects.get
compute.machineTypes.list
compute.machineTypes.get
compute.projects.get roles/compute.viewer
Conectar una instancia desde Cloud Shell cloudsql.instances.get
cloudsql.instances.list
cloudsql.instances.update
resourcemanager.projects.get
Crear un usuario cloudsql.instances.get
cloudsql.instances.list
cloudsql.users.create
cloudsql.users.list
resourcemanager.projects.get
Ver información de instancias cloudsql.instances.get
cloudsql.instances.list
cloudsql.users.list
monitoring.timeSeries.list
resourcemanager.projects.get

Permisos necesarios para los comandos de gcloud sql

Comando Permisos necesarios
gcloud sql backups create cloudsql.backupRuns.create
gcloud sql backups delete cloudsql.backupRuns.delete
gcloud sql backups describe cloudsql.backupRuns.get
gcloud sql backups list cloudsql.backupRuns.list
gcloud sql backups restore cloudsql.backupRuns.get
cloudsql.instances.restoreBackup
gcloud sql connect cloudsql.instances.get
cloudsql.instances.update
gcloud sql databases create cloudsql.databases.create
gcloud sql databases delete cloudsql.databases.delete
gcloud sql databases describe cloudsql.databases.get
gcloud sql databases list cloudsql.databases.list
gcloud sql databases patch cloudsql.databases.get
cloudsql.databases.update
gcloud sql export cloudsql.instances.export
cloudsql.instances.get
gcloud sql flags list Ninguno
gcloud sql import cloudsql.instances.import
gcloud sql instances clone cloudsql.instances.clone
gcloud sql instances create cloudsql.instances.create
gcloud sql instances delete cloudsql.instances.delete
gcloud sql instances describe cloudsql.instances.get
gcloud sql instances failover cloudsql.instances.failover
gcloud sql instances import cloudsql.instances.import
gcloud sql instances list cloudsql.instances.list
gcloud sql instances patch cloudsql.instances.get
cloudsql.instances.update
gcloud sql instances promote-replica cloudsql.instances.promoteReplica
gcloud sql instances reset-ssl-config cloudsql.instances.resetSslConfig
gcloud sql instances restart cloudsql.instances.restart
gcloud sql instances restore-backup cloudsql.backupRuns.get
cloudsql.instances.restoreBackup
gcloud sql operations describe cloudsql.instances.get
gcloud sql operations list cloudsql.instances.get
gcloud sql operations wait cloudsql.instances.get
gcloud sql ssl client-certs create cloudsql.sslCerts.create
gcloud sql ssl client-certs delete cloudsql.sslCerts.delete
gcloud sql ssl client-certs describe cloudsql.sslCerts.list
gcloud sql ssl client-certs list cloudsql.sslCerts.list
gcloud sql tiers list Ninguno
gcloud sql users create cloudsql.users.create
gcloud sql users delete cloudsql.users.delete
gcloud sql users list cloudsql.users.list
gcloud sql users set-password cloudsql.users.update

Permisos obligatorios para los métodos de la API

En la siguiente tabla, se enumeran los permisos que el emisor debe tener para llamar a cada método en la API de Administrador de Cloud SQL o realizar tareas mediante las herramientas de Google Cloud que usan la API (como Google Cloud Console o la herramienta de línea de comandos de gcloud).

Todos los permisos se aplican al proyecto. No puedes aplicar permisos diferentes basados en la instancia o en otro objeto de nivel inferior.

Método Permisos necesarios
backupRuns.delete cloudsql.backupRuns.delete
backupRuns.get cloudsql.backupRuns.get
backupRuns.insert cloudsql.backupRuns.create
backupRuns.list cloudsql.backupRuns.list
databases.delete cloudsql.databases.delete
databases.get cloudsql.databases.get
databases.insert cloudsql.databases.create
databases.list cloudsql.databases.list
databases.patch cloudsql.databases.update, cloudsql.databases.get
databases.update cloudsql.databases.update
flags.list Ninguno
instances.clone cloudsql.instances.clone
instances.delete cloudsql.instances.delete
instances.export cloudsql.instances.export
instances.failover cloudsql.instances.failover
instances.get cloudsql.instances.get
instances.import cloudsql.instances.import
instances.insert cloudsql.instances.create
instances.list cloudsql.instances.list
instances.patch cloudsql.instances.get, cloudsql.instances.update
instances.promoteReplica cloudsql.instances.promoteReplica
instances.resetSslConfig cloudsql.instances.resetSslConfig
instances.restart cloudsql.instances.restart
instances.restoreBackup cloudsql.instances.restoreBackup, cloudsql.backupRuns.get
instances.startReplica cloudsql.instances.startReplica
instances.stopReplica cloudsql.instances.stopReplica
instances.truncateLog cloudsql.instances.truncateLog
instances.update cloudsql.instances.update
operations.get cloudsql.instances.get
operations.list cloudsql.instances.get
sslCerts.delete cloudsql.sslCerts.delete
sslCerts.get cloudsql.sslCerts.get
sslCerts.insert cloudsql.sslCerts.create
sslCerts.list cloudsql.sslCerts.list
users.delete cloudsql.users.delete
users.insert cloudsql.users.create
users.list cloudsql.users.list
users.update cloudsql.users.update

Administra IAM de Cloud SQL para PostgreSQL

Puedes obtener y configurar las políticas de IAM y sus funciones con Google Cloud Console, los métodos de IAM de la API o el SDK de Cloud. Para obtener más información, consulta Cómo otorgar, cambiar y revocar el acceso.

Condiciones de IAM

Las Condiciones de IAM te permiten definir y aplicar el control de acceso condicional basado en atributos para los recursos de Google Cloud, incluidas las instancias de Cloud SQL. Para obtener más información sobre las condiciones de IAM, consulta Descripción general de las condiciones de IAM.

En Cloud SQL, puedes aplicar el acceso condicional a Cloud IAM en función de los siguientes atributos:

  • Atributos de fecha y hora: Se usan para configurar el acceso temporal (por vencer), programado o de duración limitada a los recursos de Cloud SQL. Por ejemplo, puedes permitir que un usuario acceda a una instancia de base de datos hasta una fecha específica. Puedes usar atributos de fecha y hora en cualquier nivel de la jerarquía de recursos. Para obtener más información, consulta Configura el acceso temporal.

  • Atributos de recursos: Se usan para configurar el acceso condicional en función de un nombre de recurso, un tipo de recurso o un atributo de servicio de recurso. En Cloud SQL, puedes usar atributos de instancias de bases de datos para configurar el acceso condicional. Para obtener más información, consulta Configura el acceso basado en recursos.

Los casos prácticos incluyen:

  • Permitir que los usuarios se conecten a instancias específicas
  • Permitir que los usuarios borren las instancias de desarrollo y prueba, pero no las instancias de producción
  • Permitir a los usuarios realizar operaciones administrativas en ciertas fechas o en ciertos momentos

Permite que los usuarios se conecten a instancias específicas

Supongamos que deseas permitir que una cuenta de servicio tenga permiso para conectarse solo a una instancia específica de Cloud SQL. Puedes incluir una condición de IAM en la vinculación de la política de IAM que otorga a ese usuario los permisos de una función de Cloud SQL.

De forma predeterminada, la función predefinida de cliente de Cloud SQL (roles/cloudsql.client), que contiene el permiso cloudsql.instances.connect, autoriza a una principal a conectarse a todas las instancias de Cloud SQL de un proyecto. Cuando se ingresa una condición de IAM en la vinculación de la política, puedes otorgar permiso solo a la instancia con nombre.

Console

En este ejemplo, se muestra cómo modificar la vinculación de IAM existente para que el proyecto otorgue una función de cliente de Cloud SQL a una instancia específica a una cuenta de servicio.

En este ejemplo, se usan las siguientes variables:

  • PROJECT_ID: Es el proyecto de Google Cloud.
  • INSTANCE_ID: El nombre de la instancia a la que deseas otorgar acceso.

  1. En Google Cloud Console, ve a la página IAM.

    IAM

  2. Haz clic en Agregar.
  3. En el cuadro de entrada Nuevos principales, ingresa el correo electrónico de la cuenta de servicio.
  4. Haz clic en la lista desplegable Función y selecciona la función Cliente de Cloud SQL.
  5. Haz clic en Agregar condición:
  6. Ingresa un título y una descripción.
  7. Selecciona la pestaña Editor de condiciones.
  8. En la sección Creador de condiciones, haz lo siguiente:
    • En Tipo de condición - Recurso - Tipo, selecciona sqladmin.googleapis.com/Instance.
    • En Condition type - Resource - Name, ingresa projects/PROJECT_ID/instances/INSTANCE_ID.
    • En Tipo de condición, Recurso - Servicio, selecciona sqladmin.googleapis.com.
  9. Haz clic en Guardar para guardar la condición.
  10. Haz clic en Guardar para guardar la política.

gcloud

En este ejemplo, se muestra cómo modificar la vinculación de la política de IAM existente para que el proyecto otorgue una función de cliente Cloud SQL a una cuenta de servicio específica, pero solo en una instancia específica.

En este ejemplo, se usan las siguientes variables:

  • PROJECT_ID: Es el proyecto de Google Cloud.
  • INSTANCE_ID: El nombre de la instancia a la que deseas otorgar acceso.
  • SERVICE_ACCOUNT_EMAIL: La dirección de correo electrónico completa de la cuenta de servicio cuyo acceso deseas modificar.

  1. Obtén las vinculaciones de políticas de IAM existentes y envíalas al archivo bindings.json:
  2. gcloud projects get-iam-policy PROJECT_ID --format=json > bindings.json
    
  3. Agrega la siguiente vinculación de función condicional al archivo bindings.json:
    {
      "role": "roles/cloudsql.client",
      "members": [
        "serviceAccount:SERVICE_ACCOUNT_EMAIL"
      ],
      "condition": {
        "expression": "resource.name == 'projects/PROJECT_ID/instances/INSTANCE_ID'
          && resource.type == 'sqladmin.googleapis.com/Instance'"
      }
    }
    
  4. Actualiza la política de IAM con el archivo bindings.json nuevo.
    gcloud projects set-iam-policy PROJECT_ID bindings.json
    

¿Qué sigue?