Come faccio a modificare la proprietà di un oggetto di proprietà pubblica (utente anonimo) nel mio bucket Amazon S3?

3 minuti di lettura
0

Il mio bucket Amazon Simple Storage Service (Amazon S3) contiene un oggetto di proprietà pubblica (utente anonimo). Desidero trasferire la proprietà dell’oggetto al mio account AWS.

Breve descrizione

Per impostazione predefinita, l'identità che carica un oggetto Amazon S3 possiede tale oggetto. Pertanto, se si consente l'accesso pubblico in scrittura a un bucket, gli oggetti caricati dagli utenti pubblici (anonimi) diventeranno di proprietà pubblica. Per evitare problemi di sicurezza, è quindi consigliabile bloccare l'accesso pubblico al bucket.

Se un utente anonimo ha caricato un oggetto nel tuo bucket e desideri modificare la proprietà dell'oggetto, modifica la lista di controllo degli accessi (ACL) dell'oggetto. Per garantire il totale controllo dell'oggetto al proprietario del bucket (il tuo account AWS), cambia l’ACL dell’oggetto.

Nota: per controllare la proprietà degli oggetti caricati da un altro account AWS, puoi anche utilizzare Object Ownership di Amazon S3.

Risoluzione

Per trasferire la proprietà dell'oggetto all'account AWS proprietario del bucket, segui questi passaggi:

  1. Esegui il comando put-object-acl utilizzando l'interfaccia della linea di comando AWS (AWS CLI) per aggiungere l'ACL di un oggetto. Per aggiungere un'ACL che conceda al proprietario del bucket il controllo dell'oggetto, includi l'opzione --acl, assegnandole il valore bucket-owner-full-control. Quindi, includi l'opzione --no-sign-request per utilizzare delle credenziali anonime ai fini della richiesta. Di seguito è riportato un esempio del comando put-object-acl completo con le opzioni necessarie:

    aws s3api put-object-acl --bucket DOC-EXAMPLE-BUCKET --key awsexampleobject --acl bucket-owner-full-control --no-sign-request

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

  2. Per applicare il trasferimento di proprietà, è necessario copiare l'oggetto su sé stesso. Per fare ciò, esegui il comando cp:

    aws s3 cp s3://DOC-EXAMPLE-BUCKET/awsexampleobject s3://DOC-EXAMPLE-BUCKET/awsexampleobject --storage-class STANDARD

    Nota: assicurati di sostituire il valore --storage-class nel comando di esempio con la classe di archiviazione applicabile al tuo caso specifico. Assicurati inoltre di includere eventuali ulteriori opzioni di comando cp necessarie per l'oggetto in questione.

  3. Per verificare il trasferimento di proprietà, esegui il comando get-object-acl:

    aws s3api get-object-acl --bucket DOC-EXAMPLE-BUCKET --key awsexampleobject

    Questo comando restituisce un output che riporta il proprietario dell'oggetto:

    {
      "Owner": {
        "DisplayName": "jane",
        "ID": "75050348ef85628a0977bexamplebdbc3062ce76f35cb463345ae65c2608d099"
      },
      "Grants": [
        {
          "Grantee": {
            "DisplayName": "jane",
            "ID": "75050348ef85628a0977bexamplebdbc3062ce76f35cb463345ae65c2608d099",
            "Type": "CanonicalUser"
          },
          "Permission": "FULL_CONTROL"
        }
      ]
    }
  4. Se il bucket dispone di controllo delle versioni, è necessario eliminare anche la versione precedente dell'oggetto generata dal comando cp nel passaggio 2. Questa, infatti, sarà di proprietà pubblica (utente anonimo). Per eliminare la versione dell’oggetto, esegui prima il comando list-object-versions sul bucket. Includi l'opzione --prefix del comando per filtrare i risultati in base all'oggetto di proprietà pubblica:

    aws s3api list-object-versions --bucket DOC-EXAMPLE-BUCKET --prefix example.txt

    Dall'output restituito dal comando, copia l'ID della versione dell’oggetto che era di proprietà pubblica. Quindi, esegui il comando delete-object includendo l'ID della versione che intendi eliminare:

    aws s3api delete-object --bucket DOC-EXAMPLE-BUCKET --key example.txt --version-id 'example.d6tjAKF1iObKbEnNQkIMPjj'

    Attenzione: verifica con cura che l'ID della versione inserito sia quello della versione dell'oggetto di proprietà pubblica. Se elimini una versione dell'oggetto, non potrai più recuperarla.

Informazioni correlate

Perché non riesco ad accedere a un oggetto che è stato caricato nel mio bucket Amazon S3 da un altro account AWS?

AWS UFFICIALE
AWS UFFICIALEAggiornata 8 mesi fa