Exportez les données du journal vers Amazon S3 à l'aide du AWS CLI - 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.

Exportez les données du journal vers Amazon S3 à l'aide du AWS CLI

Dans l'exemple suivant, vous utilisez une tâche d'exportation pour exporter toutes les données d'un groupe de CloudWatch journaux Logs nommé my-log-group vers un compartiment Amazon S3 nommémy-exported-logs. Cet exemple suppose que vous avez déjà créé un groupe de journaux appelé my-log-group.

L'exportation des données du journal vers des compartiments S3 chiffrés par AWS KMS est prise en charge. L'exportation vers les compartiments chiffrés avec DSSE-KMS n'est pas prise en charge.

Les détails de la configuration de l'exportation varient selon que le compartiment Amazon S3 vers lequel vous souhaitez exporter se trouve dans le même compte que vos journaux à exporter ou dans un compte différent.

Exportation vers le même compte

Si le compartiment Amazon S3 se trouve dans le même compte que les journaux à exporter, suivez les instructions de cette section.

Étape 1 : Créer un compartiment S3

Nous vous recommandons d'utiliser un bucket créé spécifiquement pour CloudWatch Logs. Cependant, si vous souhaitez utiliser un compartiment existant, vous pouvez passer à l'étape 2.

Note

Le compartiment S3 doit résider dans la même région que les données du journal à exporter. CloudWatch Logs ne prend pas en charge l'exportation de données vers des compartiments S3 d'une autre région.

Pour créer un compartiment S3 à l'aide du AWS CLI

À partir d'une invite de commande, exécutez la commande create-bucket suivante, où LocationConstraint correspond à la région dans laquelle vous exportez les données de journal.

aws s3api create-bucket --bucket my-exported-logs --create-bucket-configuration LocationConstraint=us-east-2

Voici un exemple de sortie.

{ "Location": "/my-exported-logs" }

Étape 2 : définir les autorisations d'accès

Pour créer la tâche d'exportation à l'étape 5, vous devez être connecté avec le rôle IAM AmazonS3ReadOnlyAccess et disposer des autorisations suivantes :

  • logs:CreateExportTask

  • logs:CancelExportTask

  • logs:DescribeExportTasks

  • logs:DescribeLogStreams

  • logs:DescribeLogGroups

Pour activer l’accès, ajoutez des autorisations à vos utilisateurs, groupes ou rôles :

Étape 3 : définir les autorisations sur un compartiment S3

Par défaut, tous les objets et les compartiments S3 sont privés. Seul le propriétaire de la ressource, le compte ayant créé le compartiment, peut accéder au compartiment et aux objets qu’il contient. Le propriétaire de la ressource peut toutefois accorder des autorisations d'accès à d'autres ressources et à d'autres utilisateurs en créant une stratégie d'accès.

Important

Pour sécuriser davantage les exportations vers les compartiments S3, nous vous demandons désormais de spécifier la liste des comptes sources autorisés à exporter les données des journaux vers votre compartiment S3.

Dans l'exemple suivant, la liste des identifiants de compte figurant dans la clé aws:SourceAccount correspond aux comptes à partir desquels un utilisateur peut exporter des données du journal vers votre compartiment S3. La clé aws:SourceArn correspond à la ressource pour laquelle l'action est entreprise. Vous pouvez limiter cela à un groupe de journaux spécifique ou utiliser un caractère générique, comme indiqué dans cet exemple.

Nous vous recommandons d'inclure également l'ID du compte sur lequel le compartiment S3 est créé, afin de permettre l'exportation au sein du même compte.

Définition des autorisations sur un compartiment S3
  1. Créez un fichier nommé policy.json et ajoutez la stratégie d'accès suivante, en changeant my-exported-logs par le nom de votre compartiment S3 et Principal par le point de terminaison de la région où vous exportez les données du journal, tel que us-west-1. Utilisez un éditeur de texte créer ce fichier de stratégie. N'utilisez pas la console IAM.

    { "Version": "2012-10-17", "Statement": [ { "Action": "s3:GetBucketAcl", "Effect": "Allow", "Resource": "arn:aws:s3:::my-exported-logs", "Principal": { "Service": "logs.Region.amazonaws.com" }, "Condition": { "StringEquals": { "aws:SourceAccount": [ "AccountId1", "AccountId2", ... ] }, "ArnLike": { "aws:SourceArn": [ "arn:aws:logs:Region:AccountId1:log-group:*", "arn:aws:logs:Region:AccountId2:log-group:*", ... ] } } }, { "Action": "s3:PutObject" , "Effect": "Allow", "Resource": "arn:aws:s3:::my-exported-logs/*", "Principal": { "Service": "logs.Region.amazonaws.com" }, "Condition": { "StringEquals": { "s3:x-amz-acl": "bucket-owner-full-control", "aws:SourceAccount": [ "AccountId1", "AccountId2", ... ] }, "ArnLike": { "aws:SourceArn": [ "arn:aws:logs:Region:AccountId1:log-group:*", "arn:aws:logs:Region:AccountId2:log-group:*", ... ] } } } ] }
  2. Définissez la politique que vous venez d'ajouter comme politique d'accès à votre compartiment à l'aide de la put-bucket-policycommande. Cette politique permet à CloudWatch Logs d'exporter les données des journaux vers votre compartiment S3. Le propriétaire du compartiment disposera des autorisations d'accès complet à tous les objets exportés.

    aws s3api put-bucket-policy --bucket my-exported-logs --policy file://policy.json
    Avertissement

    Si une ou plusieurs politiques sont déjà associées au bucket existant, ajoutez les instructions pour l'accès aux CloudWatch journaux à cette ou ces politiques. Nous vous recommandons d'évaluer le jeu d'autorisations obtenu pour vérifier son adéquation pour les utilisateurs appelés à accéder au compartiment.

(Facultatif) Étape 4 : exportation vers un compartiment chiffré avec SSE-KMS

Cette étape n'est nécessaire que si vous exportez vers un compartiment S3 qui utilise le chiffrement côté serveur avec. AWS KMS keysCe chiffrement est connu sous le nom de SSE-KMS.

Exportation vers un compartiment chiffré avec SSE-KMS
  1. Utilisez un éditeur de texte pour créer un fichier nommé key_policy.json et ajoutez la stratégie d'accès suivante. Lorsque vous ajoutez la politique, apportez les modifications suivantes :

    • Remplacez Region par la région de vos journaux.

    • Remplacez account-ARN par l'ARN du compte qui possède la clé KMS.

    { "Version": "2012-10-17", "Statement": [ { "Sid": "Allow CWL Service Principal usage", "Effect": "Allow", "Principal": { "Service": "logs.Region.amazonaws.com" }, "Action": [ "kms:GenerateDataKey", "kms:Decrypt" ], "Resource": "*" }, { "Sid": "Enable IAM User Permissions", "Effect": "Allow", "Principal": { "AWS": "account-ARN" }, "Action": [ "kms:GetKeyPolicy*", "kms:PutKeyPolicy*", "kms:DescribeKey*", "kms:CreateAlias*", "kms:ScheduleKeyDeletion*", "kms:Decrypt" ], "Resource": "*" } ] }
  2. Entrez la commande suivante :

    aws kms create-key --policy file://key_policy.json

    Voici un exemple de sortie de la commande :

    { "KeyMetadata": { "AWSAccountId": "account_id", "KeyId": "key_id", "Arn": "arn:aws:kms:us-east-2:account_id:key/key_id", "CreationDate": "time", "Enabled": true, "Description": "", "KeyUsage": "ENCRYPT_DECRYPT", "KeyState": "Enabled", "Origin": "AWS_KMS", "KeyManager": "CUSTOMER", "CustomerMasterKeySpec": "SYMMETRIC_DEFAULT", "KeySpec": "SYMMETRIC_DEFAULT", "EncryptionAlgorithms": [ "SYMMETRIC_DEFAULT" ], "MultiRegion": false }
  3. À l'aide d'un éditeur de texte, créez un fichier nommé bucketencryption.json avec le contenu suivant.

    { "Rules": [ { "ApplyServerSideEncryptionByDefault": { "SSEAlgorithm": "aws:kms", "KMSMasterKeyID": "{KMS Key ARN}" }, "BucketKeyEnabled": true } ] }
  4. Exécutez la commande suivante en remplaçant bucket-name par le nom du compartiment vers lequel vous exportez les journaux.

    aws s3api put-bucket-encryption --bucket bucket-name --server-side-encryption-configuration file://bucketencryption.json

    Si la commande ne renvoie pas d'erreur, le processus est réussi.

Étape 5 : créer une tâche d'exportation

Utilisez la commande suivante pour créer la tâche d'exportation. Une fois que vous l'avez créée, la tâche d'exportation peut prendre de quelques secondes à quelques heures, en fonction de la taille des données à exporter.

Pour exporter des données vers Amazon S3 à l'aide du AWS CLI
  1. Connectez-vous avec les autorisations suffisantes, comme indiqué dans Étape 2 : définir les autorisations d'accès.

  2. À l'invite de commandes, utilisez la create-export-taskcommande suivante pour créer la tâche d'exportation.

    aws logs create-export-task --profile CWLExportUser --task-name "my-log-group-09-10-2015" --log-group-name "my-log-group" --from 1441490400000 --to 1441494000000 --destination "my-exported-logs" --destination-prefix "export-task-output"

    Voici un exemple de sortie.

    { "taskId": "cda45419-90ea-4db5-9833-aade86253e66" }

Exportation intercomptes

Si le compartiment Amazon S3 se trouve dans un compte différent de celui des journaux à exporter, suivez les instructions de cette section.

Étape 1 : Créer un compartiment S3

Nous vous recommandons d'utiliser un bucket créé spécifiquement pour CloudWatch Logs. Cependant, si vous souhaitez utiliser un compartiment existant, vous pouvez passer à l'étape 2.

Note

Le compartiment S3 doit résider dans la même région que les données du journal à exporter. CloudWatch Logs ne prend pas en charge l'exportation de données vers des compartiments S3 d'une autre région.

Pour créer un compartiment S3 à l'aide du AWS CLI

À partir d'une invite de commande, exécutez la commande create-bucket suivante, où LocationConstraint correspond à la région dans laquelle vous exportez les données de journal.

aws s3api create-bucket --bucket my-exported-logs --create-bucket-configuration LocationConstraint=us-east-2

Voici un exemple de sortie.

{ "Location": "/my-exported-logs" }

Étape 2 : définir les autorisations d'accès

Tout d'abord, vous devez créer une nouvelle politique IAM pour permettre à CloudWatch Logs d'avoir l's3:PutObjectautorisation d'accéder au compartiment Amazon S3 de destination.

Pour créer la tâche d'exportation à l'étape 5, vous devez vous connecter avec le rôle IAM AmazonS3ReadOnlyAccess et d'autres autorisations spécifiques. Vous pouvez créer une politique contenant certaines de ces autres autorisations nécessaires.

La politique que vous créez dépend de l'utilisation ou non du AWS KMS chiffrement par le compartiment de destination. S'il n'utilise pas AWS KMS le chiffrement, créez une politique avec le contenu suivant.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "s3:PutObject", "Resource": "arn:aws:s3:::my-exported-logs/*" } ] }

Si le compartiment de destination utilise AWS KMS le chiffrement, créez une politique avec le contenu suivant.

{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": "s3:PutObject", "Resource": "arn:aws:s3:::my-exported-logs/*" }, { "Effect": "Allow", "Action": [ "kms:GenerateDataKey", "kms:Decrypt" ], "Resource": "ARN_OF_KMS_KEY" } ] }

Pour créer la tâche d'exportation à l'étape 5, vous devez vous connecter avec le rôle IAM AmazonS3ReadOnlyAccess, la politique IAM que vous venez de créer et les autorisations suivantes :

  • logs:CreateExportTask

  • logs:CancelExportTask

  • logs:DescribeExportTasks

  • logs:DescribeLogStreams

  • logs:DescribeLogGroups

Pour activer l’accès, ajoutez des autorisations à vos utilisateurs, groupes ou rôles :

Étape 3 : définir les autorisations sur un compartiment S3

Par défaut, tous les objets et les compartiments S3 sont privés. Seul le propriétaire de la ressource, le compte ayant créé le compartiment, peut accéder au compartiment et aux objets qu’il contient. Le propriétaire de la ressource peut toutefois accorder des autorisations d'accès à d'autres ressources et à d'autres utilisateurs en créant une stratégie d'accès.

Important

Pour sécuriser davantage les exportations vers les compartiments S3, nous vous demandons désormais de spécifier la liste des comptes sources autorisés à exporter les données des journaux vers votre compartiment S3.

Dans l'exemple suivant, la liste des identifiants de compte figurant dans la clé aws:SourceAccount correspond aux comptes à partir desquels un utilisateur peut exporter des données du journal vers votre compartiment S3. La clé aws:SourceArn correspond à la ressource pour laquelle l'action est entreprise. Vous pouvez limiter cela à un groupe de journaux spécifique ou utiliser un caractère générique, comme indiqué dans cet exemple.

Nous vous recommandons d'inclure également l'ID du compte sur lequel le compartiment S3 est créé, afin de permettre l'exportation au sein du même compte.

Définition des autorisations sur un compartiment S3
  1. Créez un fichier nommé policy.json et ajoutez la stratégie d'accès suivante, en changeant my-exported-logs par le nom de votre compartiment S3 et Principal par le point de terminaison de la région où vous exportez les données du journal, tel que us-west-1. Utilisez un éditeur de texte créer ce fichier de stratégie. N'utilisez pas la console IAM.

    { "Version": "2012-10-17", "Statement": [ { "Action": "s3:GetBucketAcl", "Effect": "Allow", "Resource": "arn:aws:s3:::my-exported-logs", "Principal": { "Service": "logs.Region.amazonaws.com" }, "Condition": { "StringEquals": { "aws:SourceAccount": [ "AccountId1", "AccountId2", ... ] }, "ArnLike": { "aws:SourceArn": [ "arn:aws:logs:Region:AccountId1:log-group:*", "arn:aws:logs:Region:AccountId2:log-group:*", ... ] } } }, { "Action": "s3:PutObject" , "Effect": "Allow", "Resource": "arn:aws:s3:::my-exported-logs/*", "Principal": { "Service": "logs.Region.amazonaws.com" }, "Condition": { "StringEquals": { "s3:x-amz-acl": "bucket-owner-full-control", "aws:SourceAccount": [ "AccountId1", "AccountId2", ... ] }, "ArnLike": { "aws:SourceArn": [ "arn:aws:logs:Region:AccountId1:log-group:*", "arn:aws:logs:Region:AccountId2:log-group:*", ... ] } } }, { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::create_export_task_caller_account:role/role_name" }, "Action": "s3:PutObject", "Resource": "arn:aws:s3:::my-exported-logs/*", "Condition": { "StringEquals": { "s3:x-amz-acl": "bucket-owner-full-control" } } } ] }
  2. Définissez la politique que vous venez d'ajouter comme politique d'accès à votre compartiment à l'aide de la put-bucket-policycommande. Cette politique permet à CloudWatch Logs d'exporter les données des journaux vers votre compartiment S3. Le propriétaire du compartiment disposera des autorisations d'accès complet à tous les objets exportés.

    aws s3api put-bucket-policy --bucket my-exported-logs --policy file://policy.json
    Avertissement

    Si une ou plusieurs politiques sont déjà associées au bucket existant, ajoutez les instructions pour l'accès aux CloudWatch journaux à cette ou ces politiques. Nous vous recommandons d'évaluer le jeu d'autorisations obtenu pour vérifier son adéquation pour les utilisateurs appelés à accéder au compartiment.

(Facultatif) Étape 4 : exportation vers un compartiment chiffré avec SSE-KMS

Cette étape n'est nécessaire que si vous exportez vers un compartiment S3 qui utilise le chiffrement côté serveur avec. AWS KMS keysCe chiffrement est connu sous le nom de SSE-KMS.

Exportation vers un compartiment chiffré avec SSE-KMS
  1. Utilisez un éditeur de texte pour créer un fichier nommé key_policy.json et ajoutez la stratégie d'accès suivante. Lorsque vous ajoutez la politique, apportez les modifications suivantes :

    • Remplacez Region par la région de vos journaux.

    • Remplacez account-ARN par l'ARN du compte qui possède la clé KMS.

    { "Version": "2012-10-17", "Statement": [ { "Sid": "Allow CWL Service Principal usage", "Effect": "Allow", "Principal": { "Service": "logs.Region.amazonaws.com" }, "Action": [ "kms:GenerateDataKey", "kms:Decrypt" ], "Resource": "*" }, { "Sid": "Enable IAM User Permissions", "Effect": "Allow", "Principal": { "AWS": "account-ARN" }, "Action": [ "kms:GetKeyPolicy*", "kms:PutKeyPolicy*", "kms:DescribeKey*", "kms:CreateAlias*", "kms:ScheduleKeyDeletion*", "kms:Decrypt" ], "Resource": "*" }, { "Sid": "Enable IAM Role Permissions", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::create_export_task_caller_account:role/role_name" }, "Action": [ "kms:GenerateDataKey", "kms:Decrypt" ], "Resource": "ARN_OF_KMS_KEY" } ] }
  2. Entrez la commande suivante :

    aws kms create-key --policy file://key_policy.json

    Voici un exemple de sortie de la commande :

    { "KeyMetadata": { "AWSAccountId": "account_id", "KeyId": "key_id", "Arn": "arn:aws:kms:us-east-2:account_id:key/key_id", "CreationDate": "time", "Enabled": true, "Description": "", "KeyUsage": "ENCRYPT_DECRYPT", "KeyState": "Enabled", "Origin": "AWS_KMS", "KeyManager": "CUSTOMER", "CustomerMasterKeySpec": "SYMMETRIC_DEFAULT", "KeySpec": "SYMMETRIC_DEFAULT", "EncryptionAlgorithms": [ "SYMMETRIC_DEFAULT" ], "MultiRegion": false }
  3. À l'aide d'un éditeur de texte, créez un fichier nommé bucketencryption.json avec le contenu suivant.

    { "Rules": [ { "ApplyServerSideEncryptionByDefault": { "SSEAlgorithm": "aws:kms", "KMSMasterKeyID": "{KMS Key ARN}" }, "BucketKeyEnabled": true } ] }
  4. Exécutez la commande suivante en remplaçant bucket-name par le nom du compartiment vers lequel vous exportez les journaux.

    aws s3api put-bucket-encryption --bucket bucket-name --server-side-encryption-configuration file://bucketencryption.json

    Si la commande ne renvoie pas d'erreur, le processus est réussi.

Étape 5 : créer une tâche d'exportation

Utilisez la commande suivante pour créer la tâche d'exportation. Une fois que vous l'avez créée, la tâche d'exportation peut prendre de quelques secondes à quelques heures, en fonction de la taille des données à exporter.

Pour exporter des données vers Amazon S3 à l'aide du AWS CLI
  1. Connectez-vous avec les autorisations suffisantes, comme indiqué dans Étape 2 : définir les autorisations d'accès.

  2. À l'invite de commandes, utilisez la create-export-taskcommande suivante pour créer la tâche d'exportation.

    aws logs create-export-task --profile CWLExportUser --task-name "my-log-group-09-10-2015" --log-group-name "my-log-group" --from 1441490400000 --to 1441494000000 --destination "my-exported-logs" --destination-prefix "export-task-output"

    Voici un exemple de sortie.

    { "taskId": "cda45419-90ea-4db5-9833-aade86253e66" }