Migração do cliente de criptografia Amazon S3 (V1 para V2) - AWS SDK para C++

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)

nota

Se você estiver usando a V2 do cliente de criptografia Amazon S3 e quiser migrar para a V3, consulte. Migração do cliente de criptografia Amazon S3 (V2 para V3)

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

Essa migração acontece em duas fases:

1. Atualize os clientes existentes para ler novos formatos. Primeiramente, implante a versão atualizada do AWS SDK para C++ na aplicação. Isso permite que os clientes de criptografia existentes da V1 descriptografem objetos escritos 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

Você deve primeiro atualizar seus clientes existentes para a versão mais recente do SDK. Depois de concluir essa etapa, os clientes V1 do seu aplicativo poderão descriptografar objetos criptografados por clientes de criptografia V2 sem atualizar a base de código do seu aplicativo.

Crie e instale a versão mais recente do AWS SDK para C++

Aplicações que consomem o SDK do código-fonte

Se você criar e instalar o AWS SDK para C++ do código-fonte, baixe ou clone o código-fonte do SDK a partir de aws/aws-sdk-cppagora. GitHub Depois, repita as etapas normais de compilação e instalação.

Se você estiver atualizando AWS SDK para C++ de uma versão anterior à 1.8.x, consulte este CHANGELOG para ver as alterações significativas introduzidas em cada versão principal. Para obter mais informações sobre como criar e instalar o AWS SDK para C++, consulteAcessar o AWS SDK para C++ do código-fonte.

Aplicações que consomem o SDK do Vcpkg

Se sua aplicação usa o Vcpkg para monitorar as atualizações do SDK, basta usar o método de atualização do Vcpkg existente para atualizar o SDK para a versão mais recente. Lembre-se de que há um atraso entre o lançamento da versão e a disponibilização dela por meio de um gerenciador de pacotes. A versão mais recente está sempre disponível por meio da instalação do código-fonte.

Você pode executar o seguinte comando para atualizar o pacoteaws-sdk-cpp:

vcpkg upgrade aws-sdk-cpp

E verifique a versão do pacote aws-sdk-cpp:

vcpkg list aws-sdk-cpp

A versão deve ser no mínimo 1.8.24.

Para obter mais informações sobre como usar o Vcpkg com o AWS SDK para C++, consulte. Acessar o AWS SDK para C++ de um gerenciador de pacotes

Compilar, instalar e implantar suas aplicações

Se seu aplicativo estiver vinculado estaticamente ao AWS SDK para C++, alterações de código não serão necessárias em seu aplicativo, mas você deverá criar seu aplicativo novamente para consumir as alterações mais recentes do SDK. Essa etapa não é necessária para a vinculação dinâmica.

Depois de atualizar a versão de dependência do seu aplicativo e verificar a funcionalidade do aplicativo, continue implantando seu aplicativo em sua frota. Depois de concluir a implantação da aplicação, você poderá passar para a próxima fase de migração para usar os clientes de criptografia e descriptografia da V2.

Migrar clientes de criptografia e descriptografia para a V2

As etapas a seguir mostram como migrar com êxito seu código da V1 para a V2 do cliente de criptografia do Amazon S3. Como as alterações de código são necessárias, você precisará reconstruir seu aplicativo, independentemente de ele estar vinculado estática ou dinamicamente ao. AWS SDK para C++

Usar novos materiais de criptografia

Com os clientes de criptografia V2 do Amazon S3 e a configuração de criptografia V2, os seguintes materiais foram descontinuados:

  • SimpleEncryptionMaterials

  • KMSEncryptionMaterials

Eles foram substituídos pelos seguintes materiais de criptografia segura:

  • SimpleEncryptionMaterialsWithGCMAAD

  • KMSWithContextEncryptionMaterials

As seguintes alterações de código são necessárias para criar um cliente de criptografia V2 do S3:

  • Se você estiver usando KMSEncryptionMaterials ao criar um cliente de criptografia do S3:
    • Ao criar um cliente de criptografia V2 do S3, substitua KMSEncryptionMaterials por KMSWithContextEncryptionMaterials e especifique-o na configuração da criptografia V2.

    • Ao colocar um objeto com clientes de criptografia V2 do Amazon S3, você deve fornecer explicitamente um mapa de contexto de string como o contexto do KMS para criptografar a CEK. Pode ser um mapa vazio.

  • Se você estiver usando SimpleEncryptionMaterials ao criar um cliente de criptografia do S3:
    • Ao criar um cliente de criptografia V2 do Amazon S3, substitua SimpleEncryptionMaterials por SimpleEncryptionMaterialsWithGCMAAD e especifique-o na configuração da criptografia V2.

    • Ao colocar um objeto com clientes de criptografia V2 do Amazon S3, você deve fornecer explicitamente um mapa de contexto de string vazio. Caso contrário, o SDK exibirá um erro.

Exemplo: usando o algoritmo KMS/KMSWithContext Key Wrap

Pré-migração (empacotamento de chaves do KMS)

auto materials = Aws::MakeShared<KMSEncryptionMaterials>("s3Encryption", CUSTOMER_MASTER_KEY_ID); CryptoConfiguration cryptoConfig; S3EncryptionClient encryptionClient(materials, cryptoConfig); // Code snippet here to setup the putObjectRequest object. encryptionClient.PutObject(putObjectRequest);

Pós-migração (quebra de chave de KMSWith contexto)

auto materials = Aws::MakeShared<KMSWithContextEncryptionMaterials>("s3EncryptionV2", CUSTOMER_MASTER_KEY_ID); CryptoConfigurationV2 cryptoConfig(materials); S3EncryptionClientV2 encryptionClient(cryptoConfig); // Code snippet here to setup the putObjectRequest object. Aws::Map<Aws::String, Aws::String> kmsContextMap; kmsContextMap.emplace("client", "aws-sdk-cpp"); kmsContextMap.emplace("version", "1.8.0"); encryptionClient.PutObject(putObjectRequest, kmsContextMap /* could be empty as well */);

Exemplo: usar o algoritmo de empacotamento de chaves AES/AES-GCM

Pré-migração (empacotamento de chaves AES)

auto materials = Aws::MakeShared<SimpleEncryptionMaterials>("s3Encryption", HashingUtils::Base64Decode(AES_MASTER_KEY_BASE64)); CryptoConfiguration cryptoConfig; S3EncryptionClient encryptionClient(materials, cryptoConfig); // Code snippet here to setup the putObjectRequest object. encryptionClient.PutObject(putObjectRequest);

Pós-migração (empacotamento de chaves AES-GCM)

auto materials = Aws::MakeShared<SimpleEncryptionMaterialsWithGCMAAD>("s3EncryptionV2", HashingUtils::Base64Decode(AES_MASTER_KEY_BASE64)); CryptoConfigurationV2 cryptoConfig(materials); S3EncryptionClientV2 encryptionClient(cryptoConfig); // Code snippet here to setup the putObjectRequest object. encryptionClient.PutObject(putObjectRequest, {} /* must be an empty map */);

Exemplos adicionais

Os exemplos a seguir demonstram como abordar casos de uso específicos relacionados à migração da V1 para a V2.

Descriptografar objetos criptografados por clientes de criptografia legados do Amazon S3

Por padrão, você não pode usar o cliente de criptografia Amazon S3 V2 para descriptografar objetos que foram criptografados com algoritmos de quebra de chave obsoletos ou esquemas criptográficos de conteúdo obsoletos.

Os seguintes algoritmos de empacotamento de chaves estão obsoletos:

  • KMS

  • AES_KEY_WRAP

E os seguintes esquemas de criptografia de conteúdo estão obsoletos:

  • CBC

  • CTR

Se você estiver usando clientes de criptografia antigos do Amazon S3 no AWS SDK para C++ para criptografar os objetos, provavelmente está usando os métodos obsoletos se:

  • Você usou SimpleEncryptionMaterials ou KMSEncryptionMaterials.

  • Você usou ENCRYPTION_ONLY como Crypto Mode em sua configuração de criptografia.

Para usar o cliente de criptografia V2 do Amazon S3 para descriptografar objetos que foram criptografados por algoritmos de empacotamento de chaves ou esquemas de criptografia de conteúdo obsoletos, é necessário substituir o valor padrão de SecurityProfile na configuração de criptografia V2 de V2 por V2_AND_LEGACY.

Exemplo

Pré-migração

auto materials = Aws::MakeShared<KMSEncryptionMaterials>("s3Encryption", CUSTOMER_MASTER_KEY_ID); CryptoConfiguration cryptoConfig; S3EncryptionClient encryptionClient(materials, cryptoConfig); // Code snippet here to setup the getObjectRequest object. encryptionClient.GetObject(getObjectRequest);

Pós-migração

auto materials = Aws::MakeShared<KMSWithContextEncryptionMaterials>("s3EncryptionV2", CUSTOMER_MASTER_KEY_ID); CryptoConfigurationV2 cryptoConfig(materials); cryptoConfig.SetSecurityProfile(SecurityProfile::V2_AND_LEGACY); S3EncryptionClientV2 encryptionClient(cryptoConfig); // Code snippet here to setup the getObjectRequest object. encryptionClient.GetObject(getObjectRequest);

Descriptografar objetos com alcance

Com clientes de criptografia legados do Amazon S3, você pode especificar um intervalo de bytes a serem recebidos ao descriptografar um objeto do S3. No cliente de criptografia V2 do Amazon S3, esse recurso é DISABLED por padrão. Portanto, você precisa substituir o valor padrão de DISABLED de ALL por RangeGetMode na configuração da criptografia V2.

Exemplo

Pré-migração

auto materials = Aws::MakeShared<KMSEncryptionMaterials>("s3Encryption", CUSTOMER_MASTER_KEY_ID); CryptoConfiguration cryptoConfig; S3EncryptionClient encryptionClient(materials, cryptoConfig); // Code snippet here to setup the getObjectRequest object. getObjectRequest.WithRange("bytes=38-75"); encryptionClient.GetObject(getObjectRequest);

Pós-migração

auto materials = Aws::MakeShared<KMSWithContextEncryptionMaterials>("s3EncryptionV2", CUSTOMER_MASTER_KEY_ID); CryptoConfigurationV2 cryptoConfig(materials); cryptoConfig.SetUnAuthenticatedRangeGet(RangeGetMode::ALL); S3EncryptionClientV2 encryptionClient(cryptoConfig); // Code snippet here to setup the getObjectRequest object. getObjectRequest.WithRange("bytes=38-75"); encryptionClient.GetObject(getObjectRequest);

Descriptografar objetos com qualquer CMK

Ao descriptografar objetos que foram criptografados com KMSWithContextEncryptionMaterials, os clientes de criptografia V2 do Amazon S3 podem permitir que o KMS encontre a CMK adequada fornecendo uma chave mestra vazia. Esse recurso está DISABLED por padrão. Você precisa configurá-lo explicitamente chamando SetKMSDecryptWithAnyCMK(true) para seus materiais de criptografia do KMS.

Exemplo

Pré-migração

auto materials = Aws::MakeShared<KMSEncryptionMaterials>("s3Encryption", ""/* provide an empty KMS Master Key*/); CryptoConfiguration cryptoConfig; S3EncryptionClient encryptionClient(materials, cryptoConfig); // Code snippet here to setup the getObjectRequest object. encryptionClient.GetObject(getObjectRequest);

Pós-migração

auto materials = Aws::MakeShared<KMSWithContextEncryptionMaterials>("s3EncryptionV2", ""/* provide an empty KMS Master Key*/); materials.SetKMSDecryptWithAnyCMK(true); CryptoConfigurationV2 cryptoConfig(materials); S3EncryptionClientV2 encryptionClient(cryptoConfig); // Code snippet here to setup the getObjectRequest object. encryptionClient.GetObject(getObjectRequest);

Para acessar o código completo de todos esses cenários de migração, consulte o exemplo de criptografia do Amazon S3 no Github.