Configurar o acesso a um coletor: Cloud Storage

O Serviço de transferência do Cloud Storage pode usar um bucket de destino (coletor) do Cloud Storage em dois tipos de transferência:

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

  • Transferências orientadas por agentes: transferências de sistemas de arquivos, HDFS ou armazenamento compatível com S3 para o Cloud Storage 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 destino.

É possível pular as etapas nesta página. Se necessário, configure o acesso à origem 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 destino 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 destino ao 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.

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

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 destino.
  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 Storage Object User ou Storage Object Admin se as ACLs de objeto forem preservadas.
  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.OBJECT_ROLE
gcloud storage buckets add-iam-policy-binding gs://BUCKET_NAME \
--member=serviceAccount:SERVICE_AGENT_EMAIL --role=roles/storage.legacyBucketReader

Substitua:

  • BUCKET_NAME: o nome do bucket de destino.
  • SERVICE_AGENT_EMAIL: o e-mail do agente de serviço.
  • OBJECT_ROLE: especifique objectUser por padrão ou objectAdmin se estiver preservando as ACLs de objeto (ACL_PRESERVE).

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 sink_policy.json:

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

    Substitua:

    • SERVICE_AGENT_EMAIL: o e-mail do agente de serviço.
    • OBJECT_ROLE: especifique objectUser por padrão ou objectAdmin se estiver preservando as ACLs de objeto (ACL_PRESERVE).
  3. Envie uma solicitação PUT usando curl:

    curl -X PUT --data-binary @sink_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 destino.

Transferência baseada em agente

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

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

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

  • Usuário de objetos do Storage (roles/storage.objectUser)

Conceda esses papéis no bucket de destino.

Console

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

    Acessar buckets

  2. Clique no menu Estouro do bucket () do bucket de destino 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 Object Creator, Storage Object Viewer e Storage Legacy Bucket Reader no menu suspenso 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 User no menu suspenso Selecionar um papel.
  9. Clique em Salvar.

gcloud

  1. Conceda papéis de geração de registros e de visualizador ao agente de serviço:

    gcloud storage buckets add-iam-policy-binding gs://BUCKET_NAME \
        --member=serviceAccount:SERVICE_AGENT_EMAIL --role=roles/storage.objectCreator
    gcloud storage buckets add-iam-policy-binding gs://BUCKET_NAME \
        --member=serviceAccount:SERVICE_AGENT_EMAIL --role=roles/storage.objectViewer
    gcloud storage buckets add-iam-policy-binding gs://BUCKET_NAME \
        --member=serviceAccount:SERVICE_AGENT_EMAIL --role=roles/storage.legacyBucketReader
  2. Conceda papéis de gravação e gerenciamento à 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.objectUser

    Substitua:

    • BUCKET_NAME: o nome do bucket de destino.
    • 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.

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_sink_policy.json:

    {
      "bindings": [
        {
          "role": "roles/storage.objectCreator",
          "members": ["serviceAccount:SERVICE_AGENT_EMAIL"]
        },
        {
          "role": "roles/storage.objectViewer",
          "members": ["serviceAccount:SERVICE_AGENT_EMAIL"]
        },
        {
          "role": "roles/storage.legacyBucketReader",
          "members": ["serviceAccount:SERVICE_AGENT_EMAIL"]
        },
        {
          "role": "roles/storage.objectUser",
          "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.
  3. Atualize a política do bucket usando curl:

    curl -X PUT --data-binary @agent_sink_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 destino.

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 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 objetos transferidos no bucket de destino.
storage.objects.get Permite visualizar objetos e metadados atuais. Obrigatório se a transferência estiver configurada para substituir objetos no coletor quando forem diferentes ou nunca.
storage.objects.list Permite listar objetos no bucket de destino. Obrigatório se você estiver verificando se os objetos já existem no coletor.
storage.objects.delete Permite excluir objetos no bucket de destino. Obrigatório se as opções de substituição ou exclusão de objetos exclusivos estiverem ativadas.
storage.objects.setIamPolicy Permite definir ACLs de objeto no bucket de destino. Obrigatório se a preservação de ACL de objeto (ACL_PRESERVE) estiver ativada.
storage.folders.create
storage.folders.get
Permite criar e ler pastas. Obrigatório ao transferir para um bucket de destino com o namespace hierárquico ativado.

Transferência baseada em agente

Para transferências orientadas por agente para um destino do Cloud Storage, as permissões são divididas entre dois principais:

  • Agente de serviço: requer permissões para gravar registros de transferência e verificar a existência de objetos no bucket de destino.

  • Conta de agente de transferência: a conta de serviço ou de usuário que executa os agentes de transferência que gravam arquivos no Cloud Storage.

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 criar registros de transferência no bucket.
storage.objects.get Permite verificar se os objetos já foram transferidos.

Permissões da conta de agente de transferência

Permissão Descrição
storage.objects.create Permite que os agentes gravem objetos no bucket de destino durante a transferência.
storage.objects.get Permite que os agentes leiam dados e metadados de objetos no bucket de destino.
storage.objects.list Permite que os agentes listem objetos no bucket de destino.
storage.objects.delete Obrigatório se a transferência estiver configurada para substituir ou excluir objetos no coletor.
storage.multipartUploads.create
storage.multipartUploads.abort
storage.multipartUploads.listParts
storage.multipartUploads.list
Permite que os agentes realizem uploads de várias partes para arquivos grandes. Incluído automaticamente no roles/storage.objectUser.
storage.folders.create
storage.folders.get
Permite que os agentes criem e leiam pastas ao transferir para um bucket de destino com o namespace hierárquico ativado.

A seguir