Controla el acceso a los conjuntos de datos
En este documento se describe cómo controlar el acceso a los conjuntos de datos en BigQuery.
También puedes hacer lo siguiente:
- Controla el acceso a nivel de la tabla y la vista.
- Controla el acceso en un nivel superior en la jerarquía de recursos de IAM.
Descripción general
Los permisos a nivel de conjunto de datos determinan los usuarios, grupos y cuentas de servicio a los que se les permite acceder a las tablas, vistas y datos de tabla de un conjunto de datos específico. Por ejemplo, si otorgas la función bigquery.dataOwner
de Identity and Access Management (IAM) a un usuario en un conjunto de datos específico, ese usuario puede crear, actualizar y borrar tablas y vistas en el conjunto de datos.
Puedes aplicar controles de acceso durante la creación del conjunto de datos con una llamada al método de la API datasets.insert
.
No se pueden aplicar controles de acceso durante la creación del conjunto de datos en Google Cloud Console, la herramienta de línea de comandos de bq
o las declaraciones del lenguaje de definición de datos (DDL).
Puedes aplicar los controles de acceso a un conjunto de datos después de crearlo de las siguientes maneras:
- Usa Cloud Console.
- Usa las declaraciones DCL
GRANT
yREVOKE
. - Usa el comando
bq update
en la herramienta de línea de comandos debq
. - Mediante una llamada al método de la API
datasets.patch
- Usa bibliotecas cliente.
Antes de comenzar
Otorga funciones de IAM que otorguen a los usuarios los permisos necesarios para realizar cada tarea en este documento.
Permisos necesarios
Para controlar el acceso a un conjunto de datos, necesitas los siguientes permisos de IAM:
bigquery.datasets.update
bigquery.datasets.get
bigquery.datasets.getIamPolicy
(te permite controlar el acceso a un conjunto de datos mediante Cloud Console)bigquery.datasets.setIamPolicy
(te permite controlar el acceso a un conjunto de datos mediante Cloud Console)
La función predefinida de IAM roles/bigquery.dataOwner
incluye los permisos que necesitas para controlar el acceso a un conjunto de datos.
Para obtener más información sobre las funciones y los permisos de IAM en BigQuery, consulta Funciones y permisos predefinidos.
Otorga acceso a un conjunto de datos
Para otorgar acceso a un conjunto de datos, sigue estos pasos:
Console
En el panel Explorador, expande tu proyecto y selecciona un conjunto de datos.
En el panel de detalles, haz clic en Compartir > Permisos.
Haz clic en Agregar principal.
En el campo Principales nuevos, ingresa la entidad que deseas agregar. Puedes agregar cualquiera de las siguientes entidades:
- Correo electrónico de Cuenta de Google: Otorga a una Cuenta de Google individual acceso al conjunto de datos.
- Grupo de Google: Otorga a todos los miembros de un Grupo de Google acceso al conjunto de datos.
- Dominio de Google Apps: Otorga a todos los usuarios y grupos de un dominio de Google acceso al conjunto de datos.
- Cuenta de servicio: Otorga acceso al conjunto de datos a una cuenta de servicio.
- Cualquiera: Ingresa
allUsers
para otorgar acceso al público general. - Todas las Cuentas de Google: ingresa
allAuthenticatedUsers
para otorgar acceso a todas las cuentas de servicio y a todos los usuarios de Internet que se hayan autenticado con una Cuenta de Google. Por ejemplo,user@gmail.com
.
En Selecciona una función, selecciona BigQuery y una función de IAM predefinida adecuada para los miembros nuevos. Para obtener más información sobre los permisos asignados a cada función de BigQuery predefinida, consulta la sección Funciones de la página de control de acceso.
Haga clic en Listo.
SQL
Usa la siguiente declaración GRANT
para otorgar la función Visualizador de datos (roles/bigquery.dataViewer
) al usuario joe@example.com
en tu conjunto de datos.
GRANT `roles/bigquery.dataViewer`
ON SCHEMA DATASET
TO "user:joe@example.com"
Reemplaza DATASET
por el nombre del conjunto de datos en el que se encuentra el recurso.
Para obtener más información sobre la declaración DCL GRANT
, consulta Declaraciones del lenguaje de control de datos en SQL estándar.
bq
Escribe la información del conjunto de datos existente (incluidos los controles de acceso) en un archivo JSON mediante el comando
show
. Si el conjunto de datos está en un proyecto que no es tu proyecto predeterminado, agrega el ID del proyecto al nombre del conjunto de datos en el siguiente formato:project_id:dataset
.bq show \ --format=prettyjson \ project_id:dataset > path_to_file
Reemplaza lo siguiente:
- project_id es el ID del proyecto.
- dataset es el nombre del conjunto de datos.
- path_to_file es la ruta al archivo JSON en tu máquina local.
Ejemplos:
Ingresa el siguiente comando para escribir los controles de acceso de
mydataset
en un archivo JSON.mydataset
está en tu proyecto predeterminado.bq show --format=prettyjson mydataset > /tmp/mydataset.json
Ingresa el siguiente comando para escribir los controles de acceso de
mydataset
en un archivo JSON.mydataset
está enmyotherproject
.bq show --format=prettyjson \ myotherproject:mydataset > /tmp/mydataset.json
Realiza los cambios a la sección
"access"
del archivo JSON. Puedes agregar cualquiera de las entradasspecialGroup
:projectOwners
,projectWriters
,projectReaders
yallAuthenticatedUsers
. También puedes agregar o modificar cualquiera de los siguientes elementos:userByEmail
,groupByEmail
ydomain
.Por ejemplo, la sección de acceso del archivo JSON de un conjunto de datos se vería de la siguiente manera:
{ "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": "WRITER", "userByEmail": "service_account_email" }, { "role": "READER", "groupByEmail": "group_email" } ], ... }
Cuando tus ediciones estén completas, usa el comando
update
con la marca--source
para incluir el archivo JSON. Si el conjunto de datos está en un proyecto que no es tu proyecto predeterminado, agrega el ID del proyecto al nombre del conjunto de datos en el siguiente formato:project_id:dataset
.bq update \ --source path_to_file \ project_id:dataset
Reemplaza lo siguiente:
- path_to_file es la ruta al archivo JSON en tu máquina local.
- project_id es el ID del proyecto.
- dataset es el nombre del conjunto de datos.
Ejemplos:
Ingresa el siguiente comando a fin de actualizar los controles de acceso para
mydataset
.mydataset
está en tu proyecto predeterminado.bq update --source /tmp/mydataset.json mydataset
Ingresa el siguiente comando a fin de actualizar los controles de acceso para
mydataset
.mydataset
está enmyotherproject
.bq update --source /tmp/mydataset.json myotherproject:mydataset
Para verificar los cambios del control de acceso, ingresa otra vez el comando
show
sin escribir la información en un archivo.bq show --format=prettyjson dataset
o
bq show --format=prettyjson project_id:dataset
API
Realiza una llamada a datasets.insert
con un recurso de conjunto de datos definido para aplicar los controles de acceso cuando se cree el conjunto de datos. Realiza una llamada a datasets.patch
y usa la propiedad access
en el recurso Dataset
para actualizar tus controles de acceso.
Debido a que el método datasets.update
reemplaza todo el recurso de conjunto de datos, es preferible usar el método datasets.patch
para actualizar los controles de acceso.
Go
Antes de probar este ejemplo, sigue las instrucciones de configuración para Go incluidas en la guía de inicio rápido de BigQuery sobre cómo usar bibliotecas cliente. Si deseas obtener más información, consulta la documentación de referencia de la API de Go de BigQuery.
Java
Antes de probar este ejemplo, sigue las instrucciones de configuración para Java incluidas en la guía de inicio rápido de BigQuery sobre cómo usar bibliotecas cliente. Para obtener más información, consulta la documentación de referencia de la API de BigQuery para Java.
Python
Antes de probar esta muestra, sigue las instrucciones de configuración para Python incluidas en la guía de inicio rápido de BigQuery sobre cómo usar bibliotecas cliente. Si deseas obtener más información, consulta la documentación de referencia de la API de Python de BigQuery.
Establece la propiedad dataset.access_entries con los controles de acceso para un conjunto de datos. Luego, llama a la función client.update_dataset() para actualizar la propiedad.Revoca el acceso a un conjunto de datos
Para revocar el acceso a un conjunto de datos, haz lo siguiente:
Console
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, expande el rol cuya membresía deseas cambiar.
En la cuenta de usuario que deseas quitar, haz clic en Borrar
.En el cuadro de diálogo ¿Quitar miembro?, haz clic en Quitar.
Haga clic en Listo.
SQL
Usa la siguiente declaración REVOKE
para quitar la función de Visualizador de datos (roles/bigquery.dataViewer
) del usuario joe@example.com
en tu conjunto de datos.
REVOKE `roles/bigquery.dataViewer`
ON SCHEMA DATASET
FROM "user:joe@example.com"
Reemplaza DATASET
por el nombre del conjunto de datos en el que se encuentra el recurso.
Para obtener más información sobre la declaración DCL REVOKE
, consulta Declaraciones del lenguaje de control de datos en SQL estándar.
bq
Escribe la información del conjunto de datos existente (incluidos los controles de acceso) en un archivo JSON mediante el comando
show
. Si el conjunto de datos está en un proyecto que no es tu proyecto predeterminado, agrega el ID del proyecto al nombre del conjunto de datos en el siguiente formato:project_id:dataset
.bq show \ --format=prettyjson \ project_id:dataset > path_to_file
Reemplaza lo siguiente:
- project_id es el ID del proyecto.
- dataset es el nombre del conjunto de datos.
- path_to_file es la ruta al archivo JSON en tu máquina local.
Ejemplos:
Ingresa el siguiente comando para escribir los controles de acceso de
mydataset
en un archivo JSON.mydataset
está en tu proyecto predeterminado.bq show --format=prettyjson mydataset > /tmp/mydataset.json
Ingresa el siguiente comando para escribir los controles de acceso de
mydataset
en un archivo JSON.mydataset
está enmyotherproject
.bq show --format=prettyjson \ myotherproject:mydataset > /tmp/mydataset.json
Realiza los cambios a 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 de acceso del archivo JSON de un conjunto de datos se vería de la siguiente manera:
{ "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 tus ediciones estén completas, usa el comando
update
con la marca--source
para incluir el archivo JSON. Si el conjunto de datos está en un proyecto que no es tu proyecto predeterminado, agrega el ID del proyecto al nombre del conjunto de datos en el siguiente formato:project_id:dataset
.bq update \ --source path_to_file \ project_id:dataset
Reemplaza lo siguiente:
- path_to_file es la ruta al archivo JSON en tu máquina local.
- project_id es el ID del proyecto.
- dataset es el nombre del conjunto de datos.
Ejemplos:
Ingresa el siguiente comando a fin de actualizar los controles de acceso para
mydataset
.mydataset
está en tu proyecto predeterminado.bq update --source /tmp/mydataset.json mydataset
Ingresa el siguiente comando a fin de actualizar los controles de acceso para
mydataset
.mydataset
está enmyotherproject
.bq update --source /tmp/mydataset.json myotherproject:mydataset
Para verificar los cambios del control de acceso, ingresa otra vez el comando
show
sin escribir la información en un archivo.bq show --format=prettyjson dataset
o
bq show --format=prettyjson project_id:dataset
API
Realiza una llamada a datasets.patch
y usa la propiedad access
en el recurso Dataset
para actualizar tus controles de acceso.
Debido a que el método datasets.update
reemplaza todo el recurso de conjunto de datos, es preferible usar el método datasets.patch
para actualizar los controles de acceso.
Go
Antes de probar este ejemplo, sigue las instrucciones de configuración para Go incluidas en la guía de inicio rápido de BigQuery sobre cómo usar bibliotecas cliente. Si deseas obtener más información, consulta la documentación de referencia de la API de Go de BigQuery.
Python
Antes de probar esta muestra, sigue las instrucciones de configuración para Python incluidas en la guía de inicio rápido de BigQuery sobre cómo usar bibliotecas cliente. Si deseas obtener más información, consulta la documentación de referencia de la API de Python de BigQuery.
Establece la propiedad dataset.access_entries con los controles de acceso para un conjunto de datos. Luego, llama a la función client.update_dataset() para actualizar la propiedad.Próximos pasos
- Para obtener más información sobre la creación de conjuntos de datos, consulta Crea conjuntos de datos.
- Para obtener más información sobre la creación de listas de conjuntos de datos en un proyecto, consulta Haz una lista de los conjuntos de datos.
- Para obtener más información sobre los metadatos en conjuntos de datos, consulta Obtén información sobre los conjuntos de datos.
- Para obtener más información sobre el cambio de las propiedades de un conjunto de datos, consulta Cómo actualizar las propiedades de los conjunto de datos.
- Para obtener más información sobre cómo crear y administrar etiquetas, consulta cómo crear y administrar etiquetas.