Conéctate a Blob Storage
Como administrador de BigQuery, puedes crear una conexión para permitir que los analistas de datos accedan a los datos almacenados en Azure Blob Storage.
BigQuery Omni accede a los datos de Blob Storage mediante conexiones. BigQuery Omni admite la federación de identidades para cargas de trabajo de Azure. La compatibilidad de BigQuery Omni con la federación de identidades para cargas de trabajo de Azure te permite otorgar acceso a una cuenta de servicio de Google para una aplicación de Azure en tu usuario. No hay secretos de cliente de aplicación que tú o Google administren.
Después de crear una conexión de BigQuery Azure, puedes consultar los datos de Blob Storage o exportar los resultados de las consultas a Blob Storage.
Antes de comenzar
Asegúrate de que creaste los siguientes recursos:
Un proyecto de Google Cloud con la API de BigQuery Connection habilitada.
Si usas el modelo de precios basado en la capacidad, asegúrate de haber habilitado la API de reservas de BigQuery para tu proyecto. Para obtener más información sobre los precios, consulta Precios de BigQuery Omni.
Una instancia de Azure con una suscripción a Azure.
Una cuenta de Azure Storage que cumpla con las siguientes especificaciones:
Es una cuenta de uso general V2 o una cuenta de Blob Storage.
Usa un espacio de nombres jerárquico. Si deseas obtener más información, consulta Crea una cuenta de almacenamiento para usar con Azure Data Lake Storage Gen2.
Los datos se propagan en uno de los formatos compatibles.
Los datos se encuentran en la región
azure-eastus2
.
Roles obligatorios
-
Si quieres obtener los permisos que necesitas para crear una conexión para acceder a los datos de Azure Blob Storage, pídele a tu administrador que te otorgue el rol de IAM de administrador de conexión de BigQuery (
roles/bigquery.connectionAdmin
) en el proyecto. Para obtener más información sobre cómo otorgar roles, consulta Administra el acceso a proyectos, carpetas y organizaciones.También puedes obtener los permisos necesarios mediante roles personalizados o cualquier otro rol predefinido.
-
Asegúrate de que tengas los siguientes permisos de IAM de Azure en tu usuario:
Application.ReadWrite.All
AppRoleAssignment.ReadWrite.All
Cuotas
Para obtener más información acerca de las cuotas, consulta API de BigQuery Connection.
Crea una conexión de Azure
Para crear una fuente de Azure, sigue estos pasos:
- Crea una aplicación en tu instancia de Azure.
- Crea la conexión de BigQuery de Azure.
- Agrega una credencial federada.
- Asigna un rol a las aplicaciones de BigQuery Azure AD.
Si deseas obtener más información sobre el uso de credenciales de identidad federada para acceder a los datos en Azure, consulta Federación de Workload Identity.
Crea una aplicación en tu instancia de Azure
Para crear una aplicación en tu instancia de Azure, sigue estos pasos:
Portal de Azure
En el portal de Azure, ve a Registros de apps y, luego, haz clic en Nuevo registro.
En Nombres, ingresa un nombre para tu aplicación.
En Tipos de cuentas compatibles, selecciona Cuentas en este directorio de la organización solo.
Para registrar la aplicación nueva, haz clic en Registrar.
Toma nota del ID de aplicación (cliente). Debes proporcionar este ID cuando crees la conexión.
Terraform
Agrega lo siguiente al archivo de configuración de Terraform:
resource "azuread_application" "example" { display_name = "bigquery-omni-connector" } resource "azuread_service_principal" "example" { application_id = azuread_application.example.application_id app_role_assignment_required = false }
Si deseas obtener más información, consulta cómo registrar una aplicación en Azure.
Crear una conexión
Console
En la consola de Google Cloud, ve a la página de BigQuery.
En el menú
Agregar datos, selecciona Fuentes de datos externa.En el panel Fuente de datos externa, ingresa la siguiente información:
- En Tipo de conexión, selecciona BigLake on Azure (mediante BigQuery Omni).
- En ID de conexión, ingresa un identificador para el recurso de conexión. Puedes usar letras, números, guiones y guiones bajos.
- Selecciona la ubicación en la que deseas crear la conexión.
- En Nombre descriptivo, ingresa un nombre fácil de usar para la conexión, como
My connection resource
(opcional). El nombre descriptivo puede ser cualquier valor que te ayude a identificar el recurso de conexión si necesitas modificarlo más adelante. - En Descripción, ingresa una descripción para este recurso de conexión (opcional).
- En ID de usuario de Azure, ingresa el ID del usuario de Azure, que también se conoce como ID del directorio (usuario).
Habilita la casilla de verificación Usar identidad federada y, luego, ingresa el ID de la aplicación federada de Azure (cliente).
Para obtener información sobre cómo obtener IDs de Azure, consulta Crea una aplicación en tu instancia de Azure.
Haz clic en Crear conexión (Create connection).
Haz clic en Ir a la conexión.
En la sección Información de conexión, anota el valor de Identidad de Google de BigQuery, que es el ID de la cuenta de servicio. Este ID es para la cuenta de servicio de Google Cloud que autorizas a 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.application_id } }
Reemplaza TENANT_ID
por el ID de usuario 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
Reemplaza lo siguiente:
TENANT_ID
: El ID de usuario del directorio de Azure que contiene la cuenta de Azure Storage.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 la aplicación de Azure (cliente). Para aprender a obtener este ID, consulta Crear aplicación en un usuario de Azure.CONNECTION_ID
: Es el nombre de la conexión.
El resultado es similar a este:
Connection CONNECTION_ID successfully created Please add the following identity to your Azure application APP_ID Identity: SUBJECT_ID
En esta salida, se incluyen los siguientes valores:
APP_ID
: el ID de la aplicación que creaste.SUBJECT_ID
: el ID de la cuenta de servicio de Google Cloud que el usuario autoriza para acceder a su aplicación. Este valor es obligatorio cuando creas una credencial federada en Azure.
Toma nota de los valores APP_ID
y SUBJECT_ID
para usarlos en los siguientes pasos.
A continuación, agrega una credencial federada para la aplicación.
Agrega una credencial federada
Para crear una credencial nueva, sigue estos pasos:
Portal de Azure
En el portal de Azure, ve a Registros de apps y, luego, haz clic en tu aplicación.
Selecciona Certificados y secretos > Credenciales federadas > Agregar credenciales. A continuación, sigue estos pasos:
En la lista Situación de credencial federada, selecciona Otro emisor.
En Emisor, ingresa
https://accounts.google.com
.En Identificador de asunto, ingresa la identidad de Google de BigQuery de la cuenta de servicio de Google Cloud que obtuviste cuando creaste la conexión.
En Nombre, ingresa un nombre para la credencial.
Haz clic en Agregar.
Terraform
Agrega lo siguiente al archivo de configuración de Terraform:
resource "azuread_application" "example" { display_name = "bigquery-omni-connector" } resource "azuread_service_principal" "example" { application_id = azuread_application.example.application_id app_role_assignment_required = false } resource "azuread_application_federated_identity_credential" "example" { application_object_id = azuread_application.example.object_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 Configura una app para que confíe en un proveedor de identidad externo.
Asigna un rol a las aplicaciones de Azure de BigQuery
Para asignar un rol a la aplicación de Azure de BigQuery, usa el Portal de Azure, Azure PowerShell o la API de REST de Management de Microsoft:
Portal de Azure
Para realizar asignaciones de funciones en el Portal de Azure, accede como un usuario con el permiso Microsoft.Authorization/roleAssignments/write
. La asignación de funciones permite que la conexión de BigQuery Azure acceda a los datos de Azure Storage como se especifica en la política de funciones.
Para agregar asignaciones de roles con el Portal de Azure, sigue estos pasos:
Desde tu cuenta de Azure Storage, ingresa
IAM
en la barra de búsqueda.Haz clic en Control de acceso (IAM).
Haz clic en Add y selecciona Add role assignments.
Para proporcionar acceso de solo lectura, selecciona el rol Lector de datos de almacenamiento de BLOB. Para proporcionar acceso de lectura y escritura, selecciona el rol Colaborador de datos de BLOB de almacenamiento.
Configura Assign access to como User, group, or service principal.
Haz clic en Seleccionar miembros.
En el campo Seleccionar, ingresa el nombre de la aplicación de Azure que le asignaste cuando creaste la aplicación en el usuario de Azure. .
Haz clic en Guardar.
Para obtener más información, consulta Asigna roles de Azure mediante el portal de Azure.
Terraform
Agrega lo siguiente al 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 agregar una asignación de rol para una principal de servicio en el alcance de un 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
Reemplaza lo siguiente:
APP_NAME
: Es el nombre de la aplicación.ROLE_NAME
: Es el nombre del rol que deseas asignar.RESOURCE_NAME
: Es el nombre del recurso.RESOURCE_TYPE
: Es el tipo de recurso.PARENT_RESOURCE
: El recurso superior.RESOURCE_GROUP_NAME
: Es el nombre del grupo de recursos.
Si deseas obtener más información sobre el uso de Azure PowerShell para agregar un principal de servicio nuevo, consulta Asigna roles de Azure PowerShell.
CLI de Azure
Para agregar una asignación de rol a una principal de servicio en un permiso de recursos, puedes usar la herramienta de línea de comandos de Azure. Debes tener el permiso Microsoft.Authorization/roleAssignments/write
para que la cuenta de almacenamiento otorgue roles.
Para asignar un rol, como el rol de Lector de datos de BLOB de almacenamiento, al principal 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
Reemplaza lo siguiente:
SP_ID
: El ID del principal del servicio. Este principal del servicio es para la aplicación que creaste. Para obtener el principal del servicio para una conexión federada, consulta Objeto del principal del servicio.STORAGE_ACCOUNT_NAME
: Es el nombre de la cuenta de almacenamiento.RESOURCE_GROUP_NAME
: Es el nombre del grupo de recursos.SUBSCRIPTION_ID
: El ID de suscripción.
Para obtener más información, consulta Asigna funciones de Azure con la CLI de Azure.
API de REST de Microsoft
Para agregar asignaciones de roles a un principal de servicio, puedes enviar una solicitud HTTP a Microsoft Management.
A fin de llamar a la API de REST de Microsoft Graph, recupera un token de OAuth para una aplicación. Para obtener más información, consulta Obtén acceso sin un usuario.
La aplicación que llamó a la API de REST del Microsoft Graph debe tener el permiso de la 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')
Reemplaza lo siguiente:
TENANT_ID
: el ID de usuario que coincide con el ID del directorio de Azure que contiene la cuenta de Azure Storage.CLIENT_ID
: el ID de cliente de Azure.CLIENT_SECRET
: el secreto del cliente de Azure.
Obtén el ID de los roles integrados de Azure que deseas asignar al principal del servicio.
Estos son algunos roles comunes:
- 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 al principio de servicio, llama a la API de REST del gráfico de Microsoft a la API de REST de Azure Resource Management:
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" } }'
Reemplaza lo siguiente:
ROLE_ASSIGNMENT_ID
: El ID del rol.SP_ID
: El ID del principal del servicio. Este principal del servicio es para la aplicación que creaste. A fin de obtener el principal de servicio para una conexión federada, consulta Objeto principal del servicio.SUBSCRIPTION_ID
: El ID de suscripción.RESOURCE_GROUP_NAME
: Es el nombre del grupo de recursos.STORAGE_ACCOUNT_NAME
: Es el nombre de la cuenta de almacenamiento.SUBSCRIPTION_ID
: El ID de suscripción.
La conexión ya está lista para usar. Sin embargo, puede haber una demora de propagación en las asignaciones de roles en Azure. Si no puedes usar la conexión debido a problemas de permisos, vuelve a intentarlo después de un tiempo.
Comparte conexiones con usuarios
Puedes otorgar los siguientes roles para permitir que los usuarios consulten datos y administren conexiones:
roles/bigquery.connectionUser
: Permite que los usuarios usen conexiones para conectarse con fuentes de datos externas y ejecutar consultas en ellas.roles/bigquery.connectionAdmin
: Permite que los usuarios administren conexiones.
Para obtener más información sobre los roles y los permisos de IAM en BigQuery, consulta Roles y permisos predefinidos.
Selecciona una de las opciones siguientes:
Console
Ve a la página de BigQuery.
Las conexiones se enumeran en tu proyecto, en un grupo llamado Conexiones externas.
En el panel Explorador, haz clic en el nombre de tu proyecto > Conexiones externas > conexión.
En el panel Detalles, haz clic en Compartir para compartir una conexión. A continuación, sigue estos pasos:
En el cuadro de diálogo Permisos de conexión, agrega o edita las principales para compartir la conexión con otros principales.
Haz clic en Guardar.
bq
No puedes compartir una conexión con la herramienta de línea de comandos de bq. Para compartir una conexión, usa la consola de Google Cloud o el método de la API de conexiones de BigQuery.
API
Consulta el método projects.locations.connections.setIAM
en la sección de referencia de la API de REST de las conexiones de BigQuery y proporciona una instancia del recurso policy
.
Java
Antes de probar este ejemplo, sigue las instrucciones de configuración para Java incluidas en la guía de inicio rápido de BigQuery sobre cómo usar bibliotecas cliente. Para obtener más información, consulta la documentación de referencia de la API de BigQuery para Java.
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.
¿Qué sigue?
- Obtén información sobre los diferentes tipos de conexión.
- Obtén información sobre cómo administrar conexiones.
- Más información sobre BigQuery Omni
- Obtén más información sobre tablas de BigLake.
- Aprende a consultar datos de Blob Storage.
- Obtén información para exportar resultados de consultas a Blob Storage.