Non riesco a generare un report sull'inventario di Amazon S3. Perché?

Ultimo aggiornamento: 19-11-2021

Ho configurato il report dell'inventario di Amazon Simple Storage Service (Amazon S3), ma non è stato consegnato e viene visualizzato un errore di accesso negato. Perché la configurazione del mio report dell'inventario non genera i report e come posso risolvere il problema?

Breve descrizione

Se hai creato la configurazione dell'inventario di Amazon S3, devi disporre delle policy e delle autorizzazioni del periodo fisso corrette per evitare di ricevere un errore di accesso negato:

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.

Per generare un report dell'inventario di Amazon S3, devono essere soddisfatti i seguenti requisiti:

  • Il bucket di destinazione deve consentire al bucket di origine di caricare il report dell'inventario di Amazon S3 nel bucket di destinazione.
  • Il bucket di destinazione deve trovarsi nella stessa regione AWS del bucket di origine (dove hai configurato l'inventario di Amazon S3).
  • La policy del bucket di destinazione deve consentire l'accesso alla chiave AWS KMS utilizzata per crittografare il file del report dell'inventario.

Nota: per consegnare il primo report sull'inventario possono essere necessarie fino a 48 ore.

Risoluzione

Consentire al bucket di origine di caricare il report dell'inventario di Amazon S3 nel bucket di destinazione

Per generare e caricare il report dell'inventario nel periodo fisso di destinazione, la policy del periodo fisso deve consentire il caricamento del periodo fisso di origine nel periodo fisso di destinazione.

Ad esempio:

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

Pertanto, rivedi la tua policy del bucket di destinazione per eventuali istruzioni di rifiuto Deny. Il bucket non può includere alcuna istruzione di rifiuto Deny che impedisca ad Amazon S3 (s3.amazonaws.com) di eseguire un PutObject nel bucket di destinazione. Un rifiuto esplicito ha la precedenza su qualsiasi istruzione di consenso Allow. Escludi il servizio Amazon S3 (s3.amazonaws.com) da ogni istruzione Deny che potrebbe influire su un'azione PutObject.

Ecco un esempio di policy di bucket che rifiuta l'accesso ad Amazon S3 (s3.amazonaws.com) e consente l'accesso solo a un intervallo IP specificato:

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

Per correggere la policy del bucket precedente, aggiorna la tua policy in questo modo:

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

Conferma che il bucket di destinazione si trova nella stessa regione AWS del bucket di origine

Per verificare che il bucket di destinazione si trovi nella stessa regione AWS del bucket di origine, procedi come segue:

1.    Accedi alla Gestione della Console AWS

2.    Apri la console Amazon S3.

3.    Controlla la colonna Regione AWS nell'elenco dei bucket per confermare che il bucket di destinazione si trova nella stessa regione AWS del bucket di origine. (Il bucket di origine è il punto in cui hai configurato l'inventario di Amazon S3.)

4.    (Facoltativo) Se il bucket di origine e di destinazione si trovano in regioni diverse, crea o scegli un nuovo bucket. Questo perché il bucket di origine e il bucket di destinazione devono trovarsi nella stessa regione AWS.

Nota: Amazon S3 crea bucket in regioni specifiche. Dopo che un bucket è stato creato in una regione specifica, tutti gli oggetti che appartengono al bucket non lasciano mai quella regione (a meno che non vengano trasferiti esplicitamente). Per maggiori informazioni sull'utilizzo dei bucket Amazon S3 e delle regioni AWS, consulta Panoramica dei bucket.

Concedi l'accesso alla chiave AWS KMS utilizzata per crittografare il file del report dell'inventario

Se hai crittografato il tuo bucket Amazon S3 con una chiave AWS KMS, assicurati di concedere ad Amazon S3 l'accesso alla tua chiave KMS.

Per concedere le autorizzazioni per la crittografia utilizzando la chiave AWS KMS, completa la seguente procedura:

1.    Accedi alla Console di gestione AWS.

Nota: assicurati di accedere utilizzando l'account AWS che possiede la chiave AWS KMS.

2.    Apri la console di AWS KMS.

3.    Nel pannello di navigazione a sinistra, scegli Chiavi gestite dal cliente.

4.    In Chiavi gestite dal cliente, seleziona la chiave AWS KMS che desideri utilizzare per crittografare il file del report dell'inventario.

5.    In Policy chiave, seleziona Passa alla vista delle policy.

6. Per aggiornare la policy della chiave, scegli Modifica.

7.    In Modifica policy chiave, aggiungi la seguente policy chiave alla policy chiave esistente.

{
    "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.    Scegli Salva modifiche.

Revisione dei log di accesso al server e della cronologia di CloudTrail

Controlla i log di accesso al server per vedere se sono state apportate modifiche alle policy del tuo bucket durante il periodo in cui il report dell'inventario ha smesso di essere consegnato. Il formato dei log di accesso al server Amazon S3 è simile al seguente:

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

Cerca una delle seguenti voci che indicano che sono state apportate modifiche alla tua policy del periodo fisso:

REST.PUT.BUCKETPOLICY

Puoi anche cercare l'azione PutBucketPolicy nella cronologia degli eventi di AWS CloudTrail per confermare se sono state apportate modifiche recenti. Tieni presente che la cronologia degli eventi di CloudTrail fornisce solo una finestra di 90 giorni. Se l'azione PutBucketPolicy è stata eseguita più di 90 giorni fa, devi eseguire una query sui log di CloudTrail direttamente in Amazon S3. Per informazioni sulle chiamate API Amazon S3 acquisite da CloudTrail, consulta le informazioni di Amazon S3 in CloudTrail sul sito Web GitHub di AWS Docs.