Come posso concedere l'accesso pubblico in lettura ad alcuni oggetti 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 nello stesso bucket.

Breve descrizione

Utilizza dei seguenti modi per concedere l'accesso pubblico in lettura agli oggetti nel tuo bucket S3:

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

Importante: quando imposti la Proprietà dell'oggetto S3** su **Proprietario del bucket applicato al bucket, non puoi utilizzare le ACL del bucket e dell'oggetto per concedere l'accesso pubblico. Nella maggior parte dei casi, non sono necessarie ACL per concedere autorizzazioni a oggetti e bucket. Utilizza invece le policy AWS Identity Access and Management (AWS IAM) e le policy dei bucket S3 per concedere le autorizzazioni.

Per impostazione predefinita, i nuovi bucket, punti di accesso e oggetti non consentono l'accesso pubblico. Se hai configurato il blocco dell'accesso pubblico per tutti i bucket all'interno del tuo account AWS, viene visualizzato il messaggio "Bucket and objects not public".

Per accedere al bucket pubblico, assicurati che la rete non disponga di firewall o impostazioni che bloccano il traffico in uscita verso il dominio del bucket.

Risoluzione

Importante: per impostazione predefinita, sui nuovi bucket S3 le impostazioni di blocco dell'accesso pubblico sono impostate su True. Prima di iniziare, modifica le impostazioni di blocco dell'accesso pubblico impostandole su False a livello di account o bucket.

Aggiorna l'ACL dell'oggetto dalla console Amazon S3

Rendi pubblici più oggetti contemporaneamente

Attenzione: esamina attentamente gli oggetti prima di renderli pubblici. Dopo aver reso pubblici diversi oggetti, non puoi annullare l'operazione per tutti gli oggetti contemporaneamente. Devi invece modificare Accesso pubblico nella scheda Autorizzazioni di ciascun oggetto.

Per rendere pubblici più oggetti contemporaneamente, completa i seguenti passaggi:

  1. Apri la console Amazon S3, quindi seleziona gli oggetti che desideri rendere pubblici.
  2. Scegli Operazioni, quindi scegli Rendi pubblico.
  3. Nella finestra di dialogo Rendi pubblico, verifica che l'elenco degli oggetti sia corretto.
  4. Scegli Rendi pubblico.

Rendi pubblico un oggetto

Per rendere pubblico un solo oggetto, ripeti la procedura precedente o completa i seguenti passaggi:

  1. Apri la console Amazon S3, quindi seleziona il bucket per l'oggetto che desideri rendere pubblico.
  2. In Oggetti, seleziona l'oggetto.
  3. Scegli la scheda Autorizzazioni, quindi scegli Modifica.
  4. Nella sezione Tutti , scegli Oggetti letti.
  5. Seleziona I understand the effects of these changes on this object (Comprendo gli effetti delle modifiche su questo oggetto).
  6. Scegli Salva le modifiche.

Utilizza AWS CLI per aggiornare l'ACL dell'oggetto

Nota: se ricevi errori quando esegui i comandi dell'Interfaccia della linea di comando AWS (AWS CLI), consulta Risoluzione degli errori per AWS CLI. Inoltre, assicurati di utilizzare la versione più recente di AWS CLI.

Per un oggetto già archiviato in Amazon S3, puoi eseguire il comando put-object-acl per aggiornare l'ACL dell'oggetto per l'accesso pubblico in lettura:

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

Nota: sostituisci exampleobject con il tuo oggetto.

In alternativa, puoi eseguire il seguente comando put-object-acl per concedere il pieno controllo dell'oggetto al proprietario dell'account e l'accesso in lettura a tutti gli altri:

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

Nota: in grant-full-control id, inserisci l'ID utente canonico dell'account.

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

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

Per utilizzare una policy per concedere l'accesso pubblico in lettura agli oggetti con un tag specifico, completa i seguenti passaggi:

  1. Aggiungi una policy del bucket che consenta l'accesso pubblico in lettura a qualsiasi oggetto con un tag specifico. Ad esempio, la seguente policy consente l'accesso pubblico in lettura per qualsiasi oggetto con il tag per 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"
                    }
                }
            }
        ]
    }
  2. Aggiungi il tag agli oggetti che desideri siano leggibili al pubblico.

  3. Per verificare quali tag ha un oggetto, esegui il comando get-object-tagging in AWS CLI:

    aws s3api get-object-tagging --bucket DOC-EXAMPLE-BUCKET --key exampleobject
  4. Per aggiungere un tag a un oggetto che non ha tag, esegui il seguente comando put-object-tagging:

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

    Attenzione: il comando precedente sovrascrive tutti i tag di un oggetto.

  5. Per aggiungere un nuovo tag a un oggetto che ha già dei tag, esegui il seguente comando put-object-tagging:

    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}]'
    

    Nota: assicurati di includere il nuovo tag dell'oggetto e i tag precedenti che desideri conservare.

  6. Per verificare i tag dell'oggetto, esegui nuovamente il comando get-object-tagging:

    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 la policy del bucket, verifica che il caso d'uso supporti tutti gli oggetti leggibili pubblicamente all'interno del prefisso. La seguente policy non concede l'accesso all'elenco per il prefisso. L'utente può accedere all'oggetto solo se il percorso dell'oggetto è noto. Se l'utente tenta di accedere a un oggetto che non esiste nel prefisso, riceve un errore 403.

  1. Per concedere l'accesso pubblico in lettura a un prefisso specifico dell'oggetto, aggiungi la seguente policy del bucket:

    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Sid": "AddPerm",
                "Effect": "Allow",
                "Principal": "*",
                "Action": [
                    "s3:GetObject"
                ],
                "Resource": [
                    "arn:aws:s3:::DOC-EXAMPLE-BUCKET/publicprefix/*"
                ]
            }
        ]
    }
  2. Esegui il comando cp per copiare un oggetto nel prefisso con accesso pubblico in lettura:

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

Nota: se l'oggetto ha già un prefisso leggibile pubblicamente, non è necessario copiare l'oggetto in un nuovo prefisso.

Accedi a bucket o oggetti S3 pubblici da reti con restrizioni

Per accedere a bucket o oggetti S3 pubblici da reti con restrizioni, puoi aggiungere una policy del bucket che consenta l'accesso da un intervallo di indirizzi IP specifico. Il seguente esempio di policy consente la richiesta GET dagli intervalli CIDR 192.0.2.0/24 e 203.0.113.0/24:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*",
            "Condition": {
                "IpAddress": {
                    "aws:SourceIp": [
                        "192.0.2.0/24",
                        "203.0.113.0/24"
                    ]
                }
            }
        }
    ]
}

Informazioni correlate

Configurazione delle ACL

Blocco dell'accesso pubblico allo storage Amazon S3