Saya menambahkan jawaban dengan arah yang sama dengan jawaban yang diterima tetapi dengan perbedaan kecil (penting) dan menambahkan lebih banyak detail.
Pertimbangkan konfigurasi di bawah ini:
{
"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>/*"]
}
]
}
Kebijakan hibah program write-delete akses dan dipisahkan menjadi dua bagian:
The ListBuckettindakan menyediakan akses pada ember tingkat dan lainnya PutObject/DeleteObjecttindakan memerlukan izin pada benda di dalam ember.
Path menetapkan unsur Sumber Daya pertama arn:aws:s3:::<Bucket-Name>untuk ListBuckettindakan sehingga aplikasi bisa daftar semua objek dalam ember.
Elemen Sumber Daya kedua menentukan arn:aws:s3:::<Bucket-Name>/*untuk PutObject, dan DeletObjecttindakan sehingga aplikasi dapat menulis atau menghapus objek apa pun dalam ember.
Pemisahan menjadi dua 'arn' yang berbeda penting dari alasan keamanan untuk menentukan izin tingkat butiran halus dan tingkat objek.
Perhatikan bahwa jika saya telah menentukan hanya GetObjectdi blok 2 apa yang akan terjadi adalah bahwa dalam kasus akses terprogram saya akan menerima kesalahan seperti:
Upload failed: <file-name> to <bucket-name>:<path-in-bucket> An error occurred (AccessDenied) when calling the PutObject operation: Access Denied.
awsuntuk satu pengguna dan menggunakannya di dalam skrip bash yang disebut cronjob dari pengguna lain, yang berarti kunci akses dan token akses salah / tidak disetel. Solusi saya adalah langsung memasukkan kredensial (AWS_ACCESS_KEY_IDdanAWS_SECRET_ACCESS_KEY) ke file skrip bash saya seperti yang dijelaskan di sini .