

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# Migração do cliente de criptografia Amazon S3 (V1 para V2)
<a name="s3-encryption-migration-v1-v2"></a>

**nota**  
Se você estiver usando a V2 do cliente de criptografia S3 e quiser migrar para a V3, consulte. [Migração do cliente de criptografia Amazon S3 (V2 para V3)](s3-encryption-migration-v2-v3.md)

Este tópico mostra como migrar as aplicações da versão 1 (V1) do cliente de criptografia do Amazon Simple Storage Service (Amazon S3) para a versão 2 (V2) e garantir a disponibilidade das aplicações durante todo o processo de migração.

## Visão geral da migração
<a name="migration-overview-v1-v2"></a>

Essa migração acontece em duas fases:

1. **Atualize os clientes existentes para ler novos formatos.** Primeiro, implante uma versão atualizada do AWS SDK for Ruby em seu aplicativo. Isso permitirá que os clientes de criptografia existentes da V1 descriptografem objetos gravados pelos novos clientes da V2. Se seu aplicativo usa vários AWS SDKs, você deve atualizar cada SDK separadamente.

2. **Migrar clientes de criptografia e descriptografia para a V2.** Depois que todos os seus clientes de criptografia da V1 puderem ler os novos formatos, você poderá migrar seus clientes de criptografia e descriptografia existentes para suas respectivas versões da V2.

## Atualizar os clientes existentes para ler novos formatos
<a name="update-existing-clients-to-read-new-formats-v1-v2"></a>

O cliente de criptografia da V2 usa algoritmos de criptografia incompatíveis com as versões mais antigas do cliente. A primeira etapa da migração é atualizar seus clientes de descriptografia da V1 para a versão mais recente do SDK. Depois de concluir essa etapa, os clientes da V1 da sua aplicação poderão descriptografar objetos criptografados por clientes de criptografia da V2. Veja abaixo os detalhes de cada versão principal do AWS SDK para Ruby.

### Atualize o AWS SDK para Ruby versão 3
<a name="update-aws-sdk-for-ruby-version-3-v1-v2"></a>

A versão 3 é a versão mais recente do AWS SDK para Ruby. Para concluir essa migração, você precisa utilizar a versão 1.76.0 ou posterior do gem `aws-sdk-s3`.

 **Instalação a partir da linha de comando** 

Para projetos que instalam o gem `aws-sdk-s3`, use a opção de versão para verificar se a versão mínima 1.76.0 está instalada.

```
gem install aws-sdk-s3 -v '>= 1.76.0'
```

 **Uso de Gemfiles** 

Para projetos que usam um Gemfile para gerenciar dependências, defina a versão mínima do gem `aws-sdk-s3` como 1.76.0. Por exemplo:

```
gem 'aws-sdk-s3', '>= 1.76.0'
```

1. Modificar seu Gemfile.

1. Executar `bundle update aws-sdk-s3`. Para verificar sua versão, execute o `bundle info aws-sdk-s3`.

### Atualize o AWS SDK para Ruby versão 2
<a name="upgdate-aws-sdk-for-ruby-version-2-v1-v2"></a>

A versão 2 do AWS SDK for Ruby [entrará no](https://aws.amazon.com/blogs/developer/deprecation-schedule-for-aws-sdk-for-ruby-v2/) modo de manutenção em 21 de novembro de 2021. Para concluir essa migração, você precisa utilizar a versão 2.11.562 ou posterior do gem aws-sdk.

 **Instalação a partir da linha de comando** 

Para projetos que instalam o gem `aws-sdk`, a partir da linha de comando, use a opção version para verificar se a versão mínima 2.11.562 está instalada.

```
gem install aws-sdk -v '>= 2.11.562'
```

 **Uso de Gemfiles** 

Para projetos que usam um Gemfile para gerenciar dependências, defina a versão mínima do gem `aws-sdk` como 2.11.562. Por exemplo:

```
gem 'aws-sdk', '>= 2.11.562'
```

1. Modificar seu Gemfile. Se você tiver um arquivo Gemfile.lock, exclua-o ou atualize-o.

1. Executar `bundle update aws-sdk`. Para verificar sua versão, execute o `bundle info aws-sdk`.

## Migrar clientes de criptografia e descriptografia para a V2
<a name="migrate-encryption-and-decryption-clients-to-v2-v1-v2"></a>

Depois de atualizar seus clientes para ler os novos formatos de criptografia, você pode atualizar suas aplicações para os clientes de criptografia e descriptografia da V2. As etapas a seguir mostram como migrar com sucesso seu código da V1 para a V2.

Antes de atualizar seu código para usar o cliente de criptografia V2, verifique se você seguiu as etapas anteriores e está usando o gem `aws-sdk-s3` versão 2.11.562 ou posterior.

**nota**  
Ao descriptografar com o AES-GCM, leia o objeto inteiro até o fim antes de começar a usar os dados descriptografados. Isso é para verificar se o objeto não foi modificado desde que foi criptografado.

### Configuração de clientes de criptografia V2
<a name="configuring-v2-encryption-clients-v1-v2"></a>

O *EncryptionV2::Client* requer configuração adicional. Para obter informações detalhadas da configuração, consulte a [documentação EncryptionV2::Client](https://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/S3/EncryptionV2/Client.html#initialize-instance_method) ou os exemplos fornecidos posteriormente neste tópico.

1. **O método de chave e o algoritmo de criptografia de conteúdo devem ser especificados durante a construção do cliente.** Ao criar um novo `EncryptionV2::Client`, você precisa fornecer valores para `key_wrap_schema` e `content_encryption_schema`.

 `key_wrap_schema`- Se você estiver usando AWS KMS, isso deve ser definido como`:kms_context`. Se você estiver usando uma chave simétrica (AES), ela deverá ser definida como `:aes_gcm`. Se você estiver usando uma chave assimétrica (RSA), ela deverá ser definida como `:rsa_oaep_sha1`.

 `content_encryption_schema`: isso deve ser definido como *:aes\_gcm\_no\_padding*.

2. **security\_profile deve ser especificado durante a construção do cliente.** Ao criar um novo `EncryptionV2::Client`, você precisa fornecer um valor para `security_profile`. O parâmetro *security\_profile* determina o suporte para leitura de objetos gravados usando o `Encryption::Client` da V1 mais antiga. Há dois valores: *:v2* e *:v2\_and\_legacy*. Para oferecer suporte à migração, defina o `security_profile` como *:v2\_and\_legacy*. Use *:v2* somente para desenvolvimento de novo aplicativo.

3. **AWS KMS key O ID á aplicado por padrão.** Na V1,`Encryption::Client`, o `kms_key_id` usado para criar o cliente não foi fornecido ao AWS KMS `Decrypt call`. AWS KMS pode obter essas informações dos metadados e adicioná-las ao blob de texto cifrado simétrico. Na V2, E`ncryptionV2: :Client`, o *kms\_key\_id* é passado para a chamada Decrypt, e a chamada falhará se não corresponder à chave usada para AWS KMS criptografar o objeto. Se o seu código anteriormente dependia da não definição de um `kms_key_id` específico, defina `kms_key_id: :kms_allow_decrypt_with_any_cmk` na criação do cliente ou defina `kms_allow_decrypt_with_any_cmk: true` nas chamadas do `get_object`.

### Exemplo: uso de uma chave simétrica (AES)
<a name="example-using-a-symmetric-aes-key-v1-v2"></a>

 **Pré-migração** 

```
client = Aws::S3::Encryption::Client.new(encryption_key: aes_key)
client.put_object(bucket: bucket, key: key, body: secret_data)
resp = client.get_object(bucket: bucket, key: key)
```

 **Pós-migração** 

```
client = Aws::S3::EncryptionV2::Client.new(
  encryption_key: rsa_key,
  key_wrap_schema: :rsa_oaep_sha1, # the key_wrap_schema must be rsa_oaep_sha1 for asymmetric keys
  content_encryption_schema: :aes_gcm_no_padding,
  security_profile: :v2_and_legacy # to allow reading/decrypting objects encrypted by the V1 encryption client
 )
client.put_object(bucket: bucket, key: key, body: secret_data)  # No changes
resp = client.get_object(bucket: bucket, key: key) # No changes
```

### Exemplo: usando AWS KMS com kms\_key\_id
<a name="example-using-aws-kms-with-kms-key-id-v1-v2"></a>

 **Pré-migração** 

```
client = Aws::S3::Encryption::Client.new(kms_key_id: kms_key_id)
client.put_object(bucket: bucket, key: key, body: secret_data)
resp = client.get_object(bucket: bucket, key: key)
```

 **Pós-migração** 

```
client = Aws::S3::EncryptionV2::Client.new(
  kms_key_id: kms_key_id,
  key_wrap_schema: :kms_context, # the key_wrap_schema must be kms_context for KMS keys
  content_encryption_schema: :aes_gcm_no_padding,
  security_profile: :v2_and_legacy # to allow reading/decrypting objects encrypted by the V1 encryption client
)
client.put_object(bucket: bucket, key: key, body: secret_data)  # No changes
resp = client.get_object(bucket: bucket, key: key) # No change
```

### Exemplo: usando AWS KMS sem kms\_key\_id
<a name="example-using-aws-kms-without-kms-key-id-v1-v2"></a>

 **Pré-migração** 

```
client = Aws::S3::Encryption::Client.new(kms_key_id: kms_key_id)
client.put_object(bucket: bucket, key: key, body: secret_data)
resp = client.get_object(bucket: bucket, key: key)
```

 **Pós-migração** 

```
client = Aws::S3::EncryptionV2::Client.new(
  kms_key_id: kms_key_id,
  key_wrap_schema: :kms_context, # the key_wrap_schema must be kms_context for KMS keys
  content_encryption_schema: :aes_gcm_no_padding,
  security_profile: :v2_and_legacy # to allow reading/decrypting objects encrypted by the V1 encryption client
)
client.put_object(bucket: bucket, key: key, body: secret_data)  # No changes
resp = client.get_object(bucket: bucket, key: key, kms_allow_decrypt_with_any_cmk: true) # To allow decrypting with any cmk
```

 **Alternativa pós-migração** 

Se você apenas lê e descriptografa (nunca grava e criptografa) objetos usando o cliente de criptografia S2, use este código.

```
client = Aws::S3::EncryptionV2::Client.new(
  kms_key_id: :kms_allow_decrypt_with_any_cmk, # set kms_key_id to allow all get_object requests to use any cmk
  key_wrap_schema: :kms_context, # the key_wrap_schema must be kms_context for KMS keys
  content_encryption_schema: :aes_gcm_no_padding,
  security_profile: :v2_and_legacy # to allow reading/decrypting objects encrypted by the V1 encryption client
)
resp = client.get_object(bucket: bucket, key: key) # No change
```