Migração de cliente de criptografia Amazon S3 - AWS SDK for .NET

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 de cliente de criptografia Amazon S3

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

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.

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

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

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. 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. Se o seu projeto depende diretamente do AWSSDK.S3 ou. AWSSDK KeyManagementServicepacotes, você deve atualizar essas dependências ou removê-las para que suas versões atualizadas sejam inseridas com esse novo pacote.

  2. 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;
  3. Reconstrua e reimplante o aplicativo.

O cliente de transição V1 é totalmente API compatível com o 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.

O cliente V2 faz parte do pacote NuGet 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 usarKMS:

      1. Forneça um ID de KMS chave.

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

      3. Forneça um contexto de criptografia 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.

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

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

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

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

Exemplo: KMS para KMS +Context

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)

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 AES -GCM, leia o objeto inteiro até o final 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 (RSApara RSA-OAEP-SHA 1 envoltório de tecla)

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.

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);