Esiste una policy S3 per limitare l'accesso a solo vedere / accedere a un bucket?


123

Ho un semplice bucket che assomiglia al images.mysite.commio S3 e altri bucket contenenti backup, ecc.

Desidero consentire a un utente specifico di accedere al images.mysite.combucket per caricare le immagini. Tuttavia, NON voglio che veda nessuno degli altri secchi; nemmeno che esistono.

Non potrei fare una politica che faccia questo; ogni volta che provo qualcosa di restrittivo, finisce per bloccare l'elenco di eventuali bucket.


Voto per chiudere questa domanda come fuori tema perché dovrebbe essere su Superusers
Tonny Madsen

Una politica potrebbe essere generata qui su: awspolicygen.s3.amazonaws.com/policygen.html
Suhail Gupta


1
Perché non condividere semplicemente l'URL del bucket - https://s3.console.aws.amazon.com/s3/buckets/my-bucket-name/. In questo modo impedisci loro di vedere l'intero elenco e non modifichi nulla sulla tua politica attuale.
Treecoder

Risposte:


119

L'ho provato per un po 'e alla fine ho trovato una soluzione funzionante. Devi utilizzare "Risorse" diverse a seconda del tipo di azione che stai eseguendo. Inoltre ho incluso alcune azioni mancanti nella risposta precedente (mi piace DeleteObject) e limitandone altre (mi piace PutBucketAcl).

La seguente policy IAM ora funziona per me:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "s3:ListBucket",
        "s3:GetBucketLocation",
        "s3:ListBucketMultipartUploads"
      ],
      "Resource": "arn:aws:s3:::itnighq",
      "Condition": {}
    },
    {
      "Effect": "Allow",
      "Action": [
        "s3:AbortMultipartUpload",
        "s3:DeleteObject",
        "s3:DeleteObjectVersion",
        "s3:GetObject",
        "s3:GetObjectAcl",
        "s3:GetObjectVersion",
        "s3:GetObjectVersionAcl",
        "s3:PutObject",
        "s3:PutObjectAcl",
        "s3:PutObjectVersionAcl"
      ],
      "Resource": "arn:aws:s3:::itnighq/*",
      "Condition": {}
    },
    {
      "Effect": "Allow",
      "Action": "s3:ListAllMyBuckets",
      "Resource": "*",
      "Condition": {}
    }
  ]
}

Le azioni riguardanti un secchio e quelle riguardanti gli oggetti devono avere arn differenti.


9
Questa è un'ottima risposta, grazie. Potrebbe valere la pena notare che l'implicazione dell'autorizzazione s3: ListAllMyBuckets è che il destinatario di questa policy può vedere tutti i tuoi bucket (root). Non vi è alcuna divulgazione diretta dei dati, ma potrebbe esserci sensibilità / confusione sui nomi dei bucket. È possibile rimuovere questa particolare autorizzazione e le cose dovrebbero ancora funzionare (sebbene "s3cmd ls" ecc. Non restituirà il bucket di destinazione).
Mike Repass

91
Ciò non impedisce all'utente di vedere altri nomi di bucket!
metdos

2
@metdos puoi impedire agli utenti di vedere altri nomi di bucket rimuovendo l'ultima policy.
Hendra Uzia

20
Per vedere l'elenco dei bucket nella console (e quindi utilizzare la console per l'accesso al bucket) è necessario concedere ListAllMyBucketse GetBucketLocationper tutti i bucket S3 ( "arn:aws:s3:::*"funzionerà invece che "*"per la risorsa). Come affermato in questo post del blog AWS "per inciso, al momento non è possibile filtrare selettivamente determinati bucket, quindi gli utenti devono disporre dell'autorizzazione per elencare tutti i bucket per l'accesso alla console".
jwadsack

10
Questo è un consiglio orribile. È pericoloso e in particolare ciò che l'OP non voleva. Vedere le risposte di Andreas Stankewitz e BFar per soluzioni possibili.
AndreKR

37

Il nostro caso d'uso: fornire spazio di backup per i client della nostra applicazione cloud a cui possono accedere i client direttamente utilizzando gli strumenti S3 comuni. Ovviamente, nessun cliente dovrebbe vedere cosa hanno gli altri clienti.

Come ha spiegato cloudberryman, "Puoi elencare tutti i bucket o nessuno.", Quindi dobbiamo trovare una soluzione. Sfondo:

La concessione dei diritti ListAllMyBuckets all'utente è necessaria affinché la console AWS S3 o S3Fox si colleghino senza un messaggio di errore. Ma ListAllMyBuckets elenca tutti i bucket, indipendentemente dalle risorse assegnate (in realtà, solo arn: ... ::: * funziona). È un bug serio, se me lo chiedi. Btw. negare ListBucket per tutti i bucket non impedisce che vengano elencati, poiché ListBucket concede i diritti per elencare il contenuto del bucket.

Ci sono 3 possibilità che ho considerato come soluzione. Ho scelto l'ultima.

(1) utilizzare nomi di bucket criptici, ad esempio GUID

Vantaggio: facile da configurare

Svantaggio: difficile da gestire, soprattutto per il cliente. (immagina di trovare un GUID specifico tra migliaia di altri.) Mostra anche il numero di bucket = numero di client che utilizzano il servizio di backup.

(2) utilizzare un bucket con cartelle specifiche del cliente

Questo è il modo in cui Amazon suggerisce dai suoi esempi S3 / IAM di fornire spazio per l'accesso solo da parte di determinati utenti o gruppi di utenti. Vedi: Esempi di policy IAM di AWS

Vantaggio: abbastanza facile da configurare, va con le idee AWS

Svantaggio: obbliga a rendere pubblica l'esistenza di tutti i bucket, in modo che il cliente possa trovare il bucket "di casa". La contabilità AWS fornisce statistiche sull'utilizzo del bucket, ma non sull'utilizzo delle cartelle, il che rende difficile calcolare i costi in base al cliente.

(3) non concedere il diritto di accesso per ListAllMyBuckets

Vantaggio: ottieni ciò che desideri: i clienti non possono vedere i bucket degli altri clienti

Svantaggio: il cliente non può vedere il proprio secchio. S3Browser viene fornito con un simpatico messaggio "impossibile da fare" e chiede di inserire il nome del bucket. S3Fox genera un messaggio di errore durante la connessione alla radice, ma consente la navigazione diretta al bucket del client se il nome del bucket è noto. La console Amazon S3 non funziona affatto.

Spero che questo ti abbia aiutato a gestire S3 IAM come ti serve.


1
Inoltre, per la soluzione (1) se desideri utilizzare l'hosting web con un bucket, il nome del bucket deve corrispondere al nome di dominio.
Andy Fusniak

31

Non è possibile fornire l'accesso alla console S3 senza concedere l' ListAllMyBucketsautorizzazione.

Nel mio caso (e forse anche nel tuo, futuro lettore) un'alternativa accettabile è reindirizzare gli utenti all'accesso direttamente al bucket che vorresti che vedessero.

A tale scopo, aggiungi quanto segue all'URL di accesso IAM: /s3/?bucket=bucket-name

URL di accesso completo (sostituisci il tuo alias e il nome del bucket ):

https://your-alias.signin.aws.amazon.com/console/s3/?bucket=bucket-name

Criterio IAM (sostituire il nome del bucket ):

{
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "s3:ListAllMyBuckets",
            "Resource": "arn:aws:s3:::*"
        },
        {
            "Effect": "Allow",
            "Action": "s3:*",
            "Resource": [
                "arn:aws:s3:::bucket-name",
                "arn:aws:s3:::bucket-name/*"
            ]
        }
    ]
}

Per ulteriori informazioni su come creare autorizzazioni specifiche per i bucket per gli utenti, leggi questo blog: http://mikeferrier.com/2011/10/27/granting-access-to-a-single-s3-bucket-using-amazon-iam /


1
Funziona bene. Sarebbe ottimale se gli utenti non potessero esplorare al di fuori della visualizzazione del secchio ... Ma lo prendo. Grazie @BFar.
Jamie Popkin

Questa è l'UNICA risposta CORRETTA, tutti gli altri elencheranno ogni bucket, che dovrebbe essere nascosto come da richiesta originale.
Steve Horvath

Esattamente quello di cui ho bisogno. Grazie.
Di Zhang

20

Prova questa politica. Inoltre, tieni presente che non è possibile lasciare nell'elenco utenti solo il bucket selezionato. Puoi elencare tutti i bucket o nessuno.

{
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:GetObject",
                "s3:PutObject",
                "s3:GetObjectAcl",
                "s3:PutObjectAcl",
                "s3:ListBucket",
                "s3:GetBucketAcl",
                "s3:PutBucketAcl",
                "s3:GetBucketLocation"
            ],
            "Resource": "arn:aws:s3:::your_bucket_here/*",
            "Condition": {}
        },
        {
            "Effect": "Allow",
            "Action": "s3:ListAllMyBuckets",
            "Resource": "*",
            "Condition": {}
        }
    ]
}

2
Funziona benissimo! Ho dovuto fare un'azione di cambiamento s3:*per farlo funzionare per me. Anch'io lo avevo "Resource": ["arn:aws:s3:::your_bucket_here", "arn:aws:s3:::your_bucket_here/*"], ma potrebbe non essere necessario.
Michael Yagudaev

3
s3: * concede l'accesso per fare qualsiasi cosa, inclusa l'eliminazione di un bucket. Sicuro che lo vuoi?
Dave Gregory,

10

Interpreto questa domanda come: "Posso consentire l'accesso a un bucket in cui tutti gli altri bucket non saranno accessibili e quindi invisibili". Perché mostrare il nome del bucket a cui non è stato concesso l'accesso equivale comunque a fuga di informazioni.

E la risposta corretta è no. L'autorizzazione richiesta è ListAllMyBuckets che consentirà all'utente di vedere TUTTI i bucket. Tralasciare questa autorizzazione renderà la console inutilizzabile.


6

C'è un ottimo modo per consentire agli utenti di accedere a un bucket specifico senza comprendere la conoscenza di altri bucket. Un criterio di gruppo simile a quello di seguito consentirà agli utenti di visualizzare solo il "bucket a". L'unico problema è che l'utente potrà accedere al bucket solo se si connette all'endpoint del bucket specificato. Nell'esempio seguente sarebbe bucket-a.s3.amazonaws.com. Il bucket potrebbe anche dover disporre di "Authenticated Users" consentito affinché ciò avvenga.

{
    "Statement": [
     {
         "Sid": "<EXAMPLE_SID>",
         "Action": [
           "s3:ListBucket",
           "s3:GetBucketLocation"
          ],
         "Effect": "Allow",
         "Resource": [
           "arn:aws:s3:::bucket-a"
         ]
     },
     {
      "Sid": "<EXAMPLE_SID>",
      "Action": "s3:*",
      "Effect": "Allow",
      "Resource": [
        "arn:aws:s3:::bucket-a/*"
      ]
     }
   ]
}

Questo metodo è stato testato con Cyberduck su Mac OS / X e utilizzando il pacchetto s3cmd

./s3cmd ls s3://bucket-a --access_key=ACCESS_KEY --secret_key=SECRET_KEY --bucket-locat
ion=ap-southeast-2

Posso ancora vedere l'elenco di tutti i bucket. Non funziona :(
Rishikesh Chandra il

5

Confuso sul motivo per cui non è stata verificata alcuna risposta?

Analizziamo ogni dichiarazione politica dalle soluzioni di cui sopra:

Questa dichiarazione politica di si applica al contenuto del bucket, ma non al buck stesso. Questo probabilmente non è ciò che la domanda ha chiesto, perché non puoi vedere cosa c'è nel secchio.

{
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:PutObject",
"s3:GetObjectAcl",
"s3:PutObjectAcl",
"s3:ListBucket",
"s3:GetBucketAcl",
"s3:PutBucketAcl",
"s3:GetBucketLocation"
],
"Resource": "arn:aws:s3:::your_bucket_here/*",
"Condition": {}
}

Questa politica a due istruzioni derivata da fornisce l'accesso in sola lettura al bucket in ( arn:aws:s3:::your_bucket_here/) in sola lettura , ma consente comunque operazioni CRUD sui contenuti del bucket ( arn:aws:s3:::your_bucket_here/*).

{
  "Effect": "Allow",
  "Action": [
    "s3:ListBucket",
    "s3:GetBucketLocation",
    "s3:ListBucketMultipartUploads"
  ],
  "Resource": "arn:aws:s3:::your_bucket_here",
  "Condition": {}
},
{
  "Effect": "Allow",
  "Action": [
    "s3:AbortMultipartUpload",
    "s3:DeleteObject",
    "s3:DeleteObjectVersion",
    "s3:GetObject",
    "s3:GetObjectAcl",
    "s3:GetObjectVersion",
    "s3:GetObjectVersionAcl",
    "s3:PutObject",
    "s3:PutObjectAcl",
    "s3:PutObjectAclVersion"
  ],
  "Resource": "arn:aws:s3:::your_bucket_here/*",
  "Condition": {}
}

Tuttavia, la policy include la dichiarazione seguente, che consente a un utente di vedere tutti i bucket all'endpoint. Questo probabilmente non è ciò che la domanda ha chiesto.

{
"Effect": "Allow",
"Action": "s3:ListAllMyBuckets",
"Resource": "*",
"Condition": {}
}

Tuttavia, quanto sopra è molto utile se si utilizza un client che naviga in un negozio S3. Se il tuo client accede al negozio e non direttamente al bucket, devi accedere all'elenco dei bucket alla radice.


3

Probabilmente il caso d'uso più semplice:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": ["s3:ListBucket"],
      "Resource": ["arn:aws:s3:::bucket-name"]
    },
    {
      "Effect": "Allow",
      "Action": [
        "s3:PutObject",
        "s3:GetObject",
        "s3:DeleteObject"
      ],
      "Resource": ["arn:aws:s3:::bucket-name/*"]
    }
  ]
}

1
AWS risponde:This policy contains the following error: The policy must contain a valid version string
MaximeBernard

esatto - Ho corretto la mia risposta -> <br/> ci sono solo due possibili valori qui: <br/> * 2012-10-17 * e 2008-10-17 . <br/> Ulteriori riferimenti sono disponibili qui: <br/> docs.aws.amazon.com/IAM/latest/UserGuide/…
jjanczyszyn

Qualche idea sul (listing included)significato di come elencare solo il bucket in cui l'utente è autorizzato a entrare? Finora (e secondo tutte le altre risposte), sembra che AWS non ti permetta di farlo.
MaximeBernard

3

Esiste un modo semplice o una soluzione alternativa per farlo utilizzando AWS Organizations. L'organizzazione AWS ti consente di avere più account utente. Il tuo account principale potrà avere più account AWS (Sub) e tutti i servizi (s3 / EC2 / *) vengono aggiunti in qualsiasi account AWS saranno visibili solo quelle risorse.

Fare riferimento a https://aws.amazon.com/blogs/aws/aws-organizations-policy-based-management-for-multiple-aws-accounts/ https://aws.amazon.com/organizations/

Organizzazione nella pagina del mio account


3

Ho trovato questa soluzione:
AWS FLOW:
FLUSSO AWS

Politica dei secchi:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Deny",
      "Principal": "*",
      "Action": "s3:*",
      "Resource": [
        "arn:aws:s3:::MyExampleBucket",
        "arn:aws:s3:::MyExampleBucket/*"
      ],
      "Condition": {
        "StringNotLike": {
          "aws:userId": [
            "AROAEXAMPLEID:*", #Role ID
            "111111111111" #AccountID
          ]
        }
      }
    }
  ]
}

Criterio IAM:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Deny",
      "Principal": "*",
      "Action": "s3:*",
      "Resource": [
        "arn:aws:s3:::MyExampleBucket",
        "arn:aws:s3:::MyExampleBucket/*"
      ],
      "Condition": {
        "StringNotLike": {
          "aws:userId": [
            "AROAEXAMPLEID:*",  #Role ID
            "AIDAEXAMPLEID",  #UserID
            "111111111111"  #AccountID
          ]
        }
      }
    }
  ]
}

aws iam get-user -–user-name USER-NAME --profile = ExampleProfile

aws iam get-role --role-name ROLE-NAME --profile = ExampleProfile

Fonte: https://aws.amazon.com/blogs/security/how-to-restrict-amazon-s3-bucket-access-to-a-specific-iam-role/

PS fai attenzione alla politica del bucket, puoi stare fuori senza autorizzazioni


2

Come è stato ampiamente discusso in precedenza, non è possibile elencare un solo bucket su console. Ma se l'accesso al bucket S3 è collegato a un IAM, IAM può accedere direttamente al bucket se è disponibile l'URL del bucket. L'URL del bucket S3 sarà come:

https://s3.console.aws.amazon.com/s3/buckets/BucketName

Dove BucketName è il nome del bucket a cui IAM ha accesso


1
Penso che questa sia l'unica soluzione fattibile anche nel 2018.
Saurabh

1

Sono riuscito a far funzionare quanto segue. Significava che l'elenco di altri bucket ha ricevuto il messaggio di accesso negato. Ma ero ancora in grado di vedere il bucket che volevo se mi collegavo con il nome del bucket impostato come percorso.

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "s3:GetBucketLocation",
        "s3:ListAllMyBuckets"
      ],
      "Resource": "arn:aws:s3:::test"
    },
    {
      "Effect": "Allow",
      "Action": ["s3:ListBucket"],
      "Resource": ["arn:aws:s3:::test"]
    },
    {
      "Effect": "Allow",
      "Action": [
        "s3:PutObject",
        "s3:GetObject",
        "s3:DeleteObject"
      ],
      "Resource": ["arn:aws:s3:::test/*"]
    }
  ]
}

Stavo usando Cyberduck per testare questa connessione.


1

Sebbene non sia possibile limitare l' s3:ListAllMyBucketsazione a bucket specifici, come soluzione alternativa puoi inviare loro l'URL della console per bucket specifici, ad es.

  • https://s3.console.aws.amazon.com/s3/buckets/BUCKET_NAME/

Origine: limitazione dell'elenco di bucket S3 dalla console S3

Per fare ciò, è necessario specificare il seguente documento di policy per un determinato utente o gruppo:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:ListBucket",
                "s3:GetBucketLocation",
                "s3:ListBucketMultipartUploads"
            ],
            "Resource": [
                "arn:aws:s3:::my-bucket-1",
                "arn:aws:s3:::my-bucket-2"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:AbortMultipartUpload",
                "s3:DeleteObject",
                "s3:DeleteObjectVersion",
                "s3:GetObject",
                "s3:GetObjectAcl",
                "s3:GetObjectVersion",
                "s3:GetObjectVersionAcl",
                "s3:PutObject",
                "s3:PutObjectAcl",
                "s3:PutObjectVersionAcl"
            ],
            "Resource": [
                "arn:aws:s3:::my-bucket-1/*",
                "arn:aws:s3:::my-bucket-2/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:ListAllMyBuckets"
            ],
            "Resource": "arn:aws:s3:::*"
        }
    ]
}

Dove my-bucket-1e my-bucket-2sono i tuoi bucket per fornire l'accesso in lettura e scrittura.

Relazionato:


1

Prova questa politica. L'utente non può elencare alcun bucket, deve utilizzare il collegamento diretto al bucket consentito.

Ad esempio: s3.console.aws.amazon.com/s3/buckets/bucketname/?region=us-east-1&tab=overview

{
  "Statement": [
    {
      "Action": [
        "s3:ListBucket"
      ],
      "Effect": "Allow",
      "Resource": [
        "arn:aws:s3:::bucketname"
      ]
    },
    {
      "Action": [
        "s3:PutObject",
        "s3:GetObject"
      ],
      "Effect": "Allow",
      "Resource": [
        "arn:aws:s3:::bucketname*"
      ]
    },

  ],
  "Version": "2012-10-17"
}

1

Simile a ciò che altri hanno descritto sopra:

{
   "Version":"2012-10-17",
   "Statement":[
      {
         "Effect":"Allow",
         "Action":[
            "s3:ListBucket"
         ],
         "Resource":"arn:aws:s3:::awsexamplebucket"
      },
      {
         "Effect":"Allow",
         "Action":[
            "s3:PutObject",
            "s3:GetObject"
         ],
         "Resource":"arn:aws:s3:::awsexamplebucket/*"
      }
   ]
}

Ecco però il tassello mancante. Sebbene non sia possibile accedere al bucket tramite S3-> Home, è possibile accedere solo al bucket desiderato tramite un collegamento diretto.

https://s3.console.aws.amazon.com/s3/buckets/yourawsbucket/

Puoi trovare maggiori informazioni nel seguente post:

https://aws.amazon.com/premiumsupport/knowledge-center/s3-console-access-certain-bucket/


0

La soluzione qui sotto ha funzionato per me. Volevo una policy per concedere l'accesso a un utente specifico my_iam_user su un bucket specifico my-s3-bucket .

Questa politica consente al mio utente di elencare, eliminare, ottenere e inserire file in uno specifico bucket s3.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "ListBucket",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::123456789012:user/my_iam_user"
            },
            "Action": [
                "s3:ListBucket"
            ],
            "Resource": "arn:aws:s3:::my-s3-bucket"
        },
        {
            "Sid": "AddDeleteFiles",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::123456789012:user/my_iam_user"
            },
            "Action": [
                "s3:DeleteObject",
                "s3:GetObject",
                "s3:PutObject"
            ],
            "Resource": "arn:aws:s3:::my-s3-bucket/*"
        }
    ]
}

0

Aggiungo solo un'esigenza simile, risolta da questo:

{
  "Version": "2012-10-17",
  "Statement": [
    {
        "Effect": "Allow",
        "Action": [
            "s3:Get*",
            "s3:Put*",
            "s3:DeleteObject",
            "s3:ListBucket"
        ],
        "Resource": [
            "arn:aws:s3:::my-bucket-name",
            "arn:aws:s3:::my-bucket-name/*"
        ]
    }
  ]
}

0

Uso le seguenti cose per nascondere i contenuti del bucket agli altri utenti. Questo non solo aiuta a nascondere altri bucket (non utilizzare ListAllMyBuckets), ma anche cartelle nello stesso bucket, quando crei un bucket, ma desideri avere sottocartelle al suo interno che assegnano le autorizzazioni appropriate all'utente IAM / sottocartella.

La seguente policy viene applicata al gruppo IAM e tutti gli utenti fanno parte di questo gruppo. Devi prendere aws:useride creare una sottocartella con lo stesso nome nel secchio.

L'ID utente può essere utilizzato: aws iam get-user --user-name "user_name_for_folder_access":

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:*"
            ],
            "Resource": [
                "arn:aws:s3:::bucket_name/${aws:userid}/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:ListBucket"
            ],
            "Resource": [
                "arn:aws:s3:::bucket_name"
            ]
        }
    ]
}

0

Una bella soluzione semplice che abbiamo trovato è impedire all'utente di accedere alla directory principale. Quindi devono accedere con il percorso remoto impostato nella cartella desiderata.

 {
"Statement": [
    {
        "Effect": "Allow",
        "Action": "s3:*",
        "Resource": "arn:aws:s3:::folder-name*",
        "Condition": {}
    }
]
}

0

No, al momento non è possibile limitare gli utenti a visualizzare bucket selettivi sotto root o altrove. Hai solo quelle 3 opzioni in questo momento.

Ho scelto di chiedere al cliente di utilizzare esplicitamente il nome del bucket.



-1

Questo ha funzionato perfettamente per me. L'utente può caricare, scaricare e ottenere un elenco di file ma non sarà in grado di vedere i file da altri bucket.

 {    

"Statement": [    

{
    "Effect": "Allow",
    "Action": [
        "s3:GetObject",
        "s3:PutObject",
        "s3:GetObjectAcl",
        "s3:PutObjectAcl",
        "s3:ListBucket",
        "s3:GetBucketAcl",
        "s3:PutBucketAcl",
        "s3:GetBucketLocation"
    ],
    "Resource": "arn:aws:s3:::mybucketname/*",
    "Condition": {}
},
{
    "Effect": "Allow",
    "Action": "s3:ListAllMyBuckets",
    "Resource": "*",
    "Condition": {}
},
{
    "Effect": "Deny",
    "Action": [
        "s3:DeleteBucket",
        "s3:DeleteBucketPolicy",
        "s3:DeleteBucketWebsite",
        "s3:DeleteObject",
        "s3:DeleteObjectVersion"
    ],
    "Resource": "arn:aws:s3:::mybucketname/*",    

    "Condition": {}    

}
]
}      

-2

Aggiungi una Denyclausola per i bucket a cui non desideri accedere. Ricorda che potrebbero essere ancora elencati, ma non sarai in grado di accedere ai contenuti al loro interno.

{
    "Versione": "2012-10-17",
    "Dichiarazione": [
        {
            "Effetto": "Consenti",
            "Azione": "s3: *",
            "Risorsa": "*"
        },
        {
            "Effetto": "Nega",
            "Azione": "s3: *",
            "Risorsa": [
                "ARN: AWS: ::: secchio nome-S3",
                "ARN: AWS: s3 ::: benna-name / *"
            ]
        }
    ]
}

1
Devi concedere esplicitamente l'accesso alle risorse. Quando si concede l'accesso a tutte le risorse per impostazione predefinita, è possibile omettere accidentalmente le risorse che si desidera mantenere private. Inoltre, concedere l'accesso a tutte le azioni di S3 significa che l'utente può rendere pubbliche le risorse o configurare l'hosting statico o fare altre cose dannose.
Ondrej Galbavý
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.