Ir para o conteúdo

Como soluciono problemas de uma tarefa de exportação que falhou no CloudWatch Logs?

7 minuto de leitura
0

Minha tarefa de exportação falha quando tento exportar dados de log do Amazon CloudWatch Logs para um bucket do Amazon Simple Storage Service (Amazon S3), mesmo que o bucket do Amazon S3 exista.

Breve descrição

É possível configurar uma tarefa de exportação em um bucket do S3 na mesma conta da AWS ou em uma conta diferente.

Para exportar dados de log do CloudWatch Logs para um bucket, o bucket de destino exige as permissões corretas e deve estar na mesma região da AWS que o grupo de logs.

Se a política do bucket, as permissões do AWS Identity and Access Management (AWS IAM) ou as configurações de criptografia não estiverem configuradas corretamente, a tarefa de exportação falha e você pode receber um dos seguintes erros:

  • "Could not create export task. GetBucketAcl call on the given bucket failed. Please check if CloudWatch Logs has been granted permission to perform this operation."
  • "Could not create export task. PutObject call on the given bucket failed. Please check if CloudWatch Logs has been granted permission to perform this operation."
  • "Unable to create export task. Resource limit exceeded."
  • "PutObject call on the given bucket failed. Please check if CloudWatch Logs has been granted permission to perform this operation. This may be a result of a KMS key or bucket encryption misconfiguration."
  • "GetBucketAcl call on the given bucket failed. Please check if the specified Amazon S3 Bucket is in the same AWS region as CloudWatch Logs."

Resolução

Adicione a política de permissões necessária na tarefa de exportação

Para executar uma tarefa de exportação, o usuário, grupo ou perfil do IAM que chama a API da tarefa de exportação exige a política de permissões s3:PutObject. Se o bucket de destino estiver criptografado com SSE-KMS, inclua também a política do AWS Key Management Service (AWS KMS).

Adicione a seguinte política de permissões aos seus usuários, grupos ou perfis do IAM:

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

Observação: substitua MY-EXPORTED-LOGS pelo nome do seu bucket de destino e substitua ARN_OF_KMS_KEY pelo nome do recurso da Amazon (ARN) da sua chave do AWS KMS.

Anexe a política gerenciada AmazonS3ReadOnlyAccess ao perfil do IAM que chama a tarefa de exportação. Também anexe uma política com as seguintes permissões do CloudWatch Logs:

  • logs:CreateExportTask
  • logs:CancelExportTask
  • logs:DescribeExportTasks
  • logs:DescribeLogStreams
  • logs:DescribeLogGroups

Conceda permissões no bucket de destino

Por padrão, todos os buckets e objetos são privados. Somente o proprietário do recurso ou a conta que criou o bucket pode acessar o bucket e os objetos dentro do bucket. Quando necessário, o proprietário do recurso pode gravar uma política de acesso para conceder permissões de acesso a outros recursos e usuários.

Ao definir uma política, inclua uma string gerada aleatoriamente como prefixo do bucket. Isso permite que somente os fluxos de log pretendidos sejam exportados para o bucket.

Para conceder permissões no bucket de destino, conclua as seguintes etapas:

  1. Abra o console do S3.
  2. Selecione o bucket para o qual você deseja exportar os logs.
  3. Clique em Permissions (Permissões) e depois em Bucket policy (Política de bucket).
  4. No Bucket Policy Editor (Editor de política do bucket), adicione a seguinte política:
    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Action": "s3:GetBucketAcl",
          "Effect": "Allow",
          "Resource": "arn:aws:s3:::exammple-s3-bucket",
          "Principal": {
            "Service": "logs.example-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:::example-s3-bucket/",
          "Principal": {
            "Service": "logs.example-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:::example-s3-bucket/",
          "Condition": {
            "StringEquals": {
              "s3:x-amz-acl": "bucket-owner-full-control"
            }
          }
        }
      ]
    }
    Observação: substitua example-s3-bucket pelo nome do seu bucket. Também substitua example-region pelo endpoint de região necessário para o parâmetro Principal. A política anterior é definida como a política de acesso em seu bucket. Essa política permite que o CloudWatch Logs exporte dados de log para seu bucket e que o proprietário do bucket tenha permissões completas em todos os objetos exportados.
  5. Clique em Save (Salvar).

Exporte uma tarefa para um bucket criptografado com SSE-KMS

Crie e configure a chave do AWS KMS

Conclua as etapas a seguir:

  1. Abra o console do AWS KMS. Para alterar a região, use o seletor Region (Região) na barra de navegação.
  2. No painel de navegação, selecione Customer managed keys (Chaves gerenciadas pelo cliente) e, em seguida, Create Key (Criar chave).
    Em Key type (Tipo de chave), clique em Symmetric (Simétrica).
    Em Key usage (Uso da chave), selecione Encrypt and decrypt (Criptografar e descriptografar).
  3. Clique em Next (Próximo).
  4. Em Add labels (Adicionar rótulos), insira um alias para a chave. Opcionalmente, adicione uma descrição ou tags e clique em Next (Próximo).
  5. Em Key administrators (Administradores de chaves), selecione quem pode administrar essa chave e clique em Next (Próximo) duas vezes para pular para a página de revisão.
  6. Revise as configurações e selecione Finish (Concluir).
  7. Acesse a página Customer managed keys (Chaves gerenciadas pelo cliente) e clique no nome da chave que você criou anteriormente.
  8. Selecione a guia Key policy (Política de chave) e, em seguida, Switch to policy view (Mudar para visualização da política).
  9. Na seção Key policy (Política de chave), clique em Edit (Editar) e adicione a seguinte declaração à lista de declarações da política de chave:
    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Sid": "Allow CWL Service Principal usage",
          "Effect": "Allow",
          "Principal": {
            "Service": "logs.EXAMPLE-REGION.amazonaws.com"
          },
          "Action": [
            "kms:GenerateDataKey",
            "kms:Decrypt"
          ],
          "Resource": ""
        },
        {
          "Sid": "Enable IAM User Permissions",
          "Effect": "Allow",
          "Principal": {
            "AWS": EXAMPLE-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
        }
      ]
    }
    Observação: substitua EXAMPLE-REGION pela região dos seus logs e EXAMPLE-ACCOUNT-ARN pelo ARN da conta que possui a chave do AWS KMS. Substitua create_export_task_caller_account pelo ID da conta do chamador e role_name pelo nome do perfil do IAM. Substitua também ARN_OF_KMS_KEY pelo ARN da sua chave do AWS KMS.
  10. Clique em Save changes (Salvar alterações).

Configure a criptografia do bucket

Conclua as etapas a seguir:

  1. Abra o console do Amazon S3.
  2. Selecione o bucket para o qual você deseja exportar os logs.
  3. Clique na guia Properties (Propriedades). Em seguida, em Default Encryption (Criptografia padrão), selecione Edit (Editar).
  4. Em Server-side Encryption (Criptografia do lado do servidor), clique em Enable (Ativar).
  5. Em Encryption type (Tipo de criptografia), selecione AWS Key Management Service key (SSE-KMS) (Chave do AWS Key Management Service (SSE-KMS)).
  6. Clique em Choose from your AWS KMS keys (Escolher entre suas chaves do AWS KMS) e encontre a chave que você criou.
  7. Em Bucket key (Chave do bucket), selecione Enable (Ativar).
  8. Clique em Save changes (Salvar alterações).
    Observação: o CloudWatch Logs permite uma tarefa de exportação por vez por conta e por região. Se você receber a mensagem de erro "Unable to create export task. Resource limit exceeded", aguarde a conclusão da tarefa de exportação atual antes de iniciar uma nova.

Informações relacionadas

Exportação de dados de log para o Amazon S3 usando o console

AWS OFICIALAtualizada há 6 meses