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.

nota

Si la clave asociada actualmente se ha eliminado, su eliminación está programada, está pendiente de importación, no está disponible o se ha deshabilitado, CloudWatch no requiere el permiso kms:Decrypt en la clave actual y la rotación continúa. Si la clave solo estaba deshabilitada, considere la posibilidad de volver a habilitarla en lugar de rotarla, ya que, al volver a habilitarla, CloudWatch puede reanudar el descifrado de los datos de métricas existentes cifrados con esa clave.

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
nota

Si la clave asociada actualmente se ha eliminado, su eliminación está programada, está pendiente de importación, no está disponible o se ha deshabilitado, CloudWatch no requiere el permiso kms:Decrypt en dicha clave y la anulación de la asociación continúa. Si la clave solo estaba deshabilitada, considere la posibilidad de volver a habilitarla en lugar de anular la asociación, ya que, al volver a habilitarla, CloudWatch puede reanudar el descifrado de los datos de métricas existentes.

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.

Recuperación de una clave de KMS eliminada o inutilizable

Si la clave de KMS administrada por el cliente y asociada a su conjunto de datos se elimina, se programa su eliminación o deja de estar disponible, el conjunto de datos pasa a un estado degradado:

  • CloudWatch no puede cifrar los nuevos datos de métricas que publique en el conjunto de datos y, por lo tanto, se produce un error en la ingesta.

  • CloudWatch no puede descifrar los datos existentes que se cifraron con la clave inutilizable, por lo que las operaciones de consulta fallan.

Las opciones de recuperación dependen del estado de la clave:

  • La clave está deshabilitada: vuelva a habilitar la clave en AWS KMS. Esta es la ruta de recuperación preferida porque CloudWatch puede reanudar el descifrado de los datos de métricas existentes una vez que la clave vuelve a estar activa.

  • La clave está pendiente de eliminación: cancele la eliminación de la clave en AWS KMS antes de que venza el periodo de espera. Una vez que la clave vuelve a estar habilitada, CloudWatch reanuda sus operaciones normales.

  • La clave se ha eliminado permanentemente o no se puede recuperar: elimine la asociación obsoleta o cámbiela a una clave nueva (consulte la información incluida a continuación). Tenga en cuenta que los datos existentes cifrados con la clave eliminada son ilegibles de forma permanente.

Si la clave se elimina permanentemente o no se puede recuperar por algún motivo, puede eliminar la asociación o rotar a una clave nueva sin necesidad de acceder a la clave anterior:

Eliminación de la asociación de claves obsoleta

Llame a DisassociateDatasetKmsKey para eliminar la asociación con la clave inutilizable. CloudWatch vuelve a utilizar el cifrado de clave propiedad de AWS para los datos nuevos. Los datos existentes que se cifraron con la clave eliminada ya no se pueden leer.

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

Rotación a una clave nueva

Llame a AssociateDatasetKmsKey con el ARN de una clave de KMS nueva y válida. CloudWatch valida la nueva clave y la asocia al conjunto de datos. No es necesario acceder a la clave previamente asociada. Los datos existentes que se cifraron con la clave eliminada ya no se pueden leer, pero los nuevos datos se cifran con esa clave nueva.

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

Respuestas de error para claves inutilizables

Cuando llama a DisassociateDatasetKmsKey o AssociateDatasetKmsKey (ruta de rotación) y no se puede acceder a la clave asociada actualmente, CloudWatch no necesita acceder a esa clave y la operación se realiza con normalidad. Esto es aplicable cuando:

  • La clave se ha eliminado (KMS devuelve NotFoundException).

  • La clave se encuentra en estado PendingDeletion, PendingImport o Unavailable.

  • La clave se ha deshabilitado.

Si llama a estas operaciones cuando se puede acceder a la clave, pero el intermediario no tiene el permiso kms:Decrypt, la operación falla con uno de los siguientes errores. Cada mensaje de error incluye el ID de solicitud de KMS para la resolución de problemas.

ResourceNotFoundException

La clave de KMS especificada no existe. Formato del mensaje: KMS key key-arn does not exist. KMS request id: request-id.

ValidationException

La clave de KMS especificada se encuentra en un estado inutilizable que no se tolera en esta ruta de código. Formato del mensaje: KMS key key-arn is in an unusable state: state-description. KMS request id: request-id.

AccessDeniedException

La clave de KMS especificada está deshabilitada o el intermediario no tiene permiso. Formato del mensaje: KMS key key-arn is disabled. KMS request id: request-id.

Para obtener más información sobre los estados de las claves de KMS, consulte Estados de clave de las claves de AWS KMS en la Guía para desarrolladores de AWS Key Management Service.

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.