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

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

Los datos del grupo de registro siempre se cifran en Registros de CloudWatch. De forma predeterminada, Registros de CloudWatch utiliza el cifrado del 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 registro, ya sea al crear el grupo de registro 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 registro 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 AWS KMSClaves de y contexto de cifrado.

importante

Ahora Registros de CloudWatch admite kms:ViaService, lo que permite a los registros realizar llamadas de AWS KMS en su nombre. Esto se debe añadir a los roles, que llaman a Registros de CloudWatch en su política de claves o en IAM. Para obtener más información, consulte kms:ViaService.

Después de asociar una clave de KMS con un grupo de registro, todos los datos ingeridos recientemente para el grupo de registro 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 registro, 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 registro. 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 registro, 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 dr puede asociar una clave de KMS a un grupo de registro 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, se da permiso a la entidad principal del servicio de 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 AWS KMSClaves de y contexto de cifrado.

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

JSON
{ "Version":"2012-10-17", "Id": "key-default-1", "Statement": [ { "Sid": "Enable IAM User Permissions", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::123456789012:root" }, "Action": "kms:*", "Resource": "*" }, { "Effect": "Allow", "Principal": { "Service": "logs.us-east-1.amazonaws.com" }, "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*", "kms:Describe*" ], "Resource": "*", "Condition": { "ArnEquals": { "kms:EncryptionContext:aws:logs:arn": "arn:aws:logs:us-east-1:111122223333: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.

JSON
{ "Version":"2012-10-17", "Id": "key-default-1", "Statement": [ { "Sid": "Enable IAM User Permissions", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::123456789012:root" }, "Action": "kms:*", "Resource": "*" }, { "Effect": "Allow", "Principal": { "Service": "logs.us-east-1.amazonaws.com" }, "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*", "kms:Describe*" ], "Resource": "*", "Condition": { "ArnLike": { "kms:EncryptionContext:aws:logs:arn": "arn:aws:logs:us-east-1:123456789012:*" } } } ] }

A continuación, añada permisos al rol que llamará a Registros de CloudWatch. Para ello, se puede añadir una declaración adicional a la política de claves AWS KMS o mediante IAM en el rol en sí. Registros de CloudWatch utiliza kms:ViaService para realizar llamadas a AWS KMS en nombre del cliente. Para obtener más información, consulte kms:ViaService.

Para añadir permisos a la política de claves de AWS KMS, añada la siguiente declaración adicional a su política de claves. Si se utiliza este método, como práctica recomendada, aplique la política únicamente a las funciones que van a interactuar con los grupos de registros de AWS KMS cifrados.

{ "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::account_id:role/role_name" }, "Action": [ "kms:Encrypt", "kms:ReEncrypt*", "kms:Decrypt", "kms:GenerateDataKey*", "kms:Describe*" ], "Resource": "*", "Condition": { "StringEquals": { "kms:ViaService": [ "logs.region.amazonaws.com" ] } } }

Como alternativa, si se desean gestionar los permisos de los roles en IAM, se pueden añadir permisos equivalentes mediante la siguiente política. Esto se puede añadir a una política de roles existente o adjuntarse a un rol como una política independiente adicional. Si se utiliza este método, como práctica recomendada, aplique la política únicamente a las claves de AWS KMS que se utilizarán para el cifrado de registros. Para obtener más información, consulte Editar políticas de IAM.

JSON
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "kms:Encrypt", "kms:ReEncrypt*", "kms:Decrypt", "kms:GenerateDataKey*", "kms:Describe*" ], "Condition": { "StringEquals": { "kms:ViaService": [ "logs.us-east-1.amazonaws.com" ] } }, "Resource": "arn:aws:kms:us-east-1:444455556666:key/key_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 registro

Puede asociar una clave de KMS a un grupo de registro 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 registro 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 registro 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 registro

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

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

AWS KMSClaves de y contexto de cifrado

Para mejorar la seguridad de las claves de AWS Key Management Service y de los grupos de registro cifrados, Registros de CloudWatch ahora coloca ARN de grupo de registro 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 registro. 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 registro que cifró anteriormente y ahora desea cambiar el grupo de registro para utilizar una nueva clave de KMS que funcione solo para ese grupo de registro, siga estos pasos.

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

    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:

    JSON
    { "Version":"2012-10-17", "Id": "key-default-1", "Statement": [ { "Sid": "Enable IAM User Permissions", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:root" }, "Action": "kms:*", "Resource": "*" }, { "Effect": "Allow", "Principal": { "Service": "logs.us-east-1.amazonaws.com" }, "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*", "kms:Describe*" ], "Resource": "*", "Condition": { "ArnLike": { "kms:EncryptionContext:aws:logs:arn": "arn:aws:logs:us-east-1:111122223333: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 registro:

    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.

    JSON
    { "Version":"2012-10-17", "Id": "key-default-1", "Statement": [ { "Sid": "Enable IAM User Permissions", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333: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