Sto costruendo un'app che utilizza il servizio token di sicurezza di Amazon per creare utenti temporanei per accedere a una sottodirectory su un bucket S3. Gli utenti vengono creati da un utente IAM che ha accesso completo in lettura/scrittura al bucket (oltre alle autorizzazioni necessarie per creare utenti).Politica S3 basata su Amazon Prefisso non funziona (AWS, IAM, STS, Ruby)
Ho la creazione di utenti che lavorano perfettamente insieme alla scadenza della sessione e altro ancora, ma sto riscontrando problemi nell'ottenere la giusta politica per consentire l'elenco di chiavi basato su prefissi. Le autorizzazioni che voglio l'utente finale di avere sono: oggetti
- Leggi che sono in qualche prefisso definito
- oggetti di scrittura per lo stesso prefisso definito
- lista tutti gli oggetti che risiedono nel prefisso definito
Sono riuscito a leggere e scrivere, ma in qualche modo, indipendentemente da ciò che ho provato, l'accesso alla lista non funziona correttamente. Ecco il codice Ruby che stavo usando quando ero più vicino:
AWS::STS::Policy.new do |policy|
policy.allow(
actions: ["s3:GetObject*", "s3:PutObject*", "s3:DeleteObject*"],
resources: "arn:aws:s3:::#{ENV['PROJECT_BUCKET']}/#{folder_path}/*"
)
policy.allow(
actions: ["s3:*"],
resources: ["arn:aws:s3:::#{ENV['PROJECT_BUCKET']}/*", "arn:aws:s3:::#{ENV['PROJECT_BUCKET']}"]
).where(:s3_prefix).like("#{folder_path}/*")
end
Se non ricordo male, questo mi ha permesso di fare lettura e la scrittura, ma non messa in vendita. Dal momento che sono ancora in fase di sviluppo che ho cambiato il codice a questo:
AWS::STS::Policy.new do |policy|
# FIXME: This is way too permissive, but it's not working to be more specific.
policy.allow(
actions: ["s3:*"],
resources: ["arn:aws:s3:::#{ENV['PROJECT_BUCKET']}/*", "arn:aws:s3:::#{ENV['PROJECT_BUCKET']}"]
)
end
Questo funziona al 100% bene con il problema evidente che nulla è vincolato ad un prefisso che consentirebbe agli utenti di clobber il lavoro degli altri.
Cosa sto sbagliando nella mia politica?