Exporter les données du journal vers Amazon S3 à l'aide de la AWS CLI - Amazon CloudWatch Logs

Exporter les données du journal vers Amazon S3 à l'aide de la AWS CLI

Dans l'exemple suivant, vous utilisez une tâche d'exportation pour exporter toutes les données d'un groupe de journaux CloudWatch 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 de données de journal vers des compartiments Amazon S3 qui sont chiffrés par AWS KMS n'est pas prise en charge.

Étape 1 : Créer un compartiment Amazon S3

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

Note

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

Pour créer un compartiment Amazon S3 vide à l'aide de la 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 : créer un utilisateur IAM avec un accès complet à Amazon S3 et à CloudWatch Logs

Dans la procédure suivante, vous créez l'utilisateur IAM avec les autorisations nécessaires.

Pour créer l'utilisateur et lui attribuer des autorisations

  1. Créez l'utilisateur IAM en saisissant la commande suivante.

    aws iam create-user --user-name CWLExportUser
  2. Attachez les politiques gérées IAM à l'utilisateur IAM que vous venez de créer.

    export S3POLICYARN=$(aws iam list-policies --query 'Policies[?PolicyName==`AmazonS3FullAccess`].{ARN:Arn}' --output text)
    export CWLPOLICYARN=$( aws iam list-policies --query 'Policies[?PolicyName==`CloudWatchLogsFullAccess`].{ARN:Arn}' --output text)
    aws iam attach-user-policy --user-name CWLExportUser --policy-arn $S3POLICYARN
    aws iam attach-user-policy --user-name CWLExportUser --policy-arn $CWLPOLICYARN
  3. Confirmez que les deux stratégies gérées sont attachées.

    aws iam list-attached-user-policies --user-name CWLExportUser
  4. Configurez votre AWS CLI pour inclure les informations d'identification IAM de l'utilisateur IAM CWLExportUser . Pour plus d'informations, consultez Configuration de l'AWS CLI.

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

Par défaut, tous les objets et les compartiments Amazon 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.

Pour définir des autorisations sur un compartiment Amazon S3

  1. Créez un fichier sous le nom policy.json et ajoutez la stratégie d'accès suivante, en affectant à Resource le nom de votre compartiment S3 et à Principal le point de terminaison de la région dans laquelle vous exportez les données de journal. Utilisez un éditeur de texte créer ce fichier de stratégie. N'utilisez pas la console IAM.

    • Si le compartiment est dans votre compte, utilisez la stratégie suivante.

      { "Version": "2012-10-17", "Statement": [ { "Action": "s3:GetBucketAcl", "Effect": "Allow", "Resource": "arn:aws:s3:::my-exported-logs", "Principal": { "Service": "logs.us-east-2.amazonaws.com" } }, { "Action": "s3:PutObject" , "Effect": "Allow", "Resource": "arn:aws:s3:::my-exported-logs/*", "Condition": { "StringEquals": { "s3:x-amz-acl": "bucket-owner-full-control" } }, "Principal": { "Service": "logs.us-east-2.amazonaws.com" } } ] }
    • Si le compartiment est dans un compte différent, utilisez plutôt la stratégie suivante. Il inclut une déclaration supplémentaire qui emploie l'utilisateur IAM que vous avez créé à l'étape précédente.

      { "Version": "2012-10-17", "Statement": [ { "Action": "s3:GetBucketAcl", "Effect": "Allow", "Resource": "arn:aws:s3:::my-exported-logs", "Principal": { "Service": "logs.us-east-2.amazonaws.com" } }, { "Action": "s3:PutObject" , "Effect": "Allow", "Resource": "arn:aws:s3:::my-exported-logs/random-string/*", "Condition": { "StringEquals": { "s3:x-amz-acl": "bucket-owner-full-control" } }, "Principal": { "Service": "logs.us-east-2.amazonaws.com" } }, { "Action": "s3:PutObject" , "Effect": "Allow", "Resource": "arn:aws:s3:::my-exported-logs/random-string/*", "Condition": { "StringEquals": { "s3:x-amz-acl": "bucket-owner-full-control" } }, "Principal": { "AWS": "arn:aws:iam::SendingAccountID:user/CWLExportUser" } } ] }
    • Si le compartiment est dans un autre compte et que vous utilisez un rôle IAM au lieu d'un utilisateur IAM, utilisez plutôt la politique suivante.

      { "Version": "2012-10-17", "Statement": [ { "Action": "s3:GetBucketAcl", "Effect": "Allow", "Resource": "arn:aws:s3:::my-exported-logs", "Principal": { "Service": "logs.us-east-2.amazonaws.com" } }, { "Action": "s3:PutObject" , "Effect": "Allow", "Resource": "arn:aws:s3:::my-exported-logs/random-string/*", "Condition": { "StringEquals": { "s3:x-amz-acl": "bucket-owner-full-control" } }, "Principal": { "Service": "logs.us-east-2.amazonaws.com" } }, { "Action": "s3:PutObject" , "Effect": "Allow", "Resource": "arn:aws:s3:::my-exported-logs/random-string/*", "Condition": { "StringEquals": { "s3:x-amz-acl": "bucket-owner-full-control" } }, "Principal": { "AWS": "arn:aws:iam::SendingAccountID:role/CWLExportUser" } } ] }
  2. Définissez la stratégie que vous venez d'ajouter en tant que stratégie d'accès à votre compartiment à l'aide de la commande put-bucket-policy. Cette politique permet à CloudWatch Logs d'exporter les données des journaux vers votre compartiment Amazon 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 le compartiment existant dispose déjà d'une ou plusieurs politiques qui lui sont attachées, ajoutez les instructions pour que CloudWatch Logs y accède. 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.

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

Dès lors que vous avez créé la tâche d'exportation en vue d'exporter les journaux d'un groupe de journaux, la durée de la tâche d'exportation peut varier de quelques secondes à plusieurs heures, selon la taille des données à exporter.

Pour créer une tâche d'exportation à l'aide de l'AWS CLI

À partir d'une invite de commande, utilisez la commande create-export-task 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" }

Étape 5 : décrire les tâches d'exportation

Une fois que vous avez créé une tâche d'exportation, vous pouvez en obtenir le statut actuel.

Pour décrire les tâches d'exportation à l'aide de l'AWS CLI

À partir d'une invite de commande, utilisez la commande describe-export-tasks suivante.

aws logs --profile CWLExportUser describe-export-tasks --task-id "cda45419-90ea-4db5-9833-aade86253e66"

Voici un exemple de sortie.

{ "exportTasks": [ { "destination": "my-exported-logs", "destinationPrefix": "export-task-output", "executionInfo": { "creationTime": 1441495400000 }, "from": 1441490400000, "logGroupName": "my-log-group", "status": { "code": "RUNNING", "message": "Started Successfully" }, "taskId": "cda45419-90ea-4db5-9833-aade86253e66", "taskName": "my-log-group-09-10-2015", "tTo": 1441494000000 }] }

Vous pouvez utiliser la commande describe-export-tasks de trois façons :

  • Sans filtres : répertorie toutes vos tâches d'exportation, dans l'ordre inverse de leur création.

  • Filtrer en fonction de l'ID de la tâche : affiche la tâche d'exportation correspondant à l'ID spécifié, s'il existe.

  • Filtre en fonction du statut de la tâche : répertorie les tâches d'exportation correspondant au statut spécifié.

Par exemple, utilisez la commande suivante pour filtrer sur le statut FAILED.

aws logs --profile CWLExportUser describe-export-tasks --status-code "FAILED"

Voici un exemple de sortie.

{ "exportTasks": [ { "destination": "my-exported-logs", "destinationPrefix": "export-task-output", "executionInfo": { "completionTime": 1441498600000 "creationTime": 1441495400000 }, "from": 1441490400000, "logGroupName": "my-log-group", "status": { "code": "FAILED", "message": "FAILED" }, "taskId": "cda45419-90ea-4db5-9833-aade86253e66", "taskName": "my-log-group-09-10-2015", "to": 1441494000000 }] }

Étape 6 : annuler une tâche d'exportation

Vous pouvez annuler une tâche d'exportation dont l'état est PENDING ou RUNNING.

Pour annuler une tâche d'exportation à l'aide de l'AWS CLI

À partir d'une invite de commande, utilisez la commande cancel-export-task suivante :

aws logs --profile CWLExportUser cancel-export-task --task-id "cda45419-90ea-4db5-9833-aade86253e66"

Vous pouvez utiliser la commande describe-export-tasks pour vérifier que la tâche a bien été annulée.