Provedor mais recente - AWS SDK de criptografia de banco de dados

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

Provedor mais recente

nota

Nossa biblioteca de criptografia do lado do cliente foi renomeada como SDK de criptografia de banco de dados da AWS. O tópico a seguir fornece informações sobre as versões 1.x—2.x do DynamoDB Encryption Client para Java e versões 1.x—3x do DynamoDB Encryption Client para Python. Para obter mais informações, consulte SDK de criptografia de banco de dados da AWS para obter suporte à versão do DynamoDB.

O Provedor mais recente é um provedor de materiais de criptografia (CMP) que foi projetado para trabalhar com um armazenamento de provedores. Ele obtém os CMPs do armazenamento de provedor, bem como os materiais de criptografia que são retornados dos CMPs. Normalmente, ele usa cada CMP para atender a várias solicitações de materiais de criptografia. Mas você pode usar os recursos do armazenamento de provedores para gerenciar a frequência com a qual os materiais são reutilizados, determinar a frequência de rotação do CMP e até mesmo alterar o tipo de CMP usado sem alterar o provedor mais recente.

nota

O código associado ao símbolo MostRecentProvider do provedor mais recente pode armazenar materiais criptográficos na memória durante a vida útil do processo. Isso pode permitir que um chamador use chaves que não está mais autorizado a usar.

O símbolo MostRecentProvider está obsoleto nas versões mais antigas compatíveis do DynamoDB Encryption Client e foi removido da versão 2.0.0. Ele é substituído pelo símbolo CachingMostRecentProvider. Para obter mais detalhes, consulte Atualizações do provedor mais recente.

O provedor mais recente é uma boa opção para aplicativos que precisam minimizar as chamadas para o armazenamento de provedores, sua origem de criptografia e aplicativos que podem reutilizar alguns materiais de criptografia sem violar os requisitos de segurança. Por exemplo, ele permite que você proteja os materiais criptográficos sob um AWS KMS key no AWS Key Management Service (AWS KMS) sem chamar o AWS KMS toda vez que criptografar ou descriptografar um item.

O armazenamento de provedores escolhido determina o tipo de CMPs que o provedor mais recente usa e com que frequência obtém um novo CMP. Você pode usar qualquer armazenamento compatível de provedores com o provedor mais recente, incluindo os armazenamentos de provedores personalizados que você criar.

O DynamoDB Encryption Client inclui um MetaStore que cria e retorna Provedores empacotados de materiais (CMPs empacotados). O MetaStore salva várias versões dos CMPs empacotados que gera em uma tabela interna do DynamoDB e protege-os com criptografia do lado do cliente por uma instância interna do DynamoDB Encryption Client.

É possível configurar o MetaStore para usar qualquer tipo de CMP interno para proteger os materiais na tabela, incluindo um Direct KMS Provider que gera materiais de criptografia protegidos pela AWS KMS key, um CMP empacotado que usa chaves de empacotamento e de assinatura fornecidas por você ou um CMP personalizado compatível projetado por você.

Para ver um código de exemplo, consulte:

Como usar

Para criar um provedor mais recente, você precisa criar e configurar um armazenamento de provedores e, em seguida, criar um provedor mais recente que usa o armazenamento de provedores.

Os exemplos a seguir mostram como criar um Provedor mais recente que usa um MetaStore e protege as versões em sua tabela interna do DynamoDB com materiais de criptografia de um Direct KMS Provider. Estes exemplos usam o símbolo CachingMostRecentProvider.

Cada provedor mais recente tem um nome que identifica seus CMPs na tabela MetaStore, uma configuração de tempo de vida (TTL) e uma configuração de tamanho de cache que determina quantas entradas o cache pode conter. Esses exemplos definem o tamanho do cache para 1000 entradas e um TTL de 60 segundos.

Java
// Set the name for MetaStore's internal table final String keyTableName = 'metaStoreTable' // Set the Region and AWS KMS key final String region = 'us-west-2' final String keyArn = 'arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab' // Set the TTL and cache size final long ttlInMillis = 60000; final long cacheSize = 1000; // Name that identifies the MetaStore's CMPs in the provider store final String materialName = 'testMRP' // Create an internal DynamoDB client for the MetaStore final AmazonDynamoDB ddb = AmazonDynamoDBClientBuilder.standard().withRegion(region).build(); // Create an internal Direct KMS Provider for the MetaStore final AWSKMS kms = AWSKMSClientBuilder.standard().withRegion(region).build(); final DirectKmsMaterialProvider kmsProv = new DirectKmsMaterialProvider(kms, keyArn); // Create an item encryptor for the MetaStore, // including the Direct KMS Provider final DynamoDBEncryptor keyEncryptor = DynamoDBEncryptor.getInstance(kmsProv); // Create the MetaStore final MetaStore metaStore = new MetaStore(ddb, keyTableName, keyEncryptor); //Create the Most Recent Provider final CachingMostRecentProvider cmp = new CachingMostRecentProvider(metaStore, materialName, ttlInMillis, cacheSize);
Python
# Designate an AWS KMS key kms_key_id = 'arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab' # Set the name for MetaStore's internal table meta_table_name = 'metaStoreTable' # Name that identifies the MetaStore's CMPs in the provider store material_name = 'testMRP' # Create an internal DynamoDB table resource for the MetaStore meta_table = boto3.resource('dynamodb').Table(meta_table_name) # Create an internal Direct KMS Provider for the MetaStore kms_cmp = AwsKmsCryptographicMaterialsProvider(key_id=kms_key_id) # Create the MetaStore with the Direct KMS Provider meta_store = MetaStore( table=meta_table, materials_provider=kms_cmp ) # Create a Most Recent Provider using the MetaStore # Sets the TTL (in seconds) and cache size (# entries) most_recent_cmp = MostRecentProvider( provider_store=meta_store, material_name=material_name, version_ttl=60.0, cache_size=1000 )

Como funciona

O provedor mais recente obtém CMPs de um armazenamento de provedores. Em seguida, ele usa o CMP para gerar os materiais de criptografia que retorna ao criptografador de item.

Sobre o provedor mais recente

O Provedor mais recente obtém um provedor de materiais de criptografia (CMP) de um armazenamento de provedores. Em seguida, ele usa o CMP para gerar os materiais de criptografia que retorna. Cada provedor mais recente está associado a um armazenamento de provedores, mas um armazenamento de provedores pode fornecer CMPs a vários provedores por meio de diversos hosts.

O provedor mais recente pode trabalhar com qualquer CMP compatível de qualquer armazenamento de provedores. Ele solicita materiais de criptografia ou de descriptografia do CMP e retorna a saída ao criptografador do item. Não executa nenhuma operação de criptografia.

Para solicitar um CMP do armazenamento de provedores, o provedor mais recente fornece o nome de material e a versão de um CMP existente que deseja usar. Para materiais de criptografia, o provedor mais recente sempre solicita a versão mais recente. Para materiais de descriptografia, ele solicita a versão do CMP que foi usada para criar os materiais de criptografia, conforme exibido no diagrama a seguir.

Um Provedor mais recente

O provedor mais recente salva versões dos CMPs que o armazenamento de provedores retorna em um cache local menos usado recentemente (LRU) na memória. O cache permite que o provedor mais recente obtenha os CMPs necessários sem chamar o armazenamento de provedores para cada item. Você pode limpar o cache sob demanda.

O provedor mais recente usa um valor de tempo de vida útil configurável que você pode ajustar com base nas características do seu aplicativo.

Sobre o MetaStore

Você pode usar um provedor mais recente com qualquer armazenamento de provedores, incluindo um armazenamento de provedores personalizado compatível. O DynamoDB Encryption Client inclui um MetaStore, uma implementação segura que você pode configurar e personalizar.

Um MetaStore é um armazenamento de provedores que cria e retorna CMPs empacotados que são configurados com a chave de empacotamento, a chave de desempacotamento e a chave de assinatura exigidas pelos CMPs empacotados. Um MetaStore é uma opção confiável para um provedor mais recente, porque os CMPs empacotados sempre geram chaves de criptografia de item exclusivas para cada item. Somente a chave de empacotamento que protege a chave de criptografia do item e as chaves de assinatura é reutilizada.

O diagrama a seguir mostra os componentes do MetaStore e como ele interage com o provedor mais recente.

Um MetaStore

O MetaStore gera os CMPs empacotados e os armazena (em formato criptografado) em uma tabela interna do DynamoDB. A chave de partição é o nome do material do provedor mais recente; a chave de classificação, seu número de versão. Os materiais na tabela são protegidos por um DynamoDB Encryption Client interno, incluindo um criptografador de item e um provedor de materiais de criptografia (CMP) interno.

Você pode usar qualquer tipo de CMP interno no MetaStore, incluindo um Provedor direto do KMS, um CMP encapsulado com materiais de criptografia que você fornece ou um CMP compatível personalizado. Se o CMP interno em sua MetaStore for um Direct KMS Provider, suas chaves reutilizáveis de empacotamento e assinatura serão protegidas por uma AWS KMS key no AWS Key Management Service (AWS KMS). O MetaStore chama o AWS KMS toda vez que ele adiciona uma nova versão do CMP à sua tabela interna ou obtém uma versão do CMP a partir de sua tabela interna.

Definir um valor de vida útil

É possível definir um valor de vida útil (TTL) para cada provedor mais recente que criar. Em geral, use o valor TTL mais baixo que seja prático para a sua aplicação.

O uso do valor TTL é alterado no símbolo CachingMostRecentProvider do provedor mais recente.

nota

O símbolo MostRecentProvider do Provedor mais recente está obsoleto nas versões mais antigas compatíveis do DynamoDB Encryption Client e foi removido da versão 2.0.0. Ele é substituído pelo símbolo CachingMostRecentProvider. Recomendamos que você atualize seu código o mais rápido possível. Para obter mais detalhes, consulte Atualizações do provedor mais recente.

CachingMostRecentProvider

O CachingMostRecentProvider usa o valor TTL de duas maneiras diferentes.

  • O TTL determina com que frequência o provedor mais recente verifica o armazenamento do provedor em busca de uma nova versão do CMP. Se uma nova versão estiver disponível, o provedor mais recente substituirá o CMP e atualizará os materiais criptográficos. Caso contrário, ele continuará usando o CMP atual e os materiais criptográficos.

  • O TTL determina por quanto tempo os CMPs no cache podem ser usados. Antes de usar uma CMP em cache para criptografia, o provedor mais recente avalia seu tempo no cache. Se o tempo de cache do CMP exceder o TTL, o CMP será removido do cache e o provedor mais recente obterá um novo CMP da versão mais recente do repositório do provedor.

MostRecentProvider

No MostRecentProvider, o TTL determina com que frequência o provedor mais recente verifica o armazenamento do provedor em busca de uma nova versão do CMP. Se uma nova versão estiver disponível, o provedor mais recente substituirá o CMP e atualizará os materiais criptográficos. Caso contrário, ele continuará usando o CMP atual e os materiais criptográficos.

O TTL não determina com que frequência uma nova versão do CMP é criada. Crie novas versões do CMP alternando os materiais criptográficos.

Um valor ideal de TTL varia de acordo com o aplicativo e suas metas de latência e disponibilidade. Um TTL mais baixo melhora seu perfil de segurança ao reduzir o tempo em que os materiais criptográficos são armazenados na memória. Além disso, um TTL mais baixo atualiza as informações críticas com mais frequência. Por exemplo, se seu CMP interno for um Direct KMS Provider, ele verificará com mais frequência se o chamador ainda está autorizado a usar um AWS KMS key.

No entanto, se o TTL for muito breve, as chamadas frequentes para o armazenamento do provedor podem aumentar seus custos e fazer com que o armazenamento do provedor reduza as solicitações do seu aplicativo e de outros aplicativos que compartilham sua conta de serviço. Também é possível se beneficiar da coordenação do TTL com a taxa na qual você alterna os materiais criptográficos.

Durante o teste, varie o tamanho do TTL e do cache em diferentes cargas de trabalho até encontrar uma configuração que funcione para seu aplicativo e seus padrões de segurança e desempenho.

Alternar os materiais de criptografia

Quando um provedor mais recente precisa de materiais de criptografia, ele sempre usa a versão mais recente de seu CMP que conhece. A frequência com que ele verifica uma versão mais recente é determinada pelo valor de vida útil (TTL) que você define ao configurar o provedor mais recente.

Quando o TTL expira, o provedor mais recente verifica o armazenamento do provedor em busca de uma nova versão do CMP. Se houver um disponível, o provedor mais recente o obterá e substituirá o CMP em seu cache. Ele usa esse CMP e seus materiais criptográficos até descobrir que o armazenamento do provedor tem uma versão mais recente.

Para solicitar que o armazenamento de provedores crie uma nova versão de um CMP para um provedor mais recente, chame a operação Criar Novo Provedor do armazenamento de provedores com o nome do material do provedor mais recente. O armazenamento de provedores cria um novo CMP e salva uma cópia criptografada em seu armazenamento interno com um número da versão mais recente. (Ele também retorna um CMP, mas você pode descartá-lo.) Como resultado, na próxima vez que o provedor mais recente consultar o armazenamento de provedores para obter o número da versão mais recente dos CMPs, ele obterá o número da nova versão mais recente e o utilizará em solicitações subsequentes para o armazenamento para ver se uma nova versão do CMP foi criada..

Você pode programar as chamadas da operação Criar Novo Provedor com base no tempo, no número de itens ou de atributos processados ou em qualquer outra métrica que seja aceitável para seu aplicativo.

Obter materiais de criptografia

O provedor mais recente usa o seguinte processo, mostrado neste diagrama, para obter os materiais de criptografia retornados ao criptografador de item. A saída depende do tipo de CMP que o armazenamento de provedores retorna. O provedor mais recente pode usar qualquer armazenamento de provedores compatível, incluindo o MetaStore que está incluído no DynamoDB Encryption Client.

A entrada, o processamento e a saída do Provedor mais recente no DynamoDB Encryption Client.

Ao criar um provedor mais recente usando o símbolo CachingMostRecentProvider, você especifica um repositório de provedores, um nome para o provedor mais recente e um valor de vida útil (TTL). Também é possível especificar opcionalmente um tamanho de cache, que determina o número máximo de materiais criptográficos que podem existir no cache.

Quando o criptografador de item solicita ao provedor mais recente os materiais de criptografia, esse provedor começa pesquisando em seu cache a versão mais recente do CMP.

  • Se ele encontrar a versão mais recente do CMP no cache e o CMP não tiver excedido o valor TTL, o provedor mais recente usará o CMP para gerar materiais de criptografia. Em seguida, ele retorna os materiais de criptografia ao criptografador de item. Essa operação não requer uma chamada para o armazenamento de provedores.

  • Se a versão mais recente do CMP não estiver no cache, ou se estiver no cache mas tiver excedido o valor TTL, o provedor mais recente solicitará um CMP do armazenamento de provedores. A solicitação inclui o nome do material do provedor mais recente e o número da versão mais recente que ele conhece.

    1. O armazenamento de provedores retorna um CMP de seu armazenamento persistente. Se o armazenamento de provedores for um MetaStore, ele receberá um CMP empacotado criptografado de sua tabela interna do DynamoDB usando o nome do material do provedor mais recente como a chave de partição e o número da versão como a chave de classificação. O MetaStore usa o criptografador de item interno e o CMP interno para decifrar o CMP encapsulado. Em seguida, ele retorna o CMP com texto simples ao provedor mais recente. Se o CMP interno for um Provedor direto do KMS, esta etapa incluirá uma chamada ao AWS Key Management Service (AWS KMS).

    2. O CMP adiciona o campo amzn-ddb-meta-id à descrição real do material. O valor é o nome do material e a versão do CMP em sua tabela interna. O armazenamento de provedores retorna o CMP ao provedor mais recente.

    3. O provedor mais recente armazena o CMP na memória.

    4. O provedor mais recente usa o CMP para gerar materiais de criptografia. Em seguida, ele retorna os materiais de criptografia ao criptografador de item.

Obter materiais de descriptografia

Quando o criptografador do item solicita ao provedor mais recente os materiais de descriptografia, esse provedor usa o seguinte processo para obtê-los e retorná-los.

  1. O provedor mais recente solicita ao armazenamento de provedores o número da versão dos materiais de criptografia que foram usados para criptografar o item. Ele passa a descrição real do material a partir do atributo de descrição do material do item.

  2. O armazenamento de provedores obtém o número da versão do CMP criptografado a partir do campo amzn-ddb-meta-id na descrição real do material e o retorna ao provedor mais recente.

  3. O provedor mais recente pesquisa seu cache em busca da versão do CMP que foi usada para criptografar e assinar o item.

  • Se ele encontrar a versão correspondente do CMP que está no cache e o CMP não tiver excedido o valor de vida útil (TTL), o provedor mais recente usará o CMP para gerar materiais de descriptografia. Em seguida, ele retorna os materiais de descriptografia ao criptografador de item. Essa operação não requer uma chamada para o armazenamento de provedores ou qualquer outro CMP.

  • Se a versão do CMP correspondente não estiver no cache, ou se o AWS KMS key estiver no cache mas tiver excedido o valor TTL, o provedor mais recente solicitará um CMP do armazenamento de provedores. Ele envia o nome do material e o número da versão do CMP criptografado na solicitação.

    1. O armazenamento de provedores pesquisa seu armazenamento persistente em busca do CMP usando o nome do provedor mais recente como a chave de partição e o número da versão como a chave de classificação.

      • Se o nome e o número da versão não estiverem no armazenamento persistente, o armazenamento de provedores gera uma exceção. Se o armazenamento de provedores foi usado para gerar o CMP, o CMP deve ser armazenado no armazenamento persistente, a menos que tenha sido intencionalmente excluído.

      • Se o CMP com o nome e o número de versão correspondentes estiverem no armazenamento persistente do armazenamento de provedores, este retornará o CMP especificado ao provedor mais recente.

        Se o armazenamento de provedores for um MetaStore, ele obtém o CMP criptografado da tabela do DynamoDB. Em seguida, ele usa materiais de criptografia do CMP interno para descriptografar o CMP criptografado antes de retornar o CMP ao provedor mais recente. Se o CMP interno for um Provedor direto do KMS, esta etapa incluirá uma chamada ao AWS Key Management Service (AWS KMS).

    2. O provedor mais recente armazena o CMP na memória.

    3. O provedor mais recente usa o CMP para gerar materiais de descriptografia. Em seguida, ele retorna os materiais de descriptografia ao criptografador de item.

Atualizações do provedor mais recente

O símbolo do provedor mais recente é alterado de MostRecentProvider para CachingMostRecentProvider.

nota

O símbolo MostRecentProvider, que representa o provedor mais recente, foi descontinuado na versão 1.15 do DynamoDB Encryption Client for Java e na versão 1.3 do DynamoDB Encryption Client for Python e removido das versões 2.0.0 do DynamoDB Encryption Client nas duas implementações de linguagem. Use a CachingMostRecentProvider em vez disso.

O CachingMostRecentProvider implementa as seguintes mudanças:

  • O CachingMostRecentProvider remove periodicamente materiais criptográficos da memória quando seu tempo na memória excede o valor de tempo de vida útil (TTL) configurado.

    O MostRecentProvider pode armazenar materiais criptográficos na memória durante toda a vida útil do processo. Como resultado, o provedor mais recente pode não estar ciente das alterações na autorização. Ele pode usar chaves de criptografia depois que as permissões do chamador para usá-las forem revogadas.

    Se você não conseguir atualizar para essa nova versão, poderá obter um efeito semelhante chamando periodicamente o método clear() no cache. Esse método limpa manualmente o conteúdo do cache e exige que o provedor mais recente solicite um novo CMP e novos materiais criptográficos.

  • O CachingMostRecentProvider também inclui uma configuração de tamanho de cache que oferece mais controle sobre o cache.

Para atualizar para o CachingMostRecentProvider, você precisa alterar o nome do símbolo em seu código. Em todos os outros aspectos, o CachingMostRecentProvider é totalmente compatível com versões anteriores do MostRecentProvider. Você não precisa criptografar novamente nenhum item da tabela.

No entanto, o CachingMostRecentProvider gera mais chamadas para a infraestrutura principal subjacente. Ele chama o armazenamento do provedor pelo menos uma vez em cada intervalo de tempo de vida (TTL). Aplicativos com vários CMPs ativos (devido à rotação frequente) ou aplicativos com grandes frotas provavelmente serão sensíveis a essa mudança.

Antes de lançar seu código atualizado, teste-o minuciosamente para garantir que as chamadas mais frequentes não prejudiquem seu aplicativo nem causem controle de utilização por serviços dos quais seu provedor depende, como AWS Key Management Service (AWS KMS) ou Amazon DynamoDB. Para mitigar quaisquer problemas de desempenho, ajuste o tamanho do cache e o tempo de vida útil do CachingMostRecentProvider com base nas características de desempenho observadas. Para obter orientações, consulte Definir um valor de vida útil.