Vistas autorizadas

En este documento se describe cómo crear vistas autorizadas y vistas materializadas autorizadas en BigQuery.

Información general

Como administrador de datos, puede crear una vista autorizada para compartir un subconjunto de datos de un conjunto de datos con usuarios y grupos (principales) específicos. Las entidades de seguridad pueden ver los datos que compartes y ejecutar consultas en ellos, pero no pueden acceder directamente al conjunto de datos de origen.

Tipos de vista

Una vista lógica es el tipo de vista predeterminado de BigQuery, mientras que una vista materializada es una vista precalculada que almacena en caché periódicamente los resultados de una consulta para mejorar el rendimiento y la eficiencia.

Una vista autorizada de una vista lógica se denomina "vista autorizada", pero una vista autorizada de una vista materializada se denomina vista materializada autorizada.

Si una vista lógica depende de una consulta grande o computacionalmente costosa, puedes crear una vista materializada en su lugar. Sin embargo, consultar solo un subconjunto de los datos o usar otras técnicas puede mejorar el rendimiento sin necesidad de crear una vista materializada.

Para obtener más información, consulta los siguientes recursos:

Pasos generales para crear vistas autorizadas

Para crear y compartir una vista, sigue estos pasos generales, que son los mismos para las vistas lógicas autorizadas y las vistas materializadas autorizadas.

.
  • Crea un conjunto de datos que contenga los datos de origen.
  • Ejecuta una consulta para cargar datos en una tabla de destino del conjunto de datos de origen.
  • Crea un conjunto de datos que contenga tu vista autorizada.
  • Crea una vista autorizada a partir de una consulta de SQL que restrinja las columnas que pueden ver tus analistas de datos en los resultados de la consulta.
  • Concede permiso a tus analistas de datos para ejecutar trabajos de consulta.
  • Concede a tus analistas de datos acceso al conjunto de datos que contiene la vista autorizada.
  • Concede a la vista autorizada acceso al conjunto de datos de origen.

Alternativas

Aunque las vistas autorizadas son flexibles y escalables, es posible que uno de los siguientes métodos se adapte mejor a tu caso práctico:

  • Definir políticas a nivel de fila en una tabla.
  • Definir políticas a nivel de columna en una tabla.
  • Almacenar los datos en una tabla independiente.
  • Compartir todas las vistas de un conjunto de datos (conjuntos de datos autorizados).

Usar la seguridad a nivel de fila o de columna, o bien usar tablas independientes

Si se definen políticas de acceso a nivel de fila en una tabla o se crea una tabla independiente para almacenar datos sensibles, un administrador de datos puede restringir la capacidad de un usuario para ver esos datos. Almacenar datos en una tabla independiente aísla los datos y elimina la posibilidad de ver cuántas filas hay en la tabla.

Además, al crear y aplicar etiquetas de políticas, un administrador de datos puede restringir la capacidad del usuario para ver columnas de una tabla.

Almacenar los datos en una tabla independiente es el método más seguro, pero el menos flexible. Definir políticas a nivel de fila es flexible y seguro, mientras que compartir vistas autorizadas es flexible y ofrece el mejor rendimiento.

Para comparar estos métodos en detalle, consulta los siguientes recursos:

Compartir todas las vistas de un conjunto de datos

Si quiere dar acceso a un conjunto de vistas a un conjunto de datos sin tener que autorizar cada vista individualmente, puede agrupar las vistas en un conjunto de datos y, a continuación, dar acceso al conjunto de datos que contiene las vistas al conjunto de datos que contiene los datos.

Después, puede dar acceso a las principales al conjunto de datos que contiene el grupo de vistas o a vistas concretas del conjunto de datos, según sea necesario. Un conjunto de datos que tiene acceso a otro conjunto de datos se denomina conjunto de datos autorizado. El conjunto de datos que autoriza a otro conjunto de datos para acceder a sus datos se denomina conjunto de datos compartido.

Para obtener más información, consulta Conjuntos de datos autorizados y Autorizar un conjunto de datos.

Limitaciones

  • Cuando creas una vista autorizada o una vista materializada autorizada en otro conjunto de datos, el conjunto de datos de origen y el conjunto de datos de la vista autorizada deben estar en la misma ubicación regional.
  • Cuando eliminas una vista autorizada, puede tardar hasta 24 horas en quitarse de la lista de vistas. Durante este tiempo, no podrás acceder a la vista autorizada, pero la vista autorizada eliminada puede aparecer en la lista de vistas y se tendrá en cuenta para el límite de vistas autorizadas. Este límite puede impedir la creación de vistas autorizadas adicionales si la nueva vista autorizada supera ese límite.

Antes de empezar

Concede roles de gestión de identidades y accesos (IAM) que den a los usuarios los permisos necesarios para consultar las vistas autorizadas o las vistas materializadas autorizadas que compartas.

Roles obligatorios

Para crear o actualizar una vista autorizada, necesitas permisos para el conjunto de datos que contiene la vista y para el conjunto de datos que proporciona acceso a la vista.

También debes conceder acceso a usuarios o grupos al proyecto y al conjunto de datos que contengan la vista.

Permisos de administrador en el conjunto de datos que contiene la vista

Las vistas se tratan como recursos de tabla en BigQuery, por lo que para crear una vista se necesitan los mismos permisos que para crear una tabla. También debe tener permisos para consultar cualquier tabla a la que haga referencia la consulta de SQL de la vista.

Para crear una vista, necesita el permiso bigquery.tables.createIAM. El rol de gestión de identidades y accesos predefinido roles/bigquery.dataEditor incluye los permisos que necesitas para crear una vista.

Además, si tienes el permiso bigquery.datasets.create, puedes crear vistas en los conjuntos de datos que crees. Para crear una vista de datos que no sean de tu propiedad, debes tener permiso de bigquery.tables.getData en esa tabla.

Para obtener más información sobre los roles y permisos de gestión de identidades y accesos en BigQuery, consulta el artículo sobre roles y permisos predefinidos.

Permisos de administrador en el segundo conjunto de datos que da acceso a la vista

Para actualizar las propiedades de un conjunto de datos, necesitas los siguientes permisos de gestión de identidades y accesos:

  • bigquery.datasets.update
  • bigquery.datasets.setIamPolicy (solo es necesario al actualizar los controles de acceso al conjunto de datos en la consola) Google Cloud

El rol de gestión de identidades y accesos predefinido roles/bigquery.dataOwner incluye los permisos que necesita para actualizar las propiedades del conjunto de datos.

Además, si tiene el permiso bigquery.datasets.create, puede actualizar las propiedades de los conjuntos de datos que cree.

Para obtener más información sobre los roles y permisos de IAM en BigQuery, consulta el artículo sobre funciones y permisos predefinidos.

Permisos de usuario en el proyecto y el conjunto de datos de la vista

Para compartir una vista autorizada con usuarios o grupos, debes concederles los siguientes permisos de gestión de identidades y accesos (IAM):

  • El rol de gestión de identidades y accesos roles/bigquery.user del proyecto que contiene la vista autorizada.
  • El rol de gestión de identidades y accesos roles/bigquery.dataViewer del conjunto de datos que contiene la vista autorizada.

Trabajar con vistas autorizadas

En las siguientes secciones se describe cómo trabajar con vistas autorizadas y vistas materializadas autorizadas.

Crear una vista autorizada

Para crear una vista autorizada, elija una de las siguientes opciones. Para ver los pasos completos para autorizar, compartir y eliminar una vista autorizada, consulta el tutorial Crear una vista autorizada.

Consola

  1. Ve a la página BigQuery.

    Ir a BigQuery

  2. En el editor de consultas, escribe la consulta en la que quieras basar la vista autorizada.

  3. Haz clic en Guardar > Guardar vista.

  4. En el cuadro de diálogo Guardar vista, haz lo siguiente:

    1. En Proyecto, escribe el proyecto en el que quieras guardar la vista.

    2. En Conjunto de datos, escriba el conjunto de datos en el que quiera guardar la vista. Debe ser un conjunto de datos diferente al que se usa en la consulta de origen.

    3. En Tabla, escribe el nombre de la vista.

    4. Haz clic en Guardar.

  5. Concede los permisos necesarios a los usuarios que puedan usar la vista autorizada.

  6. En el panel Explorador, selecciona el conjunto de datos que se ha usado en la consulta de origen.

  7. En el panel Detalles, haz clic en Compartir > Autorizar vistas.

  8. En el panel Vistas autorizadas, en Vista autorizada, escriba el nombre completo de la vista con el formato PROJECT_ID.DATASET_ID.VIEW_NAME.

  9. Haz clic en Añadir autorización.

Terraform

Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta Configurar la autenticación para bibliotecas de cliente.

# Creates an authorized view.

# Create a dataset to contain the view.
resource "google_bigquery_dataset" "view_dataset" {
  dataset_id  = "view_dataset"
  description = "Dataset that contains the view"
  location    = "us-west1"
}

# Create the view to authorize.
resource "google_bigquery_table" "movie_view" {
  project     = google_bigquery_dataset.view_dataset.project
  dataset_id  = google_bigquery_dataset.view_dataset.dataset_id
  table_id    = "movie_view"
  description = "View to authorize"

  view {
    query          = "SELECT item_id, avg(rating) FROM `movie_project.movie_dataset.movie_ratings` GROUP BY item_id ORDER BY item_id;"
    use_legacy_sql = false
  }
}


# Authorize the view to access the dataset
# that the query data originates from.
resource "google_bigquery_dataset_access" "view_authorization" {
  project    = "movie_project"
  dataset_id = "movie_dataset"

  view {
    project_id = google_bigquery_table.movie_view.project
    dataset_id = google_bigquery_table.movie_view.dataset_id
    table_id   = google_bigquery_table.movie_view.table_id
  }
}

# Specify the IAM policy for principals that can access
# the authorized view. These users should already
# have the roles/bigqueryUser role at the project level.
data "google_iam_policy" "principals_policy" {
  binding {
    role = "roles/bigquery.dataViewer"
    members = [
      "group:example-group@example.com",
    ]
  }
}

# Set the IAM policy on the authorized  view.
resource "google_bigquery_table_iam_policy" "authorized_view_policy" {
  project     = google_bigquery_table.movie_view.project
  dataset_id  = google_bigquery_table.movie_view.dataset_id
  table_id    = google_bigquery_table.movie_view.table_id
  policy_data = data.google_iam_policy.principals_policy.policy_data
}

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

  1. Abre Cloud Shell.
  2. 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.

Preparar el directorio

Cada archivo de configuración de Terraform debe tener su propio directorio (también llamado módulo raíz).

  1. 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 como main.tf.
    mkdir DIRECTORY && cd DIRECTORY && touch main.tf
  2. 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.

  3. Revisa y modifica los parámetros de ejemplo para aplicarlos a tu entorno.
  4. Guarda los cambios.
  5. 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

Aplica los cambios

  1. 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.

  2. 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!".

  3. 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.

Gestionar usuarios o grupos de vistas autorizadas

Después de autorizar una vista, puedes mantener el acceso a ella completando las siguientes tareas en un conjunto de datos, una tabla o una vista:

  • Consulta la política de acceso.
  • Concede acceso.
  • Revocar acceso.
  • Denegar acceso.

Para obtener más información, consulta el artículo sobre cómo controlar el acceso a los recursos con la gestión de identidades y accesos.

Quitar la autorización de una vista

Para quitar la autorización de una vista, selecciona una de las siguientes opciones:

Consola

  1. Ve a la página de BigQuery en la Google Cloud consola.

    Ir a BigQuery

  2. En el panel Explorador, expande tu proyecto y selecciona un conjunto de datos.

  3. Haz clic en Compartir > Autorizar vistas.

  4. Haz clic en para Quitar autorización.

  5. Haz clic en Cerrar.

bq

Para quitar la autorización de una vista, usa el comando bq rm. Introduce el table_id de la vista a la que quieras quitar la autorización.

    bq rm \
    project_id:dataset:table_id
    

API

Llama al método tables.delete y usa las propiedades projectID, datasetID y tableID para quitar la vista autorizada de tu conjunto de datos. Para obtener más información, consulta Tablas.

Cuotas y límites

  • Las vistas autorizadas están sujetas a los límites de los conjuntos de datos. Para obtener más información, consulta Límites de conjuntos de datos.
  • Si quitas una vista autorizada, pueden pasar hasta 24 horas hasta que se eliminen del sistema todas las referencias a la vista. Para evitar errores, espera 24 horas antes de volver a usar el nombre de una vista eliminada o crea un nombre único para la vista.

Temas avanzados

En las siguientes secciones se describen métodos avanzados para usar vistas autorizadas.

Combinar la seguridad a nivel de fila con vistas autorizadas

Los datos que se muestran en una vista lógica o en una vista materializada se filtran según las políticas de acceso a nivel de fila de la tabla de origen subyacente.

Para obtener información sobre cómo interactúa la seguridad a nivel de fila con las vistas materializadas, consulta el artículo Usar la seguridad a nivel de fila con otras funciones de BigQuery.

Combinar la seguridad a nivel de columna con vistas autorizadas

El impacto de la seguridad a nivel de columna en las vistas es independiente de si la vista es una vista autorizada o no.

Para obtener una descripción detallada de cómo se aplican los permisos, consulta Vistas de consulta para la seguridad a nivel de columna.

Usar el uso compartido de BigQuery con vistas autorizadas

La función de compartir de BigQuery (antes Analytics Hub) es una plataforma de intercambio de datos con las siguientes funciones:

  • Te permite compartir datos y estadísticas a gran escala entre diferentes unidades de negocio.
  • Usa un marco de seguridad y privacidad sólido.
  • Permite publicar un conjunto de datos de BigQuery, denominado conjunto de datos compartido, y sus vistas y conjuntos de datos autorizados asociados en un conjunto de suscriptores.

Un conjunto de datos vinculado es un conjunto de datos de BigQuery de solo lectura que sirve como puntero o referencia a un conjunto de datos compartido. Al suscribirse a una lista de uso compartido, se crea un conjunto de datos vinculado en su proyecto, pero no una copia del conjunto de datos. Por lo tanto, los suscriptores pueden leer los datos, pero no pueden añadir ni actualizar objetos en él.

Las vistas materializadas que hacen referencia a tablas del conjunto de datos vinculado no se admiten.

Para obtener más información, consulta el artículo Introducción a la función de compartir.

Siguientes pasos