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 ListBucket
tindakan menyediakan akses pada ember tingkat dan lainnya PutObject/DeleteObject
tindakan memerlukan izin pada benda di dalam ember.
Path menetapkan unsur Sumber Daya pertama arn:aws:s3:::<Bucket-Name>
untuk ListBucket
tindakan sehingga aplikasi bisa daftar semua objek dalam ember.
Elemen Sumber Daya kedua menentukan arn:aws:s3:::<Bucket-Name>/*
untuk PutObject
, dan DeletObject
tindakan 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 GetObject
di 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
.
aws
untuk 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_ID
danAWS_SECRET_ACCESS_KEY
) ke file skrip bash saya seperti yang dijelaskan di sini .