Conectar ao armazenamento de blobs
Como administrador do BigQuery, é possível criar uma conexão para permitir que os analistas de dados acessem dados armazenados no Armazenamento de blobs do Azure.
O BigQuery Omni usa conexões para acessar os dados do Armazenamento de blobs. O BigQuery Omni é compatível com a federação de identidade da carga de trabalho do Azure. O suporte do BigQuery Omni à federação de identidade da carga de trabalho do Azure permite conceder acesso a um aplicativo do Azure no seu locatário a uma conta de serviço do Google. Não há segredos do cliente do aplicativo a serem gerenciados por você ou pelo Google.
Depois de criar uma conexão com o BigQuery Azure, consulte os dados do Armazenamento de blobs ou exporte os resultados da consulta para o Armazenamento de blobs.
Antes de começar
Verifique se você criou os recursos a seguir:
Um projeto do Google Cloud com a API BigQuery Connection ativada.
Se você estiver no modelo de preços baseados em capacidade, verifique se ativou a API BigQuery Reservation no projeto. Para informações sobre preços, consulte Preços do BigQuery Omni.
Um locatário do Azure com uma assinatura do Azure.
Uma conta do Azure Storage que atenda a estas especificações:
É uma conta V2 de uso geral ou de armazenamento de blobs.
Usa um namespace hierárquico. Para mais informações, consulte Criar uma conta de armazenamento para usar com o Azure Data Lake Storage Gen2.
Os dados são preenchidos em um dos formatos compatíveis.
Os dados estão na região
azure-eastus2
.
Funções exigidas
-
Para receber as permissões necessárias para criar uma conexão para acessar os dados do Armazenamento de Blobs do Azure, peça ao administrador para conceder a você o papel do IAM de Administrador de conexão do BigQuery (
roles/bigquery.connectionAdmin
) no projeto. Para mais informações sobre a concessão de papéis, consulte Gerenciar o acesso a projetos, pastas e organizações.Também é possível conseguir as permissões necessárias por meio de papéis personalizados ou de outros papéis predefinidos.
-
Verifique se você tem permissões a seguir do Azure IAM no locatário:
Application.ReadWrite.All
AppRoleAssignment.ReadWrite.All
Cotas
Para mais informações sobre cotas, consulte API BigQuery Connection.
Criar uma conexão do Azure
Para criar uma origem do Azure, siga estas etapas:
- Crie um aplicativo no locatário do Azure.
- Crie a conexão do BigQuery para Azure.
- Adicione uma credencial federada.
- Atribua um papel aos aplicativos Azure AD do BigQuery.
Para mais informações sobre o uso de credenciais de identidade federadas para acessar dados no Azure, consulte Federação de identidade da carga de trabalho.
Criar um aplicativo no locatário do Azure
Para criar um aplicativo no locatário do Azure, siga estas etapas:
Portal do Azure
No portal do Azure, acesse App registrations e clique em New registration.
Em Nomes, digite um nome para o aplicativo.
Em Supported account types, selecione Accounts in this organizational directory only.
Para registrar o novo aplicativo, clique em Register.
Anote o ID do aplicativo (cliente). É necessário fornecer esse ID ao criar a conexão.
Terraform
Adicione o seguinte ao seu arquivo de configuração do 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 }
Para mais informações, confira como registrar um aplicativo no Azure.
Criar uma conexão
Console
No Console do Google Cloud, acesse a página BigQuery.
No menu
Adicionar dados, selecione Fonte de dados externa.No painel Fonte de dados externa, insira as seguintes informações:
- Em Tipo de conexão, selecione BigLake on Azure (via BigQuery Omni).
- Em ID da conexão, insira um identificador para o recurso de conexão. Você pode usar letras, números, traços e sublinhados.
- Selecione o local em que você quer criar a conexão.
- (Opcional) Em Nome amigável, insira um nome fácil de usar para
a conexão, como
My connection resource
. O nome intuitivo pode ser qualquer valor que ajude você a identificar o recurso de conexão se precisar modificá-lo mais tarde. - Opcional: em Descrição, insira uma descrição para este recurso de conexão.
- Em ID do locatário do Azure, insira o ID do locatário do Azure, também conhecido como ID do diretório (locatário).
Ative a caixa de seleção Usar identidade federada e insira o ID do aplicativo federado do Azure (cliente).
Para saber como conseguir os IDs do Azure, consulte Criar um aplicativo no locatário do Azure.
Clique em Criar conexão.
Clique em Ir para conexão.
Na seção Informações da conexão, anote o valor da identidade do Google BigQuery, que é o ID da conta de serviço. Esse ID é da conta de serviço do Google Cloud que você autoriza a acessar seu aplicativo.
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 } }
Substitua TENANT_ID
pelo ID de locatário do diretório do Azure
que contém a conta do Armazenamento de Blobs.
bq
Use o comando bq mk
. Para receber a saída no formato JSON, use o 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
Substitua:
TENANT_ID
: o ID do locatário do diretório do Azure que contém a conta do Azure Storage.AZURE_LOCATION
: a região do Azure onde os dados do Azure Storage estão localizados. O BigQuery Omni é compatível com a regiãoazure-eastus2
.APP_ID
: o ID do aplicativo (cliente) do Azure. Para saber como conseguir esse ID, consulte Criar aplicativo no locatário do Azure.CONNECTION_ID
: o nome da conexão.
O resultado será assim:
Connection CONNECTION_ID successfully created Please add the following identity to your Azure application APP_ID Identity: SUBJECT_ID
Esta saída inclui os seguintes valores:
APP_ID
: o ID do aplicativo que você criou.SUBJECT_ID
: o ID da conta de serviço do Google Cloud que o usuário autoriza a acessar o aplicativo. Esse valor é necessário ao criar uma credencial federada no Azure.
Anote os valores APP_ID
e SUBJECT_ID
para usar nas próximas etapas.
Em seguida, adicione uma credencial federada para o aplicativo.
Adicionar uma credencial federada
Para criar uma credencial federada, siga estas etapas:
Portal do Azure
No portal do Azure, acesse App registrations e, em seguida, clique no aplicativo.
Selecione Certificates & secrets > Federated credentials > Add credentials. Em seguida, faça o seguinte:
Na lista Federated credential scenario, selecione Other issuer.
Em Issuer, digite
https://accounts.google.com
.Em Identificador de assunto, insira a identidade do Google BigQuery da conta de serviço do Google Cloud que você recebeu quando criou a conexão.
Em Name, digite um nome para a credencial.
Clique em Adicionar.
Terraform
Adicione o seguinte ao seu arquivo de configuração do 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 saber mais, consulte Configurar um aplicativo para confiar em um provedor de identidade externo.
Atribuir um papel aos aplicativos Azure do BigQuery
Para atribuir um papel ao aplicativo do Azure AD do BigQuery, use o portal do Azure, o Azure PowerShell ou a API REST Microsoft Management:
Portal do Azure
É possível executar atribuições de papéis no Portal do Azure fazendo login como um usuário
com a permissão Microsoft.Authorization/roleAssignments/write
. A atribuição de papéis permite que a conexão do BigQuery para Azure acesse os dados do Azure Storage, conforme especificado na política de papéis.
Para adicionar atribuições de papéis usando o portal do Azure, siga estas etapas:
Na conta do Azure Storage, insira
IAM
na barra de pesquisa.Clique em Controle de acesso (IAM).
Clique em Adicionar e selecione Adicionar atribuições de função.
Para conceder o acesso somente leitura, selecione o papel Leitor de dados de blob do Storage. Para conceder o acesso de leitura e gravação, selecione o papel Colaborador de dados de blob do Storage.
Defina Atribuir acesso a como Usuário, grupo ou principal de serviço.
Clique em Selecionar participantes.
No campo Selecionar, insira o nome que você deu ao aplicativo Azure quando o criou no locatário do Azure.
Clique em Salvar.
Para mais informações, consulte Atribuir papéis do Azure usando o portal do Azure.
Terraform
Adicione o seguinte ao seu arquivo de configuração do Terraform:
resource "azurerm_role_assignment" "data-contributor-role" { scope = data.azurerm_storage_account.example.id # Read-write permission for Omni on the storage account role_definition_name = "Storage Blob Data Contributor" principal_id = azuread_service_principal.example.id }
Azure PowerShell
Para adicionar uma atribuição de papel a um principal de serviço em um escopo de recurso, use o comando New-AzRoleAssignment
:
New-AzRoleAssignment` -SignInName APP_NAME` -RoleDefinitionName ROLE_NAME` -ResourceName RESOURCE_NAME` -ResourceType RESOURCE_TYPE` -ParentResource PARENT_RESOURCE` -ResourceGroupName RESOURCE_GROUP_NAME
Substitua:
APP_NAME
: o nome do aplicativo.ROLE_NAME
: o nome do papel que você quer atribuir.RESOURCE_NAME
: o nome do recurso.RESOURCE_TYPE
: o tipo de recurso.PARENT_RESOURCE
: o recurso pai.RESOURCE_GROUP_NAME
: o nome do grupo de recursos.
Para mais informações sobre como usar o Azure PowerShell para adicionar um novo principal de serviço, consulte Atribuir papéis do Azure usando o Azure PowerShell.
CLI do Azure
Para adicionar uma atribuição de papel a um principal de serviço em um escopo de recurso, use a ferramenta de linha de comando do Azure. É necessário ter a permissão Microsoft.Authorization/roleAssignments/write
para que a conta de armazenamento conceda papéis.
Para atribuir um papel, como o de colaborador de dados de blob do Storage, ao principal de serviço, execute o comando az role assignment create
:
az role assignment create --role "Storage Blob Data Contributor" \ --assignee-object-id ${SP_ID} \ --assignee-principal-type ServicePrincipal \ --scope subscriptions/SUBSCRIPTION_ID/resourcegroups/RESOURCE_GROUP_NAME/providers/Microsoft.Storage/storageAccounts/STORAGE_ACCOUNT_NAME
Substitua:
SP_ID
: o ID do principal de serviço. Esse principal de serviço é do aplicativo que você criou. Para acessar o principal de serviço de uma conexão federada, consulte Objeto de principal de serviço.STORAGE_ACCOUNT_NAME
: o nome da conta de armazenamento.RESOURCE_GROUP_NAME
: o nome do grupo de recursos.SUBSCRIPTION_ID
: O ID da assinatura.
Para mais informações, consulte Atribuir papéis do Azure usando a CLI do Azure.
API REST Microsoft
Para adicionar atribuições de papel a um principal de serviço, envie uma solicitação HTTP ao Microsoft Management.
Para chamar a API REST Microsoft Graph, recupere um token OAuth de um aplicativo. Para mais informações, consulte Receber acesso sem um usuário.
O aplicativo que chamou a API REST Microsoft Graph precisa ter a permissão Application.ReadWrite.All
.
Para gerar um token OAuth, execute o seguinte 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')
Substitua:
TENANT_ID
: o ID do locatário correspondente ao ID do diretório do Azure que contém a conta do Azure Storage.CLIENT_ID
: o ID do cliente do Azure.CLIENT_SECRET
: a chave secreta do cliente do Azure.
Consiga o ID dos papéis integrados do Azure que você quer atribuir ao principal de serviço.
Confira alguns papéis comuns:
- Colaborador de dados de blob do Storage:
ba92f5b4-2d11-453d-a403-e96b0029c9fe
- Leitor de dados de blob do Storage:
2a2b9908-6ea1-4ae2-8e65-a410df84e7d1
Para atribuir um papel ao principal de serviço, chame a API REST Microsoft Graph para a API REST 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" } }'
Substitua:
ROLE_ASSIGNMENT_ID
: o ID do papel.SP_ID
: o ID do principal de serviço. Esse principal de serviço é do aplicativo que você criou. Para acessar o principal de serviço de uma conexão federada, consulte Objeto de principal de serviço.SUBSCRIPTION_ID
: O ID da assinatura.RESOURCE_GROUP_NAME
: o nome do grupo de recursos.STORAGE_ACCOUNT_NAME
: o nome da conta de armazenamento.SUBSCRIPTION_ID
: O ID da assinatura.
A conexão está pronta para ser usada. No entanto, pode haver um atraso de propagação para uma atribuição de papel no Azure. Se não for possível usar a conexão devido a problemas de permissão, tente novamente após algum tempo.
Compartilhar conexões com os usuários
Você pode conceder os seguintes papéis para permitir que os usuários consultem dados e gerenciem conexões:
roles/bigquery.connectionUser
: permite aos usuários usar conexões para se conectar a fontes de dados externas e executar consultas nelas.roles/bigquery.connectionAdmin
: permite que os usuários gerenciem conexões.
Para mais informações sobre os papéis e as permissões do IAM no BigQuery, consulte Papéis e permissões predefinidos.
Selecione uma das seguintes opções:
Console
Acessar a página do BigQuery.
As conexões são listadas no projeto, em um grupo chamado Conexões externas.
No painel Explorer, clique no nome do seu projeto > Conexões externas > conexão.
No painel Detalhes, clique em Compartilhar para compartilhar uma conexão. Em seguida, siga estas etapas:
Na caixa de diálogo Permissões de conexão, compartilhe a conexão com outros principais adicionando ou editando principais.
Clique em Salvar.
bq
Não é possível compartilhar uma conexão com a ferramenta de linha de comando bq. Para compartilhar um recurso de conexão, use o console do Google Cloud ou o método da API BigQuery Connections para compartilhar uma conexão.
API
Consulte o
método projects.locations.connections.setIAM
na seção de referência da API REST BigQuery Connections e
forneça uma instância do recurso policy
.
Java
Antes de testar esta amostra, siga as instruções de configuração do Java no Guia de início rápido do BigQuery: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API BigQuery em Java.
Para autenticar no BigQuery, configure o Application Default Credentials. Para mais informações, acesse Configurar a autenticação para bibliotecas de cliente.
A seguir
- Saiba sobre diferentes tipos de conexão.
- Saiba mais sobre como gerenciar conexões.
- Saiba mais sobre o BigQuery Omni.
- Saiba mais sobre as tabelas BigLake.
- Saiba como consultar os dados do Armazenamento de blobs.
- Saiba como exportar resultados de consultas para o Blob Storage.