Configurar o acesso a uma fonte: Amazon S3

É possível configurar o acesso a um bucket do Amazon S3 usando um destes dois métodos:

Regiões compatíveis

O Serviço de transferência do Cloud Storage pode transferir dados das seguintes regiões do Amazon S3: af-south-1, ap-east-1, ap-northeast-1, ap-northeast-2, ap-northeast-3, ap-south-1, ap-south-2, ap-southeast-1, ap-southeast-2, ap-southeast-3, ca-central-1, eu-central-1, eu-central-2, eu-north-1, eu-south-1, eu-south-2, eu-west-1, eu-west-2, eu-west-3, me-central-1, me-south-1, sa-east-1, us-east-1, us-east-2, us-west-1, us-west-2.

Permissões necessárias

Para usar o Serviço de transferência do Cloud Storage para mover dados de um bucket do Amazon S3, sua conta de usuário ou papel de identidade federado precisa ter as permissões apropriadas para o bucket:

Permissão Descrição Uso
s3:ListBucket Permite a listagem de objetos no bucket pelo Storage Transfer Service. Sempre obrigatório.
s3:GetBucketLocation Permite a localização do bucket pelo Serviço de transferência do Cloud Storage. Sempre obrigatório.
s3:GetObject Permite a leitura de objetos no bucket pelo Storage Transfer Service. Obrigatório se você estiver transferindo a versão atual de todos os objetos. Se o manifesto especificar uma versão do objeto, use s3:GetObjectVersion.
s3:GetObjectVersion Permite que o Serviço de transferência do Cloud Storage leia versões específicas de objetos no bucket. Obrigatório se o manifesto especificar uma versão do objeto. Do contrário, use s3:GetObject.
s3:DeleteObject Permite a exclusão de objetos no bucket pelo Serviço de transferência do Cloud Storage. Obrigatório se você definir deleteObjectsFromSourceAfterTransfer como true.

Autenticar usando as credenciais de acesso

Para usar um ID de chave de acesso e uma chave secreta para autenticar na AWS, siga estas etapas:

  1. Crie um usuário do gerenciamento de identidade e acesso da AWS (IAM) com um nome que você possa reconhecer facilmente, como transfer-user.

  2. Em Tipo de acesso da AWS, selecione Chave de acesso - Acesso programático.

  3. Atribua um dos seguintes papéis ao usuário:

    • AmazonS3ReadyOnlyAccess para fornecer acesso somente leitura à fonte. Isso permite transferências, mas não oferece suporte a exclusão de objetos na fonte após a conclusão da transferência.
    • AmazonS3FullAccess se a transferência estiver configurada para excluir objetos na fonte.
    • Um papel personalizado com as permissões apropriadas da tabela Permissões necessárias acima. O JSON das permissões mínimas é semelhante ao exemplo abaixo:

      {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Effect": "Allow",
                "Action": [
                    "s3:GetObject",
                    "s3:ListBucket",
                    "s3:GetBucketLocation"
                ],
                "Resource": [
                    "arn:aws:s3:::AWS_BUCKET_NAME/*",
                    "arn:aws:s3:::AWS_BUCKET_NAME"
                ]
            }
        ]
      }
      
  4. Anote o ID da chave de acesso e a chave de acesso secreta quando o usuário for criado.

A forma como você transmite o ID da chave de acesso e a chave de acesso secreta para o Serviço de transferência do Cloud Storage depende da interface usada para iniciar a transferência.

console do Cloud

Insira os valores diretamente no formulário de criação do job de transferência.

Consulte Criar transferências para começar.

CLI da gcloud

Crie um arquivo JSON com o seguinte conteúdo:

{
  "accessKeyId": "AWS_ACCESS_KEY_ID",
  "secretAccessKey": "AWS_SECRET_ACCESS_KEY"
}

Transmita o local do arquivo para o comando gcloud transfer jobs create usando a sinalização source-creds-file:

gcloud transfer jobs create s3://S3_BUCKET_NAME gs://GCS_BUCKET_NAME \
  --source-creds-file=PATH/TO/KEYFILE.JSON

API REST

O objeto transferSpec precisa conter as informações da chave como parte do objeto awsS3DataSource:

"transferSpec": {
  "awsS3DataSource": {
    "bucketName": "AWS_SOURCE_NAME",
    "awsAccessKey": {
      "accessKeyId": "AWS_ACCESS_KEY_ID",
      "secretAccessKey": "AWS_SECRET_ACCESS_KEY"
    }
  },
  "gcsDataSink": {
    "bucketName": "GCS_SINK_NAME"
  }
}

Bibliotecas de cliente

Veja os exemplos na página Criar transferências.

Autenticar usando a identidade federada

Para usar a identidade federada a fim de autenticar na AWS:

  1. Crie um novo papel do IAM na AWS.

  2. Selecione Política de confiança personalizada como o tipo de entidade confiável.

  3. Copie e cole a seguinte política de confiança:

    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Principal": {
            "Federated": "accounts.google.com"
          },
          "Action": "sts:AssumeRoleWithWebIdentity",
          "Condition": {
            "StringEquals": {
              "accounts.google.com:sub": "SUBJECT_ID"
            }
          }
        }
      ]
    }
    
  4. Substitua SUBJECT_ID pelo subjectID da conta de serviço gerenciada pelo Google que é criada automaticamente ao usar o Serviço de transferência do Cloud Storage. Para recuperar o subjectID:

    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. O projeto especificado aqui precisa ser o que você está usando para gerenciar o Serviço de transferência do Cloud Storage.

    3. Clique em Execute. O subjectId é incluído na resposta.

  5. Conceda uma das seguintes políticas de permissões ao papel:

    • AmazonS3ReadOnlyAccess fornece acesso somente leitura à fonte. Isso permite transferências, mas não oferece suporte a exclusão de objetos na fonte após a conclusão da transferência.
    • AmazonS3FullAccess se a transferência estiver configurada para excluir objetos na fonte.
    • Um papel personalizado com as permissões apropriadas da tabela Permissões necessárias acima. O JSON das permissões mínimas é semelhante ao exemplo abaixo:

      {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Effect": "Allow",
                "Action": [
                    "s3:GetObject",
                    "s3:ListBucket",
                    "s3:GetBucketLocation"
                ],
                "Resource": [
                    "arn:aws:s3:::AWS_BUCKET_NAME/*",
                    "arn:aws:s3:::AWS_BUCKET_NAME"
                ]
            }
        ]
      }
      
  6. Atribua um nome à função e crie a função.

  7. Depois de criado, veja os detalhes do papel para recuperar o Nome do Recurso da Amazon (ARN, na sigla em inglês). Anote esse valor, ele tem o formato arn:aws:iam::AWS_ACCOUNT:role/ROLE_NAME.

A forma como você transmite o ARN para o Serviço de transferência do Cloud Storage depende da interface usada para iniciar a transferência.

console do Cloud

Insira o ARN diretamente no formulário de criação do job de transferência.

Consulte Criar transferências para começar.

CLI da gcloud

Crie um arquivo JSON com o seguinte conteúdo:

{
  "roleArn": "ARN"
}

Transmita o local do arquivo para o comando gcloud transfer jobs create usando a sinalização source-creds-file:

gcloud transfer jobs create s3://S3_BUCKET_NAME gs://GCS_BUCKET_NAME \
  --source-creds-file=PATH/TO/ARNFILE.JSON

API REST

Seu objeto transferSpec precisa conter as informações de ARN como parte do objeto awsS3DataSource:

"transferSpec": {
  "awsS3DataSource": {
    "bucketName": "AWS_SOURCE_NAME",
    "roleArn": "ARN"
  },
  "gcsDataSink": {
    "bucketName": "GCS_SINK_NAME"
  }
}

Bibliotecas de cliente

Veja os exemplos na página Criar transferências.

Restrições de IP

Se o projeto da AWS usar restrições de IP para acessar o armazenamento, será necessário adicionar os intervalos de IP usados pelos workers do Serviço de transferência do Cloud Storage à lista de IPs permitidos.

Como esses intervalos de IP podem mudar, publicamos os valores atuais como um arquivo JSON em um endereço permanente:

https://www.gstatic.com/storage-transfer-service/ipranges.json

Quando um novo intervalo é adicionado ao arquivo, aguardamos pelo menos sete dias antes de usá-lo para solicitações do Storage Transfer Service.

Recomendamos que você extraia os dados deste documento pelo menos uma vez por semana para manter a configuração de segurança atualizada. Para uma amostra de script Python que busque intervalos de IP de um arquivo JSON, consulte este artigo da documentação da nuvem privada virtual.

Para adicionar esses intervalos como IPs permitidos, use o campo Condition em uma política de bucket, conforme descrito na documentação do AWS S3: Como gerenciar o acesso com base em endereços IP específicos.