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 especificado para que accedan a los datos de otro conjunto de datos. Con un conjunto de datos autorizado, no es necesario configurar vistas autorizadas individuales.

Información general

Una vista de BigQuery es una tabla virtual definida por una consulta de SQL. Por ejemplo, la consulta de una vista puede devolver solo un subconjunto de las columnas de una tabla, excluyendo las columnas que contengan información personal identificable (IPI). Para consultar una vista, un usuario debe tener acceso a los recursos a los que accede la consulta de la vista.

Vistas autorizadas

Si quieres permitir que los usuarios consulten una vista sin darles acceso directo a los recursos a los que hace referencia, puedes usar una vista autorizada. Cuando creas una vista autorizada, puedes compartir una vista lógica o una vista materializada. Cuando autorizas una vista materializada, se denomina vista materializada autorizada.

Por ejemplo, una vista autorizada te permite compartir datos más limitados en una vista con grupos o usuarios (principales) específicos sin darles acceso a todos los datos subyacentes. 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. En su lugar, la vista autorizada tiene acceso a los datos de origen.

Conjuntos de datos autorizados

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, puedes dar acceso a las vistas del conjunto de datos a las entidades de seguridad 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 a acceder a sus datos se denomina conjunto de datos compartido.

.

Permisos y roles necesarios

Para autorizar un conjunto de datos o revocar su autorización, debes tener los siguientes permisos de gestión de identidades y accesos (IAM), que te permiten actualizar la lista de control de acceso del conjunto de datos que compartes.

Una vez que se haya autorizado un conjunto de datos, podrá crear o actualizar vistas en él. Para obtener más información sobre los permisos necesarios, consulta el artículo Crear o actualizar una vista en un conjunto de datos autorizado.

Permiso Recurso
bigquery.datasets.get El conjunto de datos que vas a compartir.
bigquery.datasets.update El conjunto de datos que vas a compartir.

Los siguientes roles de gestión de identidades y accesos predefinidos proporcionan los permisos necesarios.

Role 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 límites. Para obtener más información, consulta Límites de conjuntos de datos.

Autorizar un conjunto de datos

Puedes autorizar las vistas actuales y futuras de un conjunto de datos para que accedan a otro conjunto de datos. Para ello, añade el conjunto de datos que quieras autorizar a la lista de acceso del conjunto de datos que quieras compartir, tal como se indica a continuación:

Consola

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

    Ir a BigQuery

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

  3. Haz clic en el icono 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.

    Autorizar un conjunto de datos en la consola Google Cloud

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

    PROJECT.AUTHORIZED_DATASET

    Por ejemplo:

    myProject.myDataset

  6. Haz clic en Añadir autorización y, a continuación, en Cerrar.

bq

  1. Abre Cloud Shell:

    Ir a Cloud Shell

  2. Escribe los metadatos (incluida la lista de control de acceso) del conjunto de datos que quieras 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 añadir el conjunto de datos que quieras autorizar a la sección access 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 ha añadido el conjunto de datos autorizado, vuelve a introducir el comando bq show. Por ejemplo:

    bq show --format=prettyjson PROJECT:SHARED_DATASET

API

  1. Para obtener los metadatos actuales del conjunto de datos que quieras compartir, llama 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 devuelve un recurso Dataset que contiene metadatos JSON del conjunto de datos.

  2. Añade el conjunto de datos que quieras autorizar a la sección access de los metadatos JSON que se devolvieron 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 añadida:

    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 ha añadido el conjunto de datos autorizado, vuelve a llamar al método datasets.get.

Revocar la autorización de un conjunto de datos

Cuando eliminas un conjunto de datos autorizado para acceder a otro conjunto de datos de origen, el cambio puede tardar hasta 24 horas en reflejarse por completo en las listas de control de acceso (LCAs) 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 eliminado.
  • Es posible que el conjunto de datos eliminado siga apareciendo en la lista de control de acceso y en el recuento del conjunto de datos de origen, y que se tenga en cuenta para los límites de conjuntos de datos autorizados. Esto podría impedirle crear conjuntos de datos autorizados hasta que se actualice la lista de control de acceso.

Para revocar el acceso concedido a las vistas de 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:

Consola

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

    Ir a BigQuery

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

  3. Haz clic en el icono 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.

    Autorizar un conjunto de datos en la consola Google Cloud

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

  6. Haz clic en el icono de eliminar situado junto al conjunto de datos autorizado que quieras quitar y, a continuación, haz clic en Cerrar.

bq

  1. Abre Cloud Shell:

    Ir a Cloud Shell

  2. Escribe los metadatos (incluida la lista de control de acceso) del conjunto de datos compartido 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, como se indica a continuación:

      {
        "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 ha eliminado el conjunto de datos autorizado, vuelve a introducir el comando bq show. Por ejemplo:

    bq show --format=prettyjson PROJECT:SHARED_DATASET

API

  1. Para obtener los metadatos actuales del conjunto de datos compartido, llama 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 devuelve un recurso Dataset que contiene metadatos JSON del conjunto de datos.

  2. Elimina el conjunto de datos autorizado de la sección access del JSON que se devolvió en el recurso Dataset. Por ejemplo:

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

    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 comprobar que se ha eliminado el conjunto de datos autorizado, vuelve a llamar al método datasets.get.

Crear o actualizar 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 del conjunto de datos compartido que se indican en Permisos y roles necesarios, además de los permisos necesarios para crear o actualizar una vista en un conjunto de datos estándar.

En la siguiente tabla se resumen los permisos de gestión de identidades y accesos (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 vas a compartir.
bigquery.tables.getData Las tablas o vistas del conjunto de datos compartido a las que se haga referencia en la vista que estés creando o actualizando.
bigquery.tables.create El conjunto de datos autorizado en el que estás creando una vista.
bigquery.tables.update El conjunto de datos autorizado en el que estás actualizando una vista.

No necesita ningún permiso adicional para eliminar una vista de un conjunto de datos autorizado.

Consultar una vista de un conjunto de datos autorizado

Para consultar una vista de un conjunto de datos autorizado, un usuario debe tener acceso a la vista, pero no es necesario que tenga 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 devuelve algunos campos de la tabla private_table, pero no todos.

Puedes dar acceso a un usuario a los datos devueltos por la vista private_table_filtered, pero no a todos los datos de la tabla private_table, de la siguiente manera:

  1. Asigna 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 del conjunto de datos public_dataset. Para obtener información sobre cómo asignar un rol a un usuario en un conjunto de datos, consulta Controlar el acceso a los conjuntos de datos.

    Ahora el usuario tiene permiso para consultar vistas en public_dataset, pero sigue sin poder acceder a la tabla private_table en private_dataset. Si el usuario intenta consultar la tabla private_table directamente o si intenta acceder a ella indirectamente consultando la vista private_table_filtered, recibirá un mensaje de error similar al siguiente:private_table

    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 Google Cloud, abre el conjunto de datos private_dataset, haz clic en Compartir y, a continuación, selecciona Autorizar conjuntos de datos.

  3. En el panel Conjunto de datos autorizado que aparece, introduce PROJECT.public_dataset en el campo ID del conjunto de datos y, a continuación, haz clic en Añadir autorización.

    El conjunto de datos public_dataset se añade 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 a consultar los datos del conjunto de datos private_dataset.

    Ahora, el usuario puede consultar la vista private_table_filtered del conjunto de datos public_dataset, que accede indirectamente al conjunto de datos private_dataset, sin tener permisos para acceder directamente a los datos del 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.

Siguientes pasos

  • Para obtener información sobre cómo autorizar una vista concreta para que acceda 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.