Sto aggiungendo una risposta nella stessa direzione della risposta accettata ma con piccole (importanti) differenze e aggiungendo ulteriori dettagli.
Considera la seguente configurazione:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": ["s3:ListBucket"],
"Resource": ["arn:aws:s3:::<Bucket-Name>"]
},
{
"Effect": "Allow",
"Action": [
"s3:PutObject",
"s3:DeleteObject"
],
"Resource": ["arn:aws:s3:::<Bucket-Name>/*"]
}
]
}
La politica concede l'accesso programmatico all'eliminazione e alla scrittura ed è divisa in due parti:
l' ListBucket
azione fornisce autorizzazioni a livello di bucket e le altre PutObject/DeleteObject
azioni richiedono autorizzazioni per gli oggetti all'interno del bucket.
Il primo elemento Resource specifica arn:aws:s3:::<Bucket-Name>
l' ListBucket
azione in modo che le applicazioni possano elencare tutti gli oggetti nel bucket.
Il secondo elemento Resource specifica arn:aws:s3:::<Bucket-Name>/*
le azioni PutObject
e DeletObject
, in modo che le applicazioni possano scrivere o eliminare qualsiasi oggetto nel bucket.
La separazione in due diversi "arn" è importante per motivi di sicurezza al fine di specificare autorizzazioni dettagliate a livello di bucket e di oggetti.
Si noti che se avessi specificato solo GetObject
nel secondo blocco, ciò che accadrebbe è che in caso di accesso programmatico riceverei un errore del tipo:
Upload failed: <file-name> to <bucket-name>:<path-in-bucket> An error occurred (AccessDenied) when calling the PutObject operation: Access Denied
.
aws
per un utente e l'ho usato all'interno di uno script bash chiamato cronjob da un altro utente, il che significa che la chiave di accesso e il token di accesso erano errati / non impostati. La mia soluzione era quella di inserire direttamente le credenziali (AWS_ACCESS_KEY_ID
eAWS_SECRET_ACCESS_KEY
) nel mio file di script bash come descritto qui .