Criptografia em repouso para métricas do OpenTelemetry
O que é um conjunto de dados CloudWatch?
As métricas do OpenTelemetry (OTel) que você envia para o Amazon CloudWatch são armazenadas em um recurso chamado conjunto de dados. Cada Conta da AWS tem um conjunto de dados default em cada região onde residem todas as métricas do OTel. O conjunto de dados default é o único compatível. Você não pode criar conjuntos de dados adicionais.
Os conjuntos de dados podem ser criptografados e marcados como outros recursos da AWS. O ARN do conjunto de dados tem o seguinte formato:
arn:{partition}:cloudwatch:{region}:{account-id}:dataset/default
Para ver a configuração de criptografia atual do seu conjunto de dados, use a API GetDataset:
aws cloudwatch get-dataset \ --dataset-identifier default
Se uma chave gerenciada pelo cliente estiver associada ao conjunto de dados, a resposta incluirá o ARN da chave. Se nenhuma chave gerenciada pelo cliente estiver associada, o conjunto de dados será criptografado com uma chave da AWS.
Opções de criptografia em repouso
O CloudWatch sempre criptografa os dados em repouso do conjunto de dados. Por padrão, o CloudWatch criptografa os dados em repouso usando chaves da AWS. Você não precisa realizar nenhuma ação para proteger seus dados usando chaves da AWS. Para obter mais informações, consulte AWS owned keys no Guia do desenvolvedor do AWS Key Management Service.
Se você quiser gerenciar as chaves usadas para criptografar seus dados do conjunto de dados, poderá usar uma chave gerenciada pelo cliente em AWS Key Management Service (AWS KMS). Para obter mais informações, consulte Chaves gerenciadas pelo cliente no Guia do desenvolvedor do AWS Key Management Service.
Ao usar uma chave gerenciada pelo cliente, serão aplicadas cobranças do AWS KMS. Para saber mais sobre preços, consulte Preços do AWS Key Management Service
Como o CloudWatch usa uma chave gerenciada pelo cliente para a criptografia do conjunto de dados
Importante
A criptografia de chave gerenciada pelo cliente se aplica ao conjunto de dados default. O conjunto de dados default é o único compatível. Você não pode criar conjuntos de dados adicionais.
Quando você associa uma chave gerenciada pelo cliente ao conjunto de dados default, o CloudWatch usa a chave para criptografar todos os dados métricos do OTel armazenados nesse conjunto de dados.
O CloudWatch usa o serviço principal (cloudwatch.amazonaws.com) diretamente com as permissões da política de chave. O CloudWatch não usa concessões ou perfis do IAM para acessar sua chave AWS KMS.
O CloudWatch não armazena em cache as chaves de dados. No entanto, o CloudWatch armazena em cache as respostas kms:Decrypt por até 15 minutos. As alterações em uma política de chave podem levar até 15 minutos para serem efetivadas.
O CloudWatch usa o seguinte contexto de criptografia em suas operações de criptografia AWS KMS:
-
Chave:
aws:cloudwatch:arn -
Valor::
arn:{partition}:cloudwatch:{region}:{account-id}:dataset/default
Configuração de uma chave gerenciada pelo cliente para o conjunto de dados
A chave AWS KMS que você usa com o conjunto de dados CloudWatch deve atender aos seguintes requisitos:
-
A chave deve ser de criptografia simétrica (SYMMETRIC_DEFAULT) com uso da chave ENCRYPT_DECRYPT. As chaves assimétricas não são compatíveis.
-
As chaves entre regiões não são compatíveis.
-
A chave deve estar na mesma Região da AWS que o conjunto de dados.
-
É preciso especificar a chave como um ARN de chave totalmente qualificado. Não é possível usar IDs ou aliases de chave.
Configuração de permissões da política de chave
Para usar uma chave gerenciada pelo cliente com o conjunto de dados CloudWatch, a política de chave deve conceder ao CloudWatch a permissão para usar a chave. O exemplo de política de chave a seguir concede ao CloudWatch as permissões necessárias e inclui uma proteção contra representante confuso.
O chamador que associa ou usa o conjunto de dados deve ter permissão kms:Decrypt, direcionada ao CloudWatch ViaService e ao contexto de criptografia, conforme mostrado na declaração AllowCallerDecrypt abaixo. Substitua YourApplicationRole pelo perfil do IAM usado para chamar APIs do conjunto de dados CloudWatch.
exemplo Política de chave para criptografia do conjunto de dados CloudWatch
{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowCloudWatchDatasetDescribeKey", "Effect": "Allow", "Principal": { "Service": "cloudwatch.amazonaws.com" }, "Action": "kms:DescribeKey", "Resource": "*", "Condition": { "StringEquals": { "aws:SourceAccount": "account-id" }, "ArnLike": { "aws:SourceArn": "arn:aws:cloudwatch:region:account-id:dataset/default" } } }, { "Sid": "AllowCloudWatchDatasetEncryption", "Effect": "Allow", "Principal": { "Service": "cloudwatch.amazonaws.com" }, "Action": [ "kms:GenerateDataKey", "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*" ], "Resource": "*", "Condition": { "StringEquals": { "aws:SourceAccount": "account-id", "kms:EncryptionContext:aws:cloudwatch:arn": "arn:aws:cloudwatch:region:account-id:dataset/default" }, "ArnLike": { "aws:SourceArn": "arn:aws:cloudwatch:region:account-id:dataset/default" } } }, { "Sid": "AllowCallerDecrypt", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::account-id:role/YourApplicationRole" }, "Action": "kms:Decrypt", "Resource": "*", "Condition": { "StringEquals": { "kms:ViaService": "cloudwatch.region.amazonaws.com", "kms:EncryptionContext:aws:cloudwatch:arn": "arn:aws:cloudwatch:region:account-id:dataset/default" } } } ] }
Substitua account-id e região pelos seus próprios valores.
Para obter mais informações sobre políticas de chave, consulte Políticas de chave no AWS KMS no Guia do desenvolvedor do AWS Key Management Service.
Para associar uma chave gerenciada pelo cliente a um conjunto de dados
Use a API AssociateDatasetKmsKey para associar uma chave gerenciada pelo cliente a um conjunto de dados. É preciso especificar default como identificador do conjunto de dados.
Para associar uma chave gerenciada pelo cliente usando a CLI da AWS, execute o comando a seguir:
aws cloudwatch associate-dataset-kms-key \ --dataset-name default \ --kms-key-arn arn:aws:kms:region:account-id:key/key-id
Alteração ou remoção da configuração de criptografia
Você pode alterar ou remover a chave gerenciada pelo cliente que criptografa os dados do seu conjunto de dados.
Para alterar a chave gerenciada pelo cliente
Para substituir a chave gerenciada pelo cliente, chame AssociateDatasetKmsKey novamente com um novo ARN de chave. O chamador deve ter permissão kms:Decrypt na chave atual e na nova chave. O CloudWatch começa a usar a nova chave para operações de criptografia subsequentes.
nota
Se a chave atualmente associada tiver sido excluída, estiver programada para exclusão, estiver com a importação pendente, estiver indisponível ou tiver sido desabilitada, o CloudWatch não exigirá a permissão kms:Decrypt para a chave atual e a rotação prosseguirá. Se a chave tiver sido apenas desabilitada, considere reabilitá-la em vez de fazer a rotação, pois a reabilitação permite que o CloudWatch retome a descriptografia de dados de métricas existentes criptografados com essa chave.
Para remover a chave gerenciada pelo cliente
Para remover a chave gerenciada pelo cliente e reverter para a criptografia de chave da AWS, chame DisassociateDatasetKmsKey. O chamador deve ter permissão kms:Decrypt na chave atualmente associada.
aws cloudwatch disassociate-dataset-kms-key \ --dataset-name default
nota
Se a chave atualmente associada tiver sido excluída, estiver programada para exclusão, estiver com a importação pendente, estiver indisponível ou tiver sido desabilitada, o CloudWatch não exigirá permissão kms:Decrypt para essa chave e a desassociação prosseguirá. Se a chave tiver sido apenas desabilitada, considere reabilitá-la em vez de desassociá-la, pois a reabilitação permite que o CloudWatch retome a descriptografia dos seus dados de métricas existentes.
Importante
Depois de desassociar uma chave gerenciada pelo cliente, há uma janela de aplicação de 3 horas durante a qual o CloudWatch ainda exige permissão kms:Decrypt na chave associada anteriormente. Não desative nem exclua a chave durante essa janela.
Recuperação de uma chave do KMS excluída ou inutilizável
Se a chave do KMS gerenciada pelo cliente associada ao seu conjunto de dados tiver sido excluída, estiver programada para exclusão ou ficar indisponível, seu conjunto de dados entrará em um estado degradado:
-
O CloudWatch não consegue criptografar novos dados de métricas que você publica no conjunto de dados, e a ingestão falha.
-
O CloudWatch não consegue descriptografar dados existentes que foram criptografados com a chave inutilizável, portanto, as operações de consulta falham.
Suas opções de recuperação dependem do estado da chave:
-
A chave está desabilitada: reabilite a chave no AWS KMS. Este é o caminho de recuperação de preferência porque o CloudWatch poderá retomar a descriptografia dos dados de métricas existentes depois que a chave estiver ativa novamente.
-
A chave está com a exclusão pendente: cancele a exclusão da chave no AWS KMS antes que o período de espera expire. Depois que a chave retornar ao estado habilitado, o CloudWatch retomará as operações normais.
-
A chave foi excluída permanentemente ou está irrecuperável: remova a associação obsoleta ou rotacione para uma nova chave (veja abaixo). Observe que os dados existentes criptografados com a chave excluída ficam permanentemente ilegíveis.
Se a chave tiver sido excluída permanentemente ou não puder ser recuperada, você poderá remover a associação ou rotacionar para uma nova chave sem precisar acessar a chave antiga:
Remover a associação de chave obsoleta
Chame DisassociateDatasetKmsKey para remover a associação com a chave inutilizável. O CloudWatch reverte para a criptografia com chave de propriedade da AWS para novos dados. Os dados existentes que foram criptografados com a chave excluída não podem mais ser lidos.
aws cloudwatch disassociate-dataset-kms-key \ --dataset-name default
Rotacionar para uma nova chave
Chame AssociateDatasetKmsKey com um novo ARN de chave do KMS válido. O CloudWatch valida a nova chave e a associa ao seu conjunto de dados. O acesso à chave associada anteriormente não é necessário. Os dados existentes que foram criptografados com a chave excluída não podem mais ser lidos, mas os novos dados são criptografados com a nova chave.
aws cloudwatch associate-dataset-kms-key \ --dataset-name default \ --kms-key-arn arn:aws:kms:region:account-id:key/new-key-id
Respostas de erro de chaves inutilizáveis
Quando você chama DisassociateDatasetKmsKey ou AssociateDatasetKmsKey (caminho de rotação) e a chave atualmente associada está inacessível, o CloudWatch não exige acesso a essa chave e a operação prossegue normalmente. Isso se aplica quando:
-
A chave foi excluída (o KMS retorna
NotFoundException). -
A chave está no estado
PendingDeletion,PendingImportouUnavailable. -
A chave foi desabilitada.
Se você chamar essas operações quando a chave estiver acessível, mas o chamador não tiver a permissão kms:Decrypt, a operação falhará com um dos erros a seguir. Cada mensagem de erro inclui o ID da solicitação do KMS para a solução de problemas.
ResourceNotFoundException-
A chave do KMS especificada não existe. Formato da mensagem:
KMS keykey-arndoes not exist. KMS request id:request-id. ValidationException-
A chave do KMS especificada está em um estado inutilizável que não é tolerado nesse caminho de código. Formato da mensagem:
KMS keykey-arnis in an unusable state:state-description. KMS request id:request-id. AccessDeniedException-
A chave do KMS especificada está desabilitada ou o chamador não tem permissão. Formato da mensagem:
KMS keykey-arnis disabled. KMS request id:request-id.
Para obter mais informações sobre os estados de chaves do KMS, consulte Principais estados das chaves do AWS KMS no Guia do desenvolvedor do AWS Key Management Service.
Definição do escopo do acesso à política de chave
Você pode usar as condições na política de chave para limitar o acesso à sua chave AWS KMS.
- Condição para contexto de criptografia
-
Use a chave de condição
kms:EncryptionContext:aws:cloudwatch:arnpara restringir o uso da chave ao seu conjunto de dadosdefault."Condition": { "StringEquals": { "kms:EncryptionContext:aws:cloudwatch:arn": "arn:aws:cloudwatch:region:account-id:dataset/default" } } - Proteção contra representante confuso
-
Use as condições
aws:SourceArneaws:SourceAccountpara evitar ataques de representante confuso entre contas."Condition": { "StringEquals": { "aws:SourceAccount": "account-id" }, "ArnLike": { "aws:SourceArn": "arn:aws:cloudwatch:region:account-id:dataset/default" } } - Condição kms:ViaService
-
Use a chave de condição
kms:ViaServicepara restringir o uso da chave às solicitações provenientes do CloudWatch."Condition": { "StringEquals": { "kms:ViaService": "cloudwatch.region.amazonaws.com" } }
Monitoramento da interação do CloudWatch com AWS KMS
Você pode usar o AWS CloudTrail para rastrear as solicitações que o CloudWatch envia para o AWS KMS em seu nome. As entradas de log AWS CloudTrail usam a entidade principal do serviço cloudwatch.amazonaws.com e um valor ViaService de cloudwatch..{region}.amazonaws.com
Os seguintes nomes de eventos do CloudTrail aparecem nas entradas de log das operações de criptografia do conjunto de dados do CloudWatch:
GenerateDataKeyEncryptDecryptDescribeKeyReEncrypt
Cada entrada de log inclui o contexto de criptografia, que você pode usar para identificar o conjunto de dados específico ao qual a operação se aplica.
Para obter mais informações sobre o monitoramento do uso de chaves AWS KMS, consulte Monitoramento de AWS Key Management Service no Guia do desenvolvedor AWS Key Management Service.