Usa la seguridad a nivel de las filas
En este documento, se explica cómo usar la seguridad a nivel de las filas en BigQuery para restringir el acceso a los datos a nivel de las filas de la tabla. Antes de leer este documento, familiarízate con la descripción general de la seguridad a nivel de las filas con la Introducción a la seguridad a nivel de las filas de BigQuery.
Descripción general
Puedes realizar las siguientes tareas con políticas de acceso a nivel de las filas:
- Crea o actualiza una política de acceso a nivel de las filas en una tabla
- Enumera las políticas de acceso a nivel de las filas de una tabla
- Borra una política de acceso a nivel de las filas de una tabla
- Consulta una tabla con una política de acceso a nivel de las filas
Antes de comenzar
Otorga funciones de administración de identidades y accesos (IAM) que les brindan a los usuarios los permisos necesarios para realizar cada tarea de este documento. Los permisos necesarios para realizar una tarea (si existen) se enumeran en la sección “Permisos necesarios” de la tarea.
Crea o actualiza una política de acceso a nivel de las filas
Puedes crear o actualizar una política de acceso a nivel de las filas en una tabla en BigQuery con una declaración de lenguaje de definición de datos (DDL).
Permisos necesarios
Para crear una política de acceso a nivel de las filas en una tabla de BigQuery, necesitas los siguientes permisos de IAM:
bigquery.rowAccessPolicies.create
bigquery.rowAccessPolicies.setIamPolicy
bigquery.tables.getData
(en la tabla de destino)bigquery.jobs.create
(para ejecutar el trabajo de consulta de DDL)
Para actualizar una política de acceso a nivel de las filas en una tabla de BigQuery, necesitas los siguientes permisos de IAM:
bigquery.rowAccessPolicies.update
bigquery.rowAccessPolicies.setIamPolicy
bigquery.tables.getData
(en la tabla de destino)bigquery.jobs.create
(para ejecutar el trabajo de consulta de DDL)
Cada uno de los siguientes roles predefinidos de IAM incluye los permisos que necesitas para crear y actualizar una política de acceso a nivel de las filas:
roles/bigquery.admin
roles/bigquery.dataOwner
El rol bigquery.filteredDataViewer
Cuando creas de forma correcta una política de acceso a nivel de las filas, otorgas de forma automática el rol bigquery.filteredDataViewer
a los miembros de la lista de destinatarios. El rol bigquery.filteredDataViewer
otorga la capacidad de ver las filas definidas por la expresión de filtro de la política. Cuando enumeras las políticas de acceso a nivel de las filas de una tabla en Google Cloud Console, este rol se muestra en asociación con los miembros de la lista de destinatarios de la política.
Consulta nuestras prácticas recomendadas para la seguridad a nivel de las filas cuando uses la función bigquery.filteredDataViewer
con la IAM.
Para obtener más información sobre las funciones de IAM y los permisos en BigQuery, consulta Funciones y permisos predefinidos.
Crea o actualiza las políticas de acceso a nivel de las filas
Para crear o actualizar una política de acceso a nivel de las filas, usa los siguientes comandos en tu declaración de DDL:
CREATE ROW ACCESS POLICY
crea una nueva política de acceso a nivel de las filas.CREATE ROW ACCESS POLICY IF NOT EXISTS
crea una nueva política de acceso a nivel de las filas, si no existe una política de acceso a nivel de las filas con el mismo nombre en la tabla especificada.CREATE OR REPLACE ROW ACCESS POLICY
actualiza una política de acceso a nivel de las filas existente con el mismo nombre en la tabla especificada.
Ejemplos
Consulta la referencia de DDL para conocer la sintaxis y las opciones completas a fin de crear una política de acceso a nivel de las filas.
SQL
Puedes ejecutar estas declaraciones de DDL en la página de Cloud Console.
En la página de BigQuery, ingresa la instrucción en el editor de consultas.
Crea una política de acceso de fila y, luego, modificar a los beneficiarios
CREATE ROW ACCESS POLICY My_apac_filter
ON project.dataset.My_table
GRANT TO ("user:abc@example.com")
FILTER USING (region = "apac");
CREATE OR REPLACE ROW ACCESS POLICY My_apac_filter
ON project.dataset.My_table
GRANT TO ("user:xyz@example.com")
FILTER USING (region = "apac");
Crea una política de acceso de fila con varios beneficiarios
CREATE ROW ACCESS POLICY My_us_filter
ON project.dataset.My_table
GRANT TO ("user:john@example.com", "group:sales-us@example.com", "group:sales-managers@example.com")
FILTER USING (region = "us");
Crea una política de acceso de fila con allAuthenticatedUsers
como beneficiarios
CREATE ROW ACCESS POLICY My_us_filter
ON project.dataset.My_table
GRANT TO ("allAuthenticatedUsers")
FILTER USING (region = "us");
Crea una política de acceso de fila con un filtro basado en el usuario actual
CREATE ROW ACCESS POLICY My_row_filter
ON dataset.My_table
GRANT TO ("domain:example.com")
FILTER USING (email = SESSION_USER());
Crea una política de acceso de fila con un filtro en una columna con un tipo ARRAY
CREATE ROW ACCESS POLICY My_reports_filter
ON project.dataset.My_table
GRANT TO ("domain:example.com")
FILTER USING (SESSION_USER() IN UNNEST(reporting_chain));
Combina políticas de acceso a nivel de las filas
Si dos o más políticas de acceso a nivel de las filas otorgan a un usuario o grupo acceso a la misma tabla, entonces, el usuario o grupo tiene acceso a todos los datos cubiertos por cualquiera de las políticas.
Por ejemplo, en las siguientes políticas, se otorga al usuario abc@example.com
acceso a las filas especificadas en la tabla My_table
:
CREATE ROW ACCESS POLICY shoes
ON project.dataset.My_table
GRANT TO ("user:abc@example.com")
FILTER USING (product_category = "shoes");
CREATE OR REPLACE ROW ACCESS POLICY blue_products
ON project.dataset.My_table
GRANT TO ("user:abc@example.com")
FILTER USING (color = "blue");
En el ejemplo anterior, el usuario abc@example.com
tiene acceso a las filas de la tabla My_table
que tengan el campo product_category
definido como shoes
, y abc@example.com
también tiene acceso a las filas que tienen el campo color
definido como blue
.
Por ejemplo, abc@example.com
podría acceder a las filas con información sobre zapatos rojos y automóviles azules.
Este acceso es equivalente al acceso que proporciona la siguiente política de acceso a nivel de fila única:
CREATE ROW ACCESS POLICY shoes_and_blue_products
ON project.dataset.My_table
GRANT TO ("user:abc@example.com")
FILTER USING (product_category = "shoes" OR color = "blue");
Por otro lado, para especificar el acceso que depende de que más de una condición sea verdadera, usa un filtro con un operador AND
. Por ejemplo, la siguiente política de acceso a nivel de las filas otorga a abc@example.com
acceso solo a las filas que tienen el campo product_category
definido como shoes
y el campo color
definido como blue
:
CREATE ROW ACCESS POLICY blue_shoes
ON project.dataset.My_table
GRANT TO ("user:abc@example.com")
FILTER USING (product_category = "shoes" AND color = "blue");
Con la política de acceso a nivel de las filas anterior, abc@example.com
podría acceder a la información sobre zapatos azules, pero no sobre zapatos rojos o automóviles azules.
Enumera las políticas de acceso a nivel de las filas de la tabla
Puedes enumerar y ver todas las políticas de acceso a nivel de las filas en una tabla en Cloud Console o mediante la herramienta de línea de comandos de bq
, si tienes los permisos correctos para hacerlo.
Permisos necesarios
Para enumerar las políticas de acceso a nivel de las filas en una tabla de BigQuery, necesitas el permiso bigquery.rowAccessPolicies.list
de IAM.
A fin de ver los miembros de una política de acceso a nivel de las filas en una tabla de BigQuery, necesitas el permiso bigquery.rowAccessPolicies.getIamPolicy
de IAM.
Cada uno de los siguientes roles predefinidos de IAM incluye los permisos que necesitas para enumerar y ver políticas de acceso a nivel de las filas:
roles/bigquery.admin
roles/bigquery.dataOwner
Para obtener más información sobre las funciones de IAM y los permisos en BigQuery, consulta Funciones y permisos predefinidos.
Enumera las políticas de acceso a nivel de las filas de la tabla
Para enumerar las políticas de acceso a nivel de las filas, haz lo siguiente:
Console
Para ver las políticas de acceso a nivel de las filas, ve a la página de BigQuery en Cloud Console.
Haz clic en el nombre de la tabla para ver sus detalles y, luego, haz clic en Ver políticas de acceso de fila.
Cuando se abra el panel Políticas de acceso de fila, verás una lista de todas las políticas de acceso a nivel de las filas en la tabla, por nombre y la
filter_expression
para cada política.Para ver todos los roles y los usuarios afectados por una política de acceso a nivel de las filas, haz clic en VER junto a la política. Por ejemplo, en la siguiente imagen, puedes ver en el panel Ver permisos que los miembros de la lista de destinatarios tienen el rol
bigquery.filteredDataViewer
.
bq
Ingresa el comando bq ls
y proporciona la marca --row_access_policies
.
Los nombres del conjunto de datos y de la tabla son obligatorios.
bq ls --row_access_policies dataset.table
Por ejemplo, con el siguiente comando, se muestra información sobre las políticas de acceso a nivel de las filas en una tabla llamada My_table
en un conjunto de datos con el ID My_dataset
.
bq ls --row_access_policies My_dataset.My_table
API
Usa el método RowAccessPolicies.List
en la sección de referencia de la API de REST.
Borra políticas de acceso a nivel de fila
Puedes borrar una o todas las políticas de acceso a nivel de las filas en una tabla mediante una declaración de DDL, si tienes los permisos para hacerlo.
Permisos necesarios
Para descartar una política de acceso a nivel de las filas, necesitas los siguientes permisos de IAM:
bigquery.rowAccessPolicies.delete
bigquery.jobs.create
(para ejecutar el trabajo de consulta de DDL)
Para descartar todas las políticas de acceso a nivel de las filas en una tabla al mismo tiempo, necesitas los siguientes permisos de IAM:
bigquery.rowAccessPolicies.delete
bigquery.rowAccessPolicies.setIamPolicy
bigquery.rowAccessPolicies.list
bigquery.jobs.create
(para ejecutar el trabajo de consulta de DDL)
Cada uno de los siguientes roles predefinidos de IAM incluye los permisos que necesitas para borrar las políticas de acceso a nivel de las filas:
roles/bigquery.admin
roles/bigquery.dataOwner
Para obtener más información sobre las funciones de IAM y los permisos en BigQuery, consulta Funciones y permisos predefinidos.
Borra políticas de acceso a nivel de fila
Usa los siguientes comandos en tu declaración de DDL para borrar una política de acceso de fila de una tabla.
DROP ROW ACCESS POLICY borra una política de acceso a nivel de las filas en la tabla especificada.
DROP ROW ACCESS POLICY IF EXISTS, borra una política de acceso a nivel de las filas, solo si la política de acceso de fila existe en la tabla especificada.
DROP ALL ROW ACCESS POLICY borra todas las políticas de acceso a nivel de las filas en la tabla especificada.
Ejemplos
Consulta la referencia de DDL para obtener información sobre la sintaxis y las opciones completas a fin de borrar una política de acceso a nivel de las filas.
SQL
Puedes ejecutar estas declaraciones de DDL en la página de Cloud Console.
En la página de BigQuery, ingresa la instrucción en el editor de consultas.
Borra una política de acceso a nivel de las filas de una tabla
DROP ROW ACCESS POLICY My_row_filter ON project.dataset.My_table;
Borra todas las políticas de acceso a nivel de las filas de una tabla
DROP ALL ROW ACCESS POLICIES ON project.dataset.My_table;
Consultar tablas con políticas de acceso de fila
Un usuario primero debe tener acceso a una tabla de BigQuery para poder consultarla, incluso si está en el grantee_list
de una política de acceso de fila en esa tabla. Sin ese permiso, la consulta falla con un error access
denied
.
Permisos necesarios
Para consultar una tabla de BigQuery con políticas de acceso a nivel de las filas, necesitas el permiso bigquery.tables.getData
de IAM.
El rol predefinido roles/bigquery.filteredDataViewer
de IAM incluye los permisos que necesitas para consultar una tabla de BigQuery con políticas de acceso a nivel de las filas.
Ve los resultados de la consulta
Console
En Cloud Console, cuando consultas una tabla con una política de acceso a nivel de las filas, BigQuery muestra una notificación de banner que indica que los resultados se pueden filtrar por una política de acceso a nivel de las filas. Esta notificación se muestra incluso si eres miembro de la lista de destinatarios de la política.
Estatística del trabajo
Cuando consultas una tabla con una política de acceso a nivel de las filas mediante la API de trabajo, BigQuery indica si la consulta lee las tablas con políticas de acceso de fila en el objeto de respuesta Job
:
Ejemplo
Esta respuesta de objeto Job
se truncó para mayor simplicidad:
{
"configuration": {
"jobType": "QUERY",
"query": {
"priority": "INTERACTIVE",
"query": "SELECT * FROM dataset.table",
"useLegacySql": false
}
},
...
"statistics": {
...
rowLevelSecurityStatistics: {
rowLevelSecurityApplied: true
},
...
},
"status": {
"state": "DONE"
},
...
}
¿Qué sigue?
Para obtener información sobre cómo funciona la seguridad a nivel de las filas con otras funciones y servicios de BigQuery, consulta Usa la seguridad a nivel de las filas con otras funciones de BigQuery.
Para obtener información sobre las prácticas recomendadas de seguridad a nivel de las filas, consulta Prácticas recomendadas para la seguridad a nivel de las filas en BigQuery.