Não consigo gerar um relatório de inventário do Amazon S3. Por que isto está acontecendo?

7 minuto de leitura
0

Configurei o relatório de inventário do Amazon Simple Storage Service (Amazon S3), mas ele não está sendo entregue e recebo um erro de Access Denied (Acesso negado). Por que a minha configuração de relatório de inventário não gera os relatórios e como soluciono isso?

Breve descrição

Se você criou a configuração do Amazon S3 Inventory, precisará manter as políticas e permissões de bucket corretas em vigor para evitar o recebimento de um erro de Access Denied (Acesso negado):

Access denied Inventory export for 2021-02-19 failed because S3 doesn’t have access to the destination bucket or KMS key. Ask the owner of the destination bucket or KMS key to grant the necessary access and then try again.

Para gerar um relatório de inventário do Amazon S3, deve-se cumprir os seguintes requisitos:

  • O seu bucket de destino deve permitir que o bucket de origem carregue o relatório de inventário do Amazon S3 para o bucket de destino.
  • O seu bucket de destino deve estar na mesma região da AWS que o bucket de origem (onde você configura o Amazon S3 Inventory).
  • A sua política de bucket de destino deve conceder acesso à chave do AWS KMS que foi usada para criptografar o arquivo de relatório de inventário.

Observação: pode levar até 48 horas até a entrega do primeiro relatório de inventário.

Resolução

Como permitir que o bucket de origem carregue o relatório de inventário do Amazon S3 para o bucket de destino

Para gerar e carregar o relatório de inventário no bucket de destino, a sua política de bucket deve permitir que o bucket de origem seja carregado no bucket de destino.

Por exemplo:

{
  "Version": "2012-10-17",
  "Id": "S3PolicyId",
  "Statement": [
    {
      "Sid":"InventoryAndAnalyticsExamplePolicy",
      "Effect":"Allow",
      "Principal": {"Service": "s3.amazonaws.com"},
      "Action":"s3:PutObject",
      "Resource":["arn:aws:s3:::destinationbucket/*"],
      "Condition": {
          "ArnLike": {
              "aws:SourceArn": "arn:aws:s3:::sourcebucket"
           },
         "StringEquals": {
             "aws:SourceAccount": "123456789012",
             "s3:x-amz-acl": "bucket-owner-full-control"
          }
       }
    }
  ]
}

Assim, analise a sua política de bucket de destino para buscar instruções Deny (Negar). O bucket não pode incluir nenhuma instrução Deny (Negar) que impeça o Amazon S3 (s3.amazonaws.com) de executar um PutObject no bucket de destino. Uma negação explícita prevalece sobre qualquer instrução Allow (Permitir). Exclua o serviço do Amazon S3 (s3.amazonaws.com) de cada instrução Deny (Negar) que possa afetar uma ação PutObject.

Aqui está um exemplo de política de bucket que nega acesso ao Amazon S3 (s3.amazonaws.com) e só permite acesso a um intervalo de IP especificado:

{
  "Version": "2012-10-17",
  "Id": "S3PolicyId",
  "Statement": [
    {
      "Sid": "IPAllow",
      "Effect": "Deny",
      "Principal": "*",
      "Action": "s3:*",
      "Resource": [
        "arn:aws:s3:::destinationbucket",
               "arn:aws:s3:::destinationbucket/*"
      ],
      "Condition": {
  "NotIpAddress": {"aws:SourceIp": "54.240.143.0/24"}
      }
    }
  ]
}

Para corrigir a política de bucket anterior, atualize a sua política conforme o seguinte:

{
"Version": "2012-10-17",  "Id": "S3PolicyId",
 "Statement": [
    {
      "Sid": "IPAllow",
      "Action": "s3:*",
      "Effect": "Deny",
      "Resource": [
        "arn:aws:s3:::destinationbucket",
        "arn:aws:s3:::destinationbucket/*"
      ],
      "Condition": {
        "NotIpAddress": {
          "aws:SourceIp": "54.240.143.0/24"
        },
        "ArnNotLike": {
          "aws:SourceArn": "arn:aws:s3:::sourcebucket"
        }
      },
      "Principal": "*"
    },
    {
      "Sid": "InventoryAndAnalyticsExamplePolicy",
      "Action": [
        "s3:PutObject"
      ],
      "Effect": "Allow",
      "Resource": [
        "arn:aws:s3:::destinationbucket/*"
      ],
      "Condition": {
        "ArnLike": {
          "aws:SourceArn": "arn:aws:s3:::sourcebucket"
        },
        "StringEquals": {
          "aws:SourceAccount": "123456789012",
          "s3:x-amz-acl": "bucket-owner-full-control"
        }
      },
      "Principal": {
        "AWS": [
          "s3.amazonaws.com"
        ]
      }
    }
  ]
}

Confirme que o seu bucket de destino está na mesma região da AWS que o bucket de origem

Para verificar se o seu bucket de destino está na mesma região da AWS que o de origem, siga as seguintes etapas:

1.    Conecte-se ao Console de Gerenciamento da AWS.

2.    Abra o console do Amazon S3.

3.    Analise a coluna AWS Region (Região da AWS) na sua lista de buckets para confirmar se o seu bucket de destino está na mesma região da AWS que o bucket de origem. (O bucket de origem é onde você configura o Amazon S3 Inventory.)

4.    (Opcional) se o seu bucket de origem e o de destino estiverem em regiões diferentes, crie ou escolha um novo bucket. Isso ocorre porque o bucket de origem e o de destino devem estar na mesma região da AWS.

Observação: o Amazon S3 cria buckets em regiões específicas. Depois que um bucket for criado em uma região específica, todos os objetos pertencentes ao bucket não sairão dessa região (a menos que sejam transferidos explicitamente). Para obter mais informações sobre o uso de buckets do Amazon S3 e regiões da AWS, consulte Visão geral dos buckets.

Como conceder acesso à chave do AWS KMS que foi usada para criptografar o arquivo de relatório de inventário

Se você criptografou o seu bucket do Amazon S3 com uma chave do AWS KMS, certifique-se de conceder ao Amazon S3 acesso à sua chave do KMS.

Para conceder permissões para criptografia usando a sua chave do AWS KMS, siga as etapas a seguir:

1.    Conecte-se ao Console de Gerenciamento da AWS.

Observação: certifique-se de fazer login usando a conta da AWS que possui a chave do AWS KMS.

2.    Abra o console do AWS KMS console.

3.    No painel de navegação esquerdo, escolha Customer managed keys (Chaves gerenciadas pelo cliente).

4.    Em Customer managed keys (Chaves gerenciadas pelo cliente), selecione a chave do AWS KMS que deseja usar para criptografar o arquivo de relatório de inventário.

5.    Em Key policy (Política de chaves), escolha Switch to policy view (Alternar para a visualização da política).

  1. Para atualizar a política de chaves, escolha Edit (Editar).

7.    Em Edit key policy (Editar política de chaves), adicione a seguinte política de chaves à política de chaves existente.

{
    "Sid": "Allow Amazon S3 use of the KMS key",
    "Effect": "Allow",
    "Principal": {
        "Service": "s3.amazonaws.com"
    },
    "Action": [
        "kms:GenerateDataKey"
    ],
    "Resource": "*",
    "Condition":{
      "StringEquals":{
         "aws:SourceAccount":"source-account-id"
     },
      "ArnLike":{
        "aws:SourceARN": "arn:aws:s3:::source-bucket-name"
     }
   }
}

8.    Escolha Save changes (Salvar alterações).

Como analisar os logs de acesso ao servidor e o histórico do CloudTrail

Analise os seus logs de acesso ao servidor para descobrir se alguma alteração foi feita nas políticas do bucket no período em que a entrega do relatório de inventário foi interrompida. O formato de log de acesso ao servidor do Amazon S3 tem a seguinte aparência:

79a59df900b949e55d96a1e698fbacedfd6e09d98eacf8f8d5218e7cd47ef2be awsexamplebucket1 [06/Feb/2019:00:00:38 +0000] 192.0.2.3 79a59df900b949e55d96a1e698fbacedfd6e09d98eacf8f8d5218e7cd47ef2be 891CE47D2EXAMPLE REST.PUT.BUCKETPOLICY - "GET /awsexamplebucket1?logging HTTP/1.1" 200 - 242 - 11 - "-" "S3Console/0.4" - 9vKBE6vMhrNiWHZmb2L0mXOcqPGzQOI5XLnCtZNPxev+Hf+7tpT6sxDwDty4LHBUOZJG96N1234= SigV2 ECDHE-RSA-AES128-GCM-SHA256 AuthHeader awsexamplebucket1.s3.us-west-1.amazonaws.com TLSV1.1

Procure uma das entradas a seguir que indicam alterações na política do bucket:

REST.PUT.BUCKETPOLICY

Você também pode pesquisar a ação PutBucketPolicy no seu Event history (Histórico de eventos) do AWS CloudTrail para confirmar se houve alterações recentes. Observe que o Event history (Histórico de eventos) do CloudTrail exibe apenas as informações dos últimos 90 dias. Se a ação PutBucketPolicy tiver sido executada há mais de 90 dias, você deverá consultar os logs do CloudTrail diretamente no Amazon S3. Para obter informações sobre as chamadas de API do Amazon S3 capturadas pelo CloudTrail, consulte Informações do Amazon S3 no CloudTrail no site do AWS Docs GitHub.


Informações relacionadas

Como habilitar o registro de eventos do CloudTrail para buckets e objetos do S3

Como conceder permissões para análise do Amazon S3 Inventory e do Amazon S3

Como copio todos os objetos de um bucket do Amazon S3 para outro bucket?

AWS OFICIAL
AWS OFICIALAtualizada há 2 anos