Configurar o acesso a uma origem: Cloud Storage

O Serviço de transferência do Cloud Storage usa um agente de serviço para mover dados de um bucket de origem do Cloud Storage. Esse agente de serviço é criado na primeira vez que você chama googleServiceAccounts.get.

O bucket de origem não precisa pertencer ao mesmo projeto que o agente de serviço. As etapas são as mesmas, independentemente do projeto em que o bucket está.

Permissões do usuário

Para conceder as permissões necessárias ao agente de serviço, você precisa ter as permissões relevantes no bucket de origem:

  • storage.buckets.getIamPolicy
  • storage.buckets.setIamPolicy

Os papéis Proprietário do bucket legado do Storage (roles/storage.legacyBucketOwner) ou Administrador do Storage (roles/storage.admin) fornecem as permissões necessárias.

Como conceder permissões automaticamente no console do Google Cloud

Se você estiver usando o console do Google Cloud para criar sua transferência e tiver as permissões listadas em Permissões do usuário, o agente de serviço receberá automaticamente as permissões necessárias na sua bucket de origem.

É possível pular as etapas desta página e ir diretamente para Como criar uma transferência.

Permissões necessárias

A conta de serviço precisa ter as seguintes permissões para o bucket de origem:

Permissão Descrição
storage.buckets.get Permite a localização do bucket pelo agente de serviço.
storage.objects.list Permite a listagem dos objetos no bucket pelo agente de serviço.
storage.objects.get Permite a leitura dos objetos no bucket pelo agente de serviço.
storage.objects.create

Permite que o agente de serviço crie objetos no bucket. Obrigatório se a transferência for para um sistema de arquivos.

O Serviço de transferência do Cloud Storage cria e preenche duas pastas no bucket de origem: cloud-ingest/ contém informações do sistema de arquivos e storage-transfer/ contém registros de transferência.

storage.objects.delete Permite a exclusão de objetos no bucket pelo agente de serviço. Obrigatório se você definir deleteObjectsFromSourceAfterTransfer como true.
storage.objects.getIamPolicy Permite que o agente de serviço leia ACLs em objetos de origem. Obrigatório se a preservação da ACL de objeto (ACL_PRESERVE) estiver ativada.

Os papéis predefinidos a seguir concedem as permissões necessárias:

  • Uma destas:
    • Leitor de objetos do Storage (roles/storage.objectViewer) se a transferência for para outro bucket do Cloud Storage.
    • Criador de objeto do Storage (roles/storage.objectCreator) se a transferência for para um sistema de arquivos.
  • Mais um dentre:
    • Gravador de bucket legado do Storage (roles/storage.legacyBucketWriter) se a permissão de exclusão de objetos for necessária.
    • Leitor de bucket legado do Storage (roles/storage.legacyBucketReader) se a permissão de exclusão de objetos não for necessária.
  • Além disso, se você preservar as ACLs de objeto com ACL_PRESERVE:
    • Proprietário de objeto legado do Storage (roles/storage.legacyObjectOwner)

Qualquer papel do Cloud Storage marcado como um papel legacy só pode ser concedido no nível do bucket.

Para uma lista completa dos papéis do Cloud Storage e das respectivas permissões, consulte papéis do IAM.

Conceder as permissões necessárias

Para conceder as permissões necessárias ao agente de serviço, siga as etapas abaixo.

Encontre o e-mail do agente de serviço

  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 projeto que você está usando para gerenciar o Serviço de transferência do Cloud Storage, que pode ser diferente do projeto do bucket de origem.

  3. Clique em Executar.

    O e-mail do agente de serviço é retornado como o valor de accountEmail. Copie esse valor.

    O e-mail do agente de serviço tem o formato project-PROJECT_NUMBER@storage-transfer-service.iam.gserviceaccount.com.

Adicionar o agente de serviço a uma política no nível do bucket

Console

  1. No console do Google Cloud , acesse a página Buckets do Cloud Storage.

    Acessar buckets

  2. Clique no menu flutuante bucket () associado ao bucket onde você quer conceder a um membro um papel.

  3. Escolha Editar acesso.

  4. Clique no botão + Adicionar principal.

  5. No campo Novos participantes, insira o e-mail da conta do agente de serviço.

  6. Selecione Storage Object Viewer ou Storage Object Creator no menu suspenso Selecionar um papel.

  7. Clique em Adicionar outro papel.

  8. Selecione Storage Legacy Bucket Writer ou Storage Legacy Bucket Reader.

  9. Clique em Salvar.

gcloud

Use o comando gcloud storage buckets add-iam-policy-binding:

gcloud storage buckets add-iam-policy-binding gs://BUCKET_NAME \
--member=serviceAccount:YOUR_AGENT_EMAIL --role=roles/storage.objectViewer
gcloud storage buckets add-iam-policy-binding gs://BUCKET_NAME \
--member=serviceAccount:YOUR_AGENT_EMAIL --role=roles/storage.legacyBucketReader

Substitua:

  • BUCKET_NAME é o nome do bucket ao qual você concede acesso principal. Por exemplo, my-bucket.
  • YOUR_AGENT_EMAIL é o e-mail da conta de agente que você copiou em Encontrar o e-mail do agente de serviço.

Amostras de código

C++

Para saber como instalar e usar a biblioteca de cliente do Cloud Storage, consulte Bibliotecas de cliente do Cloud Storage. Para mais informações, consulte a documentação de referência da API Cloud Storage C++ para Python.

Para se autenticar no Cloud Storage, configure o Application Default Credentials. Saiba mais em Configurar a autenticação para bibliotecas de cliente.

namespace gcs = ::google::cloud::storage;
using ::google::cloud::StatusOr;
[](gcs::Client client, std::