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. Há dois métodos para acessar dados de forma segura do Armazenamento de blobs. Use a federação de identidade concedendo a uma conta de serviço do Google Cloud acesso ao seu aplicativo do Azure ou conceda acesso diretamente ao aplicativo do Azure Active Directory (AD) no locatário:

  • Use uma identidade federada do Azure. Esse é o método recomendado. O BigQuery Omni é compatível com a federação de identidade da carga de trabalho do Azure. Com o BigQuery Omni compatível com a federação de identidade da carga de trabalho do Azure, é possível conceder a uma conta de serviço do Google acesso ao aplicativo do Azure que está no locatário. O acesso à identidade federada é mais seguro que um acesso não federado porque o cliente do aplicativo existe no locatário do Azure. Os secrets do cliente do aplicativo não são gerenciados por você ou pelo Google.

    Com a federação de identidade, você tem mais controle sobre o aplicativo porque o aplicativo a que concedeu acesso aos dados existe no locatário.

  • Use uma identidade não federada. O aviso de serviço obrigatório (MSA, na sigla em inglês) notificando os clientes sobre a descontinuação do uso de uma identidade não federada para acessar o aplicativo Azure foi enviado aos parceiros e clientes afetados em 20 de junho de 2023, com um aviso antes que as mudanças entrem em vigor em 8 de janeiro de 2024. Considere usar uma identidade federada do Azure. Cada conexão não federada tem seu próprio aplicativo exclusivo do Azure Active Directory (Azure AD). As permissões são concedidas aos aplicativos pelos papéis do Azure Identity and Access Management (IAM). Os papéis concedidos do IAM do Azure determinam quais dados o BigQuery pode acessar em cada conexão.

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

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 como conceder papéis, consulte Gerenciar acesso.

    Também é possível conseguir as permissões necessárias com papéis personalizados ou 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

Seu projeto pode criar até 50 conexões do Azure para cada projeto. A cota inclui conexões federadas e não federadas do Azure. Para mais informações sobre cotas, consulte API BigQuery Connection.

Usar uma identidade federada do Azure

Para acessar dados usando uma identidade federada, siga estas etapas:

  1. Crie um aplicativo no locatário do Azure.
  2. Crie a conexão do BigQuery para Azure.
  3. Adicione uma credencial federada.
  4. 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

  1. No portal do Azure, acesse App registrations e clique em New registration.

  2. Em Nomes, digite um nome para o aplicativo.

  3. Em Supported account types, selecione Accounts in this organizational directory only.

  4. Para registrar o novo aplicativo, clique em Register.

  5. Anote o ID do aplicativo (cliente). É necessário fornecer esse ID ao criar a conexão.

    Portal do Azure para criar aplicativos

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

  1. No Console do Google Cloud, acesse a página BigQuery.

    Acessar o BigQuery

  2. No menu Adicionar dados, selecione Fonte de dados externa.

  3. 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.

  4. Clique em Criar conexão.

  5. Clique em Ir para conexão.

  6. 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ão azure-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

  1. No portal do Azure, acesse App registrations e, em seguida, clique no aplicativo.

  2. Selecione Certificates & secrets > Federated credentials > Add credentials. Em seguida, faça o seguinte:

    1. Na lista Federated credential scenario, selecione Other issuer.

    2. Em Issuer, digite https://accounts.google.com.

    3. 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.

    4. Em Name, digite um nome para a credencial.

    5. 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:

  1. Na conta do Azure Storage, insira IAM na barra de pesquisa.

  2. Clique em Controle de acesso (IAM).

  3. Clique em Adicionar e selecione Adicionar atribuições de função.

  4. 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.

  5. Defina Atribuir acesso a como Usuário, grupo ou principal de serviço.

  6. Clique em Selecionar participantes.

  7. No campo Selecionar, insira o nome que você deu ao aplicativo Azure quando o criou no locatário do Azure.

  8. Clique em Save.

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:

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.

Usar uma identidade não federada

Para acessar dados usando uma identidade não federada, siga estas etapas:

  1. Crie a conexão do BigQuery para Azure.
  2. Crie um principal de serviço do Azure AD.
  3. Atribua um papel aos aplicativos do Azure AD do BigQuery.

Para mais informações sobre como usar a identidade não federada para acessar dados no Azure, consulte Aplicativo do Azure AD.

Criar uma conexão

Para se conectar ao Armazenamento de blobs, use o console do Google Cloud ou a ferramenta de linha de comando bq:

Console

  1. No Console do Google Cloud, acesse a página BigQuery.

    Acessar o BigQuery

  2. No menu Adicionar dados, selecione Fonte de dados externa.

  3. 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).

  4. Clique em Criar conexão.

  5. Clique em Ir para conexão.

  6. Na seção Informações da conexão, anote os valores de ID do aplicativo Azure e Nome do aplicativo Azure. Esses valores são necessários quando você atribui um papel ao aplicativo Azure do BigQuery.

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 \
  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ão azure-eastus2.
  • CONNECTION_ID: o ID da conexão.

O resultado será assim:

  Please create a Service Principal in your directory for
  appId: APP_ID,
  and perform role assignment to
  app: APP_NAME
  to allow BigQuery to access your Azure data.

Esta saída inclui os seguintes valores:

  • APP_ID: o ID do aplicativo que você criou.
  • APP_NAME: o nome do app ao qual você precisa atribuir papéis para que o BigQuery possa acessar seus dados do Azure.

Anote os valores APP_ID e APP_NAME para usar nas próximas etapas.

Para saber mais, consulte Criar uma conexão.

Criar um principal de serviço do Azure AD

Para criar um principal de serviço do Azure AD, use o console do Google Cloud, o Azure PowerShell, a ferramenta de linha de comando do Azure ou a API REST Microsoft Graph:

Console

  1. No Console do Google Cloud, acesse a página BigQuery.

    Ir para o BigQuery

  2. No painel Explorer, clique na conexão que você criou.

  3. No painel Informações da conexão, clique em Fazer login na conta do Azure.

  4. Faça login na conta do Azure.

  5. Na página Permissões solicitadas, clique em Aceitar.

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
  }

Azure PowerShell

Para criar o principal de serviço do ID do aplicativo APP_ID retornado anteriormente, o usuário precisa ter a permissão Microsoft.directory/servicePrincipals/create.

Para criar o principal de serviço, execute o comando New-AzADServicePrincipal:

New-AzADServicePrincipal`
-ApplicationId APP_ID`
-SkipAssignment

Substitua APP_ID pelo ID do app retornado anteriormente.

CLI do Azure

Para criar o principal de serviço do ID do aplicativo APP_ID retornado anteriormente, use a ferramenta de linha de comando do Azure. Você precisa ter a permissão Microsoft.directory/servicePrincipals/create para criar um principal de serviço.

Para criar o principal de serviço, execute o comando az ad sp:

export SP_ID=$(az ad sp create --id APP_ID | jq --raw-output '.objectId')

Substitua APP_ID pelo ID do app retornado anteriormente.

API REST Microsoft

Para criar o principal de serviço para o ID do app APP_ID retornado anteriormente, envie uma solicitação HTTP para a API REST Microsoft Graph.

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 usado para chamar a API REST Microsoft Graph precisa ter a permissão de aplicativo Application.ReadWrite.All.

O TENANT_ID precisa corresponder ao ID do diretório do Azure que contém a conta de armazenamento do Azure.

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 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.

Execute este comando:

export APP_ID=APP_ID

Substitua APP_ID pelo ID do aplicativo retornado.

Para criar um principal de serviço chamando a API REST Microsoft Graph, execute o seguinte comando:

export SP_ID=$(curl -X POST \
https://graph.microsoft.com/v1.0/serviceprincipals \
-H "authorization: Bearer ${TOKEN?}" \
-H 'cache-control: no-cache' \
-H 'content-type: application/json' \
-d "{
  \"appId\": \"${APP_ID?}\"
}" | jq --raw-output '.id')

Substitua:

  • TOKEN: o token OAuth do aplicativo.
  • APP_ID: o ID do app que foi retornado anteriormente.

Atribuir um papel aos aplicativos do Azure AD do BigQuery

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:

  1. Na conta do Azure Storage, insira IAM na barra de pesquisa.

  2. Clique em Controle de acesso (IAM).

  3. Clique em Adicionar e selecione Adicionar atribuições de função.

  4. 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.

  5. Defina Atribuir acesso a como Usuário, grupo ou principal de serviço.

  6. Clique em Selecionar participantes.

  7. No campo Selecionar, insira o nome do aplicativo Azure que foi retornado quando você criou a conexão do BigQuery para Azure.

  8. Clique em Save.

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.
  • 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:

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.
  • 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

  1. Acessar a página do BigQuery.

    Ir para o BigQuery

    As conexões são listadas no projeto, em um grupo chamado Conexões externas.

  2. No painel Explorer, clique no nome do seu projeto > Conexões externas > conexão.

  3. No painel Detalhes, clique em Compartilhar para compartilhar uma conexão. Em seguida, siga estas etapas:

    1. Na caixa de diálogo Permissões de conexão, compartilhe a conexão com outros principais adicionando ou editando principais.

    2. Clique em Save.

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.

import com.google.api.resourcenames.ResourceName;
import com.google.cloud.bigquery.connection.v1.ConnectionName;
import com.google.cloud.bigqueryconnection.v1.ConnectionServiceClient;
import com.google.iam.v1.Binding;
import com.google.iam.v1.Policy;
import com.google.iam.v1.SetIamPolicyRequest;
import java.io.IOException;

// Sample to share connections
public class ShareConnection {

  public static void main(String[] args) throws IOException {
    // TODO(developer): Replace these variables before running the sample.
    String projectId = "MY_PROJECT_ID";
    String location = "MY_LOCATION";
    String connectionId = "MY_CONNECTION_ID";
    shareConnection(projectId, location, connectionId);
  }

  static void shareConnection(String projectId, String location, String connectionId)
      throws IOException {
    try (ConnectionServiceClient client = ConnectionServiceClient.create()) {
      ResourceName resource = ConnectionName.of(projectId, location, connectionId);
      Binding binding =
          Binding.newBuilder()
              .addMembers("group:example-analyst-group@google.com")
              .setRole("roles/bigquery.connectionUser")
              .build();
      Policy policy = Policy.newBuilder().addBindings(binding).build();
      SetIamPolicyRequest request =
          SetIamPolicyRequest.newBuilder()
              .setResource(resource.toString())
              .setPolicy(policy)
              .build();
      client.setIamPolicy(request);
      System.out.println("Connection shared successfully");
    }
  }
}

A seguir