Perché non riesco a caricare i contenuti del sito Web caricati nel mio bucket Amazon S3 da un altro account AWS?

5 minuti di lettura
0

Utilizzo un bucket Amazon Simple Storage Service (Amazon S3) per archiviare contenuti per il mio sito web. Un utente di un altro account AWS ha caricato un oggetto per il sito Web nel mio bucket. La mia policy del bucket è corretta, ma l'oggetto non verrà caricato sul sito Web.

Breve descrizione

Quando nel tuo bucket sono attivate le liste di controllo degli accessi (ACL), per impostazione predefinita non possiedi gli oggetti che altri account AWS caricano nel tuo bucket. Di conseguenza, potresti non essere in grado di leggere l'oggetto. L'account di caricamento deve concedere esplicitamente all'utente (proprietario del bucket) le autorizzazioni per l'oggetto.

Inoltre, una policy del bucket non si applica agli oggetti nel bucket di proprietà di altri account. Pertanto, la policy del bucket che garantisce l'accesso alla lettura agli utenti del tuo sito Web non si applica automaticamente agli oggetti caricati da un altro account.

Per risolvere questo problema, utilizza uno dei seguenti metodi:

  • Disattiva gli ACL sul tuo bucket S3 (best practice).
  • Il proprietario dell'oggetto deve garantire accesso di lettura pubblico all'oggetto.
  • Il proprietario dell'oggetto deve garantirti pieno controllo dell'oggetto.

Risoluzione

Disattiva gli ACL sul tuo bucket S3 (best practice)

Per disattivare gli ACL sul tuo bucket Amazon S3, scegli l'impostazione Bucket owner enforced Object Ownership. Quando applichi questa impostazione, l'ACL viene disattivato e tu possiedi automaticamente e hai il pieno controllo su tutti gli oggetti nel tuo bucket. Anche per gli oggetti caricati su più account, la proprietà di questo oggetto appartiene al proprietario del bucket. Il proprietario del bucket controlla anche la politica del bucket che garantisce l'accesso in lettura da applicare a tali oggetti.

Prerequisiti

Prima di disattivare gli ACL, consulta Prerequisiti per la disattivazione degli ACL.

Disattiva gli ACL

  1. Apri la console Amazon S3.
  2. Scegli Bucket, quindi seleziona il nome del bucket a cui desideri applicare un'impostazione S3 Object Ownership.
  3. Scegli la scheda Autorizzazioni.
  4. Sotto Object Ownership, scegli Modifica.
  5. Sotto Object Ownership, scegli Bucket owner enforced.
  6. Scegli Salva.

Se il tuo caso d'uso non ti consente di disattivare gli ACL, utilizza uno di questi metodi alternativi.

Il proprietario dell'oggetto deve garantire accesso di lettura pubblico dell'oggetto

Nota: Se ricevi messaggi di errore durante l'esecuzione dei comandi AWS CLI, assicurati di utilizzare la versione più recente di AWS CLI.

L'account che ha caricato l'oggetto può concedere all'oggetto l'accesso pubblico in lettura. A tale scopo, esegui questo comando AWS Command Line Interface (AWS CLI):

aws s3api put-object-acl --bucket docexamplebucket --key example.jpg --acl public read

Nota: Sostituisci**\ --bucket** con il nome del bucket che memorizza i contenuti del tuo sito web.

Chiedi al proprietario dell'oggetto di concederti il pieno controllo dell'oggetto

I proprietari degli oggetti possono concedere automaticamente al proprietario del bucket il pieno controllo di un oggetto. Per fare ciò, attiva S3 Object Ownership nel bucket di destinazione. Questa funzionalità garantisce al proprietario del bucket il controllo quando il proprietario dell'oggetto carica un oggetto e include l'ACL predefinito del bucket-owner-full-control.

Dopo che il proprietario del bucket ha configurato la proprietà degli oggetti S3 su proprietario del bucket preferito, il proprietario del bucket può aggiungere un'altra policy del bucket. Questa policy del bucket aggiuntiva deve richiedere che tutte le operazioni PUT di Amazon S3 includano l'ACL predefinito del bucket-owner-full-control. Questo ACL garantisce al proprietario del bucket il pieno controllo dei nuovi oggetti.

Per garantire al proprietario del bucket il pieno controllo dell'oggetto, l'account di caricamento deve utilizzare la sintassi CLI durante il caricamento dell'oggetto:

aws s3api put-object --bucket docexamplebucket --key example.jpg --acl bucket-owner-full-control

Il proprietario del bucket ora possiede l'oggetto e l'oggetto eredita le autorizzazioni impostate nella policy del bucket.

Per gli oggetti esistenti che sono stati caricati prima di attivare S3 Object Ownership, il proprietario dell'oggetto deve concedere al proprietario del bucket le autorizzazioni sull'oggetto. Quindi, il proprietario del bucket deve copiare l'oggetto stesso.

Per garantire al proprietario del bucket il pieno controllo dell'oggetto, l'account di caricamento deve utilizzare la sintassi CLI:

aws s3api put-object-acl --bucket docexamplebucket --key example.jpg --acl bucket-owner-full-control

Per ereditare la proprietà dell'oggetto, il proprietario del bucket deve copiare l'oggetto stesso:

aws s3 cp s3://docexamplebucket/example.jpg s3://docexamplebucket/example.jpg --acl bucket-owner-full-control

Il proprietario del bucket ora possiede l'oggetto e l'oggetto eredita le autorizzazioni impostate nella policy del bucket.

Richiedi che i caricamenti tra account garantiscano al proprietario del bucket il pieno controllo dell'oggetto

Per richiedere che tutti i caricamenti (s3:PutObject) da un altro account concedano al proprietario del bucket il pieno controllo dell'oggetto, usa una policy del bucket come in questo esempio:

{
  "Id": "Policy1541018284691",
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "RequireBucketOwnerFullControlOnPuts",
      "Principal": {
        "AWS": [
          "arn:aws:iam::111122223333:user/iam_user"
        ]
      },
      "Action": [
        "s3:PutObject"
      ],
      "Effect": "Allow",
      "Resource": "arn:aws:s3:::docexamplebucket/*",
      "Condition": {
        "StringEquals": {
          "s3:x-amz-acl": "bucket-owner-full-control"
        }
      }
    }
  ]
}

Con questa policy del bucket, l'utente dell'altro account (111122223333) può effettuare il caricamento nel bucket solo quando l'utente specifica l'ACL dell'oggetto. L'ACL dell'oggetto deve concedere il pieno controllo al proprietario del bucket. L'altro utente dell'account deve quindi caricare gli oggetti, come in questo comando:

aws s3 cp path/to/local/file s3://docexamplebucket --acl bucket-owner-full-control

Informazioni correlate

Come Amazon S3 autorizza una richiesta

Linee guida sulle policy di accesso

Impostazione delle autorizzazioni per l'accesso al sito Web

Controlla l'accesso a un bucket con policy utente

AWS UFFICIALE
AWS UFFICIALEAggiornata 8 mesi fa