Migrar completamente do Amazon S3 para o Cloud Storage

Nesta página, você aprenderá como fazer a migração completa do Amazon Simple Storage Service (Amazon S3) para o Cloud Storage, se você for um usuário que envia solicitações usando uma API. Após a migração, será possível usar todos os recursos do Cloud Storage, incluindo vários projetos e o OAuth 2.0 para autenticação.

Se você quiser começar a usar o Cloud Storage rapidamente, escolha uma migração simples, que requer apenas algumas alterações simples nas ferramentas e bibliotecas que você usa atualmente com o Amazon S3.

Migrar do Amazon S3 para o Cloud Storage

Para migrar totalmente do Amazon S3 para o Cloud Storage, siga estas etapas:

  • Altere os cabeçalhos x-amz-* atuais para os cabeçalhos x-goog-* correspondentes.
  • Mude o XML de ACL do AWS para o XML de ACL do Cloud Storage correspondente. Consulte Como criar e gerenciar listas de controle de acesso.
  • Defina o cabeçalho x-goog-project-id em suas solicitações.
  • Prepare-se para usar a autenticação do OAuth 2.0, conforme descrito em Autenticação do OAuth 2.0. O primeiro passo é registrar o aplicativo que emitirá as solicitações no Google. Usar OAuth 2.0 significa que o cabeçalho Authorization será semelhante ao abaixo:

    Authorization: Bearer OAUTH2_TOKEN

    O OAuth 2.0 depende do SSL para segurança, em vez de exigir que seu aplicativo faça assinaturas criptográficas diretamente, além de ser mais fácil de implementar. Com ele, o aplicativo pode solicitar acesso a dados associados à conta de um usuário, e o acesso pode ser definido em vários níveis, incluindo somente leitura, leitura e gravação, e controle total. Para mais informações, consulte Escopos OAuth 2.0 do Cloud Storage e Credenciais da conta de usuário.

Controle de acesso

Nesta seção, mostraremos alguns exemplos de controle de acesso para ajudá-lo a migrar do Amazon S3 para o Cloud Storage. Para uma visão geral do controle de acesso no Cloud Storage, consulte Controle de acesso.

No Cloud Storage, há várias maneiras de aplicar ACLs a buckets e objetos. Consulte Como criar e gerenciar listas de controle de acesso. Duas das formas de especificar ACLs são semelhantes ao que é feito no Amazon S3:

  • O parâmetro de string de consulta acl permite aplicar ACLs para escopos específicos.
  • O cabeçalho de solicitação x-goog-acl permite aplicar ACLs predefinidas, que às vezes são conhecidas como ACLs automáticas.

Como usar o parâmetro de string de consulta "acl"

É possível usar o parâmetro de string de consulta acl na solicitação do Cloud Storage exatamente da mesma forma que ele é utilizado na solicitação do Amazon S3. O parâmetro acl é usado junto com o método PUT para aplicar ACLs aos seguintes elementos: um objeto atual, um bucket atual ou um bucket que está sendo criado. Ao usar o parâmetro de string de consulta acl em uma solicitação PUT, é necessário anexar um documento XML (usando a sintaxe de ACL do Cloud Storage) ao corpo da solicitação. O documento XML contém as entradas de ACL individuais que você quer aplicar ao bucket ou objeto.

Veja no exemplo abaixo uma solicitação PUT para o Amazon S3 que usa o parâmetro de string de consulta acl. As ACLs são definidas em um documento XML enviado no corpo da solicitação. A solicitação PUT altera as ACLs em um objeto chamado europe/france/paris.jpg, que está em um bucket chamado my-travel-maps. A ACL concede a permissão FULL_CONTROL a jane@gmail.com.

PUT europe/france/paris.jpg?acl HTTP/1.1
Host: my-travel-maps.s3.amazonaws.com
Date: Wed, 06 Nov 2013 19:28:18 GMT
Content-Length: 598
Content-Type: application/xml
Authorization: AWS4-HMAC-SHA256 Credential=AWS-ACCESS-KEY/20131106/us-east-1/s3/aws4_request, SignedHeaders=content-length;content-type;date;host, Signature=4c45f25bb679fdab0de5a287625d6a143414728d93c9aeb9f4cc91c33a1c45fg

<?xml version='1.0' encoding='utf-8'?>
<AccessControlPolicy>
  <Owner>
    <ID>5a6557ba40f7c86496ffceae789fcd888abc1b62a7149873a0fe12c0f60a7d95</ID>
    <DisplayName>ownerEmail@example.com</DisplayName>
  </Owner>
  <AccessControlList>
    <Grant>
      <Grantee xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="CanonicalUser">
        <ID>fd447671d60b979f78ee6fcec7b22afc80e6b26a4db16eed01afb8064047949b</ID>
        <DisplayName>jane@gmail.com</DisplayName>
      </Grantee>
      <Permission>FULL_CONTROL</Permission>
    </Grant>
  </AccessControlList>
</AccessControlPolicy>

A seguir, a mesma solicitação para o Cloud Storage:

PUT europe/france/paris.jpg?acl HTTP/1.1
Host: my-travel-maps.storage.googleapis.com
Date: Wed, 06 Nov 2013 19:37:33 GMT
Content-Length: 268
Content-Type: application/xml
Authorization: Bearer ya29.AHES6ZRVmB7fkLtd1XTmq6mo0S1wqZZi3-Lh_s-6Uw7p8vtgSwg

<?xml version='1.0' encoding='utf-8'?>
<AccessControlList>
  <Entries>
  <Entry>
    <Permission>FULL_CONTROL</Permission>
    <Scope type="UserByEmail">
      <EmailAddress>jane@gmail.com</EmailAddress>
    </Scope>
  </Entry>
  </Entries>
</AccessControlList>

O Cloud Storage não exige um elemento <Owner/> no documento XML da ACL. Para mais informações, consulte Propriedade do bucket e do objeto.

Também é possível recuperar as ACLs de intervalos e objetos usando o parâmetro de string de consulta acl com o método GET. As ACLs são descritas em um documento XML, que está anexado ao corpo da resposta. É necessário ter a permissão FULL_CONTROL para aplicar ou recuperar ACLs em um objeto ou bucket.

Aplicar ACLs com um cabeçalho de solicitação de extensão

É possível usar o cabeçalho x-goog-acl na solicitação do Cloud Storage para aplicar ACLs predefinidas a buckets e objetos exatamente da mesma forma que o cabeçalho x-amz-acl é usado na solicitação do Amazon S3. Normalmente, usa-se o cabeçalho x-goog-acl (x-amz-acl) para aplicar uma ACL predefinida a um bucket ou objeto ao criá-lo ou fazer upload dele. As ACLs predefinidas do Cloud Storage são semelhantes às ACLs pré-configuradas do Amazon S3, incluindo as opções privada, de leitura pública, de leitura e gravação públicas, entre outras. Para ver a lista de ACLs predefinidas do Cloud Storage, consulte ACLs predefinidas.

O exemplo a seguir mostra uma solicitação de objeto PUT que aplica a ACL public-read a um objeto chamado europe/france/paris.jpg, que está sendo enviado para um bucket chamado my-travel-maps no Amazon S3.

PUT europe/france/paris.jpg HTTP/1.1
Host: my-travel-maps.s3.amazonaws.com
Date: Wed, 06 Nov 2013 20:48:42 GMT
Content-Length: 888814
Content-Type: image/jpg
x-amz-acl: public-read
Authorization: AWS4-HMAC-SHA256 Credential=AWS-ACCESS-KEY/20131106/us-east-1/s3/aws4_request, SignedHeaders=content-length;content-type;date;host, Signature=808150c37dbd1b425b2398421d6fc3dd6d4942dfaae9e519fd5835aa62fd62ab

<888814 bytes in entity body>

Veja abaixo a mesma solicitação para o Cloud Storage:

PUT europe/france/paris.jpg HTTP/1.1
Host: my-travel-maps.storage.googleapis.com
Date: Wed, 06 Nov 2013 20:49:57 GMT
Content-Length: 888814
Content-Type: image/jpg
x-goog-acl: public-read
Authorization: Bearer ya29.AHES6ZRVmB7fkLtd1XTmq6mo0S1wqZZi3-Lh_s-6Uw7p8vtgSwg

<888814 bytes in entity body>

Também é possível usar o cabeçalho x-goog-acl para aplicar uma ACL predefinida a um bucket ou objeto atual. Para fazer isso, inclua o parâmetro de string de consulta acl na sua solicitação, mas não inclua um documento XML nela. Aplicar uma ACL predefinida a um objeto ou bucket atual é útil se você quiser mudar de uma ACL predefinida para outra ou atualizar ACLs personalizadas para uma predefinida. Por exemplo, a solicitação de objeto PUT a seguir aplica a ACL predefinida private a um objeto chamado europe/france/paris.jpg, que está em um bucket chamado my-travel-maps.

PUT europe/france/paris.jpg?acl HTTP/1.1
Host: my-travel-maps.storage.googleapis.com
Date: Wed, 06 Nov 2013 00:26:36 GMT
Content-Length: 0
x-goog-acl: private
Authorization: Bearer ya29.AHES6ZRVmB7fkLtd1XTmq6mo0S1wqZZi3-Lh_s-6Uw7p8vtgSwg

<empty entity body>

Para mais informações sobre o gerenciamento de ACLs, consulte Como criar e gerenciar listas de controle de acesso.

Migrar dos métodos de solicitação do Amazon S3 para os do Cloud Storage

O Cloud Storage aceita os mesmos métodos de solicitação HTTP padrão para ler e gravar dados em buckets que são utilizados no Amazon S3. Portanto, a maioria das ferramentas e bibliotecas que você usa atualmente com o Amazon S3 funciona no Cloud Storage, sem a necessidade de alterações. O Cloud Storage aceita os métodos de solicitação a seguir:

  • Solicitação de serviço para GET
  • Solicitações de bucket, incluindo PUT, GET e DELETE
  • Solicitações de objetos, incluindo GET, POST, PUT, HEAD e DELETE

Para mais informações, consulte Métodos de referência da API XML. Lembre-se de que ao enviar solicitações para o Cloud Storage, é necessário alterar o corpo da solicitação, quando aplicável, para usar a sintaxe apropriada do Cloud Storage. Por exemplo, ao criar uma configuração de ciclo de vida para um bucket, use o XML do ciclo de vida do Cloud Storage, que é diferente daquele do Amazon S3.

Há algumas diferenças entre a API XML do Cloud Storage e o Amazon S3, que estão resumidas abaixo:

Funcionalidade do Amazon S3 Funcionalidade da API XML do Cloud Storage
Ao usar chaves de criptografia fornecidas pelo cliente em um upload de várias partes, a solicitação final não inclui a chave de criptografia fornecida pelo cliente. Na API XML do Cloud Storage, todas as solicitações em um upload de várias partes, incluindo a solicitação final, exigem que você forneça a mesma chave de criptografia fornecida pelo cliente. Esse requisito existe porque o Cloud Storage não armazena as informações da chave de criptografia enquanto aguarda a solicitação completar o upload, mas requer que a chave calcule uma soma de controle para o objeto concluído.
No Amazon S3, é possível usar assinaturas V4 para autenticar uploads que usam codificação de transferência em partes. Na API XML do Cloud Storage, a codificação de transferência fragmentada e as assinaturas V4 não podem ser usadas simultaneamente. Por padrão, algumas ferramentas do Amazon S3 usam a codificação de transferência fragmentada juntamente com assinaturas. Nesse caso, desative a codificação de transferência fragmentada.
Parâmetros da string de consulta de bucket GET/POST:
  • "policy" - como trabalhar com políticas de bucket do Amazon S3.
  • "notification" - como notificar eventos de bucket.
  • "requestPayment" - como configurar quem paga pela solicitação e o download de dados de um bucket.
Alternativas:
  • "policy" - as ACLs do Cloud Storage, a participação na equipe do projeto e a capacidade de usar vários projetos atendem a muitos dos cenários em que as políticas de bucket são usadas.
  • "notification" - Use a CLI gcloud ou as notificações do Pub/Sub da API JSON.
  • "requestPayment" - no Cloud Storage, o parâmetro de string de consulta equivalente a requestPayment é billing.
Exclusão de vários objetos.
POST /?delete

Use o console do Google Cloud para remover facilmente vários objetos.

Como alternativa, a API JSON aceita o envio de solicitações em lote para reduzir o número de conexões HTTP feitas por seu cliente.

Migrar cabeçalhos do Amazon S3 para o Cloud Storage

O Cloud Storage usa vários cabeçalhos HTTP padrão, além de diversos cabeçalhos HTTP personalizados (extensão). Na migração do Amazon S3 para o Cloud Storage, é possível converter cabeçalhos personalizados do Amazon S3 em cabeçalhos personalizados equivalentes do Cloud Storage ou em uma funcionalidade semelhante, conforme mostrado nas tabelas abaixo.

Para muitos cabeçalhos do Amazon S3, basta substituir o prefixo x-amz por x-goog:

Cabeçalho do Amazon S3 Cabeçalho do Cloud Storage
x-amz-storage-class x-goog-storage-class
x-amz-acl x-goog-acl
x-amz-date x-goog-date
x-amz-meta-* x-goog-meta-*
x-amz-copy-source x-goog-copy-source
x-amz-metadata-directive x-goog-metadata-directive
x-amz-copy-source-if-match x-goog-copy-source-if-match
x-amz-copy-source-if-none-match x-goog-copy-source-if-none-match
x-amz-copy-source-if-unmodified-since x-goog-copy-source-if-unmodified-since
x-amz-copy-source-if-modified-since x-goog-copy-source-if-modified-since

Há vários cabeçalhos que são diferentes ou não se aplicam ao Cloud Storage:

Cabeçalho do Amazon S3 Cabeçalho do Cloud Storage
x-amz-server-side-encryption Não é obrigatório. Todos os dados do Cloud Storage são criptografados automaticamente antes de serem gravados no disco. Para mais informações, consulte Criptografia.
x-amz-grant-* x-goog-acl com um valor de ACL predefinido.
x-amz-mfa Use a autenticação do OAuth 2.0.
x-amz-website-redirect-location, x-amz-copy-source-range n/a

Consulte os cabeçalhos HTTP e parâmetros de string de consulta da API XML para uma referência aos cabeçalhos do Cloud Storage.

A seguir