View a markdown version of this page

Cifrado en reposo para las métricas de OpenTelemetry - Amazon CloudWatch

Cifrado en reposo para las métricas de OpenTelemetry

Qué es un conjunto de datos de CloudWatch

Las métricas de OpenTelemetry (OTel) que envíe a Amazon CloudWatch se almacenan en un recurso denominado conjunto de datos. Cada Cuenta de AWS tiene un conjunto de datos default en cada región donde residen todas las métricas de OTel. El conjunto de datos default es el único conjunto de datos compatible, ya que no se pueden crear conjuntos de datos adicionales.

Los conjuntos de datos se pueden cifrar y etiquetar como otros recursos de AWS. El ARN del conjunto de datos tiene el siguiente formato:

arn:{partition}:cloudwatch:{region}:{account-id}:dataset/default

Para ver la configuración de cifrado actual del conjunto de datos, utilice la API GetDataset:

aws cloudwatch get-dataset \ --dataset-identifier default

Si una clave administrada por el cliente está asociada al conjunto de datos, la respuesta incluye el ARN de la clave. Si no hay asociada ninguna clave administrada por el cliente, el conjunto de datos se cifra con una clave propia de AWS.

Opciones de cifrado en reposo

CloudWatch siempre cifra los datos en reposo del conjunto de datos. De forma predeterminada, CloudWatch cifra todos los datos en reposo mediante claves que son propiedad de AWS. No es necesario hacer nada para proteger los datos con claves que son propiedad de AWS. Para obtener más información, consulte las claves propias de AWS en la Guía para desarrolladores de AWS Key Management Service.

Si desea administrar las claves que se utilizan para cifrar los datos del conjunto de datos, puede utilizar una clave administrada por el cliente en AWS Key Management Service (AWS KMS). Para más información, consulte las Claves administradas por el cliente en la Guía para desarrolladores de AWS Key Management Service.

Al utilizar una clave administrada por el cliente, se aplicarán cargos de AWS KMS. Para obtener más información acerca de los precios, consulte Precios de AWS Key Management Service.

Cómo utiliza CloudWatch una clave administrada por el cliente para el cifrado de conjuntos de datos

importante

El cifrado de claves administradas por el cliente se aplica al conjunto de datos default. El conjunto de datos default es el único conjunto de datos compatible, ya que no se pueden crear conjuntos de datos adicionales.

Al asociar una clave administrada por el cliente al conjunto de datos default, CloudWatch utiliza la clave para cifrar todos los datos de las métricas de OTel almacenados en ese conjunto de datos.

CloudWatch usa la entidad principal del servicio (cloudwatch.amazonaws.com) directamente con los permisos de la política de claves. CloudWatch no utiliza concesiones ni roles de IAM para acceder a la clave de AWS KMS.

CloudWatch no almacena en caché las claves de datos. Sin embargo, CloudWatch almacena en caché las respuestas kms:Decrypt durante unos 15 minutos como máximo. Los cambios en una política de claves pueden tardar hasta 15 minutos en surtir efecto.

CloudWatch utiliza el siguiente contexto de cifrado para todas las operaciones criptográficas de AWS KMS:

  • Clave: aws:cloudwatch:arn

  • Valor: arn:{partition}:cloudwatch:{region}:{account-id}:dataset/default

Configuración de una clave administrada por el cliente para conjuntos de datos

La clave de AWS KMS que utilice con el conjunto de datos de CloudWatch debe cumplir los siguientes requisitos:

  • La clave debe ser una clave de cifrado simétrico (SYMMETRIC_DEFAULT) con el uso de la clave ENCRYPT_DECRYPT. No se admiten claves asimétricas.

  • No se admiten claves de varias regiones.

  • La clave debe existir en la misma Región de AWS que el conjunto de datos.

  • Debe especificar la clave como un ARN de clave completo. No se admiten los alias ni los ID de clave.

Configuración de los permisos de la política de claves

Para utilizar una clave administrada por el cliente con un conjunto de datos de CloudWatch, la política de claves debe conceder permiso a CloudWatch para usar la clave. En el siguiente ejemplo de política de claves, se concede a CloudWatch los permisos necesarios e incluye una protección de suplentes confusos.

La persona que llama y que asocie o utilice el conjunto de datos debe tener el permiso kms:Decrypt, dentro del contexto de cifrado y ViaService de CloudWatch, como se muestra en la siguiente instrucción AllowCallerDecrypt. Sustituya YourApplicationRole por el rol de IAM que se usa para llamar a las API del conjunto de datos de CloudWatch.

ejemplo Política de claves para el cifrado de conjuntos de datos de 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" } } } ] }

Sustituya account-id y region por sus propios valores.

Para obtener más información sobre las políticas de claves, consulte Políticas de claves en AWS KMS en la Guía para desarrolladores de AWS Key Management Service.

Asociación de una clave administrada por el cliente a un conjunto de datos

Use la API AssociateDatasetKmsKey para asociar una clave administrada por el cliente a un conjunto de datos. Debe especificar default como identificador del conjunto de datos.

Para asociar una clave administrada por el cliente con la AWS CLI, ejecute el comando siguiente:

aws cloudwatch associate-dataset-kms-key \ --dataset-name default \ --kms-key-arn arn:aws:kms:region:account-id:key/key-id

Cambio o eliminación de la configuración de cifrado

Puede cambiar o eliminar la clave administrada por el cliente que cifra los datos del conjunto de datos.

Cambio de la clave administrada por el cliente

Para sustituir la clave administrada por el cliente, vuelva a llamar a AssociateDatasetKmsKey con un ARN de clave nuevo. La persona que llama debe tener el permiso kms:Decrypt tanto para la clave actual como para la nueva clave. CloudWatch comienza a usar la nueva clave para las operaciones de cifrado posteriores.

Eliminación de la clave administrada por el cliente

Para eliminar la clave administrada por el cliente y volver al cifrado de clave que es propiedad de AWS, llame a DisassociateDatasetKmsKey. La persona que llama debe tener el permiso kms:Decrypt sobre la clave asociada actualmente.

aws cloudwatch disassociate-dataset-kms-key \ --dataset-name default
importante

Tras desasociar una clave administrada por el cliente, hay un periodo de aplicación de 3 horas durante el cual CloudWatch sigue exigiendo el permiso kms:Decrypt en la clave asociada previamente. No desactive ni elimine la clave durante este periodo.

Si la clave está deshabilitada, debe volver a habilitarla antes de poder desasociarla del conjunto de datos.

Limitación del acceso de la política de claves

Puede usar las condiciones en la política de claves para limitar el acceso a la clave de AWS KMS.

Condiciones de contexto de cifrado

Use la clave de condición kms:EncryptionContext:aws:cloudwatch:arn para restringir el uso de la clave al conjunto de datos default.

"Condition": { "StringEquals": { "kms:EncryptionContext:aws:cloudwatch:arn": "arn:aws:cloudwatch:region:account-id:dataset/default" } }
Protección de suplente confuso

Use las condiciones aws:SourceArn y aws:SourceAccount para prevenir ataques de suplentes confusos entre cuentas.

"Condition": { "StringEquals": { "aws:SourceAccount": "account-id" }, "ArnLike": { "aws:SourceArn": "arn:aws:cloudwatch:region:account-id:dataset/default" } }
Condición kms:ViaService

Utilice la clave de condición kms:ViaService para restringir el uso de la clave a las solicitudes procedentes de CloudWatch.

"Condition": { "StringEquals": { "kms:ViaService": "cloudwatch.region.amazonaws.com" } }

Supervisión de la interacción de CloudWatch con AWS KMS

Puede utilizar AWS CloudTrail para hacer un seguimiento de las solicitudes que CloudWatch envía a AWS KMS en su nombre. Las entradas de registro de AWS CloudTrail utilizan la entidad principal del servicio cloudwatch.amazonaws.com y un valor ViaService de cloudwatch.{region}.amazonaws.com.

Los siguientes nombres de eventos de CloudTrail aparecen en las entradas de registro de las operaciones de cifrado del conjunto de datos de CloudWatch:

  • GenerateDataKey

  • Encrypt

  • Decrypt

  • DescribeKey

  • ReEncrypt

Cada entrada de registro incluye el contexto de cifrado, que puede utilizar para identificar el conjunto de datos específico al que se aplica la operación.

Para obtener más información sobre la supervisión del uso de claves de AWS KMS, consulte Supervisión de AWS Key Management Service en la Guía para desarrolladores de AWS Key Management Service.