Come posso concedere l'accesso pubblico in lettura ad alcuni oggetti presenti nel mio bucket Amazon S3?

6 minuti di lettura
0

Desidero che alcuni oggetti nel mio bucket Amazon Simple Storage Service (Amazon S3) siano pubblicamente leggibili. Tuttavia, non voglio modificare le autorizzazioni su altri oggetti presenti nello stesso bucket.

Breve descrizione

Puoi concedere l'accesso pubblico in lettura in uno dei modi seguenti:

  • Aggiorna la lista di controllo degli accessi (ACL) dell'oggetto, utilizzando la console Amazon S3
  • Aggiorna l'ACL dell'oggetto utilizzando l'Interfaccia della linea di comando AWS (AWS CLI)
  • Utilizza una policy del bucket che conceda l'accesso pubblico in lettura a un tag dell'oggetto specifico
  • Utilizza una policy del bucket che conceda l'accesso pubblico in lettura a un prefisso specifico

Importante: per i bucket per i quali la Proprietà dell'oggetto in S3 risulti impostata su Proprietario del bucket applicato non è possibile concedere l'accesso pubblico tramite le ACL di bucket e oggetto. Nella maggior parte dei casi, le ACL non sono necessarie per concedere l'accesso a oggetti e bucket. A tale scopo, è invece possibile utilizzare le policy di AWS Identity Access and Management (IAM) e quelle dei bucket S3.

Per impostazione predefinita, i nuovi bucket, i nuovi punti di accesso e i nuovi oggetti non consentono l'accesso pubblico. Se il blocco dell'accesso pubblico è attivato per tutti i bucket all'interno dell'account, verrà visualizzato il messaggio "Bucket e oggetti non pubblici". Per saperne di più, consulta la sezione Configurazione delle impostazioni di blocco dell'accesso pubblico per l'account.

Risoluzione

Importante: prima di iniziare, verifica di non avere alcuna impostazione di blocco dell'accesso pubblico a livello di account o di bucket. Le impostazioni non devono impedirti di rendere pubblici gli oggetti. Per impostazione predefinita, sui nuovi bucket S3 le impostazioni di blocco dell'accesso pubblico sono impostate su True.

Aggiorna l'ACL dell'oggetto utilizzando la console Amazon S3

Per rendere pubblici più oggetti contemporaneamente, segui questi passaggi:

Attenzione: dopo aver reso pubblici diversi oggetti, non è possibile annullare questa operazione per più oggetti contemporaneamente. Per rimuovere l'accesso pubblico, devi accedere a ciascun oggetto nella console Amazon S3. Quindi, dalla scheda Autorizzazioni dell'oggetto, modifica l'Accesso pubblico. Questa operazione deve essere eseguita per ogni oggetto a cui si desidera annullare l'accesso pubblico che si è concesso. Assicurati di esaminare attentamente la lista degli oggetti prima di renderli pubblici.

1.    Apri la console Amazon S3.

2.    Dall'elenco dei bucket, scegli il bucket con gli oggetti che desideri aggiornare.

3.    Spostati sulla cartella che contiene gli oggetti.

4.    Dall'elenco degli oggetti, seleziona tutti gli oggetti che desideri rendere pubblici.

5.    Scegli Azioni, quindi scegli Rendi pubblico.

6.    Nella finestra di dialogo Rendi pubblico, conferma che l'elenco degli oggetti sia corretto.

7.    Scegli Rendi pubblico.

Per rendere pubblico un singolo oggetto puoi ripetere la suddetta procedura o seguire questi passaggi:

1.    Dalla console Amazon S3 scegli il bucket con l'oggetto che desideri aggiornare.

2.    Spostati sulla cartella che contiene l'oggetto.

3.    Apri l'oggetto selezionando il link sul nome dell'oggetto.

4.    Scegli la scheda Autorizzazioni.

5.    Scegli Modifica.

6.    Nella sezione Tutti, seleziona Oggetti letti.

7.    Seleziona Comprendo gli effetti di queste modifiche su questo oggetto.

8.    Scegli Salva modifiche.

Aggiorna l'ACL dell'oggetto utilizzando AWS CLI

Per aggiornare l'ACL per l'accesso pubblico in lettura di un oggetto che hai già archiviato in Amazon S3, puoi eseguire questo comando:

aws s3api put-object-acl --bucket DOC-EXAMPLE-BUCKET --key exampleobject --acl public-read

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

In alternativa, puoi eseguire questo comando per concedere il pieno controllo dell'oggetto al proprietario dell'account AWS e l'accesso in lettura a tutti gli altri:

Nota: nel valore di --grant-full-control, inserisci l'ID utente canonico dell'account.

aws s3api put-object-acl --bucket DOC-EXAMPLE-BUCKET --key exampleobject --grant-full-control id="008exampleA45666666668889999008853" --grant-read uri=http://acs.amazonaws.com/groups/global/AllUsers

Utilizza una policy del bucket che conceda l'accesso pubblico in lettura a un tag dell'oggetto specifico

Importante: prima di iniziare, assicurati di controllare i prezzi previsti per l'assegnazione di tag agli oggetti in S3.

Innanzitutto, aggiungi una policy del bucket che consenta l'accesso pubblico in lettura a qualsiasi oggetto con un tag specifico. Ad esempio, questa policy consente l'accesso pubblico in lettura per qualsiasi oggetto contrassegnato con la coppia chiave-valore public=yes:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": "*",
      "Action": "s3:GetObject",
      "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*",
      "Condition": {
        "StringEquals": {
          "s3:ExistingObjectTag/public": "yes"
        }
      }
    }
  ]
}

Quindi, aggiungi il tag agli oggetti che desideri siano leggibili al pubblico. Puoi aggiungere o gestire i tag degli oggetti utilizzando la console Amazon S3. In alternativa, puoi usare AWS CLI.

Per verificare se un oggetto ha qualche tag esistente, esegui questo comando in AWS CLI:

aws s3api get-object-tagging --bucket DOC-EXAMPLE-BUCKET --key exampleobject

Per aggiungere un tag a un oggetto che non ha tag esistenti, esegui questo comando:

Attenzione: questo comando sovrascriverà tutti i tag dell'oggetto esistenti.

aws s3api put-object-tagging --bucket DOC-EXAMPLE-BUCKET --key exampleobject --tagging 'TagSet={Key=public,Value=yes}'

Per aggiungere un tag a un oggetto con tag esistenti, esegui il comando seguente. Assicurati di includere il nuovo tag dell'oggetto e i tag esistenti che desideri conservare.

aws s3api put-object-tagging --bucket DOC-EXAMPLE-BUCKET --key exampleobject --tagging 'TagSet=[{Key=public,Value=n},{Key=exampletag1,Value=one},{Key=exampletag2,Value=two}]'

Dopo aver aggiunto il tag dell'oggetto, esegui questo comando per rivedere i tag di tutti gli oggetti:

aws s3api get-object-tagging --bucket DOC-EXAMPLE-BUCKET --key exampleobject

Utilizza una policy del bucket che conceda l'accesso pubblico in lettura a un prefisso specifico

Attenzione: la seguente policy del bucket concede l'accesso pubblico in lettura a tutti gli oggetti con un prefisso specifico. Prima di utilizzare questa policy del bucket, verifica che il tuo caso d'uso supporti tutti gli oggetti leggibili pubblicamente all'interno del prefisso. Questa policy non concede l'accesso all'elenco per il prefisso. L'utente può accedere all'oggetto solo se il percorso dell'oggetto è noto. Quando si tenta di accedere a un oggetto che non esiste nel prefisso, l'utente riceverà un errore 403.

Per concedere l'accesso pubblico in lettura a un prefisso dell'oggetto specifico, aggiungi una policy del bucket simile alla seguente:

{
  "Version":"2012-10-17",
  "Statement":[
    {
      "Sid":"AddPerm",
      "Effect":"Allow",
      "Principal": "*",
      "Action":["s3:GetObject"],
      "Resource":["arn:aws:s3:::DOC-EXAMPLE-BUCKET/publicprefix/*"]
      }
  ]
}

Quindi, copia gli oggetti nel prefisso con accesso pubblico in lettura. È possibile copiare un oggetto nel prefisso eseguendo un comando simile al seguente:

aws s3 cp s3://DOC-EXAMPLE-BUCKET/exampleobject s3://DOC-EXAMPLE-BUCKET/publicprefix/exampleobject

Nota: a seconda del prefisso dell'oggetto, non è necessario copiare l'oggetto per concedere l'accesso pubblico in lettura.

Informazioni correlate

Configurazione delle ACL

AWS UFFICIALE
AWS UFFICIALEAggiornata 2 anni fa