Configure o acesso a um destino: Cloud Storage

O Cloud Storage usa uma conta de serviço gerida pela Google, conhecida como um agente de serviço, para mover dados para um contentor do Cloud Storage. Este agente de serviço é criado na primeira vez que chama o googleServiceAccounts.get.

O contentor de destino não tem de pertencer ao mesmo projeto que o agente do serviço. Os passos são os mesmos, independentemente do projeto em que o contentor se encontra.

Autorizações do utilizador

Para conceder as autorizações necessárias ao agente de serviço, tem de ter as autorizações relevantes no contentor de destino:

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

A função Proprietário de contentores antigos do Storage (roles/storage.legacyBucketOwner) ou a função Administrador do Storage (roles/storage.admin) concedem as autorizações necessárias.

Concessão automática de autorizações na Google Cloud consola

Se estiver a usar a Google Cloud consola para criar a transferência e tiver as autorizações indicadas em Autorizações do utilizador, o agente de serviço recebe automaticamente as autorizações necessárias no seu contentor de destino.

Pode ignorar os passos nesta página. Se necessário, configure o acesso à sua origem, e crie uma transferência.

Autorizações necessárias

O agente do serviço tem de ter as seguintes autorizações para o contentor de destino:

Autorização Descrição
storage.buckets.get Permite que a conta de serviço obtenha a localização do contentor.
storage.objects.get Permite que a conta de serviço veja objetos e os respetivos metadados, exceto ACLs. Obrigatório se a transferência estiver configurada para [substituir objetos](/storage-transfer/docs/reference/rest/v1/TransferOptions#OverwriteWhen) no destino quando forem diferentes ou nunca. Não é necessário se a sua definição de transferência for para substituir sempre.
storage.objects.create Permite que a conta de serviço adicione objetos ao contentor.
storage.objects.delete

Permite que a conta de serviço elimine objetos no contentor. Obrigatório se definir overwriteObjectsAlreadyExistingInSink ou deleteObjectsUniqueInSink como true.

Tenha em atenção que, se o contentor de destino tiver a aplicação de versões de objetos ativada, nem overwriteObjectsAlreadyExistingInSink nem deleteObjectsUniqueInSink eliminam permanentemente objetos. Em vez disso, as versões de objetos publicados relevantes tornam-se não atuais.

storage.objects.list Permite que a conta de serviço liste objetos no contentor. Obrigatório se definir overwriteObjectsAlreadyExistingInSink como false ou deleteObjectsUniqueInSink como true.

A seguinte função predefinida concede as autorizações necessárias:

  • Storage Legacy Bucket Writer (roles/storage.legacyBucketWriter)

Além disso, para transferências configuradas para substituir objetos no destino quando forem diferentes ou nunca, atribua a seguinte função predefinida ao agente do serviço:

  • Visualizador de objetos de armazenamento (roles/storage.objectViewer)

Para ver uma lista completa das funções do Cloud Storage e das autorizações que contêm, consulte Funções de IAM.

Conceda as autorizações necessárias

Para conceder as funções Gravador de contentores antigos do Storage e Visualizador de objetos do Storage ao agente de serviço, siga estes passos.

Encontre o email do agente de serviço

  1. Aceda à googleServiceAccounts.getpágina de referência.

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

  2. No painel, em Parâmetros do pedido, introduza o seu 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, que pode ser diferente do projeto do contentor de destino.

  3. Clique em Executar.

    O email do agente de serviço é devolvido como o valor de accountEmail. Copiar este valor.

    O email do agente de serviço usa o formato project-PROJECT_NUMBER@storage-transfer-service.iam.gserviceaccount.com.

Adicione o agente do serviço a uma política ao nível do contentor

Consola

  1. Na Google Cloud consola, aceda à página Recipientes do Cloud Storage.

    Aceda a Recipientes

  2. Clique no menu Adicional do contentor () associado ao contentor ao qual quer conceder uma função a um principal.

  3. Escolha Editar acesso.

  4. Clique no botão + Adicionar principal.

  5. No campo Novos membros, introduza o email da conta do seu agente de serviço.

  6. Selecione Storage Legacy Bucket Writer no menu pendente Selecionar uma função.

  7. Clique em Guardar.

  8. Repita o processo para adicionar a função Storage Object Viewer se a transferência estiver configurada para substituir objetos no destino quando forem diferentes ou nunca.

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

Onde:

  • BUCKET_NAME é o nome do contentor ao qual está a conceder acesso ao principal. Por exemplo, my-bucket.
  • YOUR_AGENT_EMAIL é o email da conta de agente que copiou em Encontre o email do agente de serviço.