Cifrado de datos de registro en Registros de CloudWatch mediante AWS Key Management Service - Amazon CloudWatch Logs

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Cifrado de datos de registro en Registros de CloudWatch mediante AWS Key Management Service

Los datos del grupo de registros siempre se cifran en Registros de CloudWatch. De forma predeterminada, Registros de CloudWatch utiliza el cifrado del lado servidor con el modo Galois/Counter Mode (AES-GCM) estándar de cifrado avanzado de 256 bits para cifrar los datos de registro en reposo. Como alternativa, puede utilizar AWS Key Management Service para este cifrado. Si lo hace, el cifrado se realiza con una clave de AWS KMS. El cifrado con AWS KMS se habilita en el nivel del grupo de registro mediante la asociación de una clave de KMS con un grupo de registros, ya sea al crear el grupo de registros o después de crearlo.

importante

Registros de CloudWatch ahora admite el contexto de cifrado, con kms:EncryptionContext:aws:logs:arn como clave y el ARN del grupo de registros como el valor de dicha clave. Si tiene grupos de registro que ya ha cifrado con una clave de KMS y desea restringir la clave para que se utilice con una sola cuenta y grupo de registro, debe asignar una nueva clave de KMS que incluya una condición en la política de IAM. Para obtener más información, consulte Claves de AWS KMS y contexto de cifrado.

Después de asociar una clave de KMS con un grupo de registros, todos los datos ingeridos recientemente para el grupo de registros se cifran mediante la clave. Estos datos se almacenan en formato cifrado durante todo el periodo de retención. Registros de CloudWatch descifra estos datos siempre que se solicita. Registros de CloudWatch debe tener permisos para la clave de KMS cuando se soliciten datos cifrados.

Si más adelante desasocia una clave de KMS de un grupo de registros, Registros de CloudWatch cifrará los datos ingeridos recientemente mediante el método de cifrado predeterminado de Registros de CloudWatch. Todos los datos previamente ingeridos que se cifraron con la clave de KMS permanecen cifrados con dicha clave. Registros de CloudWatch puede seguir devolviendo esos datos una vez que se haya desasociado la clave de KMS, ya que Registros de CloudWatch puede seguir haciendo referencia a la clave. Sin embargo, si la clave se deshabilita posteriormente, Registros de CloudWatch no podrá leer los registros cifrados con esa clave.

importante

Registros de CloudWatch solo admite claves de KMS simétricas. No utilice una clave asimétrica administrada por el cliente para cifrar los datos de los grupos de registros. Para obtener más información, consulte Utilización de claves simétricas y asimétricas.

Límites

  • Para realizar los siguientes pasos, debe tener los siguientes permisos: kms:CreateKey, kms:GetKeyPolicy y kms:PutKeyPolicy.

  • Después de asociar o desvincular una clave desde un grupo de registros, puede tardar hasta cinco minutos para que la operación surta efecto.

  • Si revoca el acceso de Registros de CloudWatch a una clave asociada o elimina una clave de KMS asociada, los datos cifrados en Registros de CloudWatch ya no se pueden recuperar.

  • No puede asociar una clave de KMS a un grupo de registros mediante la consola de CloudWatch.

Paso 1: crear una clave de AWS KMS

Para crear una clave de KMS, utilice el siguiente comando create-key:

aws kms create-key

La salida contiene la ID de clave y el nombre de recurso de Amazon (ARN) de la clave. A continuación, se muestra un ejemplo de la salida:

{ "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" ] } }

Paso 2: establecer permisos en la clave de KMS

De forma predeterminada, todas las claves de AWS KMS son privadas. Solo el propietario del recurso puede utilizarla para cifrar y descifrar datos. Sin embargo, el propietario del recurso puede conceder permisos para que otros usuarios y recursos accedan a la clave de KMS. Con este paso, da permiso a la entidad principal del servicio Registros de CloudWatch para utilizar la clave. Esta entidad principal del servicio debe estar en la misma región de AWS en la que está almacenada la clave de KMS.

Como práctica recomendada, recomendamos que restrinja el uso de la clave de KMS únicamente a las cuentas de AWS o grupos de registro que especifique.

En primer lugar, guarde la política predeterminada para la clave de KMS como policy.json con el siguiente comando get-key-policy:

aws kms get-key-policy --key-id key-id --policy-name default --output text > ./policy.json

Abra el archivo policy.json en un editor de texto y agregue la sección en negrita desde una de las instrucciones siguientes. Separe la instrucción existente de la nueva instrucción con una coma. Estas instrucciones utilizan secciones de Condition para mejorar la seguridad de la clave de AWS KMS. Para obtener más información, consulte Claves de AWS KMS y contexto de cifrado.

La sección Condition de este ejemplo restringe la clave a un ARN único de grupo de registros.

{ "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" } } } ] }

La sección Condition de este ejemplo limita la utilización de la clave de AWS KMS a la cuenta especificada, pero se puede utilizar para cualquier grupo de registro.

{ "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:*" } } } ] }

Por último, agregue la política actualizada con el siguiente comando put-key-policy:

aws kms put-key-policy --key-id key-id --policy-name default --policy file://policy.json

Paso 3: asociar una clave de KMS a un grupo de registros

Puede asociar una clave de KMS a un grupo de registros al crearlo o posteriormente.

Para averiguar si un grupo de registro ya tiene una clave de KMS asociada, utilice el siguiente comando describe-log-groups:

aws logs describe-log-groups --log-group-name-prefix "log-group-name-prefix"

Si la salida incluye un campo kmsKeyId, el grupo de registro se asocia con la clave mostrada para el valor de ese campo.

Para asociar la clave de KMS a un grupo de registros al crearlo

Utilice el comando create-log-group como se indica a continuación:

aws logs create-log-group --log-group-name my-log-group --kms-key-id "key-arn"
Para asociar la clave de KMS a un grupo de registros existente

Utilice el comando associate-kms-key como se indica a continuación:

aws logs associate-kms-key --log-group-name my-log-group --kms-key-id "key-arn"

Paso 4: desasociar una clave de un grupo de registros

Para desasociar la clave de KMS asociada a un grupo de registros, utilice el siguiente comando disassociate-kms-key:

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

Claves de AWS KMS y contexto de cifrado

Para mejorar la seguridad de las claves de AWS Key Management Service y de los grupos de registros cifrados, Registros de CloudWatch ahora coloca ARN de grupo de registros como parte del contexto de cifrado utilizado para cifrar los datos de registro. El contexto de cifrado es un conjunto de pares clave-valor que se utilizan como datos autenticados adicionales. El contexto de cifrado habilita a utilizar condiciones de política de IAM para limitar el acceso a la clave de AWS KMS por cuenta de AWS y grupo de registros. Para obtener más información, consulte Contexto de cifrado y Elementos de la política de JSON de IAM: condición.

Recomendamos que utilice diferentes claves de KMS para cada uno de los grupos de registro cifrados.

Si tiene un grupo de registros que cifró anteriormente y ahora desea cambiar el grupo de registros para utilizar una nueva clave de KMS que funcione solo para ese grupo de registros, siga estos pasos.

Para convertir un grupo de registros cifrado a fin de utilizar una clave de KMS con una política que la limite a ese grupo de registros
  1. Ingrese el siguiente comando para encontrar el ARN de la clave actual del grupo de registros:

    aws logs describe-log-groups

    La salida incluye la siguiente línea. Tome nota del ARN. Tiene que utilizarlo en el paso 7.

    ... "kmsKeyId": "arn:aws:kms:us-west-2:123456789012:key/01234567-89ab-cdef-0123-456789abcdef" ...
  2. Ingrese el siguiente comando para crear una nueva clave de KMS:

    aws kms create-key
  3. Escriba el siguiente comando para guardar la política de la nueva clave en un archivo policy.json:

    aws kms get-key-policy --key-id new-key-id --policy-name default --output text > ./policy.json
  4. Utilice un editor de texto para abrir policy.json y agregar una expresión Condition a la 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. Ingrese el siguiente comando para agregar la política actualizada a la nueva clave de KMS:

    aws kms put-key-policy --key-id new-key-ARN --policy-name default --policy file://policy.json
  6. Ingrese el siguiente comando para asociar la política al grupo de registros:

    aws logs associate-kms-key --log-group-name my-log-group --kms-key-id new-key-ARN

    Registros de CloudWatch ahora cifra todos los datos nuevos mediante la nueva clave.

  7. Luego, revoque todos los permisos excepto Decrypt en la antigua clave. En primer lugar, ingrese el siguiente comando para recuperar la política anterior:

    aws kms get-key-policy --key-id old-key-ARN --policy-name default --output text > ./policy.json
  8. Utilice un editor de texto para abrir policy.json y eliminar todos los valores de la lista Action, excepto 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. Ingrese el siguiente comando para agregar la política actualizada a la antigua clave:

    aws kms put-key-policy --key-id old-key-ARN --policy-name default --policy file://policy.json