Je ne parviens pas à générer un rapport d'inventaire Amazon S3. Pourquoi cela se produit-il ?

Dernière mise à jour : 19/11/2021

J'ai configuré le rapport d'inventaire Amazon Simple Storage Service (Amazon S3), mais il n'est pas livré, et je reçois une erreur Accès refusé. Pourquoi la configuration de mon rapport d'inventaire ne génère-t-elle pas les rapports, et comment puis-je résoudre ce problème ?

Brève description

Si vous avez créé la configuration d'inventaire Amazon S3, vous devez disposer des politiques de compartiments et des autorisations appropriées pour éviter de recevoir une erreur Accès refusé :

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.

Pour générer un rapport d'inventaire Amazon S3, les exigences suivantes doivent être remplies :

  • Votre compartiment de destination doit autoriser le compartiment source à charger le rapport d'inventaire Amazon S3 vers le compartiment de destination.
  • Votre compartiment de destination doit se trouver dans la même région AWS que le compartiment source (où vous avez configuré l'inventaire Amazon S3).
  • Votre politique de compartiment de destination doit accorder l'accès à la clé AWS KMS qui a été utilisée pour chiffrer le fichier du rapport d'inventaire.

Remarque : la livraison du premier rapport d'inventaire peut prendre jusqu'à 48 heures.

Résolution

Autorisation du compartiment source à charger le rapport d'inventaire Amazon S3 vers le compartiment de destination

Pour générer et charger le rapport d'inventaire dans le compartiment de destination, votre politique de compartiments doit autoriser le compartiment source à effectuer le chargement dans le compartiment de destination.

Par exemple :

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

Par conséquent, vérifiez votre politique de compartiment de destination pour rechercher toutes les instructions Rejeter. Le compartiment ne peut pas inclure d'instructions Rejeter qui empêchent Amazon S3 (s3.amazonaws.com) d'effectuer une action PutObject dans le compartiment de destination. Un refus explicite a priorité sur toutes les instructions Autoriser. Excluez le service Amazon S3 (s3.amazonaws.com) de chaque instruction Rejeter susceptible d'affecter une action PutObject.

Voici un exemple de politique de compartiment qui refuse l'accès à Amazon S3 (s3.amazonaws.com) et autorise uniquement l'accès à une plage d'adresses IP spécifiée :

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

Pour corriger la politique de compartiments précédente, mettez à jour votre politique comme suit :

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

Confirmer que votre compartiment de destination se trouve dans la même région AWS que le compartiment source

Pour vérifier que votre compartiment de destination se trouve dans la même région AWS que votre compartiment source, effectuez les opérations suivantes :

1.    Connectez-vous à la console de gestion AWS.

2.    Ouvrez la console Amazon S3.

3.    Consultez la colonne Région AWS de votre liste de compartiments pour confirmer que votre compartiment de destination se trouve dans la même région AWS que le compartiment source. (Le compartiment source est l'endroit où vous configurez l'inventaire Amazon S3.)

4.    (Facultatif) Si vos compartiments source et destination se trouvent dans des régions différentes, choisissez un nouveau compartiment ou créez-en un. Cela est dû au fait que les compartiments source et de destination doivent se trouver dans la même région AWS.

Remarque : Amazon S3 crée des compartiments dans des régions spécifiques. Une fois qu'un compartiment est créé dans une région spécifique, les objets qui lui appartiennent ne quittent jamais cette région (sauf s'ils sont transférés explicitement). Pour plus d'informations sur l'utilisation des compartiments Amazon S3 et des régions AWS, consultez Présentation des compartiments.

Accorder l'accès à la clé AWS KMS qui a été utilisée pour chiffrer le fichier du rapport d'inventaire

Si vous avez chiffré votre compartiment Amazon S3 avec une clé AWS KMS, assurez-vous de donner à Amazon S3 l'accès à votre clé KMS.

Pour accorder des autorisations de chiffrement à l'aide de votre clé AWS KMS, suivez les étapes ci-dessous :

1.    Connectez-vous à la console de gestion AWS.

Remarque : assurez-vous de vous connecter à l'aide du compte AWS qui possède la clé AWS KMS.

2.    Ouvrez la console AWS KMS.

3.    Dans le panneau de navigation de gauche, choisissez Customer managed keys (Clés gérées par le client).

4.    Sous Customer managed keys (Clés gérées par le client), sélectionnez la clé AWS KMS que vous souhaitez utiliser pour chiffrer le fichier du rapport d'inventaire.

5.    Dans Key policy (Politique de clé), choisissez Switch to policy view (Passer à l'affichage des politiques).

6. Pour mettre à jour la politique de clé, choisissez Edit (Modifier).

7.    Sous Edit key policy (Modifier la politique de clé), ajoutez la politique de clé suivante à la politique de clé existante.

{
    "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.    Choisissez Save changes (Enregistrer les modifications).

Réviser les journaux d'accès au serveur et l'historique CloudTrail

Consultez vos journaux d'accès au serveur pour voir si des modifications ont été apportées à vos politiques de compartiments au moment où votre rapport d'inventaire a cessé d'être livré. Le format du journal d'accès au serveur Amazon S3 se présente comme suit :

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

Recherchez l'une des entrées suivantes, qui indiquent que des modifications ont été apportées à votre politique de compartiment :

REST.PUT.BUCKETPOLICY

Vous pouvez également rechercher l'action PutBucketPolicy dans votre historique des événements AWS CloudTrail pour confirmer si des modifications récentes ont été apportées. Notez que l'historique des événements CloudTrail ne fournit qu'une fenêtre de 90 jours. Si l'action PutBucketPolicy a été effectuée il y a plus de 90 jours, vous devez interroger les journaux CloudTrail directement dans Amazon S3. Pour plus d'informations sur les appels d'API Amazon S3 capturés par CloudTrail, consultez Informations Amazon S3 dans CloudTrail sur le site web GitHub d'AWS Docs.