Conectarse a Blob Storage
Como administrador de BigQuery, puedes crear una conexión para que los analistas de datos accedan a los datos almacenados en Azure Blob Storage.
BigQuery Omni accede a los datos de Blob Storage a través de conexiones. BigQuery Omni admite la federación de identidades de carga de trabajo de Azure. La compatibilidad de BigQuery Omni con la federación de identidades de carga de trabajo de Azure te permite conceder acceso a una aplicación de Azure de tu arrendatario a una cuenta de servicio de Google. No hay secretos de cliente de aplicación que tengas que gestionar tú o Google.
Después de crear una conexión de Azure con BigQuery, puede consultar los datos de Blob Storage o exportar los resultados de las consultas a Blob Storage.
Antes de empezar
Asegúrate de haber creado los siguientes recursos:
Un Google Cloud proyecto con la API de conexión de BigQuery habilitada.
Si utilizas el modelo de precios basado en la capacidad, asegúrate de que la API BigQuery Reservation esté habilitada en tu proyecto. Para obtener información sobre los precios, consulta los precios de BigQuery Omni.
Un cliente de Azure con una suscripción a Azure.
Una cuenta de Azure Storage que cumpla las siguientes especificaciones:
Se trata de una cuenta de V2 de uso general o de una cuenta de almacenamiento de blobs.
Usa un espacio de nombres jerárquico. Para obtener más información, consulte Crear una cuenta de almacenamiento para usarla con Azure Data Lake Storage Gen2.
Los datos se rellenan en uno de los formatos admitidos.
Los datos se encuentran en la región
azure-eastus2
.
Roles obligatorios
-
Para obtener los permisos que necesitas para crear una conexión y acceder a los datos de Azure Blob Storage, pide a tu administrador que te conceda el rol de gestión de identidades y accesos Administrador de conexiones de BigQuery (
roles/bigquery.connectionAdmin
) en el proyecto. Para obtener más información sobre cómo conceder roles, consulta el artículo Gestionar el acceso a proyectos, carpetas y organizaciones.También puedes conseguir los permisos necesarios a través de roles personalizados u otros roles predefinidos.
-
Asegúrate de que tienes los siguientes permisos de gestión de identidades y accesos de Azure en tu cliente:
Application.ReadWrite.All
AppRoleAssignment.ReadWrite.All
Cuotas
Para obtener más información sobre las cuotas, consulta la API Connection de BigQuery.
Crear una conexión de Azure
Para crear una conexión de Azure, sigue estos pasos:
- Crea una aplicación en tu cliente de Azure.
- Crea la conexión de Azure con BigQuery.
- Añade una credencial federada.
- Asigna un rol a las aplicaciones de Azure AD de BigQuery.
Para obtener más información sobre cómo usar las credenciales de identidad federada para acceder a los datos de Azure, consulta Federación de identidades de cargas de trabajo.
Crear una aplicación en tu cliente de Azure
Para crear una aplicación en tu cliente de Azure, sigue estos pasos:
Azure Portal
En el portal de Azure, ve a Registros de aplicaciones y, a continuación, haz clic en Nuevo registro.
En Nombres, escriba el nombre de su aplicación.
En Tipos de cuenta admitidos, selecciona Solo cuentas de este directorio de la empresa.
Para registrar la nueva aplicación, haz clic en Registrar.
Anota el ID de aplicación (cliente). Debe proporcionar este ID cuando cree la conexión.
Terraform
Añade lo siguiente a tu archivo de configuración de Terraform:
data "azuread_client_config" "current" {} resource "azuread_application" "example" { display_name = "bigquery-omni-connector" owners = [data.azuread_client_config.current.object_id] } resource "azuread_service_principal" "example" { client_id = azuread_application.example.client_id app_role_assignment_required = false owners = [data.azuread_client_config.current.object_id] }
Para obtener más información, consulta cómo registrar una aplicación en Azure.
Crear una conexión
Consola
En la Google Cloud consola, ve a la página BigQuery.
En el panel Explorador, haz clic en
Añadir datos.Se abrirá el cuadro de diálogo Añadir datos.
En el panel Filtrar por, en la sección Tipo de fuente de datos, selecciona Bases de datos.
También puede introducir
Azure
en el campo Buscar fuentes de datos.En la sección Fuentes de datos destacadas, haga clic en Azure Blob Storage.
Haz clic en la tarjeta de solución Azure Blob Storage Omni: federación de BigQuery.
En el cuadro de diálogo Crear tabla, en el campo ID de conexión, seleccione Crear una conexión ABS.
En el panel Fuente de datos externa, introduce la siguiente información:
- En Tipo de conexión, selecciona BigLake en Azure (a través de BigQuery Omni).
- En Connection ID (ID de conexión), introduce un identificador para el recurso de conexión. Puedes usar letras, números, guiones y guiones bajos.
- Selecciona la ubicación en la que quieras crear la conexión.
- Opcional: En Nombre descriptivo, introduce un nombre descriptivo para la conexión, como
My connection resource
. El nombre descriptivo puede ser cualquier valor que te ayude a identificar el recurso de conexión si necesitas modificarlo más adelante. - Opcional: En Descripción, escribe una descripción del recurso de conexión.
- En Azure tenant id (ID de cliente de Azure), introduce el ID de cliente de Azure, también denominado ID de directorio (cliente o tenant).
Marca la casilla Usar identidad federada y, a continuación, introduce el ID de cliente de la aplicación federada de Azure.
Para saber cómo obtener los IDs de Azure, consulta el artículo Crear una aplicación en tu cliente de Azure.
Haga clic en Crear conexión.
Haz clic en Ir a la conexión.
En la sección Información sobre la conexión, anote el valor de Identidad de Google de BigQuery, que es el ID de la cuenta de servicio. Este ID es de la cuenta de servicioGoogle Cloud que autorizas para acceder a tu aplicación.
Terraform
resource "google_bigquery_connection" "connection" { connection_id = "omni-azure-connection" location = "azure-eastus2" description = "created by terraform" azure { customer_tenant_id = "TENANT_ID" federated_application_client_id = azuread_application.example.client_id } }
Sustituye TENANT_ID
por el ID de inquilino del directorio de Azure que contiene la cuenta de Blob Storage.
bq
Usa el comando bq mk
. Para obtener el resultado en formato JSON, usa el parámetro --format=json
.
bq mk --connection --connection_type='Azure' \ --tenant_id=TENANT_ID \ --location=AZURE_LOCATION \ --federated_azure=true \ --federated_app_client_id=APP_ID \ CONNECTION_ID
Haz los cambios siguientes:
TENANT_ID
: el ID de propietario del directorio de Azure que contiene la cuenta de almacenamiento de Azure.AZURE_LOCATION
: la región de Azure en la que se encuentran los datos de Azure Storage. BigQuery Omni admite la regiónazure-eastus2
.APP_ID
: el ID de aplicación (cliente) de Azure. Para saber cómo obtener este ID, consulta Crear una aplicación en un cliente de Azure.CONNECTION_ID
: el nombre de la conexión.
El resultado debería ser similar al siguiente:
Connection CONNECTION_ID successfully created Please add the following identity to your Azure application APP_ID Identity: SUBJECT_ID
Esta salida incluye los siguientes valores:
APP_ID
: el ID de la aplicación que has creado.SUBJECT_ID
: el ID de la Google Cloud cuenta de servicio a la que el usuario autoriza para acceder a su aplicación. Este valor es obligatorio cuando creas una credencial federada en Azure.
Anota los valores de APP_ID
y SUBJECT_ID
para usarlos en los pasos siguientes.
A continuación, añade una credencial federada para tu aplicación.
Añadir una credencial federada
Para crear una credencial federada, sigue estos pasos:
Azure Portal
En Azure Portal, ve a Registros de aplicaciones y, a continuación, haz clic en tu aplicación.
Selecciona Certificados y secretos > Credenciales federadas > Añadir credenciales. A continuación, haz lo siguiente:
En la lista Federated credential scenario (Situación de credenciales federadas), selecciona Other issuer (Otro emisor).
En Emisor, introduce
https://accounts.google.com
.En Identificador del asunto, introduzca la identidad de Google de BigQuery de la Google Cloud cuenta de servicio que obtuvo al crear la conexión.
En Name (Nombre), introduce un nombre para la credencial.
Haz clic en Añadir.
Terraform
Añade lo siguiente a tu archivo de configuración de Terraform:
resource "azuread_application_federated_identity_credential" "example" { application_id = azuread_application.example.id display_name = "omni-federated-credential" description = "BigQuery Omni federated credential" audiences = ["api://AzureADTokenExchange"] issuer = "https://accounts.google.com" subject = google_bigquery_connection.connection.azure[0].identity }
Para obtener más información, consulta Configurar una aplicación para que confíe en un proveedor de identidades externo.
Asigna un rol a las aplicaciones Azure de BigQuery
Para asignar un rol a la aplicación Azure de BigQuery, usa Azure Portal, Azure PowerShell o la API REST de Microsoft Management:
Azure Portal
Puedes asignar roles en Azure Portal iniciando sesión como usuario con el permiso Microsoft.Authorization/roleAssignments/write
. La asignación de roles permite que la conexión de Azure de BigQuery acceda a los datos de Azure Storage tal como se especifica en la política de roles.
Para añadir asignaciones de roles mediante Azure Portal, sigue estos pasos:
En tu cuenta de Azure Storage, introduce
IAM
en la barra de búsqueda.Haz clic en Control de acceso (IAM).
Haz clic en Añadir y selecciona Añadir asignaciones de rol.
Para proporcionar acceso de solo lectura, selecciona el rol Lector de datos de blobs de almacenamiento. Para proporcionar acceso de lectura y escritura, selecciona el rol Colaborador de datos de blob de almacenamiento.
En Asignar acceso a, selecciona Usuario, grupo o principal de servicio.
Haz clic en Seleccionar miembros.
En el campo Seleccionar, introduce el nombre de la aplicación de Azure que le asignaste cuando creaste la aplicación en el cliente de Azure.
Haz clic en Guardar.
Para obtener más información, consulta Asignar roles de Azure mediante Azure Portal.
Terraform
Añade lo siguiente a tu archivo de configuración de Terraform:
resource "azurerm_role_assignment" "data_role" { scope = data.azurerm_storage_account.example.id # Read permission for Omni on the storage account role_definition_name = "Storage Blob Data Reader" principal_id = azuread_service_principal.example.id }
Azure PowerShell
Para añadir una asignación de rol a un principal de servicio en un ámbito de recurso, puedes usar el comando New-AzRoleAssignment
:
New-AzRoleAssignment` -SignInName APP_NAME` -RoleDefinitionName ROLE_NAME` -ResourceName RESOURCE_NAME` -ResourceType RESOURCE_TYPE` -ParentResource PARENT_RESOURCE` -ResourceGroupName RESOURCE_GROUP_NAME
Haz los cambios siguientes:
APP_NAME
: el nombre de la aplicación.ROLE_NAME
: el nombre del rol que quieras asignar.RESOURCE_NAME
: el nombre del recurso.RESOURCE_TYPE
: el tipo de recurso.PARENT_RESOURCE
: el recurso principal.RESOURCE_GROUP_NAME
: el nombre del grupo de recursos.
Para obtener más información sobre cómo usar Azure PowerShell para añadir una nueva entidad de servicio, consulta el artículo Asignar roles de Azure con Azure PowerShell.
CLI de Azure
Para añadir una asignación de roles a una entidad de servicio en un ámbito de recurso, puedes usar la herramienta de línea de comandos de Azure. Debes tener el permiso Microsoft.Authorization/roleAssignments/write
en la cuenta de almacenamiento para asignar roles.
Para asignar un rol, como el de lector de datos de blobs de almacenamiento, a la entidad de servicio, ejecuta el comando az role assignment create
:
az role assignment create --role "Storage Blob Data Reader" \ --assignee-object-id ${SP_ID} \ --assignee-principal-type ServicePrincipal \ --scope subscriptions/SUBSCRIPTION_ID/resourcegroups/RESOURCE_GROUP_NAME/providers/Microsoft.Storage/storageAccounts/STORAGE_ACCOUNT_NAME
Haz los cambios siguientes:
SP_ID
: el ID de principal de servicio. Este principal de servicio es para la aplicación que has creado. Para obtener el principal de servicio de una conexión federada, consulta Objeto principal de servicio.STORAGE_ACCOUNT_NAME
: el nombre de la cuenta de almacenamiento.RESOURCE_GROUP_NAME
: el nombre del grupo de recursos.SUBSCRIPTION_ID
: el ID de la suscripción.
Para obtener más información, consulta Asignar roles de Azure con la CLI de Azure.
API REST de Microsoft
Para añadir asignaciones de roles a una entidad de servicio, puedes enviar una solicitud HTTP a Microsoft Management.
Para llamar a la API REST de Microsoft Graph, obtén un token de OAuth para una aplicación. Para obtener más información, consulta el artículo Obtener acceso sin un usuario.
La aplicación que ha llamado a la API REST de Microsoft Graph debe tener el permiso de aplicación Application.ReadWrite.All
.
Para generar un token de OAuth, ejecuta el siguiente comando:
export TOKEN=$(curl -X POST \ https://login.microsoftonline.com/TENANT_ID/oauth2/token \ -H 'cache-control: no-cache' \ -H 'content-type: application/x-www-form-urlencoded' \ --data-urlencode "grant_type=client_credentials" \ --data-urlencode "resource=https://graph.microsoft.com/" \ --data-urlencode "client_id=CLIENT_ID" \ --data-urlencode "client_secret=CLIENT_SECRET" \ | jq --raw-output '.access_token')
Haz los cambios siguientes:
TENANT_ID
: el ID de inquilino que coincide con el ID del directorio de Azure que contiene la cuenta de almacenamiento de Azure.CLIENT_ID
: el ID de cliente de Azure.CLIENT_SECRET
: el secreto de cliente de Azure.
Obtén el ID de los roles integrados de Azure que quieras asignar a la entidad de servicio.
Estos son algunos de los roles más habituales:
- Colaborador de datos de blob de almacenamiento:
ba92f5b4-2d11-453d-a403-e96b0029c9fe
- Lector de datos de blob de almacenamiento:
2a2b9908-6ea1-4ae2-8e65-a410df84e7d1
Para asignar un rol a la entidad de servicio, llama a la API REST de Microsoft Graph a la API REST de gestión de recursos de Azure:
export ROLE_ASSIGNMENT_ID=$(uuidgen) curl -X PUT \ 'https://management.azure.com/subscriptions/SUBSCRIPTION_ID/resourcegroups/RESOURCE_GROUP_NAME/providers/Microsoft.Storage/storageAccounts/STORAGE_ACCOUNT_NAME/providers/Microsoft.Authorization/roleAssignments/ROLE_ASSIGNMENT_ID?api-version=2018-01-01-preview' \ -H "authorization: Bearer ${TOKEN?}" \ -H 'cache-control: no-cache' \ -H 'content-type: application/json' \ -d '{ "properties": { "roleDefinitionId": "subscriptions/SUBSCRIPTION_ID/resourcegroups/RESOURCE_GROUP_NAME/providers/Microsoft.Storage/storageAccounts/STORAGE_ACCOUNT_NAME/providers/Microsoft.Authorization/roleDefinitions/ROLE_ID", "principalId": "SP_ID" } }'
Haz los cambios siguientes:
ROLE_ASSIGNMENT_ID
: el ID del rol.SP_ID
: el ID de principal de servicio. Este principal de servicio es para la aplicación que has creado. Para obtener la entidad de servicio de una conexión federada, consulta Objeto de entidad de servicio.SUBSCRIPTION_ID
: el ID de la suscripción.RESOURCE_GROUP_NAME
: el nombre del grupo de recursos.STORAGE_ACCOUNT_NAME
: el nombre de la cuenta de almacenamiento.SUBSCRIPTION_ID
: el ID de la suscripción.
La conexión ya está lista para usarse. Sin embargo, puede haber un retraso en la propagación de una asignación de roles en Azure. Si no puedes usar la conexión debido a problemas de permisos, vuelve a intentarlo al cabo de un tiempo.
Compartir conexiones con usuarios
Puede conceder los siguientes roles para permitir que los usuarios consulten datos y gestionen conexiones:
roles/bigquery.connectionUser
: permite a los usuarios usar conexiones para conectarse con fuentes de datos externas y ejecutar consultas en ellas.roles/bigquery.connectionAdmin
: permite a los usuarios gestionar las conexiones.
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.
Selecciona una de las opciones siguientes:
Consola
Ve a la página BigQuery.
Las conexiones se muestran en tu proyecto, en un grupo llamado Conexiones externas.
En el panel Explorador, haga clic en el nombre del proyecto > Conexiones externas > conexión.
En el panel Detalles, haz clic en Compartir para compartir una conexión. A continuación, sigue estas instrucciones:
En el cuadro de diálogo Permisos de conexión, comparte la conexión con otras entidades principales añadiendo o editando entidades principales.
Haz clic en Guardar.
bq
No puedes compartir una conexión con la herramienta de línea de comandos bq. Para compartir una conexión, usa la Google Cloud consola o el método de la API Connections de BigQuery.
API
Usa el método projects.locations.connections.setIAM
de la sección de referencia de la API REST Connections de BigQuery y proporciona una instancia del recurso policy
.
Java
Antes de probar este ejemplo, sigue las Javainstrucciones de configuración de la guía de inicio rápido de BigQuery con bibliotecas de cliente. Para obtener más información, consulta la documentación de referencia de la API Java de BigQuery.
Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta el artículo Configurar la autenticación para bibliotecas de cliente.
Siguientes pasos
- Consulta información sobre los diferentes tipos de conexión.
- Consulta cómo gestionar las conexiones.
- Consulta más información sobre BigQuery Omni.
- Consulta información sobre las tablas de BigLake.
- Consulta cómo consultar datos de Blob Storage.
- Consulta cómo exportar resultados de consultas a Blob Storage.