Controlar el acceso a los recursos con la gestión de identidades y accesos
En este documento se describe cómo ver, conceder y revocar controles de acceso para conjuntos de datos de BigQuery y para los recursos de los conjuntos de datos: tablas, vistas y rutinas. Aunque los modelos también son recursos a nivel de conjunto de datos, no puedes conceder acceso a modelos concretos mediante roles de gestión de identidades y accesos.
Puedes conceder acceso a los Google Cloud recursos mediante políticas de permiso, también conocidas como políticas de Gestión de Identidades y Accesos (IAM), que se adjuntan a los recursos. Solo puedes adjuntar una política de permiso a cada recurso. La política de permiso controla el acceso al recurso en sí, así como a cualquier recurso descendiente que herede la política de permiso.
Para obtener más información sobre las políticas de permiso, consulta la sección Estructura de las políticas de la documentación de IAM.
En este documento se da por hecho que conoces la gestión de identidades y accesos (IAM) de Google Cloud.
Limitaciones
- Las listas de control de acceso (LCAs) de las rutinas no se incluyen en las rutinas replicadas.
- Las rutinas de conjuntos de datos externos o vinculados no admiten controles de acceso.
- Las tablas de conjuntos de datos externos o vinculados no admiten controles de acceso.
- Los controles de acceso a rutinas no se pueden configurar con Terraform.
- Los controles de acceso de rutinas no se pueden definir con el SDK de Google Cloud.
- Los controles de acceso rutinarios no se pueden definir con el lenguaje de control de datos (DCL) de BigQuery.
- Data Catalog no admite controles de acceso rutinarios. Si un usuario ha concedido acceso a nivel de rutina de forma condicional, no verá sus rutinas en el panel lateral de BigQuery. Para evitar este problema, concede acceso a nivel de conjunto de datos.
- En la
INFORMATION_SCHEMA.OBJECT_PRIVILEGES
vista no se muestran los controles de acceso de las rutinas.
Antes de empezar
Concede roles de gestión de identidades y accesos (IAM) que proporcionen a los usuarios los permisos necesarios para realizar cada tarea de este documento.
Roles obligatorios
Para obtener los permisos que necesitas para modificar las políticas de gestión de identidades y accesos de los recursos,
pide a tu administrador que te asigne el
rol de gestión de identidades y accesos Propietario de datos de BigQuery (roles/bigquery.dataOwner
)
en el proyecto.
Para obtener más información sobre cómo conceder roles, consulta el artículo Gestionar el acceso a proyectos, carpetas y organizaciones.
Este rol predefinido contiene los permisos necesarios para modificar las políticas de gestión de identidades y accesos de los recursos. Para ver los permisos exactos que se necesitan, despliega la sección Permisos necesarios:
Permisos obligatorios
Para modificar las políticas de gestión de identidades y accesos de los recursos, se necesitan los siguientes permisos:
-
Para obtener la política de acceso de un conjunto de datos, sigue estos pasos:
bigquery.datasets.get
-
Para definir la política de acceso de un conjunto de datos, sigue estos pasos:
bigquery.datasets.update
-
Para obtener la política de acceso de un conjunto de datos (solo en la consola):
bigquery.datasets.getIamPolicy
-
Para definir la política de acceso de un conjunto de datos (solo en la consola), sigue estos pasos:
bigquery.datasets.setIamPolicy
-
Para obtener la política de una tabla o una vista, sigue estos pasos:
bigquery.tables.getIamPolicy
-
Para definir la política de una tabla o una vista, sigue estos pasos:
bigquery.tables.setIamPolicy
-
Para obtener la política de acceso de una rutina, sigue estos pasos:
bigquery.routines.getIamPolicy
-
Para definir la política de acceso de una rutina, sigue estos pasos:
bigquery.routines.setIamPolicy
-
Para crear trabajos de la herramienta bq o SQL de BigQuery (opcional):
bigquery.jobs.create
También puedes obtener estos permisos con roles personalizados u otros roles predefinidos.
Trabajar con controles de acceso a conjuntos de datos
Para proporcionar acceso a un conjunto de datos, puedes conceder a una entidad principal de gestión de identidades y accesos un rol predefinido o personalizado que determine lo que puede hacer con el conjunto de datos. También se conoce como adjuntar una política de permiso a un recurso. Después de conceder acceso, puedes ver los controles de acceso del conjunto de datos y revocar el acceso al conjunto de datos.
Conceder acceso a un conjunto de datos
No puedes conceder acceso a un conjunto de datos cuando lo creas con la interfaz web de BigQuery o con la herramienta de línea de comandos bq. Primero debe crear el conjunto de datos y, después, conceder acceso a él.
La API te permite conceder acceso durante la creación del conjunto de datos llamando al método datasets.insert
con un recurso de conjunto de datos definido.
Un proyecto es el recurso superior de un conjunto de datos, y un conjunto de datos es el recurso superior de tablas, vistas, rutinas y modelos. Cuando asignas un rol a nivel de proyecto, el rol y sus permisos se heredan en el conjunto de datos y en los recursos del conjunto de datos. Del mismo modo, cuando asignas un rol a nivel del conjunto de datos, el rol y sus permisos se heredan en los recursos del conjunto de datos.
Puede proporcionar acceso a un conjunto de datos concediendo un permiso de rol de gestión de identidades y accesos para acceder al conjunto de datos o concediendo acceso de forma condicional mediante una condición de gestión de identidades y accesos. Para obtener más información sobre cómo conceder acceso condicional, consulta el artículo Controlar el acceso con condiciones de gestión de identidades y accesos.
Para conceder acceso a un conjunto de datos a un rol de gestión de identidades y accesos sin usar condiciones, selecciona una de las siguientes opciones:
Consola
Ve a la página BigQuery.
En el panel Explorador, despliega tu proyecto y selecciona el conjunto de datos que quieras compartir.
Haz clic en > Permisos.
CompartirHaz clic en
Añadir principal.En el campo New principals (Nuevos principales), introduce un principal.
En la lista Selecciona un rol, elige un rol predefinido o un rol personalizado.
Haz clic en Guardar.
Para volver a la información del conjunto de datos, haz clic en Cerrar.
SQL
Para conceder acceso a conjuntos de datos a principales, usa la declaración de DCL GRANT
:
En la Google Cloud consola, ve a la página BigQuery.
En el editor de consultas, introduce la siguiente instrucción:
GRANT `ROLE_LIST` ON SCHEMA RESOURCE_NAME TO "USER_LIST"
Haz los cambios siguientes:
ROLE_LIST
: un rol o una lista de roles separados por comas que quieras concederRESOURCE_NAME
: el nombre del conjunto de datos al que vas a dar accesoUSER_LIST
: lista de usuarios separada por comas a los que se les ha concedido el rolPara ver una lista de formatos válidos, consulta
user_list
.
Haz clic en
Ejecutar.
Para obtener más información sobre cómo ejecutar consultas, consulta Ejecutar una consulta interactiva.
En el siguiente ejemplo, se asigna el rol Lector de datos de BigQuery a myDataset
:
GRANT `roles/bigquery.dataViewer`
ON SCHEMA `myProject`.myDataset
TO "user:user@example.com", "user:user2@example.com"
bq
-
In the Google Cloud console, activate Cloud Shell.
At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.
Para escribir la información del conjunto de datos (incluidos los controles de acceso) en un archivo JSON, usa el comando
bq show
:bq show \ --format=prettyjson \ PROJECT_ID:DATASET > PATH_TO_FILE
Haz los cambios siguientes:
- PROJECT_ID: tu ID de proyecto
- DATASET: el nombre del conjunto de datos
- PATH_TO_FILE: la ruta al archivo JSON en tu máquina local
Haz cambios en la sección
access
del archivo JSON. Puedes añadir a cualquiera de las entradas despecialGroup
:projectOwners
,projectWriters
,projectReaders
yallAuthenticatedUsers
. También puedes añadir cualquiera de los siguientes elementos:userByEmail
,groupByEmail
ydomain
.Por ejemplo, la sección
access
del archivo JSON de un conjunto de datos tendría el siguiente aspecto:{ "access": [ { "role": "READER", "specialGroup": "projectReaders" }, { "role": "WRITER", "specialGroup": "projectWriters" }, { "role": "OWNER", "specialGroup": "projectOwners" }, { "role": "READER", "specialGroup": "allAuthenticatedUsers" }, { "role": "READER", "domain": "domain_name" }, { "role": "WRITER", "userByEmail": "user_email" }, { "role": "READER", "groupByEmail": "group_email" } ], ... }
Cuando hayas terminado de hacer los cambios, usa el comando
bq update
e incluye el archivo JSON con la marca--source
. Si el conjunto de datos está en un proyecto que no es el predeterminado, añade el ID del proyecto al nombre del conjunto de datos con el siguiente formato:PROJECT_ID:DATASET
.bq update
--source PATH_TO_FILE
PROJECT_ID:DATASETPara verificar los cambios en el control de acceso, vuelve a usar el comando
bq show
sin escribir la información en un archivo:bq show --format=prettyjson PROJECT_ID:DATASET
- Abre Cloud Shell.
-
Define el Google Cloud proyecto Google Cloud predeterminado en el que quieras aplicar tus configuraciones de Terraform.
Solo tiene que ejecutar este comando una vez por proyecto y puede hacerlo en cualquier directorio.
export GOOGLE_CLOUD_PROJECT=PROJECT_ID
Las variables de entorno se anulan si defines valores explícitos en el archivo de configuración de Terraform.
-
En Cloud Shell, crea un directorio y un archivo nuevo en ese directorio. El nombre del archivo debe tener la extensión
.tf
. Por ejemplo,main.tf
. En este tutorial, nos referiremos al archivo comomain.tf
.mkdir DIRECTORY && cd DIRECTORY && touch main.tf
-
Si estás siguiendo un tutorial, puedes copiar el código de ejemplo de cada sección o paso.
Copia el código de ejemplo en el archivo
main.tf
que acabas de crear.También puedes copiar el código de GitHub. Se recomienda cuando el fragmento de Terraform forma parte de una solución integral.
- Revisa y modifica los parámetros de ejemplo para aplicarlos a tu entorno.
- Guarda los cambios.
-
Inicializa Terraform. Solo tienes que hacerlo una vez por directorio.
terraform init
Si quieres usar la versión más reciente del proveedor de Google, incluye la opción
-upgrade
:terraform init -upgrade
-
Revisa la configuración y comprueba que los recursos que va a crear o actualizar Terraform se ajustan a tus expectativas:
terraform plan
Haga las correcciones necesarias en la configuración.
-
Aplica la configuración de Terraform ejecutando el siguiente comando e introduciendo
yes
en la petición:terraform apply
Espera hasta que Terraform muestre el mensaje "Apply complete!".
- Abre tu Google Cloud proyecto para ver los resultados. En la Google Cloud consola, ve a tus recursos en la interfaz de usuario para asegurarte de que Terraform los ha creado o actualizado.
Terraform
Usa los recursos de
google_bigquery_dataset_iam
para actualizar el acceso a un conjunto de datos.
Definir la política de acceso de un conjunto de datos
En el siguiente ejemplo se muestra cómo usar el recurso google_bigquery_dataset_iam_policy
para definir la política de gestión de identidades y accesos del conjunto de datos mydataset
. De esta forma, se sustituirá cualquier política que ya esté asociada al conjunto de datos:
# This file sets the IAM policy for the dataset created by # https://github.com/terraform-google-modules/terraform-docs-samples/blob/main/bigquery/bigquery_create_dataset/main.tf. # You must place it in the same local directory as that main.tf file, # and you must have already applied that main.tf file to create # the "default" dataset resource with a dataset_id of "mydataset". data "google_iam_policy" "iam_policy" { binding { role = "roles/bigquery.admin" members = [ "user:user@example.com", ] } binding { role = "roles/bigquery.dataOwner" members = [ "group:data.admin@example.com", ] } binding { role = "roles/bigquery.dataEditor" members = [ "serviceAccount:bqcx-1234567891011-12a3@gcp-sa-bigquery-condel.iam.gserviceaccount.com", ] } } resource "google_bigquery_dataset_iam_policy" "dataset_iam_policy" { dataset_id = google_bigquery_dataset.default.dataset_id policy_data = data.google_iam_policy.iam_policy.policy_data }
Definir la pertenencia a un rol de un conjunto de datos
En el siguiente ejemplo se muestra cómo usar el recurso google_bigquery_dataset_iam_binding
para asignar un rol determinado al conjunto de datos mydataset
. De esta forma, se sustituirá cualquier pertenencia a ese rol.
Se conservan otros roles de la política de gestión de identidades y accesos del conjunto de datos:
# This file sets membership in an IAM role for the dataset created by # https://github.com/terraform-google-modules/terraform-docs-samples/blob/main/bigquery/bigquery_create_dataset/main.tf. # You must place it in the same local directory as that main.tf file, # and you must have already applied that main.tf file to create # the "default" dataset resource with a dataset_id of "mydataset". resource "google_bigquery_dataset_iam_binding" "dataset_iam_binding" { dataset_id = google_bigquery_dataset.default.dataset_id role = "roles/bigquery.jobUser" members = [ "user:user@example.com", "group:group@example.com" ] }
Definir la pertenencia a un rol para un solo principal
En el siguiente ejemplo se muestra cómo usar el recurso google_bigquery_dataset_iam_member
para actualizar la política de gestión de identidades y accesos del conjunto de datos mydataset
y asignar un rol a un principal. Actualizar esta política de IAM no afecta al acceso de ninguna otra entidad a la que se le haya concedido ese rol para el conjunto de datos.
# This file adds a member to an IAM role for the dataset created by # https://github.com/terraform-google-modules/terraform-docs-samples/blob/main/bigquery/bigquery_create_dataset/main.tf. # You must place it in the same local directory as that main.tf file, # and you must have already applied that main.tf file to create # the "default" dataset resource with a dataset_id of "mydataset". resource "google_bigquery_dataset_iam_member" "dataset_iam_member" { dataset_id = google_bigquery_dataset.default.dataset_id role = "roles/bigquery.user" member = "user:user@example.com" }
Para aplicar la configuración de Terraform en un proyecto, sigue los pasos que se indican en las siguientes secciones. Google Cloud
Preparar Cloud Shell
Preparar el directorio
Cada archivo de configuración de Terraform debe tener su propio directorio (también llamado módulo raíz).
Aplica los cambios
API
Para aplicar controles de acceso al crear el conjunto de datos, llama al método datasets.insert
con un recurso de conjunto de datos definido.
Para actualizar los controles de acceso, llama al método datasets.patch
y usa la propiedad access
en el recurso Dataset
.
Como el método datasets.update
sustituye todo el recurso del conjunto de datos, datasets.patch
es el método preferido para actualizar los controles de acceso.
Go
Antes de probar este ejemplo, sigue las Goinstrucciones de configuración de la guía de inicio rápido de BigQuery con bibliotecas de cliente. Para obtener más información, consulta la documentación de referencia de la API Go de BigQuery.
Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta el artículo Configurar la autenticación para bibliotecas de cliente.
Define la nueva lista de acceso añadiendo la nueva entrada a la lista actual con el tipoDatasetMetadataToUpdate
.
A continuación, llama a la función dataset.Update()
para actualizar la propiedad.
Java
Antes de probar este ejemplo, sigue las Javainstrucciones de configuración de la guía de inicio rápido de BigQuery con bibliotecas de cliente. Para obtener más información, consulta la documentación de referencia de la API Java de BigQuery.
Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta el artículo Configurar la autenticación para bibliotecas de cliente.
Node.js
Antes de probar este ejemplo, sigue las Node.jsinstrucciones de configuración de la guía de inicio rápido de BigQuery con bibliotecas de cliente. Para obtener más información, consulta la documentación de referencia de la API Node.js de BigQuery.
Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta el artículo Configurar la autenticación para bibliotecas de cliente.
Define la nueva lista de acceso añadiendo la nueva entrada a la lista actual con el método Dataset#metadata. A continuación, llama a la función Dataset#setMetadata() para actualizar la propiedad.Python
Antes de probar este ejemplo, sigue las Pythoninstrucciones de configuración de la guía de inicio rápido de BigQuery con bibliotecas de cliente. Para obtener más información, consulta la documentación de referencia de la API Python de BigQuery.
Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta el artículo Configurar la autenticación para bibliotecas de cliente.
Define la propiedaddataset.access_entries
con los controles de acceso de un conjunto de datos. A continuación, llama a la función client.update_dataset()
para actualizar la propiedad.
Roles predefinidos que conceden acceso a conjuntos de datos
Puedes conceder acceso a un conjunto de datos a los siguientes roles predefinidos de gestión de identidades y accesos.
Rol | Descripción |
---|---|
Propietario de datos de BigQuery
(roles/bigquery.dataOwner ) |
Si se asigna a un conjunto de datos, este rol concede los siguientes permisos:
|
Editor de datos de BigQuery
(roles/bigquery.dataEditor ) |
Si se asigna a un conjunto de datos, este rol concede los siguientes permisos:
|
Lector de datos de BigQuery
(roles/bigquery.dataViewer ) |
Si se asigna a un conjunto de datos, este rol concede los siguientes permisos:
|
Visor de metadatos de BigQuery
(roles/bigquery.metadataViewer ) |
Si se asigna a un conjunto de datos, este rol concede los siguientes permisos:
|
Permisos de conjunto de datos
La mayoría de los permisos que empiezan por bigquery.datasets
se aplican a nivel de conjunto de datos.
bigquery.datasets.create
no. Para crear conjuntos de datos, se debe conceder el permiso bigquery.datasets.create
a un rol en el contenedor principal, es decir, el proyecto.
En la siguiente tabla se enumeran todos los permisos de conjuntos de datos y el recurso de nivel más bajo al que se puede aplicar el permiso.
Permiso | Recurso | Acción |
---|---|---|
bigquery.datasets.create |
Proyecto | Crear conjuntos de datos en el proyecto. |
bigquery.datasets.get |
Conjunto de datos | Obtiene los metadatos y los controles de acceso del conjunto de datos. Para ver los permisos en la consola, también se necesita el permiso bigquery.datasets.getIamPolicy . |
bigquery.datasets.getIamPolicy |
Conjunto de datos | La consola lo requiere para conceder al usuario permiso para obtener los controles de acceso de un conjunto de datos. Apertura en caso de fallo. La consola también requiere el permiso bigquery.datasets.get para ver el conjunto de datos. |
bigquery.datasets.update |
Conjunto de datos | Actualiza los metadatos y los controles de acceso del conjunto de datos. Para actualizar los controles de acceso en la consola, también se necesita el permiso bigquery.datasets.setIamPolicy .
|
bigquery.datasets.setIamPolicy |
Conjunto de datos | La consola lo requiere para conceder al usuario permiso para definir los controles de acceso de un conjunto de datos. Apertura en caso de fallo. La consola también requiere el permiso bigquery.datasets.update para actualizar el conjunto de datos. |
bigquery.datasets.delete |
Conjunto de datos | Elimina un conjunto de datos. |
bigquery.datasets.createTagBinding |
Conjunto de datos | Adjunta etiquetas al conjunto de datos. |
bigquery.datasets.deleteTagBinding |
Conjunto de datos | Desvincula las etiquetas del conjunto de datos. |
bigquery.datasets.listTagBindings |
Conjunto de datos | Muestra las etiquetas del conjunto de datos. |
bigquery.datasets.listEffectiveTags |
Conjunto de datos | Muestra las etiquetas efectivas (aplicadas y heredadas) del conjunto de datos. |
bigquery.datasets.link |
Conjunto de datos | Crea un conjunto de datos vinculado. |
bigquery.datasets.listSharedDatasetUsage |
Proyecto | Muestra las estadísticas de uso de los conjuntos de datos compartidos a los que tienes acceso en el proyecto. Este permiso es necesario para consultar la vista INFORMATION_SCHEMA.SHARED_DATASET_USAGE . |
Ver los controles de acceso de un conjunto de datos
Para ver los controles de acceso definidos explícitamente de un conjunto de datos, elija una de las siguientes opciones. Para ver los roles heredados de un conjunto de datos, usa la interfaz web de BigQuery.
Consola
Ve a la página BigQuery.
En el panel Explorador, expande tu proyecto y selecciona un conjunto de datos.
Haz clic en > Permisos.
CompartirLos controles de acceso del conjunto de datos aparecen en el panel Permisos del conjunto de datos.
bq
-
In the Google Cloud console, activate Cloud Shell.
At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.
Para obtener una política y guardarla en un archivo local en formato JSON, usa el comando
bq show
en Cloud Shell:bq show \ --format=prettyjson \ PROJECT_ID:DATASET > PATH_TO_FILE
Haz los cambios siguientes:
- PROJECT_ID: tu ID de proyecto
- DATASET: el nombre del conjunto de datos
- PATH_TO_FILE: la ruta al archivo JSON de tu máquina local
En la Google Cloud consola, ve a la página BigQuery.
En el editor de consultas, introduce la siguiente instrucción:
SELECT COLUMN_LIST FROM PROJECT_ID.`region-REGION`.INFORMATION_SCHEMA.OBJECT_PRIVILEGES WHERE object_name = "DATASET";
Haz los cambios siguientes:
- COLUMN_LIST: una lista separada por comas de las columnas de la
vista
INFORMATION_SCHEMA.OBJECT_PRIVILEGES
- PROJECT_ID: tu ID de proyecto
- REGION: un calificador de región
- DATASET: el nombre de un conjunto de datos de tu proyecto
- COLUMN_LIST: una lista separada por comas de las columnas de la
vista
Haz clic en
Ejecutar.
SQL
Consulta la INFORMATION_SCHEMA.OBJECT_PRIVILEGES
vista.
Las consultas para obtener los controles de acceso de un conjunto de datos deben especificar el
object_name
.
Para obtener más información sobre cómo ejecutar consultas, consulta Ejecutar una consulta interactiva.
Ejemplo:
Esta consulta obtiene los controles de acceso de mydataset
.
SELECT object_name, privilege_type, grantee FROM my_project.`region-us`.INFORMATION_SCHEMA.OBJECT_PRIVILEGES WHERE object_name = "mydataset";
La salida debería tener este aspecto:
+------------------+-----------------------------+-------------------------+
| object_name | privilege_type | grantee |
+------------------+-----------------------------+-------------------------+
| mydataset | roles/bigquery.dataOwner | projectOwner:myproject |
| mydataset | roles/bigquery.dataViwer | user:user@example.com |
+------------------+-----------------------------+-------------------------+
API
Para ver los controles de acceso de un conjunto de datos, llama al método datasets.get
con un dataset
recurso definido.
Los controles de acceso aparecen en la propiedad access
del recurso dataset
.
Go
Antes de probar este ejemplo, sigue las Goinstrucciones de configuración de la guía de inicio rápido de BigQuery con bibliotecas de cliente. Para obtener más información, consulta la documentación de referencia de la API Go de BigQuery.
Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta el artículo Configurar la autenticación para bibliotecas de cliente.
Llama a la funciónclient.Dataset().Metadata()
. La política de acceso está disponible en la propiedad Access
.
Java
Antes de probar este ejemplo, sigue las Javainstrucciones de configuración de la guía de inicio rápido de BigQuery con bibliotecas de cliente. Para obtener más información, consulta la documentación de referencia de la API Java de BigQuery.
Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta el artículo Configurar la autenticación para bibliotecas de cliente.
Node.js
Antes de probar este ejemplo, sigue las Node.jsinstrucciones de configuración de la guía de inicio rápido de BigQuery con bibliotecas de cliente. Para obtener más información, consulta la documentación de referencia de la API Node.js de BigQuery.
Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta el artículo Configurar la autenticación para bibliotecas de cliente.
Recupera los metadatos del conjunto de datos con la funciónDataset#getMetadata()
.
La política de acceso está disponible en la propiedad de acceso del objeto de metadatos resultante.
Python
Antes de probar este ejemplo, sigue las Pythoninstrucciones de configuración de la guía de inicio rápido de BigQuery con bibliotecas de cliente. Para obtener más información, consulta la documentación de referencia de la API Python de BigQuery.
Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta el artículo Configurar la autenticación para bibliotecas de cliente.
Llama a la funciónclient.get_dataset()
.
La política de acceso está disponible en la propiedad dataset.access_entries
.
Revocar el acceso a un conjunto de datos
Para revocar el acceso a un conjunto de datos, selecciona una de las siguientes opciones:
Consola
Ve a la página BigQuery.
En el panel Explorador, expande tu proyecto y selecciona un conjunto de datos.
En el panel de detalles, haz clic en Compartir > Permisos.
En el cuadro de diálogo Permisos del conjunto de datos, despliega el principal cuyo acceso quieras revocar.
Haz clic en
Eliminar principal.En el cuadro de diálogo ¿Quitar rol del principal?, haz clic en Quitar.
Para volver a los detalles del conjunto de datos, haz clic en Cerrar.
SQL
Para quitar el acceso de una entidad a un conjunto de datos, usa la
REVOKE
instrucción DCL:
En la Google Cloud consola, ve a la página BigQuery.
En el editor de consultas, introduce la siguiente instrucción:
REVOKE `ROLE_LIST` ON SCHEMA RESOURCE_NAME FROM "USER_LIST"
Haz los cambios siguientes:
ROLE_LIST
: un rol o una lista de roles separados por comas que quieras revocarRESOURCE_NAME
: el nombre del recurso cuyo permiso quieres revocarUSER_LIST
: lista de usuarios separados por comas a los que se les revocarán los roles.Para ver una lista de formatos válidos, consulta
user_list
.
Haz clic en
Ejecutar.
Para obtener más información sobre cómo ejecutar consultas, consulta Ejecutar una consulta interactiva.
En el siguiente ejemplo, se revoca el rol Propietario de datos de BigQuery de myDataset
:
REVOKE `roles/bigquery.dataOwner`
ON SCHEMA `myProject`.myDataset
FROM "group:group@example.com", "serviceAccount:user@test-project.iam.gserviceaccount.com"
bq
-
In the Google Cloud console, activate Cloud Shell.
At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.
Para escribir la información del conjunto de datos (incluidos los controles de acceso) en un archivo JSON, usa el comando
bq show
:bq show \ --format=prettyjson \ PROJECT_ID:DATASET > PATH_TO_FILE
Haz los cambios siguientes:
- PROJECT_ID: tu ID de proyecto
- DATASET: el nombre del conjunto de datos
- PATH_TO_FILE: la ruta al archivo JSON en tu máquina local
Haz cambios en la sección
access
del archivo JSON. Puedes eliminar cualquiera de las entradas despecialGroup
:projectOwners
,projectWriters
,projectReaders
yallAuthenticatedUsers
. También puedes quitar cualquiera de los siguientes elementos:userByEmail
,groupByEmail
ydomain
.Por ejemplo, la sección
access
del archivo JSON de un conjunto de datos tendría el siguiente aspecto:{ "access": [ { "role": "READER", "specialGroup": "projectReaders" }, { "role": "WRITER", "specialGroup": "projectWriters" }, { "role": "OWNER", "specialGroup": "projectOwners" }, { "role": "READER", "specialGroup": "allAuthenticatedUsers" }, { "role": "READER", "domain": "domain_name" }, { "role": "WRITER", "userByEmail": "user_email" }, { "role": "READER", "groupByEmail": "group_email" } ], ... }
Cuando hayas terminado de hacer los cambios, usa el comando
bq update
e incluye el archivo JSON con la marca--source
. Si el conjunto de datos está en un proyecto que no es el predeterminado, añade el ID del proyecto al nombre del conjunto de datos con el siguiente formato:PROJECT_ID:DATASET
.bq update
--source PATH_TO_FILE
PROJECT_ID:DATASETPara verificar los cambios en el control de acceso, usa el comando
show
sin escribir la información en un archivo:bq show --format=prettyjson PROJECT_ID:DATASET
API
Llama al método datasets.patch
y usa la propiedad access
del recurso Dataset
para actualizar tus controles de acceso.
Como el método datasets.update
sustituye todo el recurso del conjunto de datos, datasets.patch
es el método preferido para actualizar los controles de acceso.
Go
Antes de probar este ejemplo, sigue las Goinstrucciones de configuración de la guía de inicio rápido de BigQuery con bibliotecas de cliente. Para obtener más información, consulta la documentación de referencia de la API Go de BigQuery.
Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta el artículo Configurar la autenticación para bibliotecas de cliente.
Define la nueva lista de acceso quitando la entrada de la lista actual con el tipoDatasetMetadataToUpdate
.
A continuación, llama a la función dataset.Update()
para actualizar la propiedad.
Java
Antes de probar este ejemplo, sigue las Javainstrucciones de configuración de la guía de inicio rápido de BigQuery con bibliotecas de cliente. Para obtener más información, consulta la documentación de referencia de la API Java de BigQuery.
Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta el artículo Configurar la autenticación para bibliotecas de cliente.
Node.js
Antes de probar este ejemplo, sigue las Node.jsinstrucciones de configuración de la guía de inicio rápido de BigQuery con bibliotecas de cliente. Para obtener más información, consulta la documentación de referencia de la API Node.js de BigQuery.
Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta el artículo Configurar la autenticación para bibliotecas de cliente.
Actualiza la lista de acceso al conjunto de datos. Para ello, elimina la entrada especificada de la lista actual con el métodoDataset#get()
para obtener los metadatos actuales. Modifica la propiedad de acceso para excluir la entidad que quieras y, a continuación, llama a la función
Dataset#setMetadata()
para aplicar la lista de acceso actualizada.
Python
Antes de probar este ejemplo, sigue las Pythoninstrucciones de configuración de la guía de inicio rápido de BigQuery con bibliotecas de cliente. Para obtener más información, consulta la documentación de referencia de la API Python de BigQuery.
Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta el artículo Configurar la autenticación para bibliotecas de cliente.
Asigna a la propiedaddataset.access_entries
los controles de acceso de un conjunto de datos. A continuación, llama a la función client.update_dataset()
para actualizar la propiedad.
Trabajar con controles de acceso a tablas y vistas
Las vistas se tratan como recursos de tabla en BigQuery. Puedes proporcionar acceso a una tabla o una vista concediendo a una entidad principal de gestión de identidades y accesos un rol predefinido o personalizado que determine lo que puede hacer la entidad principal con la tabla o la vista. También se conoce como adjuntar una política de permiso a un recurso. Después de conceder acceso, puede ver los controles de acceso de la tabla o la vista, así como revocar el acceso a la tabla o la vista.
Conceder acceso a una tabla o una vista
Para disfrutar de un control de acceso pormenorizado, puedes asignar un rol de gestión de identidades y accesos predefinido o personalizado a una tabla o vista concretas. La tabla o la vista también hereda los controles de acceso especificados a nivel de conjunto de datos y superiores. Por ejemplo, si asignas a un principal el rol Propietario de datos de BigQuery en un conjunto de datos, ese principal también tendrá permisos de Propietario de datos de BigQuery en las tablas y vistas del conjunto de datos.
Para conceder acceso a una tabla o una vista, seleccione una de las siguientes opciones:
Consola
Ve a la página BigQuery.
En el panel Explorador, expande tu proyecto y selecciona la tabla o la vista que quieras compartir.
Haz clic en Compartir
.Haz clic en
Añadir principal.En el campo New principals (Nuevos principales), introduce un principal.
En la lista Selecciona un rol, elige un rol predefinido o un rol personalizado.
Haz clic en Guardar.
Para volver a la tabla o ver los detalles, haz clic en Cerrar.
SQL
Para conceder acceso a tablas o vistas a principales, usa la
GRANT
instrucción DCL:
En la Google Cloud consola, ve a la página BigQuery.
En el editor de consultas, introduce la siguiente instrucción:
GRANT `ROLE_LIST` ON RESOURCE_TYPE RESOURCE_NAME TO "USER_LIST"
Haz los cambios siguientes:
ROLE_LIST
: un rol o una lista de roles separados por comas que quieras concederRESOURCE_TYPE
: el tipo de recurso al que se aplica el rol.Entre los valores admitidos se incluyen los siguientes:
TABLE
,VIEW
,MATERIALIZED VIEW
yEXTERNAL TABLE
.RESOURCE_NAME
: el nombre del recurso al que quieres conceder el permisoUSER_LIST
: lista de usuarios separada por comas a los que se les ha concedido el rolPara ver una lista de formatos válidos, consulta
user_list
.
Haz clic en
Ejecutar.
Para obtener más información sobre cómo ejecutar consultas, consulta Ejecutar una consulta interactiva.
En el siguiente ejemplo se asigna el rol Lector de datos de BigQuery en myTable
:
GRANT `roles/bigquery.dataViewer`
ON TABLE `myProject`.myDataset.myTable
TO "user:user@example.com", "user:user2@example.com"
bq
-
In the Google Cloud console, activate Cloud Shell.
At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.
Para dar acceso a una tabla o a una vista, usa el comando
bq add-iam-policy-binding
:bq add-iam-policy-binding --member=MEMBER_TYPE:MEMBER --role=ROLE --table=true RESOURCE
Haz los cambios siguientes:
- MEMBER_TYPE: el tipo de miembro, como
user
,group
,serviceAccount
odomain
. - MEMBER: la dirección de correo o el nombre de dominio del miembro.
- ROLE: el rol que quieres asignar al miembro.
- RESOURCE: el nombre de la tabla o la vista cuya política quieras actualizar.
- MEMBER_TYPE: el tipo de miembro, como
- Abre Cloud Shell.
-
Define el Google Cloud proyecto Google Cloud predeterminado en el que quieras aplicar tus configuraciones de Terraform.
Solo tiene que ejecutar este comando una vez por proyecto y puede hacerlo en cualquier directorio.
export GOOGLE_CLOUD_PROJECT=PROJECT_ID
Las variables de entorno se anulan si defines valores explícitos en el archivo de configuración de Terraform.
-
En Cloud Shell, crea un directorio y un archivo nuevo en ese directorio. El nombre del archivo debe tener la extensión
.tf
. Por ejemplo,main.tf
. En este tutorial, nos referiremos al archivo comomain.tf
.mkdir DIRECTORY && cd DIRECTORY && touch main.tf
-
Si estás siguiendo un tutorial, puedes copiar el código de ejemplo de cada sección o paso.
Copia el código de ejemplo en el archivo
main.tf
que acabas de crear.También puedes copiar el código de GitHub. Se recomienda cuando el fragmento de Terraform forma parte de una solución integral.
- Revisa y modifica los parámetros de ejemplo para aplicarlos a tu entorno.
- Guarda los cambios.
-
Inicializa Terraform. Solo tienes que hacerlo una vez por directorio.
terraform init
Si quieres usar la versión más reciente del proveedor de Google, incluye la opción
-upgrade
:terraform init -upgrade
-
Revisa la configuración y comprueba que los recursos que va a crear o actualizar Terraform se ajustan a tus expectativas:
terraform plan
Haga las correcciones necesarias en la configuración.
-
Aplica la configuración de Terraform ejecutando el siguiente comando e introduciendo
yes
en la petición:terraform apply
Espera hasta que Terraform muestre el mensaje "Apply complete!".
- Abre tu Google Cloud proyecto para ver los resultados. En la Google Cloud consola, ve a tus recursos en la interfaz de usuario para asegurarte de que Terraform los ha creado o actualizado.
Para obtener la política actual, llama al método
tables.getIamPolicy
.Edita la política para añadir miembros o controles de acceso, o ambos. Para ver el formato que exige la política, consulta el tema de referencia Política.
Llama a
tables.setIamPolicy
para escribir la política actualizada.
Terraform
Usa los recursos de google_bigquery_table_iam
para actualizar el acceso a una tabla.
Definir la política de acceso de una tabla
En el siguiente ejemplo se muestra cómo usar el recurso google_bigquery_table_iam_policy
para definir la política de IAM de la tabla mytable
. De esta forma, se sustituirá cualquier política que ya esté asociada a la tabla:
# This file sets the IAM policy for the table created by # https://github.com/terraform-google-modules/terraform-docs-samples/blob/main/bigquery/bigquery_create_table/main.tf. # You must place it in the same local directory as that main.tf file, # and you must have already applied that main.tf file to create # the "default" table resource with a table_id of "mytable". data "google_iam_policy" "iam_policy" { binding { role = "roles/bigquery.dataOwner" members = [ "user:user@example.com", ] } } resource "google_bigquery_table_iam_policy" "table_iam_policy" { dataset_id = google_bigquery_table.default.dataset_id table_id = google_bigquery_table.default.table_id policy_data = data.google_iam_policy.iam_policy.policy_data }
Definir la pertenencia a un rol de una tabla
En el siguiente ejemplo se muestra cómo usar el recurso google_bigquery_table_iam_binding
para definir la pertenencia a un rol determinado en la tabla mytable
. De esta forma, se sustituirá cualquier pertenencia a ese rol.
Se conservarán otros roles de la política de gestión de identidades y accesos de la tabla.
# This file sets membership in an IAM role for the table created by # https://github.com/terraform-google-modules/terraform-docs-samples/blob/main/bigquery/bigquery_create_table/main.tf. # You must place it in the same local directory as that main.tf file, # and you must have already applied that main.tf file to create # the "default" table resource with a table_id of "mytable". resource "google_bigquery_table_iam_binding" "table_iam_binding" { dataset_id = google_bigquery_table.default.dataset_id table_id = google_bigquery_table.default.table_id role = "roles/bigquery.dataOwner" members = [ "group:group@example.com", ] }
Definir la pertenencia a un rol para un solo principal
En el siguiente ejemplo se muestra cómo usar el recurso google_bigquery_table_iam_member
para actualizar la política de gestión de identidades y accesos de la tabla mytable
y asignar un rol a un principal. Actualizar esta política de IAM no afecta al acceso de ninguna otra entidad a la que se le haya concedido ese rol para el conjunto de datos.
# This file adds a member to an IAM role for the table created by # https://github.com/terraform-google-modules/terraform-docs-samples/blob/main/bigquery/bigquery_create_table/main.tf. # You must place it in the same local directory as that main.tf file, # and you must have already applied that main.tf file to create # the "default" table resource with a table_id of "mytable". resource "google_bigquery_table_iam_member" "table_iam_member" { dataset_id = google_bigquery_table.default.dataset_id table_id = google_bigquery_table.default.table_id role = "roles/bigquery.dataEditor" member = "serviceAccount:bqcx-1234567891011-12a3@gcp-sa-bigquery-condel.iam.gserviceaccount.com" }
Para aplicar la configuración de Terraform en un proyecto, sigue los pasos que se indican en las siguientes secciones. Google Cloud
Preparar Cloud Shell
Preparar el directorio
Cada archivo de configuración de Terraform debe tener su propio directorio (también llamado módulo raíz).
Aplica los cambios
API
Go
Antes de probar este ejemplo, sigue las Goinstrucciones de configuración de la guía de inicio rápido de BigQuery con bibliotecas de cliente. Para obtener más información, consulta la documentación de referencia de la API Go de BigQuery.
Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta el artículo Configurar la autenticación para bibliotecas de cliente.
Llama a la funciónIAM().SetPolicy()
del recurso para guardar los cambios en la política de acceso de una tabla o una vista.
Java
Antes de probar este ejemplo, sigue las Javainstrucciones de configuración de la guía de inicio rápido de BigQuery con bibliotecas de cliente. Para obtener más información, consulta la documentación de referencia de la API Java de BigQuery.
Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta el artículo Configurar la autenticación para bibliotecas de cliente.
Node.js
Antes de probar este ejemplo, sigue las Node.jsinstrucciones de configuración de la guía de inicio rápido de BigQuery con bibliotecas de cliente. Para obtener más información, consulta la documentación de referencia de la API Node.js de BigQuery.
Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta el artículo Configurar la autenticación para bibliotecas de cliente.
Llama a la funciónTable#getIamPolicy()
para obtener la política de gestión de identidades y accesos actual de una tabla o una vista, modifica la política añadiendo nuevas vinculaciones y, a continuación, usa la función Table#setIamPolicy()
para guardar los cambios en la política de acceso.
Python
Antes de probar este ejemplo, sigue las Pythoninstrucciones de configuración de la guía de inicio rápido de BigQuery con bibliotecas de cliente. Para obtener más información, consulta la documentación de referencia de la API Python de BigQuery.
Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta el artículo Configurar la autenticación para bibliotecas de cliente.
Llama a la funciónclient.set_iam_policy()
para guardar los cambios en la política de acceso de una tabla o una vista.
Roles predefinidos que conceden acceso a tablas y vistas
Las vistas se tratan como recursos de tabla en BigQuery. Para obtener un control de acceso pormenorizado, puedes asignar un rol de gestión de identidades y accesos predefinido o personalizado a una tabla o vista específica. La tabla o la vista también hereda los controles de acceso especificados a nivel de conjunto de datos y superiores. Por ejemplo, si asignas a una entidad el rol Propietario de datos de BigQuery en un conjunto de datos, esa entidad también tendrá permisos de propietario de datos en las tablas y vistas del conjunto de datos.
Los siguientes roles de gestión de identidades y accesos predefinidos tienen permisos en tablas o vistas.
Rol | Descripción |
---|---|
Propietario de datos de BigQuery
(roles/bigquery.dataOwner ) |
Si se concede en una tabla o una vista, este rol otorga los siguientes permisos:
|
Editor de datos de BigQuery
(roles/bigquery.dataEditor ) |
Si se concede en una tabla o una vista, este rol otorga los siguientes permisos:
|
Lector de datos de BigQuery
(roles/bigquery.dataViewer ) |
Si se concede en una tabla o una vista, este rol otorga los siguientes permisos:
|
Visor de metadatos de BigQuery
(roles/bigquery.metadataViewer ) |
Si se concede en una tabla o una vista, este rol otorga los siguientes permisos:
|
Permisos de tablas y vistas
Las vistas se tratan como recursos de tabla en BigQuery. Todos los permisos a nivel de tabla se aplican a las vistas.
La mayoría de los permisos que empiezan por bigquery.tables
se aplican a nivel de tabla.
bigquery.tables.create
y bigquery.tables.list
no. Para crear y enumerar tablas o vistas, se deben conceder los permisos bigquery.tables.create
y bigquery.tables.list
a un rol en un contenedor superior (el conjunto de datos o el proyecto).
En la siguiente tabla se enumeran todos los permisos de tablas y vistas, así como el recurso de nivel más bajo al que se pueden conceder.
Permiso | Recurso | Acción |
---|---|---|
bigquery.tables.create |
Conjunto de datos | Crea tablas en el conjunto de datos. |
bigquery.tables.createIndex |
Tabla | Crea un índice de búsqueda en la tabla. |
bigquery.tables.deleteIndex |
Tabla | Eliminar un índice de búsqueda de la tabla. |
bigquery.tables.createSnapshot |
Tabla | Crea una captura de la tabla. Para crear una captura, se necesitan varios permisos adicionales a nivel de tabla y de conjunto de datos. Para obtener más información, consulta la sección sobre permisos y roles para crear copias de tablas. |
bigquery.tables.deleteSnapshot |
Tabla | Elimina una captura de la tabla. |
bigquery.tables.delete |
Tabla | Elimina una tabla. |
bigquery.tables.createTagBinding |
Tabla | Crea enlaces de etiquetas de recursos en una tabla. |
bigquery.tables.deleteTagBinding |
Tabla | Elimina las vinculaciones de etiquetas de recursos de una tabla. |
bigquery.tables.listTagBindings |
Tabla | Muestra las vinculaciones de etiquetas de recursos de una tabla. |
bigquery.tables.listEffectiveTags |
Tabla | Lista las etiquetas efectivas (aplicadas y heredadas) de la tabla. |
bigquery.tables.export |
Tabla | Exporta los datos de la tabla. Para ejecutar una tarea de exportación, también se necesitan permisos de bigquery.jobs.create . |
bigquery.tables.get |
Tabla | Obtiene los metadatos de una tabla. |
bigquery.tables.getData |
Tabla | Consultar los datos de la tabla. Para ejecutar una tarea de consulta, también se necesitan permisos de bigquery.jobs.create . |
bigquery.tables.getIamPolicy |
Tabla | Obtiene los controles de acceso de la tabla. |
bigquery.tables.list |
Conjunto de datos | Muestra todas las tablas y los metadatos de las tablas del conjunto de datos. |
bigquery.tables.replicateData |
Tabla | Replicar datos de tablas. Este permiso es necesario para crear réplicas de vistas materializadas. |
bigquery.tables.restoreSnapshot |
Tabla | Restaurar una captura de una tabla. |
bigquery.tables.setCategory |
Tabla | Defina etiquetas de política en el esquema de la tabla. |
bigquery.tables.setColumnDataPolicy |
Tabla | Definir políticas de acceso a nivel de columna en una tabla. |
bigquery.tables.setIamPolicy |
Tabla | Define controles de acceso en una tabla. |
bigquery.tables.update |
Tabla | Actualiza la tabla. metadata. bigquery.tables.get también es necesario para actualizar los metadatos de la tabla en la consola. |
bigquery.tables.updateData |
Tabla | Actualiza los datos de la tabla. |
bigquery.tables.updateIndex |
Tabla | Actualiza un índice de búsqueda en la tabla. |
Ver los controles de acceso de una tabla o una vista
Para ver los controles de acceso de una tabla o una vista, elija una de las siguientes opciones:
Consola
Ve a la página BigQuery.
En el panel Explorador, expande tu proyecto, expande un conjunto de datos y selecciona una tabla o una vista.
Haz clic en Compartir
.Los controles de acceso a la tabla o la vista aparecen en el panel Compartir.
bq
-
In the Google Cloud console, activate Cloud Shell.
At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.
Para obtener una política de acceso y guardarla en un archivo local en formato JSON, usa el comando
bq get-iam-policy
en Cloud Shell:bq get-iam-policy \ --table=true \ PROJECT_ID:DATASET.RESOURCE > PATH_TO_FILE
Haz los cambios siguientes:
- PROJECT_ID: tu ID de proyecto
- DATASET: el nombre del conjunto de datos
- RESOURCE: el nombre de la tabla o de la vista cuya política quieres ver
- PATH_TO_FILE: la ruta al archivo JSON de tu máquina local
En la Google Cloud consola, ve a la página BigQuery.
En el editor de consultas, introduce la siguiente instrucción:
SELECT COLUMN_LIST FROM PROJECT_ID.`region-REGION`.INFORMATION_SCHEMA.OBJECT_PRIVILEGES WHERE object_schema = "DATASET" AND object_name = "TABLE";
Haz los cambios siguientes:
- COLUMN_LIST: una lista separada por comas de las columnas de la
vista
INFORMATION_SCHEMA.OBJECT_PRIVILEGES
- PROJECT_ID: tu ID de proyecto
- REGION: un calificador de región
- DATASET: el nombre de un conjunto de datos que contiene la tabla o la vista
- TABLE: el nombre de la tabla o la vista
- COLUMN_LIST: una lista separada por comas de las columnas de la
vista
Haz clic en
Ejecutar.
SQL
Consulta la INFORMATION_SCHEMA.OBJECT_PRIVILEGES
vista.
Las consultas para obtener los controles de acceso de una tabla o una vista deben especificar object_schema
y object_name
.
Para obtener más información sobre cómo ejecutar consultas, consulta Ejecutar una consulta interactiva.
Ejemplo:
SELECT object_name, privilege_type, grantee FROM my_project.`region-us`.INFORMATION_SCHEMA.OBJECT_PRIVILEGES WHERE object_schema = "mydataset" AND object_name = "mytable";
+------------------+-----------------------------+--------------------------+
| object_name | privilege_type | grantee |
+------------------+-----------------------------+--------------------------+
| mytable | roles/bigquery.dataEditor | group:group@example.com|
| mytable | roles/bigquery.dataOwner | user:user@example.com|
+------------------+-----------------------------+--------------------------+
API
Para obtener la política actual, llama al método tables.getIamPolicy
.
Go
Antes de probar este ejemplo, sigue las Goinstrucciones de configuración de la guía de inicio rápido de BigQuery con bibliotecas de cliente. Para obtener más información, consulta la documentación de referencia de la API Go de BigQuery.
Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta el artículo Configurar la autenticación para bibliotecas de cliente.
Llama a la funciónIAM().Policy()
del recurso. A continuación, llama a la función Roles()
para obtener la política de acceso de una tabla o una vista.
Java
Antes de probar este ejemplo, sigue las Javainstrucciones de configuración de la guía de inicio rápido de BigQuery con bibliotecas de cliente. Para obtener más información, consulta la documentación de referencia de la API Java de BigQuery.
Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta el artículo Configurar la autenticación para bibliotecas de cliente.
Node.js
Antes de probar este ejemplo, sigue las Node.jsinstrucciones de configuración de la guía de inicio rápido de BigQuery con bibliotecas de cliente. Para obtener más información, consulta la documentación de referencia de la API Node.js de BigQuery.
Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta el artículo Configurar la autenticación para bibliotecas de cliente.
Recupera la política de gestión de identidades y accesos de una tabla o una vista con la funciónTable#getIamPolicy()
.
Los detalles de la política de acceso están disponibles en el objeto de política devuelto.
Revocar el acceso a una tabla o una vista
Para revocar el acceso a una tabla o una vista, selecciona una de las siguientes opciones:
Consola
Ve a la página BigQuery.
En el panel Explorador, expande tu proyecto, expande un conjunto de datos y selecciona una tabla o una vista.
En el panel de detalles, haz clic en Compartir.
En el cuadro de diálogo Compartir, despliega el principal cuyo acceso quieras revocar.
Haz clic en
Eliminar.En el cuadro de diálogo ¿Quitar rol del principal?, haz clic en Quitar.
Para volver a la tabla o ver los detalles, haz clic en Cerrar.
SQL
Para quitar el acceso a tablas o vistas de principales, usa la
REVOKE
instrucción DCL:
En la Google Cloud consola, ve a la página BigQuery.
En el editor de consultas, introduce la siguiente instrucción:
REVOKE `ROLE_LIST` ON RESOURCE_TYPE RESOURCE_NAME FROM "USER_LIST"
Haz los cambios siguientes:
ROLE_LIST
: un rol o una lista de roles separados por comas que quieras revocarRESOURCE_TYPE
: el tipo de recurso del que se revoca el rolEntre los valores admitidos se incluyen los siguientes:
TABLE
,VIEW
,MATERIALIZED VIEW
yEXTERNAL TABLE
.RESOURCE_NAME
: el nombre del recurso cuyo permiso quieres revocarUSER_LIST
: lista de usuarios separados por comas a los que se les revocarán los roles.Para ver una lista de formatos válidos, consulta
user_list
.
Haz clic en
Ejecutar.
Para obtener más información sobre cómo ejecutar consultas, consulta Ejecutar una consulta interactiva.
En el siguiente ejemplo, se revoca el rol Propietario de datos de BigQuery en myTable
:
REVOKE `roles/bigquery.dataOwner`
ON TABLE `myProject`.myDataset.myTable
FROM "group:group@example.com", "serviceAccount:user@myproject.iam.gserviceaccount.com"
bq
-
In the Google Cloud console, activate Cloud Shell.
At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.
Para revocar el acceso a una tabla o una vista, usa el comando
bq remove-iam-policy-binding
:bq remove-iam-policy-binding --member=MEMBER_TYPE:MEMBER --role=ROLE --table=true RESOURCE
Haz los cambios siguientes:
- MEMBER_TYPE: el tipo de miembro, como
user
,group
,serviceAccount
odomain
- MEMBER: la dirección de correo o el nombre de dominio del miembro
- ROLE: el rol que quieres revocar al miembro
- RESOURCE: el nombre de la tabla o la vista cuya política quieras actualizar
- MEMBER_TYPE: el tipo de miembro, como
Para obtener la política actual, llama al método
tables.getIamPolicy
.Edita la política para eliminar miembros, enlaces o ambos. Para ver el formato que exige la política, consulta el tema de referencia Política.
Llama a
tables.setIamPolicy
para escribir la política actualizada.
API
Go
Antes de probar este ejemplo, sigue las Goinstrucciones de configuración de la guía de inicio rápido de BigQuery con bibliotecas de cliente. Para obtener más información, consulta la documentación de referencia de la API Go de BigQuery.
Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta el artículo Configurar la autenticación para bibliotecas de cliente.
Llama a la funciónpolicy.Remove()
para quitar el acceso.
A continuación, llama a la función IAM().SetPolicy()
para guardar los cambios en la política de acceso de una tabla o una vista.
Java
Antes de probar este ejemplo, sigue las Javainstrucciones de configuración de la guía de inicio rápido de BigQuery con bibliotecas de cliente. Para obtener más información, consulta la documentación de referencia de la API Java de BigQuery.
Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta el artículo Configurar la autenticación para bibliotecas de cliente.
Node.js
Antes de probar este ejemplo, sigue las Node.jsinstrucciones de configuración de la guía de inicio rápido de BigQuery con bibliotecas de cliente. Para obtener más información, consulta la documentación de referencia de la API Node.js de BigQuery.
Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta el artículo Configurar la autenticación para bibliotecas de cliente.
Recupera la política de gestión de identidades y accesos actual de una tabla o una vista con el métodoTable#getIamPolicy()
.
Modifica la política para quitar el rol o el principal que quieras y, a continuación, aplica la política actualizada con el método
Table#setIamPolicy()
.
Trabajar con controles de acceso para rutinas
Para enviar comentarios o solicitar asistencia sobre esta función, escribe un correo a bq-govsec-eng@google.com.
Puedes proporcionar acceso a una rutina concediendo a una entidad principal de gestión de identidades y accesos](/iam/docs/principal-identifiers#allow) un rol predefinido o personalizado que determine lo que puede hacer la entidad principal con la rutina. También se conoce como adjuntar una política de permiso a un recurso. Después de conceder acceso, puedes ver los controles de acceso de la rutina y revocar el acceso a ella.
Dar acceso a una rutina
Para tener un control de acceso pormenorizado, puedes asignar un rol de gestión de identidades y accesos predefinido o personalizado a una rutina específica. La rutina también hereda los controles de acceso especificados en el nivel del conjunto de datos y en niveles superiores. Por ejemplo, si asignas el rol Propietario de datos de BigQuery a una entidad en un conjunto de datos, esa entidad también tendrá permisos de propietario de datos en las rutinas del conjunto de datos.
Selecciona una de las opciones siguientes:
Consola
Ve a la página BigQuery.
En el panel Explorador, expande tu proyecto, tu conjunto de datos y Rutinas. A continuación, selecciona una rutina.
Haz clic en Compartir
.Haz clic en
Añadir miembros.En el campo Miembros nuevos, introduce un principal.
En la lista Selecciona un rol, elige un rol predefinido o un rol personalizado.
Haz clic en Guardar.
Para volver a la información de la rutina, haz clic en Hecho.
bq
-
In the Google Cloud console, activate Cloud Shell.
At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.
Para escribir la información de la rutina (incluidos los controles de acceso) en un archivo JSON, usa el comando
bq get-iam-policy
:bq get-iam-policy \ PROJECT_ID:DATASET.ROUTINE \ > PATH_TO_FILE
Haz los cambios siguientes:
- PROJECT_ID: tu ID de proyecto
- DATASET: el nombre del conjunto de datos que contiene la rutina que quieres actualizar
- ROUTINE: el nombre del recurso que se va a actualizar
- PATH_TO_FILE: la ruta al archivo JSON en tu máquina local
Haz cambios en la sección
bindings
del archivo JSON. Una vinculación vincula uno o varios principales a un solorole
. Las entidades principales pueden ser cuentas de usuario, cuentas de servicio, grupos de Google y dominios. Por ejemplo, la secciónbindings
del archivo JSON de una rutina tendría el siguiente aspecto:{ "bindings": [ { "role": "roles/bigquery.dataViewer", "members": [ "user:user@example.com", "group:group@example.com", "domain:example.com", ] }, ], "etag": "BwWWja0YfJA=", "version": 1 }
Para actualizar la política de acceso, usa el comando
bq set-iam-policy
:bq set-iam-policy PROJECT_ID:DATASET.ROUTINE PATH_TO_FILE
Para verificar los cambios en el control de acceso, vuelve a usar el comando
bq get-iam-policy
sin escribir la información en un archivo:bq get-iam-policy --format=prettyjson \\ PROJECT_ID:DATASET.ROUTINE
Para obtener la política actual, llama al método
routines.getIamPolicy
.Edita la política para añadir entidades principales, enlaces o ambos. Para ver el formato que exige la política, consulta el tema de referencia Política.
Llama a
routines.setIamPolicy
para escribir la política actualizada.
API
Roles predefinidos que conceden acceso a rutinas
Para tener un control de acceso pormenorizado, puedes asignar un rol de gestión de identidades y accesos predefinido o personalizado a una rutina específica. La rutina también hereda los controles de acceso especificados en el nivel del conjunto de datos y en niveles superiores. Por ejemplo, si asignas el rol Propietario de datos a un principal en un conjunto de datos, ese principal también tendrá permisos de Propietario de datos en las rutinas del conjunto de datos a través de la herencia.
Los siguientes roles de gestión de identidades y accesos predefinidos tienen permisos en rutinas.
Rol | Descripción |
---|---|
Propietario de datos de BigQuery
(roles/bigquery.dataOwner ) |
Cuando se concede en una rutina, este rol otorga los siguientes permisos:
No debe asignar el rol Propietario de datos a nivel de rutina. El rol Editor de datos también concede todos los permisos de la rutina y es un rol menos permisivo. |
Editor de datos de BigQuery
(roles/bigquery.dataEditor ) |
Cuando se concede en una rutina, este rol otorga los siguientes permisos:
|
Lector de datos de BigQuery
(roles/bigquery.dataViewer ) |
Cuando se concede en una rutina, este rol otorga los siguientes permisos:
|
Visor de metadatos de BigQuery
(roles/bigquery.metadataViewer ) |
Cuando se concede en una rutina, este rol otorga los siguientes permisos:
|
Permisos de las rutinas
La mayoría de los permisos que empiezan por bigquery.routines
se aplican a nivel de rutina.
bigquery.routines.create
y bigquery.routines.list
no. Para crear y enumerar rutinas, se deben conceder los permisos bigquery.routines.create
y bigquery.routines.list
a un rol en el contenedor superior, es decir, el conjunto de datos.
En la siguiente tabla se enumeran todos los permisos de las rutinas y el recurso de nivel más bajo al que se pueden conceder.
Permiso | Recurso | Descripción |
---|---|---|
bigquery.routines.create |
Conjunto de datos | Crea una rutina en el conjunto de datos. Este permiso también requiere bigquery.jobs.create para ejecutar una tarea de consulta que contenga una instrucción CREATE FUNCTION . |
bigquery.routines.delete |
Rutina | Eliminar una rutina. |
bigquery.routines.get |
Rutina | Hacer referencia a una rutina creada por otra persona. Este permiso también requiere bigquery.jobs.create para ejecutar una tarea de consulta que haga referencia a la rutina. Además, necesitas permiso para acceder a cualquier recurso al que haga referencia la rutina, como tablas o vistas. |
bigquery.routines.list |
Conjunto de datos | Muestra las rutinas del conjunto de datos y los metadatos de las rutinas. |
bigquery.routines.update |
Rutina | Actualizar definiciones y metadatos de rutinas. |
bigquery.routines.getIamPolicy |
Rutina | Obtener controles de acceso para la rutina. |
bigquery.routines.setIamPolicy |
Rutina | Define los controles de acceso de la rutina. |
Ver los controles de acceso de una rutina
Para ver los controles de acceso de una rutina, elige una de las siguientes opciones:
Consola
Ve a la página BigQuery.
En el panel Explorador, expande tu proyecto, el conjunto de datos y Rutinas. A continuación, selecciona una rutina.
Haz clic en Compartir
.Los controles de acceso de la rutina aparecen en el panel Compartir.
bq
El comando bq get-iam-policy
no permite ver los controles de acceso de una rutina.
SQL
En la
INFORMATION_SCHEMA.OBJECT_PRIVILEGES
vista
no se muestran los controles de acceso de las rutinas.
API
Para obtener la política actual, llama al método routines.getIamPolicy
.
Revocar el acceso a una rutina
Para revocar el acceso a una rutina, selecciona una de las siguientes opciones:
Consola
Ve a la página BigQuery.
En el panel Explorador, expande tu proyecto, un conjunto de datos y Rutinas. A continuación, selecciona una rutina.
En el panel de detalles, haz clic en Compartir > Permisos.
En el cuadro de diálogo Permisos de rutina, despliega la entidad de seguridad cuyo acceso quieras revocar.
Haz clic en
Eliminar principal.En el cuadro de diálogo ¿Quitar rol del principal?, haz clic en Quitar.
Haz clic en Cerrar.
bq
-
In the Google Cloud console, activate Cloud Shell.
At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.
Para escribir la información de la rutina (incluidos los controles de acceso) en un archivo JSON, usa el comando
bq get-iam-policy
:bq get-iam-policy --routine PROJECT_ID:DATASET.ROUTINE > PATH_TO_FILE
Haz los cambios siguientes:
- PROJECT_ID: tu ID de proyecto
- DATASET: el nombre del conjunto de datos que contiene la rutina que quieres actualizar
- ROUTINE: el nombre del recurso que se va a actualizar
- PATH_TO_FILE: la ruta al archivo JSON en tu máquina local
En el archivo de políticas, el valor de
version
sigue siendo1
. Este número hace referencia a la versión del esquema de la política de gestión de identidades y accesos, no a la versión de la política. El valor deetag
value es el número de versión de la política.Haz cambios en la sección
access
del archivo JSON. Puedes quitar cualquiera de las entradas despecialGroup
:projectOwners
,projectWriters
,projectReaders
yallAuthenticatedUsers
. También puedes quitar cualquiera de los siguientes elementos:userByEmail
,groupByEmail
ydomain
.Por ejemplo, la sección
access
de un archivo JSON de una rutina tendría el siguiente aspecto:{ "bindings": [ { "role": "roles/bigquery.dataViewer", "members": [ "user:user@example.com", "group:group@example.com", "domain:google.com", ] }, ], "etag": "BwWWja0YfJA=", "version": 1 }
Para actualizar la política de acceso, usa el comando
bq set-iam-policy
:bq set-iam-policy --routine PROJECT_ID:DATASET.ROUTINE PATH_TO_FILE
Para verificar los cambios en el control de acceso, vuelve a usar el comando
get-iam-policy
sin escribir la información en un archivo:bq get-iam-policy --routine --format=prettyjson PROJECT_ID:DATASET.ROUTINE
Para obtener la política actual, llama al método
routines.getIamPolicy
.Edita la política para añadir entidades principales o enlaces, o ambos. Para ver el formato que exige la política, consulta el tema de referencia Política.
API
Ver los controles de acceso heredados de un recurso
Puedes consultar los roles de gestión de identidades y accesos heredados de un recurso mediante la interfaz web de BigQuery. Necesitarás los permisos adecuados para ver la herencia en la consola. Para examinar la herencia de un conjunto de datos, una tabla, una vista o una rutina, sigue estos pasos:
En la Google Cloud consola, ve a la página BigQuery.
En el panel Explorador, selecciona el conjunto de datos o expándelo y selecciona una tabla, una vista o una rutina.
En un conjunto de datos, haz clic en Compartir. En el caso de una tabla, una vista o una rutina, haz clic en Compartir.
Comprueba que la opción Mostrar roles heredados en la tabla esté habilitada.
Despliega un rol de la tabla.
En la columna Herencia, el icono hexagonal indica si el rol se ha heredado de un recurso superior.
Denegar el acceso a un recurso
Las políticas de denegación de gestión de identidades y accesos te permiten definir medidas de protección para el acceso a los recursos de BigQuery. Puedes definir reglas de denegación que impidan que las principales seleccionadas usen determinados permisos, independientemente de los roles que tengan asignados.
Para obtener información sobre cómo crear, actualizar y eliminar políticas de denegación, consulta el artículo Denegar el acceso a recursos.
Casos especiales
Tenga en cuenta las siguientes situaciones al crear políticas de denegación de IAM en algunos permisos de BigQuery:
El acceso a recursos autorizados (vistas, rutinas, conjuntos de datos o procedimientos almacenados) te permite crear, eliminar o manipular una tabla, así como leer y modificar los datos de la tabla, aunque no tengas permiso directo para realizar esas operaciones. También puede obtener datos o metadatos del modelo e invocar otros procedimientos almacenados en la tabla subyacente. Esta función implica que los recursos autorizados tienen los siguientes permisos:
bigquery.tables.get
bigquery.tables.list
bigquery.tables.getData
bigquery.tables.updateData
bigquery.tables.create
bigquery.tables.delete
bigquery.routines.get
bigquery.routines.list
bigquery.datasets.get
bigquery.models.getData
bigquery.models.getMetadata
Para denegar el acceso a estos recursos autorizados, añade uno de los siguientes valores al campo
deniedPrincipal
al crear la política de denegación:Valor Caso práctico principalSet://goog/public:all
Bloquea todas las entidades, incluidos los recursos autorizados. principalSet://bigquery.googleapis.com/projects/PROJECT_NUMBER/*
Bloquea todos los recursos autorizados de BigQuery del proyecto especificado. PROJECT_NUMBER
es un identificador único generado automáticamente para tu proyecto de tipoINT64
.Para eximir a determinadas entidades de la política de denegación, especifícalas en el campo
exceptionPrincipals
de la política de denegación. Por ejemplo,exceptionPrincipals: "principalSet://bigquery.googleapis.com/projects/1234/*"
.BigQuery almacena en caché los resultados de las consultas del propietario de un trabajo durante 24 horas, a los que puede acceder sin necesidad del permiso
bigquery.tables.getData
en la tabla que contiene los datos. Por lo tanto, añadir una política de denegación de gestión de identidades y accesos al permisobigquery.tables.getData
no bloquea el acceso a los resultados almacenados en caché para el propietario del trabajo hasta que caduque la caché. Para bloquear el acceso del propietario del trabajo a los resultados almacenados en caché, crea una política de denegación independiente en el permisobigquery.jobs.create
.Para evitar el acceso no intencionado a los datos al usar políticas de denegación para bloquear las operaciones de lectura de datos, te recomendamos que también revises y revoques las suscripciones que haya en el conjunto de datos.
Para crear una política de gestión de identidades y accesos de denegación para ver los controles de acceso de un conjunto de datos, deniega los siguientes permisos:
bigquery.datasets.get
bigquery.datasets.getIamPolicy
Para crear una política de gestión de identidades y accesos de denegación para actualizar los controles de acceso al conjunto de datos, deniega los siguientes permisos:
bigquery.datasets.update
bigquery.datasets.setIamPolicy
Siguientes pasos
Consulta cómo usar el
método projects.testIamPermissions
para probar el acceso de los usuarios a un recurso.