Chiffrez les données du journal dans CloudWatch Logs à l'aide de 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.

Chiffrez les données du journal dans CloudWatch Logs à l'aide de AWS Key Management Service

Les données des groupes de journaux sont toujours cryptées dans CloudWatch Logs. Par défaut, CloudWatch Logs utilise le chiffrement côté serveur avec le mode AES-GCM (Advanced Encryption Standard Galois/Counter Mode) 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. Si c'est le cas, le chiffrement est effectué à l'aide d'une AWS KMS clé. L'utilisation du chiffrement AWS KMS est activée au niveau du groupe de journaux, en associant une clé KMS à un groupe de journaux, soit lorsque vous créez le groupe de journaux, soit après son existence.

Important

CloudWatch Les journaux prennent désormais en charge le contexte de chiffrement, en utilisant kms:EncryptionContext:aws:logs:arn comme clé et l'ARN du groupe de journaux comme valeur de 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 plus d'informations, voir 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 cryptée pendant toute la durée de conservation. CloudWatch Logs déchiffre ces données chaque fois qu'elles sont demandées. CloudWatch Les journaux doivent disposer d'autorisations pour la clé KMS chaque fois que 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 en utilisant la méthode de chiffrement par défaut de CloudWatch Logs. Toutes les données précédemment ingérées qui ont été chiffrées avec la clé KMS restent chiffrées avec la clé KMS. CloudWatch Les journaux peuvent toujours renvoyer ces données une fois la clé KMS dissociée, car CloudWatch les journaux peuvent continuer à faire référence à la clé. Toutefois, si la clé est désactivée ultérieurement, CloudWatch Logs ne pourra pas lire les journaux chiffrés avec cette clé.

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 de CloudWatch Logs à une clé associée ou si 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. Au cours de cette étape, vous autorisez le principal du service CloudWatch Logs et le rôle de l'appelant à utiliser la clé. Ce principal de service doit se trouver dans la même AWS région que celle où la clé KMS est stockée.

Il est recommandé de limiter l'utilisation de la clé KMS aux seuls AWS comptes ou groupes de journaux que vous spécifiez.

Tout d'abord, enregistrez la politique par défaut pour 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 renforcer 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.

JSON
{ "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.

JSON
{ "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 plus d'informations, voir 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, consultez la section Modifier les politiques 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: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 renforcer la sécurité de vos AWS Key Management Service clés et de vos groupes de CloudWatch journaux chiffrés, Logs intègre désormais le groupe ARNs de journaux dans le contexte de chiffrement utilisé pour chiffrer les données de vos journaux. 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 les conditions de la politique IAM pour limiter l'accès à votre AWS KMS clé par AWS compte et par 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 :

    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:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*", "kms:Describe*" ], "Resource": "*", "Condition": { "ArnLike": { "kms:EncryptionContext:aws:logs:arn": "arn:aws:logs:us-east-1: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 désormais 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

    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. 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