View a markdown version of this page

Criptografia em repouso para métricas do OpenTelemetry - Amazon CloudWatch

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.

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

Se sua chave estiver desativada, você deverá reativá-la antes de poder desassociá-la do conjunto de dados.

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:arn para restringir o uso da chave ao seu conjunto de dados default.

"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:SourceArn e aws:SourceAccount para 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:ViaService para 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:

  • GenerateDataKey

  • Encrypt

  • Decrypt

  • DescribeKey

  • ReEncrypt

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.