2015-06-09 32 views
5

Ho recentemente creato un nuovo account AWS (chiamiamolo "Account A") e creato un bucket S3 in questo account (chiamiamolo "bucketa"), caricando un file foo .testo. A seguito di advicefromtheinternet, ho creato quello che ritengo essere la politica secchio più permissiva possibile (dovrebbe permettere qualsiasi tipo di accesso da qualsiasi utente):Impossibile accedere ai file dal bucket s3 pubblico con boto

{ 
    "Version": "2012-10-17", 
    "Id": "PolicyABCDEF123456", 
    "Statement": [ 
    { 
     "Sid": "StmtABCDEF123456", 
     "Effect": "Allow", 
     "Principal": "*", 
     "Action": "s3:*", 
     "Resource": [ 
     "arn:aws:s3:::bucketa/*", 
     "arn:aws:s3:::bucketa" 
     ] 
    } 
    ] 
} 

Dopo la creazione di un utente IAM per conto A (" Identity & Gestione accesso -> Utenti -> Crea nuovi utenti "e creazione di un utente con" Genera una chiave di accesso per ciascun utente "selezionata) e memorizzando le credenziali dell'utente in ~/.boto, è possibile accedere a uno script semplice che utilizza l'interfaccia boto S3 il file caricato foo.txt:

import boto 
conn = boto.connect_s3() 
b = conn.get_bucket("bucketa", validate=False) 
k = boto.s3.key.Key(b) 
k.key = "foo.txt" 
print len(k.get_contents_as_string()) 
# 9 

Ho quindi creato un nuovo account AWS (chiamiamolo "Account B") e ho seguito gli stessi passaggi, memorizzando le credenziali IAM nel file .boto e eseguendo lo stesso script python. Tuttavia, in questo caso ottengo un errore 403 durante l'esecuzione della linea print len(k.get_contents_as_string()):

Traceback (most recent call last): 
    File "access.py", line 7, in <module> 
    print len(k.get_contents_as_string()) 
    File "/usr3/josilber/.local/lib/python2.7/site-packages/boto/s3/key.py", line 1775, in get_contents_as_string 
    response_headers=response_headers) 
    File "/usr3/josilber/.local/lib/python2.7/site-packages/boto/s3/key.py", line 1643, in get_contents_to_file 
    response_headers=response_headers) 
    File "/usr3/josilber/.local/lib/python2.7/site-packages/boto/s3/key.py", line 1475, in get_file 
    query_args=None) 
    File "/usr3/josilber/.local/lib/python2.7/site-packages/boto/s3/key.py", line 1507, in _get_file_internal 
    override_num_retries=override_num_retries) 
    File "/usr3/josilber/.local/lib/python2.7/site-packages/boto/s3/key.py", line 343, in open 
    override_num_retries=override_num_retries) 
    File "/usr3/josilber/.local/lib/python2.7/site-packages/boto/s3/key.py", line 291, in open_read 
    self.resp.reason, body) 
boto.exception.S3ResponseError: S3ResponseError: 403 Forbidden 
<?xml version="1.0" encoding="UTF-8"?> 
<Error><Code>AccessDenied</Code><Message>Access Denied</Message><RequestId>7815726085F966F2</RequestId><HostId>EgFfldG4FoA5csuUVEKBq15gg3QQlQbPyqnyZjc2fp5DewlqDZ4F4HNjXYWQtBl5MUlSyLAOeKA=</HostId></Error> 

Perché account B non in grado di accedere bucketa nonostante la sua politica secchio molto permissiva? Ci sono ulteriori autorizzazioni che devo impostare per abilitare l'accesso pubblico da parte di altri account AWS?

Nota: Ho già escluso credenziali non valide nel file .boto di account B come il colpevole con la creazione di un secchio bucketb S3 dal Conto B con la politica stessa benna ("bucketa" sostituito con "bucketb" in due linee); in questo caso, posso accedere a bucketb con le credenziali dell'account B ma ottenere lo stesso errore 403 quando si utilizzano le credenziali di Bucket A.

risposta

4

Il criterio che consente agli utenti anonimi di accedere al bucket. Tuttavia, nel tuo caso, l'account B non è un utente anonimo, è un utente AWS autenticato e se desideri che quell'utente abbia accesso, dovrai concederlo esplicitamente nella politica. Oppure, puoi semplicemente accedervi in ​​modo anonimo in Boto:

conn = boto.connect_s3(anon=True) 

Questo dovrebbe fare il trucco. Probabilmente è ovvio, ma non lascerei quella politica, così come è. Permetterebbe a chiunque di scaricare tutto ciò che vogliono nel secchio.

Problemi correlati