Criptografe dados de registro no CloudWatch Logs usando 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á.

Criptografe dados de registro no CloudWatch Logs usando AWS Key Management Service

Os dados do grupo de registros são sempre criptografados nos CloudWatch registros. Por padrão, o CloudWatch Logs usa criptografia do lado do servidor com o Advanced Encryption Standard Galois/Counter Mode (AES-GCM) de 256 bits para criptografar dados de 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. O uso da criptografia AWS KMS é habilitado no nível do grupo de registros, associando uma chave KMS a um grupo de registros, seja quando você cria o grupo de registros ou depois que ele existe.

Importante

CloudWatch Os registros agora oferecem suporte ao contexto de criptografia, usando kms:EncryptionContext:aws:logs:arn como chave e o ARN do grupo de registros 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 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 solicitados. CloudWatch Os registros devem ter permissões para a chave KMS sempre que dados criptografados forem solicitados.

Se, posteriormente, você desassociar uma chave KMS de um grupo de CloudWatch registros, o Logs criptografará os dados recém-ingeridos usando o método de criptografia padrão do CloudWatch Logs. Todos os dados ingeridos anteriormente que foram criptografados com a chave KMS permanecem criptografados com a chave KMS. CloudWatch Os registros ainda podem retornar esses dados após a desassociação da chave KMS, porque CloudWatch os registros ainda podem continuar referenciando a chave. No entanto, se a chave for desativada posteriormente, o CloudWatch Logs não conseguirá ler os registros que foram criptografados com essa chave.

Importante

CloudWatch O Logs suporta somente chaves 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 do CloudWatch Logs a uma chave associada ou excluir uma chave KMS associada, seus dados criptografados no CloudWatch Logs não poderão mais ser recuperados.

  • Você não pode associar uma chave KMS a um grupo de registros existente usando o CloudWatch console.

Etapa 1: criar uma AWS KMS chave

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 AWS KMS as chaves 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 essa etapa, você concede permissão ao diretor do serviço de CloudWatch registros e à função de chamador para usar a chave. Esse principal de serviço deve estar na mesma AWS região em que a chave KMS está armazenada.

Como prática recomendada, recomendamos que você restrinja o uso da chave KMS somente às AWS contas ou grupos de registros que você especificar.

Primeiro, salve a política padrão para sua chave 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 declarações usam Condition seções para aumentar a segurança da AWS KMS chave. Para obter mais informações, consulte AWS KMS chaves 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 registros já tem uma chave 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 KMS associada a um grupo de registros, use o seguinte comando: disassociate-kms-key

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

AWS KMS chaves e contexto de criptografia

Para aumentar a segurança de suas AWS Key Management Service chaves e de seus grupos de registros criptografados, o CloudWatch Logs agora coloca o grupo de registros ARNs como parte do contexto de criptografia usado para criptografar seus dados de registro. O contexto de criptografia é um conjunto de pares de chave/valor que são usados como dados autenticados adicionais. O contexto de criptografia permite que você use as condições da política do IAM para limitar o acesso à sua AWS KMS chave por AWS conta e grupo de registros. 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 Agora, os registros criptografam 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