Conjuntos de datos autorizados

En este documento, se describe cómo usar los conjuntos de datos autorizados en BigQuery. Un conjunto de datos autorizado te permite autorizar todas las vistas de un conjunto de datos específico para acceder a los datos de un segundo conjunto de datos. Con un conjunto de datos autorizado, no necesitas configurar vistas autorizadas individuales.

Puedes crear un conjunto de datos autorizado en BigQuery de la siguiente manera:

Descripción general

Una vista en BigQuery es una tabla virtual definida por una consulta en SQL. Por ejemplo, la consulta de una vista puede mostrar solo un subconjunto de las columnas de una tabla, sin incluir las columnas que contienen información de identificación personal (PII). Para consultar una vista, un usuario debe tener acceso a los recursos a los que accede la consulta de la vista.

Si deseas permitir que los usuarios consulten una vista sin darles acceso directo a los recursos a los que hace referencia la vista, puedes usar una vista autorizada. Una vista autorizada te permite, por ejemplo, compartir datos más limitados en una vista con grupos o usuarios especificados (principales), sin otorgar a los principales acceso a todos los datos subyacentes. Para ello, otorga a los principales acceso a la vista y otorga a la vista acceso al conjunto de datos que contiene los datos subyacentes.

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.

Funciones y permisos obligatorios

Para autorizar un conjunto de datos o revocar la autorización de un conjunto de datos, necesitas los siguientes permisos de Identity and Access Management (IAM), que te permiten actualizar la lista de control de acceso de el conjunto de datos que compartes.

Una vez que el conjunto de datos está autorizado, necesitas estos mismos permisos si deseas crear o actualizar vistas en el conjunto de datos autorizado. Para obtener más información, consulta Crea o actualiza una vista en un conjunto de datos autorizado.

Permiso Recurso
bigquery.datasets.get El conjunto de datos que compartes.
bigquery.datasets.update El conjunto de datos que compartes.

Los siguientes roles de IAM predefinidos proporcionan los permisos necesarios.

Función Descripción
bigquery.dataOwner Propietario de datos de BigQuery
bigquery.admin Administrador de BigQuery

Cuotas y límites

Los conjuntos de datos autorizados están sujetos a los límites de los conjuntos de datos. Para obtener más información, consulta Límites de conjuntos de datos.

Autoriza un conjunto de datos

Puedes autorizar las vistas actuales y futuras de un conjunto de datos para acceder a otro conjunto de datos si agregas el conjunto de datos que deseas autorizar a la lista de acceso del conjunto de datos que deseas compartir, de la siguiente manera:

Console

  1. En la consola de Google Cloud, ve a la página de BigQuery.

    Ir a BigQuery

  2. En el panel Explorador, expande tu proyecto y selecciona el conjunto de datos que contiene los datos que deseas compartir.

  3. Haz clic en el ícono Acciones y selecciona Abrir.

  4. En el panel de detalles que aparece, haz clic en Compartir y selecciona la opción Autorizar conjuntos de datos.

    Autoriza un conjunto de datos

  5. En el panel Conjunto de datos autorizado que aparece, ingresa el ID del conjunto de datos que deseas autorizar, con el siguiente formato:

    PROJECT.AUTHORIZED_DATASET

    Por ejemplo:

    myProject.myDataset

  6. Haz clic en Agregar autorización y, luego, en Cerrar.

bq

  1. Abre Cloud Shell:

    Ir a Cloud Shell

  2. Escribe los metadatos existentes (incluida la lista de control de acceso) del conjunto de datos que deseas compartir en un archivo JSON mediante el comando bq show.

    bq show --format=prettyjson PROJECT:SHARED_DATASET > FILE_PATH
  3. Usa un editor de texto para agregar el conjunto de datos que deseas autorizar a la sección access existente del archivo JSON que se creó en FILE_PATH.

    Por ejemplo:

    "access": [
     ...
     {
       "dataset": {
         "dataset": {
           "project_id": "PROJECT",
           "dataset_id": "AUTHORIZED_DATASET"
         },
         "target_types": "VIEWS"
       }
     }
    ]

  4. Actualiza el conjunto de datos compartido con el comando bq update. Por ejemplo:

    bq update --source FILE_PATH PROJECT:SHARED_DATASET
  5. Para verificar que se agregó el conjunto de datos autorizado, vuelve a ingresar el comando bq show. Por ejemplo:

    bq show --format=prettyjson PROJECT:SHARED_DATASET

API

  1. Obtén los metadatos actuales del conjunto de datos que deseas compartir mediante una llamada al método datasets.get de la siguiente manera:

    GET https://bigquery.googleapis.com/bigquery/v2/projects/PROJECT/datasets/SHARED_DATASET

    El cuerpo de la respuesta muestra un recurso Dataset que contiene metadatos JSON para el conjunto de datos.

  2. Agrega el conjunto de datos que deseas autorizar a la sección access de los metadatos JSON que se mostraron en el recurso Dataset de la siguiente manera:

    "access": [
     ...
     {
       "dataset": {
         "dataset": {
           "project_id": "PROJECT",
           "dataset_id": "AUTHORIZED_DATASET"
         },
         "target_types": "VIEWS"
       }
     }
    ]
  3. Usa el método datasets.update para actualizar el conjunto de datos con la autorización agregada:

    PUT https://bigquery.googleapis.com/bigquery/v2/projects/PROJECT/datasets/SHARED_DATASET

    Incluye el recurso Dataset actualizado en el cuerpo de la solicitud.

  4. Para verificar que el conjunto de datos autorizado se haya agregado, vuelve a llamar al método datasets.get.

Revoca la autorización de un conjunto de datos

Cuando borras un conjunto de datos autorizado para acceder a otro conjunto de datos de origen, el cambio puede tomar hasta 24 horas en reflejarse por completo en las listas de control de acceso (LCA) del conjunto de datos de origen. Durante este tiempo:

  • No podrás acceder a los datos de origen a través del conjunto de datos borrado.
  • El conjunto de datos borrado aún puede aparecer en la LCA del conjunto de datos de origen y se considera en los límites del conjunto de datos autorizado. Esto podría impedir que crees nuevos conjuntos de datos autorizados hasta que se actualice la LCA.

Para revocar el acceso otorgado a las vistas en un conjunto de datos autorizado, quita el conjunto de datos autorizado de la lista de acceso del conjunto de datos compartido de la siguiente manera:

Console

  1. En la consola de Google Cloud, ve a la página de BigQuery.

    Ir a BigQuery

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

  3. Haz clic en el ícono Acciones y selecciona Abrir.

  4. En el panel de detalles que aparece, haz clic en Compartir y selecciona la opción Autorizar conjuntos de datos.

    Autoriza un conjunto de datos

  5. En el panel Conjunto de datos autorizado que aparece, busca la entrada para el conjunto de datos autorizado en la sección Conjuntos de datos autorizados actualmente.

  6. Haz clic en el ícono de borrar junto al conjunto de datos autorizado que deseas quitar y, luego, haz clic en Cerrar.

bq

  1. Abre Cloud Shell:

    Ir a Cloud Shell

  2. Escribe los metadatos existentes (incluida la lista de control de acceso) del conjunto de datos compartidos en un archivo JSON mediante el comando bq show.

    bq show --format=prettyjson PROJECT:SHARED_DATASET > FILE_PATH
  3. Usa un editor de texto para quitar el conjunto de datos autorizado de la sección access del archivo JSON que se creó en FILE_PATH de la siguiente manera:

      {
        "dataset": {
          "dataset": {
            "project_id": "PROJECT",
            "dataset_id": "AUTHORIZED_DATASET"
          },
          "target_types": "VIEWS"
        }
      }
  4. Actualiza el conjunto de datos compartido con el comando bq update. Por ejemplo:

    bq update --source FILE_PATH PROJECT:SHARED_DATASET
  5. Para verificar que se haya quitado el conjunto de datos autorizado, vuelve a ingresar el comando bq show. Por ejemplo:

    bq show --format=prettyjson PROJECT:SHARED_DATASET

API

  1. Obtén los metadatos actuales del conjunto de datos compartido mediante una llamada al método datasets.get de la siguiente manera:

    GET https://bigquery.googleapis.com/bigquery/v2/projects/PROJECT/datasets/SHARED_DATASET

    El cuerpo de la respuesta muestra un recurso Dataset que contiene metadatos JSON para el conjunto de datos.

  2. Quita el conjunto de datos autorizado de la sección access del JSON que se mostró en el recurso Dataset, por ejemplo:

     {
       "dataset": {
         "dataset": {
           "project_id": "PROJECT",
           "dataset_id": "AUTHORIZED_DATASET"
         },
         "target_types": "VIEWS"
       }
     }
  3. Usa el método datasets.update para actualizar el conjunto de datos con la autorización que se quitó:

    PUT https://bigquery.googleapis.com/bigquery/v2/projects/PROJECT/datasets/SHARED_DATASET

    Incluye el recurso Dataset actualizado en el cuerpo de la solicitud.

  4. Para verificar que se haya quitado el conjunto de datos autorizado, vuelve a llamar al método datasets.get.

Crea o actualiza una vista en un conjunto de datos autorizado

Para crear o actualizar una vista que esté en un conjunto de datos autorizado, debes tener los permisos para el conjunto de datos compartido que se enumera en Permisos y roles necesarios, además de los permisos necesarios para create o actualizar una vista en un conjunto de datos estándar.

En la siguiente tabla, se resumen los permisos de Identity and Access Management (IAM) necesarios para crear o actualizar una vista que está en un conjunto de datos autorizado:

Permiso Recurso
bigquery.datasets.get El conjunto de datos que compartes.
bigquery.datasets.update El conjunto de datos que compartes.
bigquery.tables.getData Cualquier tabla o vista del conjunto de datos compartido al que se hace referencia en la vista nueva que creas o actualizas.
bigquery.tables.create El conjunto de datos autorizado en el que crearás una vista.
bigquery.tables.update El conjunto de datos autorizado en el que actualizas una vista.

No necesitas permisos adicionales para borrar una vista de un conjunto de datos autorizado.

Consulta una vista en un conjunto de datos autorizado

Para consultar una vista en un conjunto de datos autorizado, un usuario debe tener acceso a la vista, pero no se necesita acceso al conjunto de datos compartido.

Para obtener más información, consulta Vistas autorizadas.

Ejemplo de conjunto de datos autorizado

En el siguiente ejemplo, se describe cómo crear y usar un conjunto de datos autorizado.

Supongamos que tienes dos conjuntos de datos, llamados private_dataset y public_dataset. El conjunto de datos private_dataset contiene una tabla llamada private_table. El conjunto de datos public_dataset contiene una vista llamada private_table_filtered. La vista private_table_filtered se basa en una consulta que muestra algunos de los campos de la tabla private_table, pero no todos.

Puedes otorgar a un usuario acceso a los datos que muestra la vista private_table_filtered, pero no a todos los datos en la tabla private_table, de la siguiente manera:

  1. Otorga el rol bigquery.dataViewer al usuario para el conjunto de datos public_dataset. Este rol incluye el permiso bigquery.tables.getData, que permite al usuario consultar las vistas en el conjunto de datos public_dataset. A fin de obtener información sobre cómo otorgar un rol a un usuario para un conjunto de datos, consulta Controla el acceso a los conjuntos de datos.

    El usuario ahora tiene permiso para consultar vistas en public_dataset, pero no puede acceder a la tabla private_table en private_dataset. Si el usuario intenta consultar la tabla private_table directamente o intenta acceder a la tabla private_table indirectamente mediante una consulta a la vista private_table_filtered, recibirá un mensaje de error similar al siguiente:

    Access Denied: Table PROJECT:private_dataset.private_table: User does not have permission to query table PROJECT:private_dataset.private_table.

  2. En la página BigQuery de la consola de Google Cloud, abre el conjunto de datos private_dataset, haz clic en Uso compartido y, luego, seleccionaAutoriza conjuntos de datos.

  3. En el panel Conjunto de datos autorizado que aparece, ingresa PROJECT.public_dataset en el campo ID de conjunto de datos y, luego, haz clic enAgregar autorización.

    El conjunto de datos public_dataset se agrega a la lista de control de acceso del conjunto de datos private_dataset, lo que autoriza a las vistas del conjunto de datos public_dataset para consultar los datos en el conjunto de datos private_dataset.

    El usuario ahora puede consultar la vista private_table_filtered en el conjunto de datos public_dataset, que accede de forma indirecta al conjunto de datos private_dataset, sin tener ningún permiso para acceder directamente a los datos en el conjunto de datos private_dataset.

Limitaciones

  • Puedes crear conjuntos de datos autorizados en diferentes regiones, pero BigQuery no admite consultas entre regiones. Por lo tanto, te recomendamos que crees conjuntos de datos en la misma región.

¿Qué sigue?

  • Para obtener información sobre cómo autorizar una vista individual para acceder a los datos de un conjunto de datos, consulta Vistas autorizadas.

  • Para obtener información sobre cómo autorizar una función de tabla o una función definida por el usuario para acceder a los datos de un conjunto de datos, consulta Funciones autorizadas.