Configurar o acesso a uma origem: Cloud Storage

O Serviço de transferência do Cloud Storage pode usar um bucket de origem do Cloud Storage em dois tipos de transferência:

  • Transferências sem agente: transferências entre nuvens, como do Cloud Storage para o Cloud Storage, do Cloud Storage para o AWS S3 ou do Cloud Storage para o Armazenamento de Blobs do Azure. As permissões são concedidas ao agente de serviço do Serviço de transferência do Cloud Storage.

  • Transferências baseadas em agentes: transferências que envolvem sistemas de arquivos ou armazenamento no local que usam agentes de transferência e pools de agentes. As permissões precisam ser concedidas ao agente de serviço e à conta do agente de transferência.

Como conceder permissões automaticamente no console do Google Cloud

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

É possível pular as etapas nesta página. Se necessário, configure o acesso ao destino e crie uma transferência.

Pré-requisitos

  • Permissões da conta de usuário: para conceder os papéis do IAM necessários listados nesta página, sua conta de usuário (ou conta serviço gerenciado pelo usuário) precisa ter permissões para modificar as políticas do IAM no bucket de origem e no projeto do pool de agentes. Para detalhes sobre os requisitos da conta de usuário, consulte Permissões da conta de usuário.

  • Permissões do projeto de transferência baseada em agente: para transferências baseadas em agente, verifique se você configurou os papéis necessários para envolvidos no projeto para o agente de serviço e a conta do agente de transferência. Consulte Permissões para envolvidos no projeto baseadas em agente.

Encontre o e-mail do agente de serviço

O agente de serviço é criado automaticamente quando você cria um job de transferência pela primeira vez, executa comandos de configuração do gcloud transfer, acessa a página Transferência do Cloud Storage no console doGoogle Cloud ou chama googleServiceAccounts.get.

Para receber o e-mail do agente de serviço, que é usado para identificá-lo nos comandos do Serviço de transferência do Cloud Storage:

  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.
  3. Clique em Executar.

Copie o valor de accountEmail. Ele usa o formato: project-PROJECT_NUMBER@storage-transfer-service..

Conceder as permissões necessárias

Selecione o tipo de transferência para ver as etapas de concessão de acesso.

Transferência sem agente

Os papéis predefinidos a seguir concedem as permissões necessárias no bucket de origem ao agente de serviço:

  • Leitor de bucket legado do Storage (roles/storage.legacyBucketReader)
  • Além de uma das seguintes opções:
    • Leitor de objetos do Storage (roles/storage.objectViewer) se os objetos de origem forem retidos.
    • Usuário de objetos do Storage (roles/storage.objectUser) se os objetos de origem forem excluídos após a transferência (deleteObjectsFromSourceAfterTransfer).
    • Administrador de objetos do Storage (roles/storage.objectAdmin) se as ACLs de objeto (ACL_PRESERVE) forem preservadas. Também é possível excluir objetos de origem após a transferência.

Adicione o agente de serviço à política de IAM do bucket de origem:

Console

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

    Acessar buckets

  2. Clique no menu flutuante do bucket () para o bucket de origem.
  3. Escolha Editar acesso.
  4. Clique em + Adicionar principal.
  5. Em Novos participantes, insira o e-mail do agente de serviço.
  6. Selecione Storage Legacy Bucket Reader no menu suspenso Selecionar um papel.
  7. Clique em Adicionar outro papel e selecione uma das seguintes opções:
    • Storage Object Viewer
    • Storage Object User
    • Storage Object Admin
  8. Clique em Salvar.

gcloud

Execute os comandos gcloud storage a seguir:

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

Substitua:

  • BUCKET_NAME: o nome do bucket de origem.
  • SERVICE_AGENT_EMAIL: o e-mail do agente de serviço.
  • OBJECT_ROLE: escolha uma das seguintes opções com base nas suas opções de transferência:
  • objectViewer: se os objetos de origem forem retidos.
  • objectUser: se os objetos de origem forem excluídos após a transferência.
  • objectAdmin: se as ACLs de objeto forem preservadas. Também é possível excluir objetos de origem após a transferência.

API REST

  1. Gere um token de acesso para autenticar sua solicitação. Se você estiver usando a CLI gcloud, execute:

    gcloud auth print-access-token
  2. Recupere a política de IAM do bucket atual (GET https://storage./storage/v1/b/<var>BUCKET_NAME</var>/iam), anexe as seguintes vinculações à matriz bindings e salve a política mesclada como source_policy.json:

    {
    "bindings": [
      {
        "role": "roles/storage.legacyBucketReader",
        "members": ["serviceAccount:SERVICE_AGENT_EMAIL"]
      },
      {
        "role": "roles/storage.OBJECT_ROLE",
        "members": ["serviceAccount:SERVICE_AGENT_EMAIL"]
      }
    ]
    }

    Substitua:

    • SERVICE_AGENT_EMAIL: o e-mail do agente de serviço.
    • OBJECT_ROLE: escolha objectViewer se quiser reter os objetos de origem, objectUser se quiser excluí-los ou objectAdmin se quiser preservar as ACLs dos objetos.
  3. Envie uma solicitação PUT usando curl:

    curl -X PUT --data-binary @source_policy.json \
      -H "Authorization: Bearer OAUTH2_TOKEN" \
      -H "Content-Type: application/json" \
      "https://storage./storage/v1/b/BUCKET_NAME/iam"

    Substitua:

    • OAUTH2_TOKEN: o token de acesso do OAuth 2.0 gerado na etapa 1.
    • BUCKET_NAME: o nome do bucket de origem.

Transferência baseada em agente

Os papéis predefinidos a seguir concedem ao agente de serviço o acesso necessário ao bucket de origem:

  • Leitor de bucket legado do Storage (roles/storage.legacyBucketReader)
  • Criador de objetos do Storage (roles/storage.objectCreator)

O papel a seguir concede o acesso necessário no bucket de origem à conta do agente de transferência:

  • Leitor de objetos do Storage (roles/storage.objectViewer) se os objetos de origem forem mantidos ou Usuário de objetos do Storage (roles/storage.objectUser) se os objetos de origem forem excluídos após a transferência.

Conceda esses papéis no bucket de origem.

Console

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

    Acessar buckets

  2. Clique no menu Mais opções do bucket () do bucket de origem e selecione Acesso de edição.
  3. Clique em + Adicionar principal.
  4. Em Novos participantes, insira o e-mail do agente de serviço.
  5. Selecione Storage Legacy Bucket Reader e Storage Object Creator nos menus suspensos Selecionar um papel.
  6. Clique em + Adicionar principal novamente.
  7. Insira o e-mail da sua conta de agente de transferência. Essa é a conta de usuário ou de serviço usada ao instalar agentes de transferência. Por exemplo, my-agent-sa@PROJECT_ID. ou user@example.com.
  8. Selecione Storage Object Viewer se quiser reter os objetos de origem ou Storage Object User se quiser excluí-los após a transferência.
  9. Clique em Salvar.

gcloud

  1. Conceda papéis de leitura de metadados do bucket e de gravação de registros de transferência ao agente de serviço:

    gcloud storage buckets add-iam-policy-binding gs://BUCKET_NAME \
        --member=serviceAccount:SERVICE_AGENT_EMAIL --role=roles/storage.legacyBucketReader
    gcloud storage buckets add-iam-policy-binding gs://BUCKET_NAME \
        --member=serviceAccount:SERVICE_AGENT_EMAIL --role=roles/storage.objectCreator
  2. Conceda papéis de acesso a objetos à conta do agente de transferência:

    gcloud storage buckets add-iam-policy-binding gs://BUCKET_NAME \
        --member=serviceAccount_OR_user:TRANSFER_AGENT_ACCOUNT --role=roles/storage.OBJECT_ROLE

    Substitua:

    • BUCKET_NAME: o nome do bucket de origem.
    • SERVICE_AGENT_EMAIL: o e-mail do agente de serviço.
    • serviceAccount_OR_user: especifique serviceAccount se a conta do agente de transferência for uma conta de serviço ou user se os agentes tiverem sido instalados com uma conta de usuário.
    • TRANSFER_AGENT_ACCOUNT: o e-mail da conta que instalou os agentes de transferência. Por exemplo, my-agent-sa@PROJECT_ID. ou user@example.com.
    • OBJECT_ROLE: especifique objectViewer se os objetos de origem forem retidos ou objectUser se eles forem excluídos após a transferência.

API REST

  1. Gere um token de acesso para autenticar sua solicitação. Se você estiver usando a CLI gcloud, execute:

    gcloud auth print-access-token
  2. Recupere a política de IAM do bucket atual (GET https://storage./storage/v1/b/<var>BUCKET_NAME</var>/iam), anexe as seguintes vinculações à matriz bindings e salve a política mesclada como agent_source_policy.json:

    {
      "bindings": [
        {
          "role": "roles/storage.legacyBucketReader",
          "members": ["serviceAccount:SERVICE_AGENT_EMAIL"]
        },
        {
          "role": "roles/storage.objectCreator",
          "members": ["serviceAccount:SERVICE_AGENT_EMAIL"]
        },
        {
          "role": "roles/storage.OBJECT_ROLE",
          "members": ["serviceAccount_OR_user:TRANSFER_AGENT_ACCOUNT"]
        }
      ]
    }

    Substitua:

    • SERVICE_AGENT_EMAIL: o e-mail do agente de serviço.
    • serviceAccount_OR_user: especifique serviceAccount se a conta do agente de transferência for uma conta de serviço ou user se os agentes tiverem sido instalados com uma conta de usuário.
    • TRANSFER_AGENT_ACCOUNT: o e-mail da conta que instalou os agentes de transferência. Por exemplo, my-agent-sa@PROJECT_ID. ou user@example.com.
    • OBJECT_ROLE: especifique objectViewer se os objetos de origem forem retidos ou objectUser se eles forem excluídos após a transferência.
  3. Atualize a política do bucket usando curl:

    curl -X PUT --data-binary @agent_source_policy.json \
        -H "Authorization: Bearer OAUTH2_TOKEN" \
        -H "Content-Type: application/json" \
        "https://storage./storage/v1/b/BUCKET_NAME/iam"

    Substitua:

    • OAUTH2_TOKEN: o token de acesso do OAuth 2.0 gerado na etapa 1.
    • BUCKET_NAME: o nome do bucket de origem.

Transferências entre projetos do Cloud Storage

Para transferir objetos entre buckets do Cloud Storage em projetos na nuvem diferentes do Google Cloud, é necessário conceder permissões ao agente de serviço do projeto que cria a transferência nos buckets de origem e de destino.

A conta de usuário ou de serviço gerenciado pelo usuário que cria a transferência só precisa de permissões no projeto em que o job de transferência é criado.

Para conceder papéis para transferências entre projetos:

  1. Encontre o e-mail do agente de serviço do projeto que vai executar a transferência. Consulte Encontrar o e-mail do agente de serviço.
  2. No bucket de origem, conceda os seguintes papéis a esse agente de serviço:
    • Leitor de bucket legado do Storage (roles/storage.legacyBucketReader)
    • Além de um dos seguintes papéis de objeto:
      • Leitor de objetos do Storage (roles/storage.objectViewer) se os objetos de origem forem retidos.
      • Usuário de objetos do Storage (roles/storage.objectUser) se os objetos de origem forem excluídos após a transferência (deleteObjectsFromSourceAfterTransfer).
      • Administrador de objetos do Storage (roles/storage.objectAdmin) se as ACLs de objeto (ACL_PRESERVE) forem preservadas. Também é possível excluir objetos de origem após a transferência.
  3. No bucket de destino, conceda os seguintes papéis ao mesmo agente de serviço:
    • Leitor de bucket legado do Storage (roles/storage.legacyBucketReader)
    • Usuário de objetos do Storage (roles/storage.objectUser) ou Administrador de objetos do Storage (roles/storage.objectAdmin) se as ACLs de objeto (ACL_PRESERVE) forem preservadas.

Para instruções detalhadas sobre como conceder acesso ao bucket de destino, consulte Configurar o acesso a um coletor: Cloud Storage.

Restrições para organizações

Se a organização tiver aplicado restrições da política da organização, verifique se elas permitem o acesso do agente de serviço entre projetos:

  • Compartilhamento restrito de domínio (constraints/iam.allowedPolicyMemberDomains): a política no projeto que hospeda o bucket precisa permitir domínios de membros que contenham o agente de serviço. Consulte Como restringir domínios.
  • Desativar o uso de conta de serviço entre projetos (constraints/iam.disableCrossProjectServiceAccountUsage): verifique se essa restrição não bloqueia o acesso de conta de serviço entre projetos. Consulte Como restringir contas de serviço.
  • VPC Service Controls: se os buckets pertencerem a perímetros de serviço diferentes, configure regras de entrada e saída para permitir a comunicação de transferência. Consulte Configurar o VPC Service Controls para transferências de repositório de objetos na nuvem.

Referência de permissões granulares

Selecione o tipo de transferência para ver os papéis e as permissões necessários.

Transferência sem agente

Para transferências sem agente, as permissões precisam ser concedidas ao agente de serviço do Serviço de transferência do Cloud Storage:

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.delete Permite a exclusão de objetos no bucket pelo agente de serviço. Obrigatório se deleteObjectsFromSourceAfterTransfer for true.
storage.objects.getIamPolicy Permite ler ACLs em objetos de origem. Obrigatório se a preservação de ACL de objeto (ACL_PRESERVE) estiver ativada.
storage.folders.list
storage.folders.get
Permite listar e ler pastas. Obrigatório ao transferir de um bucket com o namespace hierárquico ativado.

Transferência baseada em agente

Para transferências orientadas por agente de uma origem do Cloud Storage, as permissões são divididas entre dois principais:

  • Agente de serviço: requer acesso de leitura no nível do bucket para resolver os metadados e o local do bucket, além de acesso de criação de objetos para gravar registros de transferência do agente.

  • Conta do agente de transferência: a conta de serviço ou de usuário usada para criar os agentes de transferência.

Permissões do agente de serviço

Permissão Descrição
storage.buckets.get Permite que o agente de serviço inspecione os metadados e o local do bucket.
storage.objects.create Permite que o agente de serviço grave registros de transferência do agente no bucket de origem ao transferir do Cloud Storage para um sistema de arquivos.

Permissões da conta de agente de transferência

Permissão Descrição
storage.objects.list Permite que os agentes listem objetos no bucket de origem.
storage.objects.get Permite que os agentes leiam objetos do bucket de origem.
storage.objects.delete Permite que os agentes excluam objetos de origem se deleteObjectsFromSourceAfterTransfer estiver ativado.
storage.folders.list
storage.folders.get
Permite que os agentes listem e leiam pastas ao transferir de um bucket com namespace hierárquico ativado.

A seguir

É preciso configurar o acesso ao destino: