Vistas autorizadas

En este documento, se describe cómo crear vistas autorizadas y vistas materializadas autorizadas en BigQuery. Como administrador de datos, puedes crear una vista autorizada para compartir un subconjunto de datos en un conjunto de datos con usuarios y grupos específicos (principales). Los principales 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 para BigQuery, y una vista materializada es una vista procesada previamente que almacena periódicamente en caché los resultados de una consulta para aumentar el rendimiento y la eficiencia.

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

Si una vista lógica depende de una consulta grande o costosa en cuanto al procesamiento, puedes crear una vista materializada en su lugar. Para comprender los casos de uso de una vista lógica y materializada, consulta Descripción general de las vistas lógicas y materializadas.

Pasos de alto nivel para crear vistas autorizadas

Para crear y compartir una vista, revisa estos pasos de alto nivel, que son los mismos para las vistas lógicas autorizadas y las vistas materializadas autorizadas.

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

Alternativas

Si bien las vistas autorizadas son flexibles y escalables, uno de los siguientes métodos podría aplicarse mejor a tu caso de uso:

  • Establece políticas a nivel de las filas en una tabla.
  • Establece políticas a nivel de las columnas en una tabla.
  • Almacena datos en una tabla separada.
  • Comparte todas las vistas de un conjunto de datos (conjuntos de datos autorizados).

Usa seguridad a nivel de las filas o las columnas, o tablas separadas

Si establece políticas de acceso a nivel de las filas en una tabla o crea una tabla separada para contener datos sensibles, un administrador de datos puede restringir la capacidad de un usuario para ver esos datos. Almacenar datos en una tabla separada aísla los datos y quita la capacidad de ver cuántas filas existen en la tabla.

Además, si crea y aplica etiquetas de política, un administrador de datos puede restringir la capacidad del usuario para ver columnas en una tabla.

Almacenar datos en una tabla separada es el método más seguro, pero menos flexible. Establecer políticas a nivel de las filas es flexible y seguro, mientras que compartir vistas autorizadas es flexible y proporciona el mejor rendimiento.

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

Comparte todas las vistas de un conjunto de datos

Si deseas otorgar acceso a una colección de vistas a un conjunto de datos, sin tener que autorizar cada vista individual, puedes agrupar las vistas en un conjunto de datos y, luego, darle al conjunto de datos que contiene las vistas acceso al conjunto de datos que contiene los datos.

Luego, puedes otorgar a las principales acceso al conjunto de datos con el grupo de vistas o a vistas individuales en el 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 a acceder a sus datos se denomina conjunto de datos compartidos.

La lista de control de acceso de un conjunto de datos puede tener hasta 2,500 recursos autorizados en total, incluidas las vistas autorizadas, los conjuntos de datos autorizados y las funciones autorizadas. Si superas este límite debido a una gran cantidad de vistas autorizadas, considera agrupar las vistas en conjuntos de datos autorizados. Como práctica recomendada, agrupa las vistas relacionadas en conjuntos de datos autorizados cuando diseñes arquitecturas nuevas de BigQuery, en especial, arquitecturas de múltiples usuarios.

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

Limitaciones

  • Cuando realizas una vista autorizada o una vista materializada autorizada en otro conjunto de datos, el conjunto de datos de origen y el de la vista autorizada deben estar en la misma ubicación regional.
  • Cuando borras una vista autorizada, pueden pasar hasta 24 horas para que se quite la vista autorizada de la lista. Durante este tiempo, no puedes acceder a la vista autorizada, pero esta puede aparecer en la lista de vistas y se descuenta del límite de vistas autorizadas. Este límite puede evitar la creación de vistas autorizadas adicionales si la nueva vista autorizada superara ese límite.
  • No puedes crear una vista autorizada en una réplica secundaria. Para obtener más información, consulta Comportamiento de los recursos en la replicación de conjuntos de datos.

Antes de comenzar

Otorga funciones de Identity and Access Management (IAM) que les brindan a los usuarios los permisos necesarios para consultar las vistas autorizadas o las vistas materializadas autorizadas que compartes.

Vistas autorizadas y Controles del servicio de VPC

Cuando se usan vistas autorizadas en un perímetro de Controles del servicio de VPC, las reglas de entrada y salida deben permitir que los principales accedan al proyecto que contiene la vista y a cualquier otro proyecto que contenga los datos de origen desde los que la vista accede a los datos.

Por ejemplo, en el siguiente diagrama, el llamador del proyecto R accede a la vista autorizada en el proyecto A cuya tabla de origen existe en el proyecto B. En este caso, las reglas de entrada y salida de los Controles del servicio de VPC deben permitir que el llamador del proyecto R acceda al proyecto A y al proyecto B con el servicio de BigQuery.

alt

Permisos necesarios para el acceso a los Controles del servicio de VPC

El principal no necesita permisos de Identity and Access Management en el proyecto de datos de origen, pero la regla de entrada debe permitir el acceso al servicio de BigQuery en el proyecto de origen que contiene la tabla de origen, además de permitir el acceso al proyecto que contiene la vista.

Para obtener información sobre los roles y permisos necesarios, consulta Permisos de usuario en el proyecto y el conjunto de datos.

Reglas de entrada y salida

En los siguientes ejemplos de reglas de entrada y salida de los Controles del servicio de VPC, se permite que la API de BigQuery acceda a los proyectos de origen y de vista.

Por ejemplo, si creas una vista en PROJECT_A (vista) que accede a los datos en PROJECT_B (origen), necesitarías el siguiente conjunto de reglas de entrada para PROJECT_B y otro conjunto de reglas de entrada para PROJECT_A:

- ingressFrom:
    identityType: caller_r
    sources:
    - resource:
      - projects/project_r
  ingressTo:
    operations:
    - serviceName: bigquery.googleapis.com
      methodSelectors:
      - method: *
    resources:
    - projects/project_b
  title: Ingress rules for the source project

El siguiente archivo YAML muestra el conjunto de reglas de salida para PROJECT_B (origen). También necesitarías un conjunto de reglas de salida para PROJECT_A (vista):

- egressTo:
    operations:
    - serviceName: bigquery.googleapis.com
      methodSelectors:
      - method: *
    resources:
    - projects/project_b
  egressFrom:
    identityType: caller_r
    sources:
    - resource:
      - projects/project_r
  title: Egress rules for the source project

Roles obligatorios

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

También debes otorgar a los usuarios o grupos acceso al proyecto y al conjunto de datos que contienen la vista.

Permisos del conjunto de datos que contiene la vista

Las vistas se tratan como recursos de tabla en BigQuery, por lo que la creación de una vista requiere los mismos permisos que la creación de una tabla. También debes tener permisos para consultar las tablas a las que hace referencia la consulta en SQL de la vista.

  • Para crear un conjunto de datos, necesitas el permiso de IAM bigquery.datasets.create en el proyecto.
  • Para crear una vista, necesitas el permiso de IAM bigquery.tables.create en el conjunto de datos. El rol predefinido de IAM roles/bigquery.dataEditor incluye los permisos que necesitas para crear una configuración.
  • Para crear una vista que consulte una tabla a la que no tienes acceso, debes tener el permiso bigquery.tables.getData en la tabla que consulta la vista.

Para obtener más información sobre los roles y los permisos de IAM en BigQuery, consulta Roles y permisos predefinidos.

Permisos del conjunto de datos que contiene los datos de origen

Para autorizar una vista, se le otorgan permisos de lectura al conjunto de datos de origen.

Para realizar esta autorización, necesitas los siguientes permisos en el conjunto de datos que contiene los datos de origen:

  • bigquery.datasets.update
  • datasets.getIamPolicy
  • datasets.setIamPolicy

Para obtener permisos adicionales necesarios para actualizar conjuntos de datos, consulta los permisos necesarios.

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

Para compartir una vista autorizada con usuarios o grupos, debes otorgarles los siguientes permisos de IAM:

  • El rol de IAM roles/bigquery.jobUser (o roles/bigquery.user) al proyecto en el que se ejecuta el trabajo de consulta (el proyecto de facturación o ejecución). Este rol otorga el permiso bigquery.jobs.create, que es necesario para ejecutar trabajos de consulta en la vista.

    El rol de IAM roles/bigquery.jobUser solo es necesario para el proyecto en el que deseas ejecutar el trabajo, independientemente de dónde se aloje la vista.

  • El rol de IAM roles/bigquery.dataViewer al conjunto de datos que contiene la vista autorizada. Este rol otorga el permiso bigquery.tables.getData, que es necesario para consultar la vista.

    Si un usuario consulta la vista autorizada desde un proyecto separado, no necesita el rol roles/bigquery.jobUser en el proyecto que aloja la vista. Necesita el rol roles/bigquery.dataViewer en el conjunto de datos que contiene la vista y el rol roles/bigquery.jobUser en el proyecto en el que se ejecuta la consulta.

Trabaja 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, elige una de las siguientes opciones. Para obtener los pasos completos para autorizar, compartir y borrar una vista autorizada, consulta el instructivo Crea una vista autorizada.

Console

  1. Ve a la página de BigQuery.

    Ir a BigQuery

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

  3. Haz clic en Archivo > Guardar > Guardar vista.

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

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

    2. En Conjunto de datos, escribe el conjunto de datos en el que se guardará la vista. Este debe ser un conjunto de datos diferente del que se usa en la consulta de origen.

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

    4. Haz clic en Guardar.

  5. Otorga los permisos necesarios a los usuarios que pueden usar la vista autorizada.

  6. En el panel Explorador, selecciona el conjunto de datos que se usa 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, escribe el nombre completamente calificado de la vista, en el formato PROJECT_ID.DATASET_ID.VIEW_NAME.

  9. Haz clic en Agregar autorización.

Terraform

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.

# 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 tu configuración de Terraform en un Google Cloud proyecto, completa los pasos de las siguientes secciones.

Prepara Cloud Shell

  1. Inicia Cloud Shell.
  2. Establece el proyecto predeterminado en el que deseas aplicar tus configuraciones de Terraform. Google Cloud

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

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

  3. Revisa y modifica los parámetros de muestra que se aplicarán a tu entorno.
  4. Guarda los cambios.
  5. 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

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

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

  3. Abre tu Google Cloud proyecto para ver los resultados. En la Google Cloud consola, navega a tus recursos en la IU para asegurarte de que Terraform los haya creado o actualizado.

Administra usuarios o grupos para vistas autorizadas

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

  • Visualiza la política de acceso.
  • Otorga acceso.
  • Revoca el acceso.
  • Deniega el acceso.

Para obtener más información, consulta Controla el acceso a los recursos con IAM.

Quita la autorización a una vista

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

Console

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

    Ir a BigQuery

  2. En el panel de la izquierda, haz clic en Explorador:

    Botón destacado del panel Explorador.

    Si no ves el panel izquierdo, haz clic en Expandir panel izquierdo para abrirlo.

  3. En el panel Explorador, expande tu proyecto, haz clic en Conjuntos de datos y luego, selecciona un conjunto de datos.

  4. Haz clic en Descripción general > Tablas y, luego, selecciona una tabla.

  5. Haz clic en Compartir > Autorizar vistas.

  6. Haz clic en para Quitar autorización.

  7. Haz clic en Cerrar.

bq

Para quitar la autorización de una vista, usa el comando bq rm. Ingresa el table_id de la vista de la que deseas quitar la autorización.

    bq rm \
    project_id:dataset:table_id
    

API

Llama al tables.delete método 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 para que se quiten del sistema todas las referencias a la vista. Para evitar errores, espera 24 horas antes de reutilizar el nombre de una vista que se quitó o crea un nombre único para tu vista.

Temas avanzados

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

Combina la seguridad a nivel de las filas con las 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 las filas de la tabla de origen subyacente.

Para obtener detalles sobre cómo interactúa la seguridad a nivel de las filas con las vistas materializadas, consulta Usa la seguridad a nivel de las filas con otras funciones de BigQuery.

Combina la seguridad a nivel de las columnas con las vistas autorizadas

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

Para obtener una descripción detallada de cómo se aplican los permisos, consulta Consulta vistas para la seguridad a nivel de las columnas.

Usa BigQuery sharing con vistas autorizadas

BigQuery sharing (anteriormente Analytics Hub) es una plataforma de intercambio de datos con las siguientes capacidades:

  • Te permite compartir datos y estadísticas a gran escala más allá de los límites de la organización.
  • Usa un framework de seguridad y privacidad sólido.
  • Admite la publicación de un conjunto de datos de BigQuery, llamado conjunto de datos compartidos, y sus vistas autorizadas 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 funciona como un puntero o una referencia a un conjunto de datos compartido. Suscribirse a una ficha de uso compartido crea un conjunto de datos vinculado en tu proyecto, pero no una copia del conjunto de datos, de modo que los suscriptores pueden leer los datos, pero no pueden agregar ni actualizar objetos dentro de él.

No se admiten las vistas materializadas que hagan referencia a tablas en el conjunto de datos vinculado. no se admiten.

Para obtener más información, consulta Introducción al uso compartido.

¿Qué sigue?