2013-07-19 12 views
13

Sono stato in grado di generare un criterio utente che consente solo l'accesso a un bucket specifico, tuttavia dopo aver provato tutto (compreso questo post: Is there an S3 policy for limiting access to only see/access one bucket?).Limita l'elenco di bucket per un utente specifico

Il problema: Non sono in grado di limitare l'elenco dei secchi fino a solo un secchio. Per una serie di motivi, non voglio che l'elenco mostri bucket diversi da quello specificato.

Ho provato una varietà di politiche, senza risultato. Ecco la mia ultima JSON politica che sta lavorando per quanto riguarda le operazioni di limitazione, ma non messa in vendita:

{ 
    "Statement": [ 
    { 
     "Effect": "Allow", 
     "Action": [ 
      "s3:ListAllMyBuckets", 
      "s3:ListBucket", 
      "s3:GetBucketLocation" 
     ], 
     "Resource": "arn:aws:s3:::*" 
    }, 
    { 
     "Effect": "Deny", 
     "Action": [ 
      "s3:ListBucket" 
     ], 
     "NotResource": [ 
      "arn:aws:s3:::acgbu-acg", 
      "arn:aws:s3:::acgbu-acg/*" 
     ] 
    }, 
    { 
     "Effect": "Allow", 
     "Action": [ 
      "s3:*" 
     ], 
     "Resource": [ 
      "arn:aws:s3:::acgbu-acg", 
      "arn:aws:s3:::acgbu-acg/*" 
     ] 
    } 
] 
} 

Qualsiasi aiuto sarebbe molto apprezzato. Sto cominciando a chiedermi se è possibile.

+0

Correlati: [Esiste un criterio S3 per limitare l'accesso a vedere/accedere a un bucket?] (Https://stackoverflow.com/q/6615168/55075) & [Come fornire a un utente l'accesso solo a un determinato bucket in AWS S3?] (Https://devops.stackexchange.com/q/1626/3) – kenorb

risposta

29

Attualmente non è possibile limitare l'elenco di contenitori per mostrare solo un bucket.

La console AWS si basa sull'azione ListAllMyBuckets per ottenere l'elenco dei secchi di proprietà dell'utente, ma l'elenco reso non può essere limitato utilizzando un nome di Amazon risorsa (o ARN, l'unica ARN che ha consentito per ListAllMyBuckets è arn:aws:s3:::*). Questa limitazione non è chiaramente spiegata nei documenti AWS ufficiali, ma ListAllMyBuckets è una chiamata API a livello di servizio (è anche chiamata servizio GET nell'API REST), non una chiamata API a livello bucket e il suo ARN associato nello IAM la politica fa riferimento al servizio S3 e non a un bucket specifico.

Per le possibili soluzioni, vedere this answer su StackOverflow:

+0

Grazie per la risposta. Avevo visto quel post: mi ero davvero interessato a questo. Siamo partiti con l'opzione che i clienti non possono vedere i propri bucket, il che è un peccato, ma è la migliore opzione date le nostre preoccupazioni principali. –

+0

[Questa risposta] (https://stackoverflow.com/a/30961920) ha anche informazioni molto utili. – AndreKR

+0

Abbiamo appena raggiunto anche questo problema. Mi sembra che questo non dovrebbe essere qualcosa che accettiamo normalmente. Eseguiamo diversi progetti e, se voglio che un dipendente veda solo un bucket quando va nella sezione S3, dovrebbe essere possibile. – JeremyTM

3

La libera "S3 Browser" (questo funziona sulla mia versione 3-7-5) permette agli utenti con le autorizzazioni appropriate a "Aggiungere Bucket esterno" per l'account , tutto quello che devono sapere è il nome del secchio. Questo permette loro di "vedere" il loro secchio e il contenuto (e quali mai le abilità sono state date all'interno di quel secchio), non vedranno nessuno degli altri secchi.

per rendere il secchio "bel gioco" con il comportamento S3 Browser, suggerisco la seguente politica IAM per l'utente o gruppo:

{ 
    "Statement": [ 
    { 
     "Effect": "Allow", 
     "Action": [ 
     "s3:ListBucket", 
     "s3:GetBucketLocation", 
     "s3:GetBucketAcl" 
     ], 
     "Resource": "arn:aws:s3:::acgbu-acg" 
    }, 
    { 
     "Effect": "Allow", 
     "Action": [ 
     "s3:PutObject", 
     "s3:GetObject", 
     "s3:GetObjectAcl", 
     "s3:DeleteObject" 
     ], 
     "Resource": "arn:aws:s3:::acgbu-acg/*" 
    } 
    ] 
} 

Si tratta di un lavoro in giro, ed è bene se l'utente solo bisogni per farlo una volta Ma se i bucket a cui accede l'utente stanno cambiando molto, questo lavoro non è molto pratico.

+0

La parte "Aggiungi bucket esterno" di questa risposta è stata la vera soluzione per "S3 Browser". Raccomando che la parte relativa alle policy IAM venga elaborata in modo ingegnoso e non copiata. Ho copiato il blocco S3ReadOnly Action ad esempio;) – ThorSummoner

0

Sono venuto qui cercando come limitare l'accesso a un bucket a uno (o un elenco di) utente (i). Forse, il titolo del post è ambiguo?

In ogni caso, sembra avere il favore di Google, quindi cerchiamo di arricchire un po ':
Se è necessario limitare l'accesso a un secchio per qualche utente (s), seguire questi passaggi:


Innanzitutto, ottieni gli ID dell'utente a cui vuoi concedere i diritti.
Ciò può essere ottenuto utilizzando il comando awscli aws iam list-users
tali ID simile a questa: "AIDAIFKYAC9DNJXM2CRD", o "AIDAZ362UEKJCJMFFXCL"
prega, commentare se è disponibile nella console web.

Una volta ottenuto l'ID (i) a cui deve essere concesso l'accesso, inserire un criterio nel bucket che si desidera proteggere.
Per fare questo con la console web:
-> Apri S3 -> Aprire il secchio -> Selezionare la scheda "Proprietà" -> Fare clic su "Modifica politica secchio"

Per applicare il criterio che utilizza awscli, creare un file con il contenuto di tale politica, e metterlo sul tuo secchio con questo comando:
aws s3api put-bucket-policy --bucket NAME_OF_YOUR_BUCKET --policy file:///path/to/policyFile.json
Naturalmente, impostare YOUR_BUCKET_NAME e il percorso del file per i propri valori, ma non rimuovere il file: // prefisso prima il file di nome


Avviso: questa politica di esclusione sovrascrive l'impostazione predefinita "accesso a s3" che un utente potrebbe avere. Ciò significa che puoi negare l'accesso al tuo utente con questo. Usare con cautela!
Ho anche paura che tu possa rendere un secchio completamente innaccessibile.
Per curiosità, ho provato ad accedere con il nostro account root utente, al quale non ho concesso l'accesso e che effettivamente non è riuscito.
Devi chiedere questo supporto e, si spera, aggiornare questa risposta.

In ogni caso, sono sicuro che farai attenzione, quindi ecco un esempio di politica.
Sostituisci semplicemente il nome del bucket con il tuo e gli ID utente con uno (i) a cui desideri autorizzare l'accesso.

{ 
    "Version": "2012-10-17", 
    "Statement": [ 
    { 
     "Effect": "Deny", 
     "Principal": "*", 
     "Action": "s3:*", 
     "Resource": [ 
     "arn:aws:s3:::your-bucket-name", 
     "arn:aws:s3:::your-bucket-name/*" 
     ], 
     "Condition": { 
     "StringNotLike": { 
      "aws:userId": [ 
      "AIDAXAXAXAXAXAXAXAXAX", 
      "AIDAOXOXOXOXOXOOXOXOX", 
      "AIDAXIXIXIXIXIXIXIXIX" 
      ] 
     } 
     } 
    } 
    ] 
} 

Per qualcosa di più specifico, o se si desidera utilizzare i ruoli, invece di utenti, vedere questo AWS post explaining in detail how to restrict access to a buckets

Spero che questo aiuti

+0

La logica è indietro. Stai limitando ogni altro utente oltre a quelli scelti. –

+0

@Kevin Puoi preciso per favore? Negare per tutti tranne i permessi sembra essere il modo normale di applicare la sicurezza a me. E a proposito, è anche possibile applicare questa politica a più bucket. Non sono andato molto più a fondo con questa atmosfera, ma gradirei maggiori dettagli se facessi qualcosa di sbagliato. – Balmipour

+0

Il poster originale chiedeva informazioni sulla politica dell'utente. Questo sarebbe collegato a particolari utenti, mentre altri potrebbero avere più politiche leineint (o nessuna politica) applicate a loro. Un tipico caso d'uso sarebbe dove si desidera limitare un solo utente, le cui credenziali devono essere condivise al di fuori del gruppo di fiducia più alto. La politica dell'utente è la strada da percorrere per questo. –

0

Il manifesto originale è stato chiesto circa un criterio utente. Questo sarebbe collegato a particolari utenti, mentre altri potrebbero avere più politiche leineint (o nessuna politica) applicate a loro. Un tipico caso d'uso sarebbe dove si desidera limitare un solo utente, le cui credenziali devono essere condivise al di fuori del gruppo di fiducia più alto. La politica dell'utente è la strada da percorrere per questo ..

+0

Grazie per aver postato. Esempio di come potrebbe essere? –

+0

@cale_b Scusa - Non intendevo che il mio commento fosse inserito come risposta. Stavo rispondendo a una domanda nei commenti per l'ultima risposta. Quindi, in quel contesto potrebbe avere più senso. Sono d'accordo con la tua risposta accettata, che non puoi limitare l'elenco dei secchi visti. E 'tutto o niente. Tuttavia, è possibile limitare l'elenco di oggetti all'interno di bucket su determinati bucket. E se vuoi un esempio di questo, posso condividerlo qui. –