Delegue autorizações de agente do serviço numa conta de serviço gerida pelo utilizador

Para transferências sem agente, o Serviço de transferência de armazenamento usa por predefinição um agente do serviço para transferir os seus dados entre a origem e o destino. Concede autorizações ao agente de serviço para aceder aos seus contentores do Cloud Storage.

Uma vez que o agente de serviço do Storage Transfer Service é usado por todas as transferências num projeto, tem necessariamente autorizações em todos os contentores envolvidos em todas as transferências.

Em alternativa, pode atribuir autorizações de contentores a várias contas de serviço geridas pelo utilizador. Estas contas de serviço geridas pelo utilizador têm autorizações concedidas em contentores de origem e de destino específicos e também estão restritas a contas de utilizador específicas (as contas que criam ou acionam a tarefa de transferência).

Cenários de exemplo

Os cenários seguintes demonstram diferentes opções de autorização através do agente de serviço e das contas de serviço geridas pelo utilizador.

Expanda cada secção para ver os detalhes.

Cenário 1: apenas agente do serviço

Neste cenário, todas as autorizações são concedidas ao agente de serviço.

  • O agente do serviço tem autorizações de escrita nos contentores A, B, C e D.

Qualquer utilizador com as autorizações corretas para criar uma tarefa de transferência pode transferir dados para os contentores A, B, C e D ou a partir destes.

Isto funciona bem quando o utilizador do serviço de transferência de armazenamento é um utilizador fidedigno para os dados em todos os contentores e pode configurar corretamente as tarefas de transferência para evitar mover dados para dentro ou para fora do contentor errado.

Cenário 2: apenas agentes de serviços geridos pelo utilizador

Neste cenário, todas as autorizações são concedidas às contas de serviço geridas pelo utilizador.

  • A conta de serviço gerida pelo utilizador n.º 1 tem autorizações concedidas nos contentores A e B.
  • A conta de serviço gerida pelo utilizador n.º 2 recebe autorizações nos contentores C e D.

Além disso:

  • O utilizador Alpha tem acesso à conta de serviço n.º 1.
  • O utilizador Bravo tem acesso à conta de serviço n.º 2.
  • O utilizador Charlie tem acesso às contas de serviço n.º 1 e n.º 2.

Neste caso:

  • O grupo alfa só pode transferir entre os grupos A e B.
  • O Bravo só pode transferir entre os grupos C e D.
  • O Charlie só pode transferir entre os grupos A e B, e entre C e D.
  • O Charlie não pode fazer transferências entre A e C, A e D, B e C ou B e D.

Cenário 3: autorizações mistas

Neste cenário, o seu projeto contém uma combinação de autorizações de agente de serviço e autorizações de conta de serviço geridas pelo utilizador.

  • O agente do serviço tem autorizações de escrita nos contentores A e B.
  • A conta de serviço gerida pelo utilizador n.º 1 recebe autorizações de só de leitura no contentor C e autorizações de escrita no contentor D.
  • O utilizador Alpha recebe acesso à conta de serviço gerida pelo utilizador n.º 1.

Neste caso:

  • Qualquer utilizador com as autorizações corretas para criar uma tarefa de transferência pode transferir dados para os contentores A e B ou a partir destes. Não podem ser transferidos para o grupo C ou D nem a partir destes.
  • O utilizador Alfa pode transferir para os grupos A e B ou a partir destes.
  • O utilizador Alfa pode transferir para fora do grupo C para o grupo D.
  • O Alpha não pode ser transferido do grupo C para o grupo A ou B.

Vista geral da implementação

A implementação é a seguinte:

  • Cria uma conta de serviço gerida pelo utilizador ou usa uma existente.
  • Concede autorizações:
    • Para que um utilizador aceda à conta de serviço gerida pelo utilizador.
    • Para que o agente do serviço gere um token de acesso a partir da conta de serviço gerida pelo utilizador.
    • Para que a conta de serviço gerida pelo utilizador aceda aos seus contentores.
  • O utilizador cria uma tarefa de transferência que especifica a conta de serviço gerida pelo utilizador.
  • O serviço de transferência de armazenamento verifica se o utilizador tem as autorizações corretas na conta de serviço. Se as autorizações corretas não tiverem sido concedidas, a criação da tarefa de transferência falha.
  • O agente do serviço gera um token OAuth em nome da conta de serviço gerida pelo utilizador. A chave OAuth permite que o Serviço de transferência de armazenamento aceda aos contentores envolvidos na transferência.
  • A tarefa de transferência é executada.
  • O token OAuth tem uma duração curta e expira. Se a tarefa de transferência estiver em curso quando o token expirar, o serviço de transferência de armazenamento gera um novo e continua a transferência.

Configure a delegação de autorizações

Siga as instruções para delegar o acesso de agente de serviço numa conta de serviço gerida pelo utilizador.

Requisitos

  • Para criar uma nova conta de serviço gerida pelo utilizador, precisa da função Criar contas de serviço (roles/iam.serviceAccountCreator) no projeto.
  • Para conceder acesso ao utilizador e ao agente de serviço à conta de serviço gerida pelo utilizador, precisa da função de administrador da conta de serviço (roles/iam.serviceAccountAdmin) na conta de serviço gerida pelo utilizador ou no projeto.

Crie ou identifique uma conta de serviço gerida pelo utilizador

Pode criar uma nova conta de serviço gerida pelo utilizador ou usar uma existente.

  • Para criar uma conta de serviço gerida pelo utilizador, siga as instruções em Criar contas de serviço.

  • Para usar uma conta de serviço gerida pelo utilizador existente, precisa do respetivo endereço de email, que usa o seguinte formato:

    SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com

Se a conta de serviço estiver num projeto diferente da tarefa de transferência, consulte o artigo Permita que as contas de serviço sejam anexadas em vários projetos.

Conceda acesso ao utilizador

Conceda à conta de utilizador acesso à nova conta de serviço gerida pelo utilizador e atribua a função utilizador da conta de serviço (roles/iam.serviceAccountUser). A conta de utilizador é a conta que está a ser usada para criar ou atualizar a tarefa de transferência.

Google Cloud consola

  1. Na Google Cloud consola, aceda à página Contas de serviço.

    Aceda a Contas de serviço

  2. Selecione um projeto.

  3. Clique no endereço de email da conta de serviço gerida pelo utilizador.

  4. Selecione o separador Autorizações.

  5. Clique em Conceder acesso.

  6. Introduza o endereço de email do utilizador. Por exemplo, user1@example.com.

  7. Na lista pendente Função, selecione Utilizador da conta de serviço.

  8. Clique em Guardar. O principal recebe a função na conta de serviço.

gcloud

Para conceder uma função a um principal, execute o comando add-iam-policy-binding:

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 email da conta de serviço gerida pelo utilizador no formato SA_NAME@PROJECT_ID.iam.gserviceaccount.com.
  • PRINCIPAL: o endereço de email do utilizador que executa a tarefa de transferência no formato user:name@example.com.

Conceda acesso ao agente de serviço

Para permitir que o agente do serviço gere uma chave de acesso a partir da conta de serviço gerida pelo utilizador, conceda ao agente do serviço acesso à conta de serviço gerida pelo utilizador e atribua a função Criador de chaves de contas de serviço (roles/iam.serviceAccountTokenCreator).

Precisa do endereço de email do agente de serviço para conceder acesso. Para encontrar o email do agente do serviço:

  1. Aceda à página de referência googleServiceAccounts.get.

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

  3. Clique em Executar.

    O email do agente de serviço é devolvido como o valor de accountEmail. Usa o formato project-PROJECT_NUMBER@storage-transfer-service.iam.gserviceaccount.com.

Em seguida, para conceder ao agente de serviço acesso à conta de serviço gerida pelo utilizador:

Google Cloud consola

  1. Na Google Cloud consola, aceda à página Contas de serviço.

    Aceda a Contas de serviço

  2. Selecione um projeto.

  3. Clique no endereço de email da conta de serviço gerida pelo utilizador.

  4. Selecione o separador Autorizações.

  5. Clique em Conceder acesso.

  6. Introduza o endereço de email do agente de serviço.

  7. Na lista pendente Função, selecione Criador de tokens de contas de serviço.

  8. Clique em Guardar. O principal recebe a função na conta de serviço.

gcloud

Para conceder uma função a um principal, execute o comando add-iam-policy-binding:

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 email da conta de serviço gerida pelo utilizador no formato SA_NAME@PROJECT_ID.iam.gserviceaccount.com.
  • SERVICE_AGENT_EMAIL: o endereço de email do agente do serviço.

Conceda autorizações de contentores à conta de serviço gerida pelo utilizador

Conceda as autorizações indicadas em Autorizações do agente do serviço gerido pela Google à conta de serviço gerida pelo utilizador, em vez de ao agente do serviço.

Crie uma tarefa de transferência com uma conta de serviço gerida pelo utilizador

Depois de conceder as autorizações corretas, pode especificar a conta de serviço gerida pelo utilizador quando criar uma nova tarefa de transferência.

Google Cloud consola

Siga as instruções para criar uma transferência. Antes de finalizar a tarefa de transferência:

  1. Na página Escolher definições, encontre a secção Tipo de conta de serviço.
  2. Selecione Conta de serviço gerida pelo utilizador.
  3. Introduza o email da conta de serviço gerida pelo utilizador no formato SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com.
  4. Clique em Criar para criar a tarefa de transferência.

API REST

Especifique a conta de serviço gerida pelo utilizador como o valor do campo serviceAccount no pedido transferJobs.create.

O valor tem de usar o formato projects/-/serviceAccounts/ACCOUNT_EMAIL_OR_UNIQUEID.

O email da conta de serviço (SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com) ou o ID exclusivo (123456789012345678901) são aceites na string. O caráter universal - é obrigatório. Substituí-lo por um ID do projeto é inválido.

Por 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": "projects/-/serviceAccounts/SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com",
"transferSpec": {
    ...
  }
}