O Serviço de transferência do Cloud Storage usa uma
conta de serviço gerenciada pelo Google,
conhecida como agente de serviço,
para mover dados de um bucket de origem do Cloud Storage. Essa conta de serviço
é criada 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: |
storage.objects.delete |
Permite a exclusão de objetos no bucket pelo agente de serviço. Obrigatório se você definir deleteObjectsFromSourceAfterTransfer como true .
|
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.
- Leitor de objetos do Storage (
- 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.
- Gravador de bucket legado do Storage (
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.
Para ACLs de objeto quando ACL_PRESERVE é definido, o papel Proprietário de objeto legado do Storage (roles/storage.legacyObjectOwner
) também é obrigatório para o objeto de origem. Para ACL_PRESERVE, adicione manualmente a conta de serviço para ter o papel Proprietário do objeto legado do Storage para dar permissão ao objeto de origem storage.objects.getIamPolicy
.
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
Acesse a página de referência de
googleServiceAccounts.get
.Você verá um painel interativo com o título Testar este método.
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.
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
- No Console do Google Cloud, acesse a página Buckets do Cloud Storage.
Clique no menu flutuante bucket (
) associado ao bucket onde você quer conceder a um membro um papel.Escolha Editar acesso.
Clique no botão + Adicionar principal.
No campo Novos participantes, insira o e-mail da conta do agente de serviço.
Selecione
Storage Object Viewer
ouStorage Object Creator
no menu suspenso Selecionar um papel.Clique em Adicionar outro papel.
Selecione
Storage Legacy Bucket Writer
ouStorage Legacy Bucket Reader
.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
Em que:
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 autenticar no Cloud Storage, configure o Application Default Credentials. Para mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento local.
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 autenticar no Cloud Storage, configure o Application Default Credentials. Para mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento local.
Go
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 Go para Python.
Para autenticar no Cloud Storage, configure o Application Default Credentials. Para mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento local.
Java
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 Java para Python.
Para autenticar no Cloud Storage, configure o Application Default Credentials. Para mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento local.
Node.js
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 Node.js para Python.
Para autenticar no Cloud Storage, configure o Application Default Credentials. Para mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento local.
PHP
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 PHP para Python.
Para autenticar no Cloud Storage, configure o Application Default Credentials. Para mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento local.
Python
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 Python para Python.
Para autenticar no Cloud Storage, configure o Application Default Credentials. Para mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento local.
Ruby
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 Ruby para Python.
Para autenticar no Cloud Storage, configure o Application Default Credentials. Para mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento local.
JSON
Ter a gcloud CLI instalada e inicializadapara gerar um token de acesso para o cabeçalho
Authorization
.Como alternativa, é possível criar um token de acesso usando o OAuth 2.0 Playground e incluí-lo no cabeçalho
Authorization
.Crie um arquivo JSON com as informações a seguir:
{ "bindings":[ { "role": "roles/storage.objectViewer", "members":[ "YOUR_AGENT_EMAIL" ] }, { "role": "roles/storage.legacyBucketReader", "members":[ "YOUR_AGENT_EMAIL" ] } ] }
Em que:
YOUR_AGENT_EMAIL
é o e-mail da conta de agente que você copiou em Encontrar o e-mail do agente de serviço.
Use
cURL
para chamar a API JSON com uma solicitaçãoPUT setIamPolicy
:curl -X PUT --data-binary @JSON_FILE_NAME \ -H "Authorization: Bearer OAUTH2_TOKEN" \ -H "Content-Type: application/json" \ "https://storage.googleapis.com/storage/v1/b/BUCKET_NAME/iam"
Em que:
JSON_FILE_NAME
é o caminho para o arquivo criado na Etapa 2.OAUTH2_TOKEN
é o token de acesso gerado na Etapa 1.BUCKET_NAME
é o nome do bucket ao qual você quer conceder o acesso principal. Por exemplo,my-bucket
.