Amazon CloudWatch Logs
Guia do usuário

Exportação de dados de log para o Amazon S3 com a AWS CLI

No exemplo a seguir, você usará uma tarefa de exportação para exportar todos os dados de um grupo de logs do CloudWatch Logs denominado my-log-group para um bucket do Amazon S3 denominado my-exported-logs. Este exemplo pressupõe que você já tenha criado um grupo de logs denominado my-log-group.

Etapa 1: criar um bucket do Amazon S3

Recomendamos que você use um bucket criado especificamente para o CloudWatch Logs. No entanto, se você desejar usar um bucket existente, vá para a etapa 2.

nota

O bucket do Amazon S3 deve residir na mesma região que os dados de log a serem exportados. O CloudWatch Logs não oferece suporte à exportação de dados para buckets do Amazon S3 em uma região diferente.

Para criar um bucket do Amazon S3 com a AWS CLI

Em um prompt de comando, execute o seguinte comando create-bucket, em que LocationConstraint é a região onde você está exportando dados de log.

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

A seguir está um exemplo de saída.

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

Etapa 2: Criar um usuário do IAM com acesso total ao Amazon S3 e ao CloudWatch Logs

Nas etapas a seguir, você criará o usuário do IAM com permissões necessárias.

Para criar o usuário e atribuir permissões

  1. Crie o usuário do IAM inserindo o seguinte comando.

    aws iam create-user --user-name CWLExportUser
  2. Associe as políticas gerenciadas do IAM ao usuário do IAM que você acabou de criar.

    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. Confirme se as duas políticas gerenciadas estão associadas.

    aws iam list-attached-user-policies --user-name CWLExportUser
  4. Configure a AWS CLI para incluir as credenciais do IAM do usuário CWLExportUser do IAM. Para obter mais informações, consulte Configuração da AWS CLI.

Etapa 3: Definir permissões em um bucket do Amazon S3

Por padrão, todos os objetos e buckets do Amazon S3 são privados. Somente o proprietário do recurso e a conta que criou o bucket podem acessar o bucket e todos os objetos que ele contém. No entanto, o proprietário do recurso pode optar por conceder permissões de acesso a outros recursos e usuários ao criar uma política de acesso padrão.

Para definir permissões em um bucket do Amazon S3

  1. Crie um arquivo chamado policy.json e adicione a seguinte política de acesso, mudando Resource para o nome do seu bucket do S3 e Principal para o endpoint da região onde você está exportando dados de log. Use um editor de texto para criar este arquivo de política. Não use o console do IAM.

    • Se o bucket estiver em sua conta, use a seguinte política.

      { "Version": "2012-10-17", "Statement": [ { "Action": "s3:GetBucketAcl", "Effect": "Allow", "Resource": "arn:aws:s3:::my-exported-logs", "Principal": { "Service": "logs.us-west-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-west-2.amazonaws.com" } } ] }
    • Se o bucket estiver em outra conta, use a seguinte política. Ela inclui uma instrução adicional utilizando o usuário do IAM que você criou na etapa anterior.

      { "Version": "2012-10-17", "Statement": [ { "Action": "s3:GetBucketAcl", "Effect": "Allow", "Resource": "arn:aws:s3:::my-exported-logs", "Principal": { "Service": "logs.us-west-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-west-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" } } ] }
    • Se o bucket estiver em outra conta e você estiver usando uma função do IAM em vez de um usuário do IAM, use a política a seguir.

      { "Version": "2012-10-17", "Statement": [ { "Action": "s3:GetBucketAcl", "Effect": "Allow", "Resource": "arn:aws:s3:::my-exported-logs", "Principal": { "Service": "logs.us-west-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-west-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. Defina a política que você acabou de adicionar como política de acesso ao seu bucket usando o comando put-bucket-policy. Essa política permite que o CloudWatch Logs exporte dados de log para o seu bucket do Amazon S3. O proprietário do bucket terá permissões completas sobre todos os objetos exportados.

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

    Atenção

    Se o bucket existente já tiver uma ou mais políticas anexadas, adicione as declarações de acesso do CloudWatch Logs a essa política ou a essas políticas. Recomendamos avaliar o conjunto resultante de permissões para ter certeza de que elas são apropriadas para os usuários que acessarão o bucket.

Etapa 4: Criar uma tarefa de exportação

Depois de criar a tarefa de exportação para exportar os logs de um grupo de logs, a tarefa poderá demorar de alguns segundos a algumas horas, dependendo do tamanho dos dados a serem exportados.

Para criar uma tarefa de exportação usando a AWS CLI

Em um prompt de comando, use o seguinte comando create-export-task para criar a tarefa de exportação.

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"

A seguir está um exemplo de saída.

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

Etapa 5: Descrever tarefas de exportação

Depois de criar uma tarefa de exportação, você pode obter o status atual da tarefa.

Para descrever as tarefas de exportação usando a AWS CLI

No prompt de comando, use o seguinte comando describe-export-tasks.

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

A seguir está um exemplo de saída.

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

Você pode usar o comando describe-export-tasks de três maneiras diferentes:

  • Sem filtros: lista todas as suas tarefas de exportação, na ordem inversa de criação.

  • Filtrar com base no ID de tarefa: lista a tarefa de exportação, se houver, com o ID especificado.

  • Filtrar com base no status da tarefa: lista as tarefas de exportação com o status especificado.

Por exemplo, use o comando a seguir para filtrar com base no status FAILED.

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

A seguir está um exemplo de saída.

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

Etapa 6: Cancelar uma tarefa de exportação

Você pode cancelar uma tarefa de exportação se ela estiver no estado PENDING ou RUNNING.

Para cancelar uma tarefa de exportação usando a AWS CLI

No prompt de comando, use o seguinte comando cancel-export-task:

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

Você pode usar o comando describe-export-tasks para verificar se a tarefa foi cancelada com êxito.