Para transferências sem agente, o Serviço de transferência do Cloud Storage usa um agente de serviço por padrão para transferir seus dados entre a origem e o destino. Conceda permissões ao agente de serviço para acessar seus buckets do Cloud Storage.
Como o mesmo agente de serviço do Serviço de transferência do Cloud Storage é usado por todas as transferências em um projeto, ele necessariamente tem permissões em todos os buckets envolvidos em cada transferência.
Como alternativa, você pode atribuir permissões de bucket a várias contas de serviço gerenciado pelo usuário. Essas contas de serviço gerenciado pelo usuário recebem permissões em buckets de origem e destino específicos e também são restritas a contas de usuário específicas (as contas que criam ou acionam o job de transferência).
Exemplos de cenários
Os cenários a seguir demonstram diferentes opções de permissão usando o agente de serviço e as contas de serviço gerenciado pelo usuário.
Expanda cada seção para conferir os detalhes.
Cenário 1: somente agente de serviço
Nesse cenário, todas as permissões são concedidas ao agente de serviço.
- O agente de serviço recebe permissões de gravação nos buckets A, B, C, e D.
Qualquer usuário com as permissões corretas para criar um job de transferência pode transferir dados para ou de buckets A, B, C e D.
Isso funciona bem quando o usuário do Serviço de transferência do Cloud Storage é confiável para os dados em todos os buckets e pode configurar jobs de transferência corretamente para evitar a movimentação de dados para ou de um bucket incorreto.
Cenário 2: somente agentes de serviço gerenciado pelo usuário
Nesse cenário, todas as permissões são concedidas a contas de serviço gerenciado pelo usuário.
- A conta de serviço gerenciado pelo usuário nº 1 recebe permissões nos buckets A e B.
- A conta serviço gerenciado pelo usuário nº 2 recebe permissões nos buckets C e D.
Além disso:
- O usuário Alfa recebe acesso à conta de serviço nº 1.
- O usuário Bravo recebe acesso à conta de serviço nº 2.
- O usuário Charlie recebe acesso às contas de serviço nº 1 e nº 2.
Nesse caso:
- Alfa só pode transferir dados entre os buckets A e B.
- Bravo só pode transferir dados entre os buckets C e D.
- Charlie só pode transferir dados entre os buckets A e B e entre C e D, só.
- Charlie não pode transferir dados entre A e C, A e D, B e C, ou B e D.
Cenário 3: permissões mistas
Nesse cenário, seu projeto contém uma mistura de permissões de agente de serviço e permissões de conta de serviço gerenciado pelo usuário.
- O agente de serviço recebe permissões de gravação nos buckets A e B.
- A conta de serviço gerenciado pelo usuário nº 1 recebe permissões de somente leitura no bucket C e permissões de gravação no bucket D.
- O usuário Alfa recebe acesso à conta serviço gerenciado pelo usuário nº 1.
Nesse caso:
- Qualquer usuário com as permissões corretas para criar um job de transferência pode transferir dados para ou de buckets A e B. Não é possível transferir dados para ou de buckets C ou D.
- O usuário Alfa pode transferir dados para ou de buckets A e B.
- Alfa pode transferir dados do bucket C para o bucket D.
- Alfa não pode transferir dados do bucket C para o bucket A ou B.
Visão geral da implementação
A implementação é a seguinte:
- Você cria uma conta serviço gerenciado pelo usuário ou usa uma já existente.
- Você concede permissões:
- Para que um usuário acesse a conta de serviço gerenciado pelo usuário.
- Para que o agente de serviço gere um token de acesso da conta de serviço gerenciado pelo usuário.
- Para que a conta de serviço gerenciado pelo usuário acesse seus buckets.
- O usuário cria um job de transferência que especifica a conta de serviço gerenciado pelo usuário.
- O Serviço de transferência do Cloud Storage verifica se o usuário tem as permissões corretas na conta de serviço. Se as permissões corretas não tiverem sido concedidas, a criação do job de transferência falhará.
- O agente de serviço gera um token OAuth em nome da conta de serviço gerenciada pelo usuário. O token OAuth permite que o Serviço de transferência do Cloud Storage acesse os buckets envolvidos na transferência.
- O job de transferência é executado.
- O token OAuth é de curta duração e expira. Se o job de transferência estiver em andamento quando o token expirar, o Serviço de transferência do Cloud Storage vai gerar um novo e continuar a transferência.
Configurar a delegação de permissões
Siga as instruções para delegar o acesso do agente de serviço a uma conta de serviço gerenciada pelo usuário.
Requisitos
- Para criar uma conta serviço gerenciado pelo usuário, você precisa do papel Criar contas de serviço (
roles/iam.serviceAccountCreator) no projeto. - Para conceder acesso ao usuário e ao agente de serviço à conta de serviço gerenciada pelo usuário, você precisa do papel Administrador da conta de serviço (
roles/iam.serviceAccountAdmin) na conta de serviço gerenciado pelo usuário ou no projeto.
Criar ou identificar uma conta de serviço gerenciado pelo usuário
Você pode criar uma conta serviço gerenciado pelo usuário ou usar uma já existente.
Para criar uma conta serviço gerenciado pelo usuário, siga as instruções em Criar contas de serviço.
Para usar uma conta serviço gerenciado pelo usuário, você precisa do endereço de e-mail dela, que usa o seguinte formato:
SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com
Se a conta de serviço estiver em um projeto diferente do job de transferência, consulte Permitir que contas de serviço sejam anexadas a projetos.
Conceder acesso ao usuário
Conceda acesso da conta de usuário à nova conta de serviço gerenciado pelo usuário e atribua o papel Usuário da conta de serviço (roles/iam.serviceAccountUser). A conta de usuário é a conta usada para criar ou atualizar o job de transferência.
Google Cloud Console do
No Google Cloud console do, acesse a página Contas de serviço.
Selecione um projeto.
Clique no endereço de e-mail da conta serviço gerenciado pelo usuário.
Selecione a guia Principais com acesso.
Clique em Conceder acesso.
Insira o endereço de e-mail do usuário. Por exemplo,
user1@example.com.Na lista suspensa Papel, selecione Usuário da conta de serviço.
Clique em Salvar. O principal recebe o papel na conta de serviço.
gcloud
Para conceder um papel a um principal, execute o
add-iam-policy-binding comando:
gcloud iam service-accounts add-iam-policy-binding USER_MANAGED_SERVICE_ACCOUNT_EMAIL \ --member=PRINCIPAL --role=roles/iam.serviceAccountUser
Substitua as seguintes variáveis:
- USER_MANAGED_SERVICE_ACCOUNT_EMAIL: o endereço de e-mail da conta de serviço gerenciado pelo usuário no formato
SA_NAME@PROJECT_ID.iam.gserviceaccount.com. - PRINCIPAL: o endereço de e-mail do usuário que executa o job de transferência, no formato
user:name@example.com.
Conceder acesso ao agente de serviço
Para permitir que o agente de serviço gere um token de acesso da
conta de serviço gerenciado pelo usuário, conceda acesso do agente de serviço à
conta de serviço gerenciado pelo usuário e atribua o papel Criador de token da conta de serviço (roles/iam.serviceAccountTokenCreator).
Você precisa do endereço de e-mail do agente de serviço para conceder acesso. Para encontrar 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 seu 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.
Clique em Executar.
O e-mail do agente de serviço é retornado como o valor de
accountEmail. Ele usa o formatoproject-PROJECT_NUMBER@storage-transfer-service.iam.gserviceaccount.com.
Em seguida, para conceder acesso do agente de serviço à conta de serviço gerenciado pelo usuário:
Google Cloud Console do
No Google Cloud console do, acesse a página Contas de serviço.
Selecione um projeto.
Clique no endereço de e-mail da conta serviço gerenciado pelo usuário.
Selecione a guia Principais com acesso.
Clique em Conceder acesso.
Insira o endereço de e-mail do agente de serviço.
Na lista suspensa Papel, selecione Criador de token da conta de serviço.
Clique em Salvar. O principal recebe o papel na conta de serviço.
gcloud
Para conceder um papel a um principal, execute o
add-iam-policy-binding comando:
gcloud iam service-accounts add-iam-policy-binding USER_MANAGED_SERVICE_ACCOUNT_EMAIL \ --member=serviceAccount:SERVICE_AGENT_EMAIL --role=roles/iam.serviceAccountTokenCreator
Substitua as seguintes variáveis:
- USER_MANAGED_SERVICE_ACCOUNT_EMAIL: o endereço de e-mail da conta de serviço gerenciado pelo usuário no formato
SA_NAME@PROJECT_ID.iam.gserviceaccount.com. - SERVICE_AGENT_EMAIL: o endereço de e-mail do agente de serviço.
Conceder permissões de bucket à conta de serviço gerenciado pelo usuário
Conceda as permissões listadas em Permissões do agente de serviço a conta de serviço gerenciado pelo usuário, em vez de ao agente de serviço.
Criar um job de transferência usando uma conta serviço gerenciado pelo usuário
Depois de conceder as permissões corretas, você pode especificar a conta de serviço gerenciada pelo usuário ao criar um novo job de transferência.
Google Cloud Console do
Siga as instruções para criar uma transferência. Antes de finalizar o job de transferência:
- Na página Escolher configurações, encontre a seção Tipo de conta de serviço.
- Selecione Conta de serviço gerenciado pelo usuário.
- Insira o e-mail da conta de serviço gerenciado pelo usuário, usando o formato
SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com. - Clique em Criar para criar o job de transferência.
API REST
Especifique a conta de serviço gerenciado pelo usuário como o valor do campo serviceAccount na solicitação transferJobs.create.
O e-mail da conta de serviço (SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com) ou o ID exclusivo (123456789012345678901) são aceitos.
Exemplo:
POST https://storagetransfer.googleapis.com/v1/transferJobs
{
"description": "A transfer using a user-managed service account for bucket permissions",
"status": "ENABLED",
"projectId": "PROJECT_ID",
"serviceAccount": "SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com",
"transferSpec": {
...
}
}