Controla el acceso a los recursos con la IAM
En este documento, se describe cómo ver la política de acceso actual de un recurso, cómo otorgar acceso a un recurso y cómo revocar el acceso a un recurso.
En este documento, se supone que estás familiarizado con el sistema de Identity and Access Management (IAM) en Google Cloud.
Roles obligatorios
Para obtener los permisos que necesitas para cambiar las políticas de IAM para los recursos, pídele a tu administrador que te otorgue el rol de IAM Propietario de datos de BigQuery (roles/bigquery.dataOwner
) en el proyecto.
Para obtener más información sobre cómo otorgar roles, consulta Administra el acceso a proyectos, carpetas y organizaciones.
Este rol predefinido contiene los permisos necesarios para cambiar las políticas de IAM de los recursos. Para ver los permisos exactos que son necesarios, expande la sección Permisos requeridos:
Permisos necesarios
Se requieren los siguientes permisos para cambiar las políticas de IAM para los recursos:
-
Para configurar la política de acceso de un conjunto de datos:
bigquery.datasets.get
-
Para configurar la política de acceso de un conjunto de datos:
bigquery.datasets.update
-
Para obtener la política de acceso de un conjunto de datos (solo en la consola de Google Cloud):
bigquery.datasets.getIamPolicy
-
Para configurar la política de acceso de un conjunto de datos (solo en la consola):
bigquery.datasets.setIamPolicy
-
Para obtener la política de una tabla o vista:
bigquery.tables.getIamPolicy
-
Para establecer la política de una tabla o vista:
bigquery.tables.setIamPolicy
-
Para crear la herramienta o los trabajos de BigQuery de SQL
bigquery.jobs.create
También puedes obtener estos permisos con roles personalizados o con otros roles predefinidos.
Visualiza la política de acceso de un recurso
En las siguientes secciones, se describe cómo ver las políticas de acceso de diferentes recursos.
Visualiza la política de acceso de un conjunto de datos
Elige una de las opciones siguientes:
Console
Ve a la página de BigQuery.
En el panel Explorador, expande tu proyecto y elige un conjunto de datos.
Haz clic en > Permisos.
CompartirLas políticas de acceso al 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 existente y enviarla a un archivo local en JSON, usa el comando
bq show
en Cloud Shell:bq show \ --format=prettyjson \ PROJECT_ID:DATASET > PATH_TO_FILE
Reemplaza lo siguiente:
- PROJECT_ID: El ID de tu proyecto
- DATASET: nombre del conjunto de datos.
- PATH_TO_FILE: la ruta al archivo JSON en tu máquina local.
API
Para ver la política de acceso de un conjunto de datos, llama al método datasets.get
con un recurso dataset
definido.
La política está disponible en la propiedad access
del recurso dataset
que se muestra.
Visualiza la política de acceso de una tabla o vista
Elige una de las opciones siguientes:
Console
Ve a la página de BigQuery.
En el panel Explorador, expande tu proyecto y elige una tabla o vista.
Haz clic en
CompartirLas políticas 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 existente y enviarla a un archivo local en JSON, usa el comando
bq get-iam-policy
en Cloud Shell:bq get-iam-policy \ --table=true \ PROJECT_ID:DATASET.RESOURCE > PATH_TO_FILE
Reemplaza lo siguiente:
- PROJECT_ID: El ID de tu proyecto
- DATASET: nombre del conjunto de datos.
- RESOURCE: el nombre de la tabla o vista cuya política deseas ver
- PATH_TO_FILE: la ruta al archivo JSON en tu máquina local.
API
Para recuperar la política actual, llama al método tables.getIamPolicy
.
Otorga acceso a un recurso
En las siguientes secciones, se describe cómo conceder el acceso a diferentes recursos.
Otorga acceso a un conjunto de datos
Elige una de las opciones siguientes:
Console
Ve a la página de BigQuery.
En el panel Explorador, expande tu proyecto y elige un conjunto de datos para compartir.
Haz clic en > Permisos.
CompartirHaz clic en
Agregar principal.En el campo Principales nuevos, escribe un principal.
En la lista Elegir un rol, elige un rol predefinido o una rol personalizado.
Haz clic en Guardar.
Para volver a la información del conjunto de datos, haz clic en Cerrar.
SQL
Para otorgar a las principales acceso a los conjuntos de datos, usa la declaración DCL GRANT
:
En la consola de Google Cloud, ve a la página de BigQuery.
En el editor de consultas, escribe la siguiente oración:
GRANT `ROLE_LIST` ON SCHEMA RESOURCE_NAME TO "USER_LIST"
Reemplaza lo siguiente:
ROLE_LIST
: Un rol o lista de roles separados por comas que deseas otorgarRESOURCE_NAME
: el nombre del recurso en el que deseas otorgar el permiso.USER_LIST
: una lista separada por comas de los usuarios a los que se otorga el rol.Para obtener una lista de los formatos válidos, consulta
user_list
.
Haz clic en
Ejecutar.
Si deseas obtener información sobre cómo ejecutar consultas, visita Ejecuta una consulta interactiva.
En el siguiente ejemplo, se otorga la función de visualizador de datos en el conjunto de datos myDataset
:
GRANT `roles/bigquery.dataViewer`
ON SCHEMA `myProject`.myDataset
TO "user:raha@example-pet-store.com", "user:sasha@example-pet-store.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 existente (incluidos los controles de acceso) en un archivo JSON, usa el comando
bq show
:bq show \ --format=prettyjson \ PROJECT_ID:DATASET > PATH_TO_FILE
Reemplaza lo siguiente:
- PROJECT_ID: El ID de tu proyecto
- DATASET: nombre del conjunto de datos.
- PATH_TO_FILE: la ruta al archivo JSON en tu máquina local.
Realiza cambios a la sección
access
del archivo JSON. Puedes agregar a cualquiera de las entradasspecialGroup
:projectOwners
,projectWriters
,projectReaders
yallAuthenticatedUsers
. También puedes agregar cualquiera de los siguientes elementos:userByEmail
,groupByEmail
ydomain
.Por ejemplo, la sección
access
de un 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
bq 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
Para verificar los cambios del control de acceso, usa otra vez el comando
bq show
sin escribir la información en un archivo.bq show --format=prettyjson PROJECT_ID:DATASET
Terraform
Usa los recursos google_bigquery_dataset_iam
para actualizar el acceso a una conjunto de datos.
Configura la política de control de acceso de un recurso
En el siguiente ejemplo, se muestra cómo usar el recurso google_bigquery_dataset_iam_policy
para establecer la política de IAM para el conjunto de datos mydataset
. Esto reemplaza cualquier política existente que ya esté adjunta 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:hao@altostrat.com", ] } binding { role = "roles/bigquery.dataOwner" members = [ "group:dba@altostrat.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 }
Establece la membresía de roles para un conjunto de datos
En el siguiente ejemplo, se muestra cómo usar el recurso google_bigquery_dataset_iam_binding
para establecer la membresía en un rol determinado para el conjunto de datos mydataset
. Esto reemplaza cualquier membresía existente en ese rol.
Se conservan otros roles dentro de la política de IAM para el 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:raha@altostrat.com", "group:analysts@altostrat.com" ] }
Establece la membresía de un rol para una sola principal
En el siguiente ejemplo, se muestra cómo usar el recurso google_bigquery_dataset_iam_member
para actualizar la política de IAM del conjunto de datos mydataset
para otorgar un rol a un principal. La actualización de esta política de IAM no afecta el acceso de ningún otro principal al que se le haya otorgado 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:yuri@altostrat.com" }
Para aplicar tu configuración de Terraform en un proyecto de Google Cloud, completa los pasos de las siguientes secciones.
Prepara Cloud Shell
- Inicia Cloud Shell
-
Establece el proyecto de Google Cloud predeterminado en el que deseas aplicar tus configuraciones de Terraform.
Solo necesitas ejecutar este comando una vez por proyecto y puedes ejecutarlo en cualquier directorio.
export GOOGLE_CLOUD_PROJECT=PROJECT_ID
Las variables de entorno se anulan si configuras valores explícitos en el archivo de configuración de Terraform.
Prepara el directorio
Cada archivo de configuración de Terraform debe tener su propio directorio (también llamado módulo raíz).
-
En Cloud Shell, crea un directorio y un archivo nuevo dentro de ese directorio. El nombre del archivo debe tener la extensión
.tf
, por ejemplo,main.tf
. En este instructivo, el archivo se denominamain.tf
.mkdir DIRECTORY && cd DIRECTORY && touch main.tf
-
Si sigues un instructivo, puedes copiar el código de muestra en cada sección o paso.
Copia el código de muestra en el
main.tf
recién creado.De manera opcional, copia el código de GitHub. Esto se recomienda cuando el fragmento de Terraform es parte de una solución de extremo a extremo.
- Revisa y modifica los parámetros de muestra que se aplicarán a tu entorno.
- Guarda los cambios.
-
Inicializa Terraform. Solo debes hacerlo una vez por directorio.
terraform init
De manera opcional, incluye la opción
-upgrade
para usar la última versión del proveedor de Google:terraform init -upgrade
Aplica los cambios
-
Revisa la configuración y verifica que los recursos que creará o actualizará Terraform coincidan con tus expectativas:
terraform plan
Corrige la configuración según sea necesario.
-
Para aplicar la configuración de Terraform, ejecuta el siguiente comando y, luego, escribe
yes
cuando se te solicite:terraform apply
Espera hasta que Terraform muestre el mensaje “¡Aplicación completa!”.
- Abre tu proyecto de Google Cloud para ver los resultados. En la consola de Google Cloud, navega a tus recursos en la IU para asegurarte de que Terraform los haya creado o actualizado.
API
Para aplicar los controles de acceso cuando se crea el conjunto de datos, llama al método datasets.insert
con un recurso de conjunto de datos definido.
Para actualizar tus controles de acceso, llama al método datasets.patch
y usa la propiedad access
en el recurso Dataset
.
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. Para obtener más información, consulta la documentación de referencia de la API de BigQuery para Go.
Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para bibliotecas cliente.
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.
Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para bibliotecas cliente.
Python
Antes de probar este ejemplo, 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. Para obtener más información, consulta la documentación de referencia de la API de BigQuery para Python.
Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para bibliotecas cliente.
Configura la propiedaddataset.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.
Otorga acceso a una tabla o vista
Elige una de las opciones siguientes:
Console
Ve a la página de BigQuery.
En el panel Explorador, expande tu proyecto y elige una tabla o vista para compartir.
Haz clic en
CompartirHaz clic en
Agregar principal.En el campo Principales nuevos, escribe un principal.
En la lista Elegir un rol, elige un rol predefinido o una rol personalizado.
Haz clic en Guardar.
Para volver a la tabla o ver los detalles, haz clic en Cerrar.
SQL
Para otorgar a las principales acceso a tablas o vistas, usa la declaración DCL GRANT
:
En la consola de Google Cloud, ve a la página de BigQuery.
En el editor de consultas, escribe la siguiente oración:
GRANT `ROLE_LIST` ON RESOURCE_TYPE RESOURCE_NAME TO "USER_LIST"
Reemplaza lo siguiente:
ROLE_LIST
: Un rol o lista de roles separados por comas que deseas otorgarRESOURCE_TYPE
: El tipo de recurso al que se aplica el rolLos valores admitidos son
TABLE
,VIEW
,MATERIALIZED VIEW
yEXTERNAL TABLE
.RESOURCE_NAME
: el nombre del recurso en el que deseas otorgar el permiso.USER_LIST
: una lista separada por comas de los usuarios a los que se otorga el rol.Para obtener una lista de los formatos válidos, consulta
user_list
.
Haz clic en
Ejecutar.
Si deseas obtener información sobre cómo ejecutar consultas, visita Ejecuta una consulta interactiva.
En el siguiente ejemplo, se otorga la función de visualizador de datos en la tabla myTable
:
GRANT `roles/bigquery.dataViewer`
ON TABLE `myProject`.myDataset.myTable
TO "user:raha@example-pet-store.com", "user:sasha@example-pet-store.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 de la tabla o vista existente (incluidos los controles de acceso) en un archivo JSON, usa el comando
bq get-iam-policy
:bq get-iam-policy \ PROJECT_ID:DATASET.TABLE_OR_VIEW \ > PATH_TO_FILE
Reemplaza lo siguiente:
- PROJECT_ID: El ID de tu proyecto
- DATASET: el nombre del conjunto de datos que contiene la tabla o vista que deseas actualizar
- TABLE_OR_VIEW: el nombre del recurso que se actualizará
- PATH_TO_FILE: la ruta al archivo JSON en tu máquina local
Realiza cambios a la sección
bindings
del archivo JSON. Una vinculación une uno o másmembers
o principales, a un solorole
. Los principales pueden ser cuentas de usuario, cuentas de servicio, grupos de Google y dominios. Por ejemplo, la secciónbindings
de un archivo JSON de tabla o vista se vería de la siguiente manera:{ "bindings": [ { "role": "roles/bigquery.dataViewer", "members": [ "user:mike@example.com", "group:admins@example.com", "domain:google.com", "serviceAccount:my-project-id@appspot.gserviceaccount.com" ] }, ], "etag": "BwWWja0YfJA=", "version": 1 }
Para actualizar tu política de acceso, usa el comando
bq set-iam-policy
.bq set-iam-policy PROJECT_ID:DATASET.TABLE_OR_VIEW PATH_TO_FILE
Para verificar los cambios del control de acceso, escribe otra vez el comando
bq get-iam-policy
sin escribir la información en un archivo:bq get-iam-policy --format=prettyjson \ PROJECT_ID:DATASET.TABLE_OR_VIEW
Terraform
Usa los recursos google_bigquery_table_iam
para actualizar el acceso a una tabla.
Configura la política de acceso para una tabla
En el siguiente ejemplo, se muestra cómo usar el recurso google_bigquery_table_iam_policy
para establecer la política de IAM para la tabla mytable
. Esto reemplaza cualquier política existente ya adjunta 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:raha@altostrat.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 }
Establece la membresía de roles para una tabla
En el siguiente ejemplo, se muestra cómo usar el recurso google_bigquery_table_iam_binding
para establecer la membresía en un rol determinado para la tabla mytable
. Esto reemplaza cualquier membresía existente en ese rol.
Se conservan otros roles dentro de la política de IAM para 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:analysts@altostrat.com", ] }
Establece la membresía de un rol para una sola principal
En el siguiente ejemplo, se muestra cómo usar el recurso google_bigquery_table_iam_member
para actualizar la política de IAM de la tabla mytable
para otorgar un rol a una principal. La actualización de esta política de IAM no afecta el acceso de ningún otro principal al que se le haya otorgado 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 tu configuración de Terraform en un proyecto de Google Cloud, completa los pasos de las siguientes secciones.
Prepara Cloud Shell
- Inicia Cloud Shell
-
Establece el proyecto de Google Cloud predeterminado en el que deseas aplicar tus configuraciones de Terraform.
Solo necesitas ejecutar este comando una vez por proyecto y puedes ejecutarlo en cualquier directorio.
export GOOGLE_CLOUD_PROJECT=PROJECT_ID
Las variables de entorno se anulan si configuras valores explícitos en el archivo de configuración de Terraform.
Prepara el directorio
Cada archivo de configuración de Terraform debe tener su propio directorio (también llamado módulo raíz).
-
En Cloud Shell, crea un directorio y un archivo nuevo dentro de ese directorio. El nombre del archivo debe tener la extensión
.tf
, por ejemplo,main.tf
. En este instructivo, el archivo se denominamain.tf
.mkdir DIRECTORY && cd DIRECTORY && touch main.tf
-
Si sigues un instructivo, puedes copiar el código de muestra en cada sección o paso.
Copia el código de muestra en el
main.tf
recién creado.De manera opcional, copia el código de GitHub. Esto se recomienda cuando el fragmento de Terraform es parte de una solución de extremo a extremo.
- Revisa y modifica los parámetros de muestra que se aplicarán a tu entorno.
- Guarda los cambios.
-
Inicializa Terraform. Solo debes hacerlo una vez por directorio.
terraform init
De manera opcional, incluye la opción
-upgrade
para usar la última versión del proveedor de Google:terraform init -upgrade
Aplica los cambios
-
Revisa la configuración y verifica que los recursos que creará o actualizará Terraform coincidan con tus expectativas:
terraform plan
Corrige la configuración según sea necesario.
-
Para aplicar la configuración de Terraform, ejecuta el siguiente comando y, luego, escribe
yes
cuando se te solicite:terraform apply
Espera hasta que Terraform muestre el mensaje “¡Aplicación completa!”.
- Abre tu proyecto de Google Cloud para ver los resultados. En la consola de Google Cloud, navega a tus recursos en la IU para asegurarte de que Terraform los haya creado o actualizado.
API
- Para recuperar la política actual, llama al método
tables.getIamPolicy
. Edita la política para agregar miembros, vinculaciones o ambos. Para obtener más información sobre el formato de una política, consulta el tema de referencia Política.
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.
Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para bibliotecas cliente.
Python
Antes de probar este ejemplo, 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. Para obtener más información, consulta la documentación de referencia de la API de BigQuery para Python.
Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para bibliotecas cliente.
Revoca el acceso a un recurso
En las siguientes secciones, se describe cómo revocar el acceso a diferentes recursos.
Revoca el acceso a un conjunto de datos
Elige una de las opciones siguientes:
Console
Ve a la página de BigQuery.
En el panel Explorador, expande tu proyecto y elige 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 la principal cuyo acceso deseas revocar.
Haz clic en
Quitar principal.En el cuadro de diálogo ¿Quieres quitar el 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 a los conjuntos de datos de las principales, usa la declaración DCL REVOKE
:
En la consola de Google Cloud, ve a la página de BigQuery.
En el editor de consultas, escribe la siguiente oración:
REVOKE `ROLE_LIST` ON SCHEMA RESOURCE_NAME FROM "USER_LIST"
Reemplaza lo siguiente:
ROLE_LIST
: un rol o una lista de roles separados por comas que deseas revocarRESOURCE_NAME
: el nombre del recurso en el que deseas revocar el permiso.USER_LIST
: una lista separada por comas de usuarios a los que se les revocarán los rolesPara obtener una lista de los formatos válidos, consulta
user_list
.
Haz clic en
Ejecutar.
Si deseas obtener información sobre cómo ejecutar consultas, visita Ejecuta una consulta interactiva.
En el siguiente ejemplo, se revoca la función de administrador en el conjunto de datos myDataset
:
REVOKE `roles/bigquery.admin`
ON SCHEMA `myProject`.myDataset
FROM "group:example-team@example-pet-store.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 existente (incluidos los controles de acceso) en un archivo JSON, usa el comando
bq show
:bq show \ --format=prettyjson \ PROJECT_ID:DATASET > PATH_TO_FILE
Reemplaza lo siguiente:
- PROJECT_ID: El ID de tu proyecto
- DATASET: nombre del conjunto de datos.
- PATH_TO_FILE: la ruta al archivo JSON en tu máquina local.
Realiza 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
access
de un 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
bq 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
Para verificar los cambios del control de acceso, usa otra vez el comando
show
sin escribir la información en un archivo.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. Para obtener más información, consulta la documentación de referencia de la API de BigQuery para Go.
Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para bibliotecas cliente.
Python
Antes de probar este ejemplo, 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. Para obtener más información, consulta la documentación de referencia de la API de BigQuery para Python.
Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para bibliotecas cliente.
Configura la propiedaddataset.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 una tabla o vista
Elige una de las opciones siguientes:
Console
Ve a la página de BigQuery.
En el panel Explorador, expande tu proyecto y elige una tabla o vista.
En el panel de detalles, haz clic en Compartir.
En el cuadro de diálogo Compartir, expande la principal cuyo acceso deseas revocar.
Haz clic en
Borrar.En el cuadro de diálogo ¿Quieres quitar el 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 las tablas o vistas de las principales, usa la declaración DCL REVOKE
:
En la consola de Google Cloud, ve a la página de BigQuery.
En el editor de consultas, escribe la siguiente oración:
REVOKE `ROLE_LIST` ON RESOURCE_TYPE RESOURCE_NAME FROM "USER_LIST"
Reemplaza lo siguiente:
ROLE_LIST
: un rol o una lista de roles separados por comas que deseas revocarRESOURCE_TYPE
: el tipo de recurso del que se revoca el rolLos valores admitidos son
TABLE
,VIEW
,MATERIALIZED VIEW
yEXTERNAL TABLE
.RESOURCE_NAME
: el nombre del recurso en el que deseas revocar el permiso.USER_LIST
: una lista separada por comas de usuarios a los que se les revocarán los rolesPara obtener una lista de los formatos válidos, consulta
user_list
.
Haz clic en
Ejecutar.
Si deseas obtener información sobre cómo ejecutar consultas, visita Ejecuta una consulta interactiva.
En el siguiente ejemplo, se revoca la función de administrador en la tabla myTable
:
REVOKE `roles/bigquery.admin`
ON TABLE `myProject`.myDataset.myTable
FROM "group:example-team@example-pet-store.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 de la tabla o vista existente (incluidos los controles de acceso) en un archivo JSON, usa el comando
bq get-iam-policy
:bq get-iam-policy \ PROJECT_ID:DATASET.TABLE_OR_VIEW \ > PATH_TO_FILE
Reemplaza lo siguiente:
- PROJECT_ID: El ID de tu proyecto
- DATASET: el nombre del conjunto de datos que contiene la tabla o vista que deseas actualizar
- TABLE_OR_VIEW: el nombre del recurso que se actualizará
PATH_TO_FILE: la ruta al archivo JSON en tu máquina local
Realiza 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ónaccess
de un archivo JSON de tabla o vista 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" } ], ... }
Para actualizar tu política de acceso, usa el comando
bq set-iam-policy
.bq set-iam-policy PROJECT_ID:DATASET.TABLE_OR_VIEW PATH_TO_FILE
Para verificar los cambios del control de acceso, usa otra vez el comando
get-iam-policy
sin escribir la información en un archivo.bq get-iam-policy --format=prettyjson \ PROJECT_ID:DATASET.TABLE_OR_VIEW
API
- Para recuperar la política actual, llama al método
tables.getIamPolicy
. Edita la política para quitar miembros, vinculaciones o ambos. Para obtener más información sobre el formato de una política, consulta el tema de referencia Política.
Llama a
tables.setIamPolicy
para escribir la política actualizada. Nota: Las vinculaciones vacías sin miembros no están permitidas y generan un error.
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.
Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para bibliotecas cliente.
Deniega el acceso a un recurso
Las políticas de denegación de IAM te permiten configurar barreras de acceso a los recursos de BigQuery. Puedes definir reglas de denegación que impidan a determinados principales usar ciertos permisos, sin importar los roles que tengan concedidos.
Para obtener información sobre cómo crear, actualizar y borrar políticas de denegación, consulta Cómo denegar el acceso a los recursos.
Casos especiales
Ten en cuenta las siguientes situaciones cuando crees políticas de denegación de IAM en algunos permisos de BigQuery:
El acceso a recursos autorizados (vistas, routines, conjuntos de datos o procedimientos almacenados) te permite create, soltar o manipular una tabla, además de leer y modificar sus datos, incluso si no tienes permiso directo para realizar esas operaciones. También puede obtener datos o metadatos del modelo y 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, agrega uno de los siguientes valores al campo
deniedPrincipal
cuando crees la política de denegación:Valor Caso de uso principalSet://goog/public:all
Bloquea todas las principales, incluidos los recursos autorizados. principalSet://bigquery.googleapis.com/projects/PROJECT_NUMBER/*
Bloquea todos los recursos autorizados de BigQuery en el proyecto especificado. PROJECT_NUMBER
es un identificador único generado automáticamente para tu proyecto de tipoINT64
.BigQuery almacena en caché los resultados de las consultas del propietario de un trabajo durante 24 horas, a los que puede acceder sin necesitar el permiso
bigquery.tables.getData
en la tabla que contiene los datos. Por lo tanto, agregar una política de denegación de IAM al permisobigquery.tables.getData
no bloquea el acceso a los resultados almacenados en caché para el propietario del trabajo hasta que venza 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
.