Chiffrement des données de journaux dans CloudWatch Logs à l'aide d' AWS Key Management Service - Amazon CloudWatch Logs

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Chiffrement des données de journaux dans CloudWatch Logs à l'aide d' AWS Key Management Service

Les données du groupe de journaux sont toujours chiffrées dans CloudWatch Logs. Par défaut, CloudWatch Logs utilise un chiffrement côté serveur avec AES-Galois/Counter Mode (AES-GCM) 256 bits pour chiffrer les données des journaux au repos. En guise d'alternative, vous pouvez utiliser AWS Key Management Service pour ce chiffrement. Dans ce cas, le chiffrement est effectué à l'aide d'une AWS KMS clé. Le chiffrement avec AWS KMS est activé au niveau du groupe de journaux en associant une clé KMS à un groupe de journaux, pendant la création du groupe de journaux ou ultérieurement.

Important

CloudWatch Les journaux prennent désormais en charge le contexte de chiffrement, en utilisant kms:EncryptionContext:aws:logs:arn comme clé et ARN du groupe de journaux comme valeur pour cette clé. Si vous disposez de groupes de journaux que vous avez déjà chiffrés avec une clé KMS et que vous souhaitez restreindre l'utilisation de cette clé à un seul compte et à un seul groupe de journaux, vous devez affecter une nouvelle clé KMS incluant une condition dans la politique IAM. Pour de plus amples informations, veuillez consulter AWS KMS Clés et contexte de chiffrement.

Important

CloudWatch Logs prend désormais en charge kms:ViaService ce qui permet aux journaux de passer AWS KMS des appels en votre nom. Vous devez l'ajouter à vos rôles qui appellent CloudWatch Logs soit dans votre politique clé, soit dans IAM. Pour de plus amples informations, veuillez consulter kms : ViaService.

Dès lors que vous associez une clé KMS à un groupe de journaux, toutes les données nouvellement ingérées pour le groupe de journaux sont chiffrées à l'aide de cette clé. Ces données sont stockées sous forme chiffrée pendant toute leur période de conservation. CloudWatch Logs déchiffre ces données chaque fois qu'elles sont demandées. CloudWatch Les journaux doivent avoir les autorisations nécessaires sur la clé KMS lorsque des données chiffrées sont demandées.

Si vous dissociez ultérieurement une clé KMS d'un groupe de CloudWatch journaux, Logs chiffre les données nouvellement ingérées à l'aide de la méthode de chiffrement par défaut des CloudWatch journaux. Toutes les données précédemment ingérées chiffrées avec la clé KMS restent chiffrées avec celle-ci. CloudWatch Les journaux peuvent toujours renvoyer ces données après la dissociation de la clé KMS, car CloudWatch les journaux peuvent toujours continuer à référencer la clé. Cependant, si la clé est désactivée ultérieurement, CloudWatch Logs ne pourra pas lire les journaux qui ont été chiffrés avec celle-ci.

Important

CloudWatch Logs ne prend en charge que les clés KMS symétriques. N'utilisez pas de clé asymétrique pour chiffrer les données de vos groupes de journaux. Pour plus d'informations, consultez Utilisation des clés symétriques et asymétriques.

Limites

  • Pour effectuer les étapes suivantes, vous devez disposer des autorisations suivantes : kms:CreateKey, kms:GetKeyPolicy et kms:PutKeyPolicy.

  • L'association et la dissociation d'une clé vis-à-vis d'un groupe de journaux peuvent mettre jusqu'à cinq minutes à être prises en compte.

  • Si vous révoquez l'accès CloudWatch des journaux à une clé associée ou que vous supprimez une clé KMS associée, vos données chiffrées dans CloudWatch Logs ne peuvent plus être récupérées.

  • Vous ne pouvez pas associer une clé KMS à un groupe de journaux existant à l'aide de la CloudWatch console.

Étape 1 : Création d'une AWS KMS clé

Pour créer une clé KMS, utilisez la commande create-key suivante :

aws kms create-key

La sortie contient l'ID de clé et l'Amazon Resource Name (ARN) de la clé. Voici un exemple de sortie :

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

Étape 2 : Définition des autorisations sur la clé KMS

Par défaut, toutes les AWS KMS clés sont privées. Seul le propriétaire de la ressource peut l'utiliser pour chiffrer et déchiffrer des données. Cependant, le propriétaire de la ressource peut accorder à d'autres utilisateurs et ressources des autorisations d'accès à la clé KMS. Avec cette étape, vous autorisez le principal du service CloudWatch Logs et le rôle d'appelant à utiliser la clé. Ce principal de service doit être situé dans la même AWS région que celle où la clé KMS est stockée.

À titre de bonne pratique, nous vous recommandons de limiter l'utilisation de la clé KMS uniquement aux groupes de journaux ou AWS comptes que vous spécifiez.

Tout d'abord, enregistrez la stratégie par défaut de votre clé KMS à policy.json l'aide de la get-key-policycommande suivante :

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

Ouvrez le fichier policy.json dans un éditeur de texte et ajoutez la section en gras à partir de l'une des instructions suivantes. Séparez l'instruction existante de la nouvelle instruction par une virgule. Ces instructions utilisent Condition des sections pour améliorer la sécurité de la AWS KMS clé. Pour de plus amples informations, veuillez consulter AWS KMS Clés et contexte de chiffrement.

La section Condition de cet exemple restreint la clé à un seul ARN de groupe de journaux.

{ "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 section Condition de cet exemple limite l'utilisation de la clé AWS KMS au compte spécifié, mais elle peut être utilisée pour n'importe quel groupe de journaux.

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

Ajoutez ensuite des autorisations au rôle qui appellera les CloudWatch journaux. Vous pouvez le faire en ajoutant une déclaration supplémentaire à la politique AWS KMS clé ou via IAM sur le rôle lui-même. CloudWatch Enregistre kms:ViaService les utilisations pour passer AWS KMS des appels au nom du client. Pour de plus amples informations, veuillez consulter kms : ViaService.

Pour ajouter des autorisations dans la politique AWS KMS clé, ajoutez la déclaration supplémentaire suivante à votre politique clé. Si vous utilisez cette méthode, il est recommandé d'étendre la politique aux seuls rôles qui interagiront avec des groupes de journaux AWS KMS chiffrés.

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

Si vous souhaitez gérer les autorisations des rôles dans IAM, vous pouvez également ajouter des autorisations équivalentes par le biais de la politique suivante. Cela peut être ajouté à une politique de rôle existante ou attaché à un rôle en tant que stratégie distincte supplémentaire. Si vous utilisez cette méthode, il est recommandé d'étendre la politique aux seules AWS KMS clés qui seront utilisées pour le chiffrement des journaux. Pour plus d'informations, voir Modifier les politiques IAM.

{ "Version": "2012-10-17", "Statement" : [ { "Effect": "Allow", "Action": [ "kms:Encrypt", "kms:ReEncrypt*", "kms:Decrypt", "kms:GenerateDataKey*", "kms:Describe*" ], "Condition":{ "StringEquals":{ "kms:ViaService": [ "logs.region.amazonaws.com" ] } }, "Resource": "arn:aws:kms:region:account_id:key/key_id" } ] }

Enfin, ajoutez la politique mise à jour à l'aide de la put-key-policycommande suivante :

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

Étape 3 : Association d'une clé KMS à un groupe de journaux

Vous pouvez associer une clé KMS à un groupe de journaux lors de sa création, ou ultérieurement.

Pour savoir si une clé KMS est déjà associée à un groupe de journaux, utilisez la describe-log-groupscommande suivante :

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

Si la sortie inclut un champ kmsKeyId, le groupe de journaux est associé à la clé affichée pour la valeur de ce champ.

Pour associer la clé KMS à un groupe de journaux lors de sa création

Utilisez la commande create-log-group comme suit :

aws logs create-log-group --log-group-name my-log-group --kms-key-id "key-arn"
Pour associer la clé KMS à un groupe de journaux existant

Utilisez la commande associate-kms-key comme suit :

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

Étape 4 : Dissociation de la clé d'un groupe de journaux

Pour dissocier la clé KMS associée à un groupe de journaux, utilisez la disassociate-kms-keycommande suivante :

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

AWS KMS Clés et contexte de chiffrement

Pour améliorer la sécurité de vos AWS Key Management Service clés et de vos groupes de CloudWatch journaux chiffrés, Logs place désormais le groupe ARNs de journaux dans le contexte de chiffrement utilisé pour chiffrer vos données de journal. Le contexte de chiffrement est un ensemble de paires clé-valeur qui sont utilisées comme données authentifiées supplémentaires. Le contexte de chiffrement vous permet d'utiliser des conditions de politique IAM pour limiter l'accès à votre AWS KMS clé par AWS compte et groupe de journaux. Pour plus d'informations, consultez Contexte de chiffrement et Éléments de politique JSON IAM : Condition.

Nous vous recommandons d'utiliser différentes clés KMS pour chacun de vos groupes de journaux chiffrés.

Si vous disposez d'un groupe de journaux déjà chiffré et que vous souhaitez le modifier afin d'utiliser une nouvelle clé KMS dédiée à celui-ci, procédez comme suit.

Pour convertir un groupe de journaux chiffré afin d'utiliser une clé KMS avec une politique la limitant à ce groupe de journaux
  1. Saisissez la commande suivante pour trouver l'ARN de la clé actuelle du groupe de journaux :

    aws logs describe-log-groups

    La sortie comprend la ligne suivante. Prenez note de l'ARN. Vous devez l'utiliser à l'étape 7.

    ... "kmsKeyId": "arn:aws:kms:us-west-2:123456789012:key/01234567-89ab-cdef-0123-456789abcdef" ...
  2. Saisissez la commande suivante pour créer une nouvelle clé KMS :

    aws kms create-key
  3. Entrez la commande suivante pour enregistrer la stratégie de la nouvelle clé dans un fichier policy.json :

    aws kms get-key-policy --key-id new-key-id --policy-name default --output text > ./policy.json
  4. Utilisez un éditeur de texte pour ouvrir policy.json et ajouter une expression Condition à la stratégie :

    { "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. Saisissez la commande suivante pour ajouter la politique mise à jour à la nouvelle clé KMS :

    aws kms put-key-policy --key-id new-key-ARN --policy-name default --policy file://policy.json
  6. Entrez la commande suivante pour associer la stratégie à votre groupe de journaux :

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

    CloudWatch Logs chiffre maintenant toutes les nouvelles données à l'aide de la nouvelle clé.

  7. Ensuite, révoquez toutes les autorisations à l'exception de Decrypt provenant de l'ancienne clé. Tout d'abord, saisissez la commande suivante pour récupérer l'ancienne politique :

    aws kms get-key-policy --key-id old-key-ARN --policy-name default --output text > ./policy.json
  8. Utilisez un éditeur de texte pour ouvrir policy.json et supprimer toutes les valeurs de la liste Action, à l'exception de 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. Saisissez la commande suivante pour ajouter la politique mise à jour à l'ancienne clé :

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