DEV Community

Rodrigo Fernandes
Rodrigo Fernandes

Posted on

AWS KMS

Anotações sobre o AWS KMS para ajudar na preparação das certificações AWS.

Até o momento as anotações são para as certificações abaixo:

Image description


Definição do fornecedor

O AWS Key Management Service (KMS) oferece a você controle centralizado das Keys criptográficas usadas para proteger seus dados.


Anotações gerais

  • Usa Envelope Encryption
  • Com *Admin *é possível acessar arquivos criptografados
  • É Regional
  • Pode trazer sua própria Key
  • Pode habilitar o uso da Key em outras contas durante a criação
  • 265-bit
  • Free Tier 20.000 solicitações
  • FIPS 140–2
  • Suporte Keys assimétricas e assinatura digital
  • Sempre DESABILITAR a key
  • Pode ser acessado através de VPC EndPoint
  • Sign API - Para criar assinatura digital
  • KMS Key --> Key Meta-Data + Key Material
  • Por padrão o Key Material é AWS KMS
  • CMK (Customer Master Key) - SSE-KMS
  • GenerateDataKeyWithoutPlaintext- API deve retornar apenas a cópia criptografada da chave de dados que será usada posteriormente para criptografia

Principais diferenças SSE Keys

SSE-KMS

  • Gerenciada pela AWS
  • Rotação automática de chaves
  • Fornecem uma trilha de auditoria que mostre quando foi usada e por quem SSE-S3
  • Rotação automática de chaves SSE-C
  • Gerenciada pelo cliente
  • Rotação automática de chaves
  • Se você perder a chave de criptografia, perderá todos os objetos criptografados por essa chave.

Envelope Encryption(Criptografia de Envelope)

Documentação oficial

  • É um processo em que você criptografa dados de texto sem formatação com uma chave de dados e, em seguida, criptografa a chave de dados com uma chave mestra de texto sem formatação de nível superior.
  • aws kms generate-data-key - Comando para criptografar
  • aws ksm encrypt - Não funciona na criptografia de envelope
  • O KMS (CMK (Customer Master Key)) suporta o envio de dados com menos de 4KB para serem criptografados, a criptografia de envelope pode oferecer benefícios significativos de desempenho
  • Envelope encryption é um método otimizado para criptografar dados que usa duas Keys diferentes (Master key and Data keys)

Quando você criptografa seus dados, os dados são protegidos, mas é necessário proteger a Keys de criptografia. Uma estratégia é para criptografá-la. Envelope encryption é a prática de criptografar dados de texto simples com uma Keys de dados e criptografar a Keys de dados em outra Keys.

A criptografia de envelope oferece vários benefícios:
Proteção de Keys de dados

Quando você criptografa uma Keys de dados, não precisa se preocupar em armazenar a Keys de dados criptografada porque a Keys de dados é inerentemente protegida pela criptografia. A Keys de dados criptografada pode ser armazenada com segurança junto com os dados criptografados.

Criptografar os mesmos dados com várias Keys

As operações de criptografia podem ser demoradas, especialmente quando os dados que estão sendo criptografados são objetos grandes. Em vez de recriptografar dados brutos várias vezes com diferentes Keys, você pode recriptografar somente as Keys de dados que protegem os dados brutos.

Combinação de pontos fortes de vários algoritmos

Em geral, os algoritmos de Keys simétrica são mais rápidos e geram textos cifrados menores do que os algoritmos de Keys pública. No entanto, os algoritmos de Keys pública fornecem separação inerente de funções e gerenciamento de Keys mais fácil. A criptografia de envelope permite associar os pontos fortes de cada estratégia.

Você pode até mesmo criptografar a Keys de criptografia dos dados em outra Keys de criptografia e criptografar essa Keys de criptografia em outra Keys de criptografia. Mas em algum momento deverá manter uma Keys em texto simples para que possa descriptografar as Keys e seus dados. Essa Keys de criptografia em texto simples de nível superior é chamada de chKeys ve raiz.

Image description

O AWS KMS ajuda você a proteger suas Keys de criptografia armazenando-as e gerenciando-as com segurança. As Keys-raiz armazenadas no AWS KMS, conhecidas como AWS KMS keys, nunca saem descriptografadas dos módulos de segurança de hardware validados para FIPS do AWS KMS. Para usar uma Keys do KMS, é necessário chamar o AWS KMS.

Image description

Referências


Key Policies

Documentação oficial

_Uma Key policies é uma policy de recursos para uma AWS KMS Key. _

  • As Key policies são a principal forma de controlar o acesso às KMS Key.
  • Os elementos Effect e Principal não se referem à conta de usuário root da AWS
  • Cada KMS Key deve ter exatamente uma Key policies.
  • As instruções na Key policies determinam quem tem permissão para usar a KMS Key e como eles podem usá-la.
  • Você também pode usar IAM Policies e Grants para controlar o acesso à KMS Keys, mas cada KMS Key deve ter uma Key policies.
  • Nenhum AWS Principal, incluindo o usuário root da conta ou o criador da key, tem permissões para uma KMS Key, a menos que seja explicitamente permitido e nunca negado em uma Key policies, IAM Police ou Grant.

Data Key Caching

Documentação oficial

Data key caching de dados armazena data keys e o material criptográfico relacionado em um cache. Ao criptografar ou descriptografar dados, o AWS Encryption SDK procura uma chave de dados correspondente no cache. Se encontrar uma correspondência, ele usará a cached data key em vez de gerar uma nova.

  • Melhorar o desempenho
  • Reduzir os custos
  • Pode reutilizar chaves de dados.
  • Ele gera várias chaves de dados.
  • Suas operações criptográficas são inaceitavelmente lentas, caras, limitadas ou consomem muitos recursos.

KMS em Sistemas distribuídos

Documentação oficial

  • Usa API GenarateDataKeyWitouyPlaintext para gerar as key
  • API Decrypt é usada para descriptografar o dado

Referências


Controle de acesso baseado em recursos

Documentação oficial

  • Key policies
  • Grants

  • O AWS KMS exige que você anexe políticas baseadas em recursos às Customer Master Keys (CMKs), chamadas de key policies


Key Administrator

Documentação oficial


Key Usage

Documentação oficial


Symmetric vs Asymmetric

Documentação oficial

Symmetric
Documentação oficial

  • Single 256 bit encryption
  • Usado na CMK

Asymmetric
Documentação oficial

  • Public and Private key
  • Utilizado em várias operações como: Sing-In, Encrypt e Decrypt
  • Key_Spec - RSA_2048, RSA_3072, RSA_4096

Exemplo de Sing-In

  • aws kms sign --key-id "key-id" --message fileb://demo.txt --signing-algorithm RSASSA_PKCS1_V1_5_SHA_256 --query Signature --output text | base64 -d > sign.txt

  • aws kms verify --key-id "key-id" --message fileb://demo.txt --signature fileb://sign.txt --signing-algorithm RSASSA_PKCS1_V1_5_SHA_256

Referências


Customer Managed vs AWS Managed

AWS Managed CMK
Documentação oficial

AWS Managed Keys são chaves do KMS na sua conta que são criadas, gerenciadas e utilizadas em seu nome por um produto da AWS integrado ao AWS KMS para proteger seus recursos nesse serviço.

  • Used AWS Services
  • Criado, gerenciado por um serviço AWS
  • Usuário não pode gerenciar, deletar
  • Required. Every year (approximately 365 days)
  • Não pode ser deletada

Customer Managed CMK
Documentação oficial

_As chaves do KMS que você cria são customer managed keys. Customer managed keys são chaves do KMS em sua Conta da AWS que você cria, detém e gerencia. _

  • Optional. Every year (approximately 365 days)
  • Você tem controle total sobre essas chaves do KMS.
  • Uma Customer Master Key (CMK) é uma representação lógica de uma chave mestra.
  • É configurado durante a criação da Key, o Key Admin e o Key User
  • O CMK inclui metadados, como Alias, ID da chave, Data de criação, Descrição e key state.
  • O CMK também contém o Key Material usado para criptografar e descriptografar dados.
  • Eles são criados e gerenciados pelo cliente AWS.
  • O acesso a eles pode ser controlado usando o serviço AWS IAM.
  • Enable and Disable
  • NUNCA PODE SER EXPORTADA

AWS Owned CMK

  • São uma coleção de CMKs que um serviço da AWS possui e gerencia para uso em várias contas da AWS.
  • Não estão em sua conta da AWS.
  • Você não pode visualizar ou gerenciar esses CMKs.
  • Utilizado em múltiplas contas

CloudHMS Keys

  • Keys generated from CloudHSM hardware device

Image description

Image description


Schedule Key Deletion

Documentação oficial

  • Mínimo de 7 dias e Máximo de 30 (Padrão) para deletar a key
  • Vem habilitado por padrão
  • Allow key administrators to delete this key.
  • Você nunca deleta a key diretamente, sempre é agendado.
  • Quando a key está no processo de agendamento para deletar não é possível criptografar ou descriptografar 
  • *Apenas é possível agendar a exclusão de uma chave gerenciada pelo cliente. *
  • Não é possível excluir Chaves gerenciadas pela AWS ou Chaves pertencentes à AWS.
  • O AWS KMS nunca exclui suas chaves do KMS, a menos que você as programe explicitamente para exclusão e o período de espera obrigatório expire.
  • Caso não tenha certeza, desabilite a chave do KMS em vez de excluí-la. Você poderá reabilitar a chave do KMS desabilitada se precisar usá-la mais tarde, mas não poderá recuperar aquela que foi excluída.

Referências
Habilitar e desabilitar Keys


Conectar-se ao AWS KMS por meio de um endpoint da VPC

Documentação oficial


Criar um alarme que detecte o uso de uma chave do KMS com exclusão pendente

Documentação oficial


Excluir AWS KMS keys

Documentação oficial


Serviços integrados

Documentação oficial

  • EBS, RDS, EFS, S3, Redshift

Determinar a utilização anterior de uma chave do KMS

Documentação oficial

  • Examinar as permissões da chave do KMS para determinar o escopo da utilização em potencial
  • Examinar os logs do AWS CloudTrail para determinar a utilização real

Como o Amazon Redshift usa o AWS KMS

Documentação oficial

Sequência de criptografia

  1. The Master Key encrypt the Cluster Key
  2. The Cluster Key encrypts the database key
  3. The database key encrypts the data encryption keys

Cross Account Access

Documentação oficial


Policy Conditions - ViaService

Documentação oficial
kms: viaservice

A Condition kms:ViaService limita o uso de uma AWS KMS Key (chave do KMS) para solicitações provenientes de serviços da AWS especificados.

  • Allow ou Deny por serviço
  • A condição deve filtrar o sempre o serviço, por exemplo EC2 ou RDS

Exemplo de Allow

{
  "**Effect": "Allow"**,
  "Principal": {
    "AWS": "arn:aws:iam::111122223333:user/ExampleUser"
  },
  "Action": [
    "kms:Encrypt",
    "kms:Decrypt",
    "kms:ReEncrypt*",
    "kms:GenerateDataKey*",
    "kms:CreateGrant",
    "kms:ListGrants",
    "kms:DescribeKey"
  ],
  "Resource": "*",
**"Condition": {
    "StringEquals": {
      "kms:ViaService": [
        "ec2.us-west-2.amazonaws.com",
        "rds.us-west-2.amazonaws.com"**
      ]
    }
  }
}
Enter fullscreen mode Exit fullscreen mode

Exemplo de Deny

{
  **"Effect": "Deny"**,
  "Principal": {
    "AWS": "arn:aws:iam::111122223333:user/ExampleUser"
  },
  "Action": [
    "kms:Encrypt"    
  ],
  "Resource": "*",
*  **"Condition": {
    "StringEquals": {
      "kms:ViaService": [
          "lambda.us-west-2.amazonaws.com"**
      ]
    }
  }
}
Enter fullscreen mode Exit fullscreen mode


AWS CLI para KMS

Encrypt
Documentação oficial

  • aws kms encrypt --key-id "key-id" --plaintext fileb://plaintext.txt

Decrypt
Documentação oficial

  • aws kms decrypt --ciphertext-blob "CiphertextBlob"
  • key-id só requerido quando é "decriptado" com CMK assimétrica

VPC Endpoints

Documentação oficial

  • A comunicação PRIVADA com outros recursos da AWS ocorrem dentro da rede da AWS
  • Através da subnet privada

Best Pratices

Documentação oficial

  • Rotação com frequência (a cada 3 anos)
  • AWS Managed, Customer Managed with imported key material
  • AWS Managed Keys não podem ser deletadas

Multi-Regions

Documentação oficial

O AWS KMS oferece suporte a chaves de várias regiões, que são AWS KMS keys em diferentes Regiões da AWS que podem ser usadas de maneira alternada, como se você tivesse a mesma chave em várias Regiões.

  • Pode habilitar e desabilitar Key Rotation sempre na Primary Key
  • Pode agendar a deleção da Primary Key, mas ela só será deletada depois que as Replica Key forem deletadas
  • Keys multi-regiões são compatíveis com Client-Side Encryption no AWS Encryption SDK, no AWS S3 Encryption Client e no AWS DynamoDB Encryption Client
  • Para snapshosts na mesma região pode utilizar a mesma key ou uma diferente
  • Para outras regiões não pode utilizar a mesma
  • O AWS KMS oferece suporte a Keys multirregionais, que são Keys do AWS KMS em diferentes regiões da AWS que podem ser usadas de forma intercambiável, como se você tivesse a mesma Keys em várias regiões.
  • As Keys de várias regiões têm o mesmo Key Material e ID de Keys, portanto, os dados podem ser criptografados em uma região da AWS e descriptografados em outra região da AWS sem recriptografar ou fazer uma chamada entre regiões para o AWS KMS.
  • As Keys de várias regiões nunca saem do AWS KMS sem criptografia.
  • As Keys de várias regiões não são globais e cada Keys de várias regiões precisa ser replicada e gerenciada de forma independente.

Opções na criação da Key

  • Single-Region key
  • Multi-Region key

Image description

Referências


KMS com Parameter Store

Para executar qualquer operação em um secure string parameter, o Parameter Store deve ser capaz de usar o AWS KMS CMK especificado para a operação pretendida.
A maioria das falhas do Parameter Store relacionadas a CMKs são causadas pelos seguintes problemas:

As credenciais que um aplicativo está usando não têm permissão para executar a ação especificada na CMK - Para corrigir esse erro, execute o aplicativo com credenciais diferentes ou revise o IAM ou a política de chave que está impedindo a operação.

  • A CMK não foi encontrada - Isso geralmente acontece quando você usa um identificador incorreto para a CMK.
  • A CMK não está habilitada - quando isso ocorre, o Parameter Store retorna uma exceção InvalidKeyId com uma mensagem de erro detalhada do AWS KMS. Se o estado da CMK for Desativado, ative-o. Se for Importação Pendente, conclua o procedimento de importação. Se o estado da chave for Exclusão pendente, cancele a exclusão da chave ou use uma CMK diferente.

AWS S3 c/ AWS KMS
Deve ter permissão ao fazer upload ou download de um objeto no S3 criptografado com uma chave AWS KMS

  • kms:Decrypt
  • kms:Encrypt
  • kms:ReEncrypt*
  • kms:GenerateDataKey*
  • kms:DescribeKey

Como proteger a integridade de seus dados criptografados usando o AWS Key Management Service e o EncryptionContext

Documentação oficial

Em sua essência, EncryptionContext é um mapa de chave-valor (ambas as strings) fornecido ao KMS com cada solicitação de criptografia e descriptografia. Os mapas na criptografia e na descriptografia devem corresponder ou a solicitação de descriptografia falhará.

O EncryptionContext oferece três benefícios:

  • Dados adicionais autenticados (AAD)
  • Trilha de auditoria
  • Contexto de autorização

Referências

Top comments (0)