Configure o acesso a uma origem: Microsoft Azure Storage

Antes de transferir dados de um contentor do Azure Storage, tem de configurar o acesso a esse contentor para que o serviço de transferência de armazenamento possa obter os respetivos objetos.

O serviço de transferência de armazenamento suporta os seguintes métodos de autenticação do Azure:

  • Tokens deassinatura de acesso partilhado (SAS). Os tokens SAS podem ser especificados diretamente quando cria uma tarefa de transferência ou podem ser armazenados no Secret Manager.

  • As chaves partilhadas do Azure podem ser armazenadas no Secret Manager e o segredo transmitido quando cria uma tarefa de transferência.

  • As credenciais federadas são transmitidas num objeto federatedIdentityConfig durante a criação da tarefa de transferência.

Este documento também inclui informações sobre como adicionar endereços IP de trabalhadores do serviço de transferência de armazenamento à firewall do Azure Storage para permitir o acesso. Consulte as restrições de IP para ver detalhes.

Regiões suportadas

O Serviço de transferência de armazenamento pode transferir dados das seguintes regiões do Microsoft Azure Storage:
  • Américas: East US, East US 2, West US, West US 2, West US 3, Central US, North Central US, South Central US, West Central US, Canada Central, Canada East, Brazil South
  • Ásia-Pacífico: Austrália Central, Austrália Oriental, Austrália Sudeste, Índia Central, Índia do Sul, Índia Ocidental, Sudeste Asiático, Ásia Oriental, Japão Oriental, Japão Ocidental, Coreia do Sul e Coreia Central
  • Europa, Médio Oriente e África (EMEA): França Central, Alemanha Centro-Oeste, Noruega Leste, Suécia Central, Suíça Norte, Norte da Europa, Oeste da Europa, Reino Unido Sul, Reino Unido Oeste, Catar Central, Norte dos EAU, África do Sul Norte

Opção 1: autentique com um token SAS

Siga estes passos para configurar o acesso a um contentor do Microsoft Azure Storage através de um token SAS. Em alternativa, pode guardar o seu token SAS no Secret Manager. Para tal, siga as instruções em Autentique com uma chave partilhada ou um token SAS do Azure no Secret Manager.

  1. Crie ou use um utilizador do Microsoft Azure Storage existente para aceder à conta de armazenamento do contentor de blobs do Microsoft Azure Storage.

  2. Crie um token SAS ao nível do contentor. Consulte o artigo Conceda acesso limitado a recursos do Azure Storage através de assinaturas de acesso partilhado para obter instruções.

    1. Os serviços permitidos têm de incluir Blob.

    2. Para Tipos de recursos permitidos, selecione Contentor e Objeto.

    3. As autorizações permitidas têm de incluir Leitura e Lista. Se a transferência estiver configurada para eliminar objetos da origem, também tem de incluir a autorização Eliminar.

    4. O tempo de expiração predefinido para tokens SAS é de 8 horas. Defina um prazo de validade razoável que lhe permita concluir a transferência com êxito.

    5. Não especifique endereços IP no campo Endereços IP permitidos. O serviço de transferência de armazenamento usa vários endereços IP e não suporta a restrição de endereços IP.

    6. Os protocolos permitidos devem ser apenas HTTPS.

  3. Depois de criar o token, tome nota do valor do token SAS devolvido. Precisa deste valor quando configurar a transferência com o serviço de transferência de armazenamento.

Opção 2: autentique através de uma chave partilhada ou de um token SAS do Azure no Secret Manager

O Secret Manager é um serviço seguro que armazena e gere dados confidenciais, como palavras-passe. Utiliza uma encriptação forte, um controlo de acesso baseado em funções e o registo de auditoria para proteger os seus segredos.

O Serviço de transferência de armazenamento suporta nomes de recursos do Secret Manager que fazem referência às suas credenciais do Azure armazenadas em segurança.

Para usar uma chave partilhada do Azure, tem de guardar a chave no Secret Manager. Os tokens SAS podem ser guardados no Secret Manager ou transmitidos diretamente.

Quando especifica uma chave partilhada, o Storage Transfer Service usa essa chave para gerar uma SAS de serviço que está restrita ao contentor do Azure especificado na tarefa de transferência.

Ative a API

Enable the Secret Manager API.

Roles required to enable APIs

To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

Enable the API

Configure autorizações adicionais

Autorizações do utilizador

O utilizador que cria o segredo requer a seguinte função:

  • Administrador do Secret Manager (roles/secretmanager.admin)

Saiba como conceder uma função.

Autorizações do agente de serviço

O agente do serviço do Serviço de transferência de armazenamento requer a seguinte função do IAM:

  • Secret Accessor do Secret Manager (roles/secretmanager.secretAccessor)

Para conceder a função ao agente do serviço:

Cloud Console

  1. Siga as instruções para encontrar o email do agente de serviço.

  2. Aceda à página IAM na Google Cloud consola.

    Aceda ao IAM

  3. Clique em Conceder acesso.

  4. Na caixa de texto Novos membros, introduza o email do agente de serviço.

  5. No menu pendente Selecionar uma função, pesquise e selecione Secret Manager Secret Accessor.

  6. Clique em Guardar.

gcloud

Use o comando gcloud projects add-iam-policy-binding para adicionar a função do IAM ao seu agente de serviço.

  1. Siga as instruções para encontrar o email do agente de serviço.

  2. Na linha de comandos, introduza o seguinte comando:

    gcloud projects add-iam-policy-binding PROJECT_ID \
      --member='serviceAccount:SERVICE_AGENT_EMAIL' \
      --role='roles/secretmanager.secretAccessor'
    

Crie um segredo

Crie um segredo com o Secret Manager:

Cloud Console

  1. Aceda à página Secret Manager na Google Cloud consola.

    Aceda ao Secret Manager

  2. Clique em Criar segredo.

  3. Introduza um nome.

  4. Na caixa de texto Valor do Secret, introduza as suas credenciais num dos seguintes formatos.

    {
      "sas_token" : "SAS_TOKEN_VALUE"
    }
    

    Ou:

    {
      "access_key" : "ACCESS_KEY"
    }
    
  5. Clique em Criar segredo.

  6. Depois de criar o segredo, tome nota do nome completo do recurso do segredo:

    1. Selecione o separador Vista geral.

    2. Copie o valor de Nome do recurso. Usa o seguinte formato:

      projects/1234567890/secrets/SECRET_NAME

gcloud

Para criar um novo segredo através da ferramenta de linhas de comando gcloud, transmita as credenciais formatadas em JSON para o comando gcloud secrets create:

printf '{
  "sas_token" : "SAS_TOKEN_VALUE"
}' | gcloud secrets create SECRET_NAME --data-file=-

Ou:

printf '{
  "access_key" : "ACCESS_KEY"
}' | gcloud secrets create SECRET_NAME --data-file=-

Obtenha o nome completo do recurso do segredo:

gcloud secrets describe SECRET_NAME

Tenha em atenção o valor de name na resposta. Usa o seguinte formato:

projects/1234567890/secrets/SECRET_NAME

Para ver mais detalhes sobre a criação e gestão de segredos, consulte a documentação do Secret Manager.

Transmita o seu segredo para o comando de criação de tarefas

A utilização do Secret Manager com o serviço de transferência de armazenamento requer a utilização da API REST para criar uma tarefa de transferência.

Transmita o nome do recurso do Secret Manager como o valor do campo transferSpec.azureBlobStorageDataSource.credentialsSecret:

POST https://storagetransfer.googleapis.com/v1/transferJobs

{
  "description": "Transfer with Secret Manager",
  "status": "ENABLED",
  "projectId": "PROJECT_ID",
  "transferSpec": {
    "azureBlobStorageDataSource": {
      "storageAccount": "AZURE_STORAGE_ACCOUNT_NAME",
      "container": "AZURE_CONTAINER_NAME",
      "credentialsSecret": "SECRET_RESOURCE_ID",
    },
    "gcsDataSink": {
      "bucketName": "CLOUD_STORAGE_BUCKET_NAME"
    }
  }
}

Consulte o artigo Crie transferências para ver detalhes completos sobre a criação de uma transferência.

Opção 3: autentique com uma identidade federada

O Serviço de transferência de armazenamento suporta a federação de identidades da carga de trabalho do Azure com o Google Cloud. O Serviço de transferência de armazenamento pode emitir pedidos para o Azure Storage através de aplicações Azure registadas, eliminando a necessidade de transmitir credenciais diretamente ao Serviço de transferência de armazenamento.

Para configurar a identidade federada, siga estas instruções.

Configure Google Cloud credenciais

Tem de adicionar a função Criador de tokens de contas de serviço (roles/iam.serviceAccountTokenCreator) ao agente de serviço do serviço de transferência de armazenamento para permitir a criação de tokens de ID do OpenID Connect (OIDC) para a conta.

  1. Obtenha o accountEmail e o subjectId do agente de serviço gerido pela Google que é criado automaticamente quando começa a usar o serviço de transferência de armazenamento. Para obter estes valores:

    1. Aceda à página de referência googleServiceAccounts.get.

      É aberto um painel interativo com o título Experimente este método.

    2. No painel, em Parâmetros do pedido, introduza o ID do projeto. O projeto que especificar aqui tem de ser o projeto que está a usar para gerir o serviço de transferência de armazenamento.

    3. Clique em Executar. O accountEmail e o subjectId estão incluídos na resposta. Guarde estes valores.

  2. Conceda a função criador de tokens de contas de serviço (roles/iam.serviceAccountTokenCreator) ao agente de serviço do Serviço de transferência de armazenamento. Siga as instruções em Gerir o acesso a contas de serviço.

Configure as credenciais da Microsoft

Primeiro, registe uma aplicação e adicione uma credencial federada:

  1. Inicie sessão em https://portal.azure.com.
  2. Aceda à página Registos de apps.
  3. Clique em Novo registo.
  4. Introduza um nome. Por exemplo, azure-transfer-app.
  5. Selecione Apenas contas neste diretório organizacional.
  6. Clique em Registar. A aplicação é criada. Tenha em atenção o Application (client) ID e o Directory (tenant) ID. Também pode recuperá-los mais tarde na página Vista geral da aplicação.
  7. Clique em Certificados e segredos e selecione o separador Credenciais federadas.
  8. Clique em Adicionar credencial.
  9. Selecione Outro emissor como o cenário e introduza as seguintes informações:
    • Emissor: https://accounts.google.com
    • Identificador do assunto: o subjectId do seu agente do serviço, que obteve em Configurar Google Cloud credenciais.
    • Um nome exclusivo para a credencial federada.
    • O público-alvo tem de permanecer como api://AzureADTokenExchange.
  10. Clique em Adicionar.

Em seguida, conceda à aplicação acesso ao seu contentor de armazenamento do Azure:

  1. Aceda à página Contas de armazenamento na sua conta do Azure.
  2. Selecione a sua conta de armazenamento e selecione Contentores na secção Armazenamento de dados.
  3. Clique no contentor ao qual quer conceder acesso.
  4. Clique em Controlo de acesso (IAM) no menu do lado esquerdo e selecione o separador Funções.
  5. Clique no menu adicional (...) junto a qualquer função e selecione Clonar.
  6. Introduza um nome para esta função personalizada e selecione Começar do zero. Clique em Seguinte.
  7. Clique em Adicionar autorizações e pesquise Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read.
  8. Clique no cartão Armazenamento da Microsoft apresentado.
  9. Selecione o botão de opção Ações de dados.
  10. Selecione Ler : ler objeto binário grande.
  11. Clique em Adicionar.
  12. Se vai eliminar objetos na origem após a transferência, clique novamente em Adicionar autorizações e pesquise Microsoft.Storage/storageAccounts/blobServices/containers/blobs/delete.
  13. Clique no cartão Microsoft Storage apresentado, selecione Ações de dados e, de seguida, Eliminar : eliminar blob.
  14. Clique em Adicionar.
  15. Clique em Rever + criar e, de seguida, em Criar. Regressa à página Controlo de acesso (IAM) do contentor.
  16. Clique em Adicionar e selecione Adicionar atribuição de função.
  17. Na lista de funções, selecione a sua função personalizada e clique em Seguinte.
  18. Clique em Selecionar membros.
  19. No campo Selecionar, introduza o nome da aplicação que registou anteriormente. Por exemplo, azure-transfer-app.
  20. Clique no mosaico da aplicação e clique em Selecionar.
  21. Clique em Rever + atribuir.

Transmita os identificadores da sua aplicação para o comando de criação de tarefas

Os identificadores da sua aplicação são transmitidos para o comando de criação de tarefas através de um objeto federatedIdentityConfig. Copie o ID (de cliente) da aplicação e o ID (do inquilino) do diretório que guardou durante os passos de configuração das credenciais da Microsoft para os campos client_id e tenant_id.

"federatedIdentityConfig": {
  "client_id": "efghe9d8-4810-800b-8f964ed4057f",
  "tenant_id": "abcd1234-c8f0-4cb0-b0c5-ae4aded60078"
}

Um exemplo de um pedido de criação de tarefa tem o seguinte aspeto:

POST https://storagetransfer.googleapis.com/v1/transferJobs

{
  "description": "Transfer with Azure Federated Identity",
  "status": "ENABLED",
  "projectId": "PROJECT_ID",
  "transferSpec": {
    "azureBlobStorageDataSource": {
      "storageAccount": "AZURE_STORAGE_ACCOUNT_NAME",
      "container": "AZURE_CONTAINER_NAME",
      "federatedIdentityConfig": {
        "client_id": "AZURE_CLIENT_ID",
        "tenant_id": "AZURE_TENANT_ID"
      }
    },
    "gcsDataSink": {
      "bucketName": "CLOUD_STORAGE_BUCKET_NAME"
    }
  }
}

Consulte o artigo Crie transferências para ver detalhes completos sobre a criação de uma transferência.

Restrições de IP

Se restringir o acesso aos seus recursos do Azure através de uma firewall do Azure Storage, tem de adicionar os intervalos de IP usados pelos trabalhadores do serviço de transferência de armazenamento à sua lista de IPs permitidos.

Uma vez que estes intervalos de IP podem mudar, publicamos os valores atuais como um ficheiro JSON num endereço permanente:

https://www.gstatic.com/storage-transfer-service/ipranges.json

Quando é adicionado um novo intervalo ao ficheiro, aguardamos, pelo menos, 7 dias antes de usar esse intervalo para pedidos do serviço de transferência de armazenamento.

Recomendamos que extraia dados deste documento, pelo menos, semanalmente para manter a sua configuração de segurança atualizada. Para ver um exemplo de script Python que obtenha intervalos de IP a partir de um ficheiro JSON, consulte este artigo da documentação da nuvem privada virtual.

Para adicionar estes intervalos como IPs permitidos, siga as instruções no artigo da Microsoft Azure, Configure firewalls and virtual networks of Azure Storage (Configure firewalls e redes virtuais do Azure Storage).