No puedo generar un informe de inventario de Amazon S3. ¿Por qué sucede esto?

Última actualización: 19-11-2021

He configurado el informe de inventario de Amazon Simple Storage Service (Amazon S3), pero no se entrega y aparece el error Access Denied (Acceso denegado). ¿Por qué la configuración de mi informe de inventario no genera los informes y cómo lo soluciono?

Descripción corta

Si creó la configuración de inventario de Amazon S3, debe tener las políticas y los permisos de bucket correctos para evitar recibir un error Access Denied (Acceso denegado):

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 generar un informe de inventario de Amazon S3, se deben cumplir los siguientes requisitos:

  • El bucket de destino debe permitir que el bucket de origen cargue el informe de inventario de Amazon S3 en el bucket de destino.
  • El bucket de destino debe estar en la misma región de AWS que el bucket de origen (donde ha configurado el inventario de Amazon S3).
  • La política del bucket de destino debe conceder acceso a la clave de AWS KMS que se ha utilizado para cifrar el archivo de informe de inventario.

Nota: La entrega del primer informe de inventario puede tardar hasta 48 horas.

Resolución

Permitir que el bucket de origen cargue el informe de inventario de Amazon S3 en el bucket de destino

Para generar y cargar el informe de inventario en el bucket de destino, la política del bucket debe permitir que el bucket de origen se cargue en el de destino.

Por ejemplo:

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

Por lo tanto, revise la política del bucket de destino para conocer las declaraciones de denegación. El bucket no puede incluir ninguna declaración de denegación que impida que Amazon S3 (s3.amazonaws.com) ejecute PutObject en el bucket de destino. Una denegación explícita tiene prioridad sobre cualquier declaración de permiso. Excluya el servicio Amazon S3 (s3.amazonaws.com) de todas las declaraciones de denegación que puedan repercutir en una acción PutObject.

A continuación, se muestra un ejemplo de política de bucket que niega el acceso a Amazon S3 (s3.amazonaws.com) y solo permite el acceso a un rango de IP específico:

{
  "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 corregir la política de bucket anterior, actualice su política de esta manera:

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

Confirmar que el bucket de destino está en la misma región de AWS que el bucket de origen

Para verificar que el bucket de destino esté en la misma región de AWS que el bucket de origen, lleve a cabo los siguientes pasos:

1.    Inicie sesión en la consola de administración de AWS.

2.    Abra la consola de Amazon S3.

3.    Revise la columna de regiones de AWS de la lista de buckets para confirmar que el bucket de destino está en la misma región de AWS que el bucket de origen. (El bucket de origen es donde se configura el inventario de Amazon S3).

4.    (Opcional) Si su bucket de origen y destino están en diferentes regiones, cree o elija un nuevo bucket, ya que el bucket de origen y de destino deben estar en la misma región de AWS.

Nota: Amazon S3 crea buckets en regiones específicas. Después de crear un bucket en una región específica, los objetos que pertenezcan al bucket nunca abandonarán esa región (a menos que se transfieran explícitamente). Para obtener más información sobre el uso de buckets de Amazon S3 y regiones de AWS, consulte Información general de los buckets.

Conceder acceso a la clave de AWS KMS que se ha utilizado para cifrar el archivo de informe de inventario

Si cifró su bucket de Amazon S3 con una clave de AWS KMS, asegúrese de dar a Amazon S3 acceso a su clave de KMS.

Para conceder permisos de cifrado mediante su clave de AWS KMS, lleve a cabo los siguientes pasos:

1.    Regístrese en la consola de administración de AWS.

Nota: Asegúrese de iniciar sesión con la cuenta de AWS que posee la clave de AWS KMS.

2.    Abra la consola de AWS KMS.

3.    En el panel de navegación izquierdo, elija Claves administradas por el cliente.

4.    En Claves administradas por el cliente, seleccione la clave de AWS KMS que quiere utilizar para cifrar el archivo de informe de inventario.

5.    En Política de claves, elija Cambiar a vista de política.

6. Para actualizar la política de claves, elija Editar.

7.    En Editar política de claves, agregue la siguiente política de claves a la política 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.    Elija Guardar cambios.

Revisar los registros de acceso al servidor y el historial de CloudTrail

Revise los registros de acceso al servidor para ver si se hicieron cambios en las políticas de bucket durante el tiempo que el informe de inventario dejó de entregarse. El formato de registro de acceso al servidor de Amazon S3 tiene el siguiente aspecto:

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

Busque cualquiera de las siguientes entradas, que indican que se rhicieron cambios en su política de bucket:

REST.PUT.BUCKETPOLICY

También puede buscar la acción PutBucketPolicy en el historial de eventos de AWS CloudTrail para confirmar si se han hecho cambios recientes. Tenga en cuenta que el historial de eventos de CloudTrail solo proporciona un plazo de 90 días. Si la acción PutBucketPolicy se hizo hace más de 90 días, debeconsultar los registros de CloudTrail directamente en Amazon S3. Para obtener información sobre las llamadas a la API de Amazon S3 capturadas por CloudTrail, consulte lainformación de Amazon S3 en CloudTrail en el sitio web de AWS Docs GitHub.