

O AWS SDK para .NET V3 entrou no modo de manutenção.

Recomendamos que você migre para a [AWS SDK para .NET V4](https://docs.aws.amazon.com/sdk-for-net/v4/developer-guide/welcome.html). Para obter detalhes e informações adicionais sobre como migrar, consulte nosso [anúncio do modo de manutenção](https://aws.amazon.com/blogs/developer/aws-sdk-for-net-v3-maintenance-mode-announcement/).

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 e quiser migrar para a V4, consulte. [Migração do cliente de criptografia Amazon S3 (V2 para V4)](s3-encryption-migration-v2-v4.md)

Este tópico mostra como migrar suas 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 da aplicação durante todo o processo de migração.

Objetos criptografados com o cliente V2 não podem ser descriptografados com o cliente V1. Para facilitar a migração para o novo cliente sem precisar recriptografar todos os objetos de uma vez, foi fornecido um cliente “V1 de transição”. Esse cliente pode *descriptografar* objetos criptografados com a V1 e V2, mas *criptografa* somente objetos em formato compatível com a V1. O cliente V2 pode *descriptografar* objetos criptografados em V1 e V2 (quando habilitado para objetos V1), mas *criptografa* objetos somente em formato compatível com V2.

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

Essa migração acontece em três fases: Essas fases são apresentadas aqui e serão descritas em detalhes posteriormente. Cada fase deve ser concluída para *todos* os clientes que usam objetos compartilhados antes que a próxima fase seja iniciada.

1. **Atualize os clientes existentes para clientes V1 de transição para ler novos formatos.** Primeiro, atualize seus aplicativos para que dependam do cliente V1 de transição em vez do cliente V1. O cliente V1 de transição permite que seu código existente descriptografe objetos escritos pelos novos clientes V2 e objetos escritos em formato compatível com a V1.
**nota**  
O cliente V1 de transição é fornecido somente para fins de migração. Prossiga com a atualização para o cliente V2 depois de passar para o cliente de transição V1.

1. **Migre clientes V1 de transição para clientes V2 para escrever novos formatos.** Em seguida, substitua todos os clientes V1 de transição em seus aplicativos por clientes V2 e defina o perfil de segurança como `V2AndLegacy`. Definir esse perfil de segurança em clientes V2 permite que esses clientes descriptografem objetos que foram criptografados em formato compatível com V1.

1. **Atualize os clientes V2 para que não leiam mais os formatos V1.** Por fim, depois que todos os clientes tiverem migrado para a V2 e todos os objetos tiverem sido criptografados ou recriptografados em um formato compatível com a V2, defina o perfil de segurança da V2 como `V2` em vez de `V2AndLegacy`. Isso evita a descriptografia de objetos que estão no formato compatível com V1.

## Atualize os clientes existentes para clientes V1 de transição para ler novos formatos.
<a name="s3-encryption-migration-v1-v2-to-v1n"></a>

O cliente de criptografia 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 V1 para que eles possam ler o novo formato.

O cliente V1 de transição permite que seus aplicativos descriptografem objetos criptografados na V1 e V2. Esse cliente faz parte do pacote [ NuGet Amazon.Extensions.S3.Encryption](https://www.nuget.org/packages/Amazon.Extensions.S3.Encryption). Execute as etapas a seguir em cada um dos seus aplicativos para usar o cliente V1 de transição.

1. Adquira uma nova dependência do pacote [Amazon.Extensions.S3.Encryption](https://www.nuget.org/packages/Amazon.Extensions.S3.Encryption). **Se o seu projeto depende diretamente do **AWSSDK.S3 ou.** AWSSDK KeyManagementService**pacotes, você deve atualizar essas dependências ou removê-las para que suas versões atualizadas sejam inseridas com esse novo pacote.

1. Altere a declaração `using` apropriada de `Amazon.S3.Encryption` para `Amazon.Extensions.S3.Encryption`, da seguinte forma: 

   ```
   // using Amazon.S3.Encryption;
     using Amazon.Extensions.S3.Encryption;
   ```

1. Reconstrua e reimplante o aplicativo.

O cliente V1 de transição é totalmente compatível com a API do cliente V1, portanto, nenhuma outra alteração de código é necessária.

## Migre clientes V1 de transição para clientes V2 para escrever novos formatos.
<a name="s3-encryption-migration-v1-v2-v1n-to-v2"></a>

O cliente V2 faz parte do pacote [ NuGet Amazon.Extensions.S3.Encryption](https://www.nuget.org/packages/Amazon.Extensions.S3.Encryption). Ele permite que seus aplicativos descriptografem objetos criptografados na V1 e V2 (se configurados para fazer isso), mas criptografa objetos somente em formato compatível com V2.

Depois de atualizar seus clientes existentes para ler o novo formato de criptografia, você poderá prosseguir com a atualização segura de seus aplicativos para os clientes de criptografia e descriptografia V2. Execute as etapas a seguir em cada um dos seus aplicativos para usar o cliente V2.

1. Fazer `EncryptionMaterials` alteração `EncryptionMaterialsV2`.

   1. Ao usar o KMS:

      1. Forneça um ID da chave do KMS.

      1. Declare o método de criptografia que você está usando; ou seja, `KmsType.KmsContext`.

      1. Forneça um contexto de criptografia ao KMS para associar a essa chave de dados. Você pode enviar um dicionário vazio (o contexto de criptografia da Amazon ainda será mesclado), mas é recomendável fornecer contexto adicional.

   1. Ao usar métodos de wrapping da chave fornecidos pelo usuário (criptografia simétrica ou assimétrica):

      1. Forneça uma instância `AES` ou `RSA` que contenha os materiais de criptografia.

      1. Declare qual algoritmo de criptografia usar; ou seja, `SymmetricAlgorithmType.AesGcm` ou `AsymmetricAlgorithmType.RsaOaepSha1`.

1. Altere `AmazonS3CryptoConfiguration` para `AmazonS3CryptoConfigurationV2` com a propriedade `SecurityProfile` definida como `SecurityProfile.V2AndLegacy`.

1. Fazer `AmazonS3EncryptionClient` alteração `AmazonS3EncryptionClientV2`. Esse cliente pega os objetos `AmazonS3CryptoConfigurationV2` e `EncryptionMaterialsV2` recém-convertidos das etapas anteriores.

### Exemplo: KMS para KMS\$1Context
<a name="s3-encryption-migration-v1-v2-ex-kms"></a>

**Pré-migração**

```
using System.Security.Cryptography;
using Amazon.S3.Encryption;

var encryptionMaterial = new EncryptionMaterials("1234abcd-12ab-34cd-56ef-1234567890ab");
var configuration = new AmazonS3CryptoConfiguration()
{
    StorageMode = CryptoStorageMode.ObjectMetadata
};
var encryptionClient = new AmazonS3EncryptionClient(configuration, encryptionMaterial);
```

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

```
using System.Security.Cryptography;
using Amazon.Extensions.S3.Encryption;
using Amazon.Extensions.S3.Encryption.Primitives;

var encryptionContext = new Dictionary<string, string>();
var encryptionMaterial = new EncryptionMaterialsV2("1234abcd-12ab-34cd-56ef-1234567890ab", KmsType.KmsContext, encryptionContext);
var configuration = new AmazonS3CryptoConfigurationV2(SecurityProfile.V2AndLegacy)
{
    StorageMode = CryptoStorageMode.ObjectMetadata
};
var encryptionClient = new AmazonS3EncryptionClientV2(configuration, encryptionMaterial);
```

### Exemplo: Algoritmo simétrico (AES-CBC para AES-GCM Key Wrap)
<a name="s3-encryption-migration-v1-v2-ex-aes"></a>

`StorageMode` pode ser `ObjectMetadata` ou `InstructionFile`.

**Pré-migração**

```
using System.Security.Cryptography;
using Amazon.S3.Encryption;

var symmetricAlgorithm = Aes.Create();
var encryptionMaterial = new EncryptionMaterials(symmetricAlgorithm);
var configuration = new AmazonS3CryptoConfiguration()
{
    StorageMode = CryptoStorageMode.ObjectMetadata
};
var encryptionClient = new AmazonS3EncryptionClient(configuration, encryptionMaterial);
```

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

```
using System.Security.Cryptography;
using Amazon.Extensions.S3.Encryption;
using Amazon.Extensions.S3.Encryption.Primitives;

var symmetricAlgorithm = Aes.Create();
var encryptionMaterial = new EncryptionMaterialsV2(symmetricAlgorithm, SymmetricAlgorithmType.AesGcm);
var configuration = new AmazonS3CryptoConfigurationV2(SecurityProfile.V2AndLegacy)
{
    StorageMode = CryptoStorageMode.ObjectMetadata
};
var encryptionClient = new AmazonS3EncryptionClientV2(configuration, encryptionMaterial);
```

**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.

### Exemplo: Algoritmo assimétrico (RSA para RSA-OAEP-SHA 1 quebra de chave)
<a name="s3-encryption-migration-v1-v2-ex-rsa"></a>

`StorageMode` pode ser `ObjectMetadata` ou `InstructionFile`.

**Pré-migração**

```
using System.Security.Cryptography;
using Amazon.S3.Encryption;

var asymmetricAlgorithm = RSA.Create();
var encryptionMaterial = new EncryptionMaterials(asymmetricAlgorithm);
var configuration = new AmazonS3CryptoConfiguration()
{
    StorageMode = CryptoStorageMode.ObjectMetadata
};
var encryptionClient = new AmazonS3EncryptionClient(configuration, encryptionMaterial);
```

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

```
using System.Security.Cryptography;
using Amazon.Extensions.S3.Encryption;
using Amazon.Extensions.S3.Encryption.Primitives;

var asymmetricAlgorithm = RSA.Create();
var encryptionMaterial = new EncryptionMaterialsV2(asymmetricAlgorithm, AsymmetricAlgorithmType.RsaOaepSha1);
var configuration = new AmazonS3CryptoConfigurationV2(SecurityProfile.V2AndLegacy)
{
    StorageMode = CryptoStorageMode.ObjectMetadata
};
var encryptionClient = new AmazonS3EncryptionClientV2(configuration, encryptionMaterial);
```

## Atualize os clientes V2 para que não leiam mais os formatos V1.
<a name="s3-encryption-migration-v1-v2-v2-cleanup"></a>

Eventualmente, todos os objetos terão sido criptografados ou recriptografados usando um cliente V2. *Depois que essa conversão for concluída*, você poderá desativar a compatibilidade com a V1 nos clientes V2 definindo a propriedade `SecurityProfile` como `SecurityProfile.V2`, conforme mostrado no trecho a seguir.

```
//var configuration = new AmazonS3CryptoConfigurationV2(SecurityProfile.V2AndLegacy);
var configuration = new AmazonS3CryptoConfigurationV2(SecurityProfile.V2);
```