Come posso risolvere i problemi relativi a Amazon S3 Batch Operations?

Ultimo aggiornamento: 16/12/2021

Sto provando a creare un processo di Amazon Simple Storage Service (Amazon S3) Batch Operations per gli oggetti memorizzati nel mio bucket. Tuttavia, Amazon S3 continua a restituire un errore o il mio processo batch continua a non riuscire. In che modo posso risolvere il problema?

Breve descrizione

Se un processo di operazioni in batch di Amazon S3 rileva un problema che ne impedisce l'esecuzione, il processo non riesce. Ad esempio, se S3 non è in grado di leggere il manifesto specificato o gli oggetti nel manifesto non esistono nel bucket specificato, il processo non riesce. Un processo non riuscito genera uno o più codici e motivi di errore. S3 Batch Operations memorizza i codici di errore e i motivi del processo in modo che tu possa visualizzarli richiedendo i dettagli del processo stesso. Puoi anche rivedere i codici e i motivi dell'errore nel rapporto di completamento del processo.

Per evitare che i processi eseguano un numero elevato di operazioni non riuscite, Amazon S3 impone anche una soglia di fallimento delle attività per ogni processo di Batch Operations. Amazon S3 monitora la percentuale di fallimento delle attività dopo l'esecuzione di almeno 1.000 attività. Se un processo supera il tasso di fallimento del 50%, il processo ha esito negativo. Per risolvere questo errore, esamina le cause degli errori e correggile prima di inviare nuovamente il processo.

Di seguito sono riportati alcuni motivi comuni per cui Amazon S3 Batch Operations non riesce o restituisce un errore:

  • Formato del file manifesto (CSV o JSON)
  • Il file manifesto specifica più nomi di bucket o contiene più righe di intestazione
  • Autorizzazioni per leggere il file manifesto
  • Regione del processo batch
  • Bucket di destinazione per il report di S3 Inventory
  • Policy di attendibilità del ruolo AWS Identity Access Management (IAM)
  • Autorizzazioni del ruolo IAM per la creazione di un processo batch
  • Accesso del ruolo IAM al bucket di origine, al report S3 Inventory e al bucket di destinazione
  • Policy di controllo del servizio (SCP) di AWS Organizations

Risoluzione

Formato del file manifesto (CSV o JSON)

Amazon S3 Batch Operations supporta i file manifesto CSV e JSON (report di S3 Inventory). Quando crei un nuovo processo batch in Amazon S3, seleziona o specifica il formato manifesto corretto per il tuo file manifesto:

  • Per il report di Amazon S3 Inventory, assicurati di utilizzare un report in formato CSV e specifica il file manifest.json associato al report dell'inventario.
  • Per i file CSV, ogni riga del file manifesto deve includere la chiave oggetto manifesto, l'ETag e l'ID versione opzionale. Le chiavi oggetto devono essere codificate tramite URL. Il manifesto deve includere gli ID versione per tutti gli oggetti oppure omettere gli ID versione per tutti gli oggetti. Nota: se gli oggetti nel manifesto si trovano in un bucket con versione, è necessario specificare gli ID versione per gli oggetti. In caso contrario, il processo batch potrebbe non riuscire. In alternativa, il processo batch potrebbe essere applicato all'ultima versione dell'oggetto (anziché all'oggetto esistente al momento della creazione del processo).

Per ulteriori informazioni sui file e i formati manifest, consulta Specifica di un manifesto.

Il file manifesto specifica più nomi di bucket o contiene più righe di intestazione

Con S3 Batch Operations, è possibile copiare oggetti, modificare la data di conservazione del blocco degli oggetti o modificare lo stato di conservazione legale del blocco degli oggetti. Queste tre operazioni di processi batch richiedono che tutti gli oggetti elencati nel file manifesto esistano anche nello stesso bucket. In caso contrario, viene visualizzato il seguente errore:

Reasons for failure:
Cannot have more than 1 bucket per Job. <Job ID>

Se stai eseguendo una di queste tre operazioni batch, assicurati che il file manifesto specifichi un solo nome per il bucket. Inoltre, il file manifesto non deve contenere alcuna riga di intestazione. Ad esempio, se il file manifesto è simile al seguente (in cui sono presenti più righe di intestazione), Amazon S3 restituirà un errore:

bucket,key
my-batch-bucket,object001.txt
my-batch-bucket,object002.txt
my-batch-bucket,object003.txt
my-batch-bucket,object004.txt

Autorizzazioni per leggere il file manifesto

Verifica che il ruolo IAM utilizzato per creare il processo S3 Batch Operations disponga delle autorizzazioni GetObject per consentirgli di leggere il file manifesto. Puoi farlo controllando i metadati dell'oggetto. Cerca eventuali discrepanze nell'accesso con S3 Object Ownership o qualsiasi chiave AWS KMS non supportata utilizzata per crittografare il file manifesto.

Se non si dispone dell'autorizzazione per leggere il file manifesto, quando si prova a creare un processo S3 Batch Operations vengono restituiti i seguenti errori:

AWS CLI:

Reason for failure
Reading the manifest is forbidden: AccessDenied

Console Amazon S3:

Warning: Unable to get the manifest object's ETag. Specify a different object to continue

Nota: S3 Batch Operations supporta report di inventario CSV crittografati con AWS KMS. S3 Batch Operations non supporta i file manifesto CSV crittografati con AWS KMS. Per ulteriori informazioni, consulta Configurazione dell'inventario o Specifica di un manifesto.

Regione del processo batch

I processi di copia di S3 Batch Operations devono essere creati nella stessa regione AWS del bucket di destinazione in cui si desidera copiare gli oggetti. Pertanto, assicurati di selezionare la stessa regione del bucket di destinazione quando si crea il processo batch. Ad esempio, se il bucket di destinazione risiede nella regione us-west-2, seleziona us-west-2 come regione per il processo batch.

Bucket di destinazione per il report di S3 Inventory

Verifica che esista il bucket di destinazione per il report di S3 Inventory. Inoltre, verifica che la policy del bucket S3 non rifiuti l'azione s3:PutObject. Se il report viene consegnato a un altro account AWS, verifica se il bucket di destinazione consente al ruolo IAM di eseguire l'azione s3:PutObject.

Policy di attendibilità del ruolo IAM

Nota: assicurati di specificare un ruolo IAM e non un utente IAM.

A differenza di un utente IAM, un ruolo IAM è dotato di una policy di attendibilità che definisce quali condizioni devono essere soddisfatte affinché altri principali lo assumano. Per consentire al principale del servizio S3 Batch Operations di assumere il ruolo IAM, collega una policy di attendibilità al ruolo.

La seguente policy di attendibilità delega l'accesso ad Amazon S3, riducendo al contempo i rischi associati all'escalation dei privilegi:

{
   "Version":"2012-10-17",
   "Statement":[
      {
         "Effect":"Allow",
         "Principal":{
            "Service":"batchoperations.s3.amazonaws.com"
         },
         "Action":"sts:AssumeRole"
      }
   ]
}

Autorizzazioni IAM per la creazione di un processo batch

Prima di creare ed eseguire processi di S3 Batch Operations, concedi le autorizzazioni necessarie. Se al ruolo IAM mancano le autorizzazioni necessarie per eseguire il processo S3 Batch Operations, il processo batch avrà esito negativo.

Per creare un processo S3 Batch Operations, sono necessarie le autorizzazioni s3:CreateJob. La stessa entità che crea il processo deve disporre anche delle autorizzazioni iam:PassRole per passare il ruolo IAM specificato per il processo batch. Per ulteriori informazioni sulla specifica delle risorse IAM, consulta Policy JSON di IAM, Elementi delle risorse.

Accesso del ruolo IAM al bucket di origine, al report S3 Inventory e al bucket di destinazione

Verifica che il ruolo IAM che stai utilizzando per S3 Batch Operations disponga delle autorizzazioni necessarie per eseguire il processo batch. Ad esempio, la policy IAM per l'operazione di copia è simile alla seguente:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Action": [
                "s3:PutObject",
                "s3:PutObjectAcl",
                "s3:PutObjectTagging"
            ],
            "Effect": "Allow",
            "Resource": "arn:aws:s3:::{{DestinationBucket}}/*"
        },
        {
            "Action": [
                "s3:GetObject",
                "s3:GetObjectAcl",
                "s3:GetObjectTagging",
                "s3:ListBucket"
            ],
            "Effect": "Allow",
            "Resource": [
                "arn:aws:s3:::{{SourceBucket}}",
                "arn:aws:s3:::{{SourceBucket}}/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:GetObject",
                "s3:GetObjectVersion"
            ],
            "Resource": [
                "arn:aws:s3:::{{ManifestBucket}}/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:PutObject"
            ],
            "Resource": [
                "arn:aws:s3:::{{ReportBucket}}/*"
            ]
        }
    ]
}

Policy di controllo del servizio (SCP) di AWS Organizations

Se utilizzi AWS Organizations, verifica che non siano presenti dichiarazioni di rifiuto che potrebbero impedire l'accesso ad Amazon S3. Ad esempio, se la policy di controllo del servizio rifiuta esplicitamente tutte le azioni S3, quando crei un processo batch potresti ricevere un errore Accesso negato.

Ecco un esempio di policy che rifiuta esplicitamente tutte le operazioni S3:

{
    "Version": "2012-10-17",
    "Statement": [
        {   
            "Principal":"*",
            "Effect": "Deny",
            "Action": "s3:*",
            "Resource": "*"
        }
    ]
}

Se intendi applicare una policy restrittiva, puoi inserire nella lista consentita il ruolo IAM che S3 Batch Operations utilizzerà per eseguire l'operazione. Ad esempio:

{
    "Version": "2012-10-17",
    "Statement": [
        {   
            "Principal":"*",
            "Effect": "Deny",
            "Action": "s3:*",
            "Resource": "*",
            "Condition": {
            "StringNotLike": {
                "aws:userId": [
                    "AROAEXAMPLEID:*",
                    "AIDAEXAMPLEID",
                    "111111111111"
                ]
            }
        }
        }
    ]
}

Questo articolo è stato utile?


Hai bisogno di supporto tecnico o per la fatturazione?