Configurar o acesso a uma fonte: armazenamento do Microsoft Azure

Antes de transferir dados de um bucket do Azure Storage, você precisa configurar o acesso a ele para que o Serviço de transferência do Cloud Storage possa recuperar os objetos.

O Serviço de transferência do Cloud Storage é compatível com os seguintes métodos de autenticação do Azure:

Este documento também inclui informações sobre como adicionar o IP do worker do Serviço de transferência do Cloud Storage de acesso ao firewall do Armazenamento do Azure para permitir o acesso. Consulte Restrições de IP para mais detalhes.

Regiões compatíveis

O Serviço de transferência do Cloud Storage pode transferir dados das seguintes regiões do Armazenamento do Microsoft Azure:
  • Américas: Leste dos EUA, Leste dos EUA 2, Oeste dos EUA, Oeste dos EUA US 2, Oeste dos EUA 3, Região central dos EUA, Região central norte dos EUA, Região central sul dos EUA, Região central oeste dos EUA, Região central do Canadá, Região leste do Canadá e Sul do Brasil
  • Ásia-Pacífico: Região central da Austrália, Leste da Austrália, Sudeste da Austrália, Região central da Índia, Sul da Índia, Oeste da Índia, Sudeste da Ásia, Leste da Ásia, Leste do Japão, Oeste do Japão, Sul da Coreia e Região central da Coreia do Sul
  • Europa, Oriente Médio, África (EMEA): Região central da França, Centro Ocidental da Alemanha, Noruega, Leste da Suécia, Norte da Suíça, Norte da Europa, Europa Ocidental, Reino Unido do Sul, Oeste do Reino Unido, Centro do Catar, Norte dos Emirados Árabes Unidos, Norte da África do Sul

Opção 1: autenticar usando um token SAS

Siga estas etapas para configurar o acesso a um contêiner do Armazenamento do Microsoft Azure usando um token SAS. Você também pode salvar seu token SAS no Secret Manager para fazer isso, siga as instruções Faça a autenticação usando uma chave compartilhada do Azure ou um token SAS no Secret Manager.

  1. Crie ou use um usuário atual do Microsoft Azure Storage para acessar a conta de armazenamento do seu contêiner de Blobs do Microsoft Azure Storage.

  2. Crie um token SAS no nível do contêiner. Para mais instruções, consulte Conceder acesso limitado aos recursos do Azure Storage usando assinaturas de acesso compartilhado.

    1. Os serviços permitidos precisam incluir o Blob.

    2. Em Tipos de recursos permitidos, selecione Contêiner e Objeto.

    3. As Permissões autorizadas precisam incluir Leitura e Lista. Se a transferência estiver configurada para excluir objetos da origem, você também vai precisar adicionar a permissão Excluir.

    4. O prazo de validade padrão para os tokens SAS é oito horas. Defina um prazo de validade razoável que permita a conclusão da transferência.

    5. Não especifique endereços IP no campo Endereços IP permitidos. O Serviço de transferência do Cloud Storage usa vários endereços IP e não é compatível com a restrição de endereço IP.

    6. Os protocolos permitidos precisam ser somente HTTPS.

  3. Quando o token for criado, anote o valor retornado do token SAS. Você precisa deste valor para configurar a transferência com o Serviço de transferência do Cloud Storage.

Opção 2: autenticar usando uma chave compartilhada do Azure ou um token SAS no Secret Manager

O Secret Manager é um serviço seguro que armazena e gerencia dados sensíveis, como senhas. Ele usa criptografia forte, controle de acesso baseado em papéis e geração de registros de auditoria para proteger seus segredos.

O Serviço de transferência do Cloud Storage oferece suporte aos nomes de recursos do Secret Manager as credenciais do Azure armazenadas com segurança.

Para usar uma chave compartilhada do Azure, salve a chave em com o Secret Manager. Os tokens SAS podem ser salvos no Secret Manager ou transmitidos diretamente.

Quando você especifica uma chave compartilhada, o Storage Transfer Service usa essa chave para gerar um SAS de serviço restrito ao escopo do contêiner do Azure especificado no job de transferência.

Ativar a API

Enable the Secret Manager API.

Enable the API

Configurar outras permissões

Permissões do usuário

O usuário que cria o secret requer o seguinte papel:

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

Saiba como conceder um papel.

Permissões do agente de serviço

O agente de serviço do Serviço de transferência do Cloud Storage requer o seguinte papel do IAM:

  • Acessador de secrets do Secret Manager (roles/secretmanager.secretAccessor)

Para conceder o papel ao agente de serviço:

console do Cloud

  1. Siga as instruções para recuperar seu e-mail do agente de serviço.

  2. Acesse a página IAM no Console do Google Cloud.

    Acessar IAM

  3. Clique em Conceder acesso.

  4. Na caixa de texto Novos principais, digite o e-mail do agente de serviço.

  5. No menu suspenso Selecionar um papel, pesquise e selecione Acessador de secrets do Secret Manager.

  6. Clique em Save.

gcloud

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

  1. Siga as instruções para recuperar seu e-mail do agente de serviço.

  2. Na linha de comando, insira o seguinte comando:

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

Criar um secret

Crie um secret com o Secret Manager:

console do Cloud

  1. Acesse a página do Secret Manager no console do Google Cloud:

    Acessar o Secret Manager

  2. Clique em Criar secret.

  3. Insira um nome.

  4. Na caixa de texto Valor do secret, insira suas credenciais em um dos formatos abaixo.

    {
      "sas_token" : "SAS_TOKEN_VALUE"
    }
    

    Ou:

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

  6. Depois de criar o secret, anote o nome completo do recurso do secret:

    1. Selecione a guia Visão geral.

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

      projects/1234567890/secrets/SECRET_NAME

gcloud

Para criar um novo secret usando a ferramenta de linha de comando gcloud, transmita as credenciais formatadas como 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=-

Recupere o nome completo do recurso do secret:

gcloud secrets describe SECRET_NAME

Anote o valor de name na resposta. Ele usa o seguinte formato:

projects/1234567890/secrets/SECRET_NAME

Para mais detalhes sobre como criar e gerenciar secrets, consulte a documentação do Secret Manager.

Transmitir seu secret para o comando de criação de job

Para usar o Secret Manager com o Serviço de transferência do Cloud Storage, é necessário usar a API REST a fim de criar um job de transferência.

Transmita o nome do recurso do Secret Manager igual ao 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 Criar transferências para saber mais.

Opção 3: autenticação usando a identidade federada

O Storage Transfer Service oferece suporte à federação de identidade da carga de trabalho do Azure com o Google Cloud. O Serviço de transferência do Cloud Storage pode emitir solicitações para o Azure Storage por meio de aplicativos do Azure registrados, eliminando a necessidade de transmitir credenciais diretamente para o Serviço de transferência do Cloud Storage.

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

Configurar credenciais do Google Cloud

Adicione o criador de tokens da conta de serviço. (roles/iam.serviceAccountTokenCreator) para o Serviço de transferência do Cloud Storage agente de serviço para permitir a criação de tokens de ID do OpenID Connect (OIDC) para o do Compute Engine.

  1. Extraia o accountEmail e o subjectId do agente de serviço gerenciado pelo Google que é criado automaticamente quando você começa a usar o Serviço de transferência do Cloud Storage. Para recuperar esses valores:

    1. Acesse a página de referência de googleServiceAccounts.get.

      Você verá um painel interativo com o título Testar este método.

    2. No painel, em Parâmetros de solicitação, insira o ID do projeto. O projeto especificado aqui precisa ser o que você está usando para gerenciar o Serviço de transferência do Cloud Storage.

    3. Clique em Executar. O accountEmail e o subjectId são incluídos na resposta. Salve esses valores.

  2. Conceda ao criador de token de conta de serviço (roles/iam.serviceAccountTokenCreator) para o Serviço de transferência do Cloud Storage agente de serviço. Siga as instruções em Gerenciar o acesso a contas de serviço.

Configurar credenciais da Microsoft

Primeiro, registre um aplicativo e adicione uma credencial federada:

  1. Faça login em https://portal.azure.com.
  2. Acesse a página Registro de aplicativos.
  3. Clique em New registration.
  4. Insira um nome. Por exemplo, azure-transfer-app
  5. Selecione Somente contas neste diretório organizacional.
  6. Clique em Registrar. O aplicativo é criado. Observe o Application (client) ID e o Directory (tenant) ID. Você também pode recuperá-las mais tarde na página Visão geral do aplicativo.
  7. Clique em Certificados e secrets e selecione a opção Federated credentials .
  8. Clique em Adicionar credencial.
  9. Selecione Outro emissor como cenário e insira as seguintes informações:
    • Emissor: https://accounts.google.com
    • Identificador do assunto: o subjectId do seu agente de serviço, que você recuperado em Configurar credenciais do Google Cloud.
    • Um nome exclusivo para a credencial federada.
    • O público-alvo precisa permanecer como api://AzureADTokenExchange.
  10. Clique em Adicionar.

Em seguida, conceda ao aplicativo acesso ao contêiner do Azure Storage:

  1. Acesse a página Contas de armazenamento na sua conta do Azure.
  2. Escolha sua conta de armazenamento e escolha Contêineres no Seção Armazenamento de dados.
  3. Clique no bucket para conceder acesso.
  4. Clique em Controle de acesso (IAM) no menu à esquerda e selecione a guia Papéis.
  5. Clique no menu flutuante (...) ao lado de qualquer função e selecione Clonar.
  6. Insira um nome para essa função personalizada e selecione Começar do zero. Clique em Avançar.
  7. Clique em Adicionar permissões e pesquise Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read.
  8. Clique no card Armazenamento da Microsoft que aparece.
  9. Selecione o botão de opção Ações de dados.
  10. Selecione Read : Read Blob.
  11. Clique em Adicionar.
  12. Para excluir objetos na origem após a transferência, clique em Adicione permissões novamente e pesquise Microsoft.Storage/storageAccounts/blobServices/containers/blobs/delete
  13. Clique no card Microsoft Storage que aparece, selecione Ações de dados e Excluir: Excluir blob.
  14. Clique em Adicionar.
  15. Clique em Revisar + criar e em Criar. Você vai retornar à página Controle de acesso (IAM) do bucket.
  16. Clique em Adicionar e selecione Adicionar atribuição de função.
  17. Na lista de papéis, selecione o papel personalizado e clique em Próxima.
  18. Clique em Selecionar participantes.
  19. No campo Selecionar, insira o nome do aplicativo que você registrou anteriormente. Por exemplo, azure-transfer-app.
  20. Clique no bloco do aplicativo e em Selecionar.
  21. Clique em Revisar + atribuir.

Transmitir os identificadores do aplicativo para o comando de criação de job

Os identificadores do seu aplicativo são transmitidos para o comando de criação de job usando um objeto federatedIdentityConfig. Copie o ID do aplicativo (cliente) e o ID do diretório (tenant) que você salvou durante as etapas de Configurar credenciais da Microsoft nos campos client_id e tenant_id.

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

Um exemplo de solicitação de criação de job é semelhante ao seguinte:

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",
      "federatedIdentifyConfig": {
        "client_id": "AZURE_CLIENT_ID",
        "tenant_id": "AZURE_TENANT_ID"
      }
    },
    "gcsDataSink": {
      "bucketName": "CLOUD_STORAGE_BUCKET_NAME"
    }
  }
}

Consulte Criar transferências para saber mais.

Restrições de IP

Se você restringir o acesso aos recursos do Azure usando um firewall do Azure Storage, adicione os intervalos de IP usados pelos workers do Serviço de transferência do Cloud Storage à lista de IPs permitidos.

Como esses intervalos de IP podem mudar, publicamos os valores atuais como um arquivo JSON em um endereço permanente:

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

Quando um novo intervalo é adicionado ao arquivo, aguardamos pelo menos sete dias antes de usá-lo para solicitações do Storage Transfer Service.

Recomendamos que você extraia os dados deste documento pelo menos uma vez por semana para manter a configuração de segurança atualizada. Para uma amostra de script Python que busque intervalos de IP de um arquivo JSON, consulte este artigo da documentação da nuvem privada virtual.

Para adicionar esses intervalos como IPs permitidos, siga as instruções no artigo do Microsoft Azure, Configurar firewalls e redes virtuais do Azure Storage.