Criptografar dados de log no CloudWatch Logs usando o AWS Key Management Service - CloudWatch Registros da Amazon

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

Criptografar dados de log no CloudWatch Logs usando o AWS Key Management Service

Os dados do grupo de logs são sempre criptografados no CloudWatch Logs. Por padrão, o Advanced Encryption Standard Galois/Counter Mode (AES-GCM) de 256 bits para criptografar os dados de CloudWatch log em repouso. Como alternativa, você pode usar o AWS Key Management Service para essa criptografia. Se você fizer isso, a criptografia será feita usando uma AWS KMS chave do. A criptografia com o AWS KMS é habilitada no nível do grupo de logs associando-se uma chave do KMS a um grupo de logs quando você cria o grupo de logs ou depois que ele já existe.

Importante

CloudWatch Os logs agora oferecem suporte ao contexto de criptografia, usando kms:EncryptionContext:aws:logs:arn como chave e o ARN do grupo de logs como o valor dessa chave. Se você tiver grupos de logs que já criptografou com uma chave do KMS e quiser restringir a chave de modo que ela seja usada com uma única conta e grupo de logs, atribua uma nova chave do KMS que contenha uma condição na política do IAM. Para obter mais informações, consulte AWS KMS Chaves do e contexto de criptografia.

Importante

CloudWatch O Logs agora suporta kms:ViaService o que permite que os registros façam AWS KMS chamadas em seu nome. Você deve adicionar isso às suas funções que chamam CloudWatch Logs na sua Política de Chaves ou no IAM. Para maiores informações, veja kms: ViaService.

Depois que você associar uma chave do KMS a um grupo de logs, todos os novos dados ingeridos para o grupo de logs serão criptografados usando essa chave. Esses dados são armazenados em formato criptografado durante todo o período de retenção. CloudWatch O Logs descriptografa esses dados sempre que eles são solicitados. CloudWatch Os logs devem ter permissões para a chave do KMS sempre que dados criptografados são solicitados.

Se, mais tarde, você desassociar uma chave do KMS de um grupo de CloudWatch logs, o Logs criptografará os dados ingeridos recentemente usando o método de criptografia padrão do CloudWatch Logs. Todos os dados previamente ingeridos que foram criptografados com a chave do KMS permanecem criptografados com a chave do KMS. CloudWatch Os logs ainda poderão retornar esses dados depois que a chave do KMS for desassociada porque CloudWatch os logs ainda poderão retornar esses dados depois que a chave for desassociada. Porém, se a chave for desativada posteriormente, o CloudWatch Logs não conseguirá ler os logs que foram criptografados com essa chave.

Importante

CloudWatch O Logs apenas oferece suporte a chaves do KMS simétricas. Não use uma chave assimétrica para criptografar os dados em seus grupos de logs. Para obter mais informações, consulte Usar chaves simétricas e assimétricas.

Limites

  • Para executar as etapas a seguir, é necessário ter as seguintes permissões: kms:CreateKey, kms:GetKeyPolicy e kms:PutKeyPolicy.

  • Depois de associar ou desassociar uma chave de um grupo de logs, pode levar até cinco minutos para que a operação seja efetivada.

  • Se você revogar o acesso de uma chave associada ao CloudWatch Logs ou excluir uma chave do KMS associada, não será mais possível recuperar seus dados criptografados no CloudWatch Logs.

  • Não é possível associar uma chave do KMS a um grupo de logs existente usando o CloudWatch console.

Etapa 1: Criar uma AWS KMS chave do

Para criar uma chave do KMS, use o seguinte comando create-key:

aws kms create-key

A saída contém o ID de chave e o nome do recurso da Amazon (ARN) da chave. A seguir está um exemplo de saída:

{ "KeyMetadata": { "Origin": "AWS_KMS", "KeyId": "1234abcd-12ab-34cd-56ef-1234567890ab", "Description": "", "KeyManager": "CUSTOMER", "Enabled": true, "CustomerMasterKeySpec": "SYMMETRIC_DEFAULT", "KeyUsage": "ENCRYPT_DECRYPT", "KeyState": "Enabled", "CreationDate": 1478910250.94, "Arn": "arn:aws:kms:us-west-2:123456789012:key/6f815f63-e628-448c-8251-e40cb0d29f59", "AWSAccountId": "123456789012", "EncryptionAlgorithms": [ "SYMMETRIC_DEFAULT" ] } }

Etapa 2: definir permissões na chave do KMS

Por padrão, todas as AWS KMS chaves do são privadas. Somente o proprietário do recurso pode usá-la para criptografar e descriptografar dados. No entanto, o proprietário do recurso pode conceder permissões para acessar a chave do KMS a outros usuários e recursos. Com esta etapa, você fornece à entidade principal do serviço CloudWatch Logs e à função de chamador permissão para usar a chave. A entidade principal desse serviço deve estar na mesma AWS região da em que a chave do KMS está armazenada.

Como prática recomendada, recomendamos restringir o uso da chave do KMS somente às AWS contas da ou grupos de logs especificados.

Primeiro, salve a política padrão para sua chave do KMS policy.json usando o seguinte get-key-policycomando:

aws kms get-key-policy --key-id key-id --policy-name default --output text > ./policy.json

Abra o arquivo policy.json em um editor de texto e adicione a seção em negrito de uma das instruções a seguir. Separe a instrução existente da nova instrução com uma vírgula. Essas instruções usam Condition seções para aumentar a segurança da AWS KMS chave do. Para obter mais informações, consulte AWS KMS Chaves do e contexto de criptografia.

A seção Condition neste exemplo restringe a chave a um único ARN de grupo de logs.

{ "Version": "2012-10-17", "Id": "key-default-1", "Statement": [ { "Sid": "Enable IAM User Permissions", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::Your_account_ID:root" }, "Action": "kms:*", "Resource": "*" }, { "Effect": "Allow", "Principal": { "Service": "logs.region.amazonaws.com" }, "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*", "kms:Describe*" ], "Resource": "*", "Condition": { "ArnEquals": { "kms:EncryptionContext:aws:logs:arn": "arn:aws:logs:region:account-id:log-group:log-group-name" } } } ] }

A seção Condition deste exemplo limita o uso da chave do AWS KMS à conta especificada, mas ele pode ser usado para qualquer grupo de logs.

{ "Version": "2012-10-17", "Id": "key-default-1", "Statement": [ { "Sid": "Enable IAM User Permissions", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::Your_account_ID:root" }, "Action": "kms:*", "Resource": "*" }, { "Effect": "Allow", "Principal": { "Service": "logs.region.amazonaws.com" }, "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*", "kms:Describe*" ], "Resource": "*", "Condition": { "ArnLike": { "kms:EncryptionContext:aws:logs:arn": "arn:aws:logs:region:account-id:*" } } } ] }

Em seguida, adicione permissões à função que chamará os CloudWatch Logs. Você pode fazer isso adicionando uma declaração adicional à Política de AWS KMS Chave ou por meio do IAM na própria função. CloudWatch O Logs é usado kms:ViaService para fazer chamadas AWS KMS em nome do cliente. Para maiores informações, veja kms: ViaService.

Para adicionar permissões na Política de AWS KMS chaves, adicione a seguinte declaração adicional à sua política de chaves. Se você usar esse método, como prática recomendada, defina o escopo da política somente para as funções que interagirão com grupos de registros AWS KMS criptografados.

{ "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::account_id:role/role_name" }, "Action": [ "kms:Encrypt", "kms:ReEncrypt*", "kms:Decrypt", "kms:GenerateDataKey*", "kms:Describe*" ], "Resource": "*", "Condition": { "StringEquals": { "kms:ViaService": [ "logs.region.amazonaws.com" ] } } }

Como alternativa, se você quiser gerenciar as permissões de função no IAM, você pode adicionar permissões equivalentes por meio da política a seguir. Isso pode ser adicionado a uma política de função existente ou anexado a uma função como uma política separada adicional. Se você usar esse método, como prática recomendada, defina o escopo da política somente para as AWS KMS chaves que serão usadas para criptografia de log. Para obter mais informações, consulte Editar políticas do IAM.

{ "Version": "2012-10-17", "Statement" : [ { "Effect": "Allow", "Action": [ "kms:Encrypt", "kms:ReEncrypt*", "kms:Decrypt", "kms:GenerateDataKey*", "kms:Describe*" ], "Condition":{ "StringEquals":{ "kms:ViaService": [ "logs.region.amazonaws.com" ] } }, "Resource": "arn:aws:kms:region:account_id:key/key_id" } ] }

Por fim, adicione a política atualizada usando o seguinte put-key-policycomando:

aws kms put-key-policy --key-id key-id --policy-name default --policy file://policy.json

Etapa 3: associar uma chave do KMS a um grupo de logs

É possível associar uma chave do KMS a um grupo de logs ao criá-la ou posteriormente.

Para descobrir se um grupo de logs já tem uma chave do KMS associada, use o seguinte describe-log-groupscomando:

aws logs describe-log-groups --log-group-name-prefix "log-group-name-prefix"

Se a saída incluir um campo kmsKeyId, o grupo de logs será associado à chave exibida para o valor desse campo.

Para associar a chave do KMS a um grupo de logs ao criá-lo

Use o comando create-log-group da seguinte forma:

aws logs create-log-group --log-group-name my-log-group --kms-key-id "key-arn"
Para associar a chave do KMS a um grupo de logs existente

Use o comando associate-kms-key da seguinte forma:

aws logs associate-kms-key --log-group-name my-log-group --kms-key-id "key-arn"

Etapa 4: desassociar uma chave de um grupo de logs

Para desassociar a chave do KMS associada a um grupo de logs, use o seguinte comando: disassociate-kms-key

aws logs disassociate-kms-key --log-group-name my-log-group

AWS KMS Chaves do e contexto de criptografia

Para melhorar a segurança de suas AWS Key Management Service chaves e seus grupos de CloudWatch logs criptografados, o Logs agora coloca o grupo de logs ARNs como parte do contexto de criptografia usado para criptografar seus dados de log. O contexto de criptografia é um conjunto de pares de chave/valor que são usados como dados autenticados adicionais. O contexto de criptografia permite usar condições de política do IAM para limitar o acesso à sua AWS KMS chave do pela AWS conta da e grupo de logs. Para obter mais informações, consulte Contexto de criptografia e Elementos de política JSON do IAM: condição.

Recomendamos usar chaves do KMS diferentes para cada grupo de logs criptografado.

Se você tem um grupo de logs criptografado anteriormente e agora deseja alterar o grupo de logs para usar uma nova chave do KMS que funcione somente para esse grupo de logs, siga estas etapas.

Como converter um grupo de logs criptografado para usar uma chave do KMS com uma política limitando-a a esse grupo de logs
  1. Insira o comando a seguir para localizar o ARN da chave atual do grupo de logs:

    aws logs describe-log-groups

    A saída inclui a linha a seguir. Anote o ARN. Ele será necessário na etapa 7.

    ... "kmsKeyId": "arn:aws:kms:us-west-2:123456789012:key/01234567-89ab-cdef-0123-456789abcdef" ...
  2. Digite o comando a seguir para criar uma nova chave do KMS:

    aws kms create-key
  3. Digite o comando a seguir para salvar a política da nova chave em um arquivo policy.json:

    aws kms get-key-policy --key-id new-key-id --policy-name default --output text > ./policy.json
  4. Use um editor de texto para abrir policy.json e adicionar uma expressão Condition à política:

    { "Version": "2012-10-17", "Id": "key-default-1", "Statement": [ { "Sid": "Enable IAM User Permissions", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::ACCOUNT-ID:root" }, "Action": "kms:*", "Resource": "*" }, { "Effect": "Allow", "Principal": { "Service": "logs.region.amazonaws.com" }, "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*", "kms:Describe*" ], "Resource": "*", "Condition": { "ArnLike": { "kms:EncryptionContext:aws:logs:arn": "arn:aws:logs:REGION:ACCOUNT-ID:log- group:LOG-GROUP-NAME" } } } ] }
  5. Insira o comando a seguir para adicionar a política atualizada à nova chave do KMS:

    aws kms put-key-policy --key-id new-key-ARN --policy-name default --policy file://policy.json
  6. Digite o comando a seguir para associar a política ao seu grupo de logs:

    aws logs associate-kms-key --log-group-name my-log-group --kms-key-id new-key-ARN

    CloudWatch O Logs agora criptografa todos os novos dados usando a nova chave.

  7. Depois, revogue todas as permissões, exceto Decrypt da chave antiga. Primeiro, digite o comando a seguir para recuperar a política antiga:

    aws kms get-key-policy --key-id old-key-ARN --policy-name default --output text > ./policy.json
  8. Use um editor de texto para abrir policy.json e remover todos os valores da lista Action, exceto kms:Decrypt

    { "Version": "2012-10-17", "Id": "key-default-1", "Statement": [ { "Sid": "Enable IAM User Permissions", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::Your_account_ID:root" }, "Action": "kms:*", "Resource": "*" }, { "Effect": "Allow", "Principal": { "Service": "logs.region.amazonaws.com" }, "Action": [ "kms:Decrypt" ], "Resource": "*" } ] }
  9. Insira o comando a seguir para adicionar a política atualizada à antiga chave:

    aws kms put-key-policy --key-id old-key-ARN --policy-name default --policy file://policy.json