Pourquoi ne puis-je pas générer un rapport d'inventaire Amazon S3 ?

Lecture de 7 minute(s)
0

J'ai configuré le rapport d'inventaire Amazon Simple Storage Service (Amazon S3), mais il n'est pas livré et je reçois un message d'erreur Accès refusé.

Brève description

Si vous avez créé la configuration de l'inventaire Amazon S3, vous devez disposer des politiques et des autorisations appropriées pour les compartiments afin d'éviter de recevoir cette erreur :

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 conditions 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 (dans lequel vous avez configuré l'inventaire Amazon S3).
  • La politique de votre compartiment de destination doit autoriser 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

Autoriser le 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 compartiment doit autoriser le chargement du compartiment source vers 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"
          }
       }
    }
  ]
}

Vérifiez la politique de votre compartiment de destination pour toute déclaration de refus. Le compartiment ne peut inclure aucune déclaration de Refus empêchant Amazon S3 (s3.amazonaws.com) d'exécuter un objet PutObject dans le compartiment de destination. Un refus explicite a la priorité sur toute instruction d’autorisation. Excluez le service Amazon S3 (s3.amazonaws.com) de chaque déclaration de Refus 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 précédente en matière de compartiment, 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"
        ]
      }
    }
  ]
}

Vérifiez 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, procédez comme suit :

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 compartiment 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 votre compartiment source et votre compartiment de destination se trouvent dans des régions différentes, créez ou choisissez-en un nouveau. Cela est dû au fait que le compartiment source et le compartiment 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 appartiennent au compartiment ne quittent jamais cette région (sauf s'ils sont explicitement transférés). Pour plus d'informations sur l'utilisation des compartiments Amazon S3 et des régions AWS, consultez la section Vue d'ensemble des compartiments.

Accordez 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é AWS KMS.

Pour accorder des autorisations de chiffrement à l'aide de votre clé AWS KMS, procédez comme suit :

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 volet de navigation de gauche, choisissez Clés gérées par le client.

4.    Sous 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.    Sous Stratégie de clé, choisissez Basculer vers l'affichage des stratégies.

6     Pour mettre à jour la politique clé, choisissez Modifier.

7.    Sous Modifier la stratégie de clé, ajoutez la stratégie de clé suivante à la politique 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 Enregistrer les modifications.

Remarque : Vérifiez la colonne Dernière exportation sous Configurations d'inventaire dans la console Amazon S3. Si cette colonne est vide, Amazon S3 a reçu une réponse 403 AccessDenied après avoir demandé l'état de l'inventaire du compartiment de destination. Une colonne Dernière exportation vide n'indique pas toujours que le rapport n'a pas été livré. Il est possible que le rapport d'inventaire ait été livré avec succès. Dans ce cas, vous pouvez trouver le rapport d'inventaire dans le chemin spécifié dans le compartiment de destination.

Consultez les journaux d'accès à votre serveur et l'historique de CloudTrail

Consultez les journaux d'accès à votre serveur. Vérifiez si des modifications ont été apportées à vos politiques relatives aux compartiments lorsque votre rapport d'inventaire a cessé d'être diffusé. 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 indiquant que des modifications ont été apportées à votre politique en matière de compartiments :

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é exécuté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 les informations relatives à Amazon S3 dans CloudTrail sur le site Web GitHub d'AWS Docs.

Informations connexes

Activation de la journalisation des événements CloudTrail pour les compartiments et les objets S3

Octroi d'autorisations pour Amazon S3 Inventory et Amazon S3 Analytics

Comment puis-je copier tous les objets d'un compartiment Amazon S3 vers un autre compartiment ?

AWS OFFICIEL
AWS OFFICIELA mis à jour il y a un an