Saya benar-benar menggeliat di AWS mencoba mencari tahu apa yang saya lewatkan di sini. Saya ingin membuatnya agar pengguna IAM dapat mengunduh file dari bucket S3 - tanpa hanya membuat file tersebut sepenuhnya publik - tetapi saya mendapatkan akses ditolak. Jika ada yang bisa mengetahui apa yang salah, saya akan terpacu.
Apa yang telah saya lakukan sejauh ini:
- Dibuat pengguna yang disebut pengguna-saya (misalnya)
- Kunci akses yang dibuat untuk pengguna dan meletakkannya di ~ / .aws pada instance EC2
- Membuat kebijakan bucket yang saya harapkan memberi akses untuk pengguna saya
- Jalankan perintah
aws s3 cp --profile my-user s3://my-bucket/thing.zip .
Kebijakan ember:
{
"Id": "Policy1384791162970",
"Statement": [
{
"Sid": "Stmt1384791151633",
"Action": [
"s3:GetObject"
],
"Effect": "Allow",
"Resource": "arn:aws:s3:::my-bucket/*",
"Principal": {
"AWS": "arn:aws:iam::111122223333:user/my-user"
}
}
]
}
Hasilnya adalah A client error (AccessDenied) occurred: Access Denied
meskipun saya dapat mengunduh menggunakan perintah yang sama dan kunci akses default (akun root?).
Saya sudah mencoba menambahkan kebijakan pengguna juga. Meskipun saya tidak tahu mengapa itu perlu, saya pikir itu tidak ada salahnya, jadi saya lampirkan ini pada pengguna saya.
{
"Statement": [
{
"Sid": "Stmt1384889624746",
"Action": "s3:*",
"Effect": "Allow",
"Resource": "arn:aws:s3:::my-bucket/*"
}
]
}
Hasil yang sama.
Ketika saya menghadapi masalah yang sama ternyata AWS membutuhkan enkripsi sisi server untuk diaktifkan. Jadi perintah berikut ini berhasil bagi saya:
sumber
--sse aws:kms
menggunakan ember "default" ...--sse-kms-key-id 0123-abc-etc
Namun, bagian yang tidak jelas adalah bahwa untuk menggunakan kunci KMS Anda sendiri, Anda harus memiliki izin IAMkms:GenerateDataKey
atau Anda masih akan mendapatkan akses ditolak.Saya tidak akan merekomendasikan opsi 'Pengguna AWS mana pun yang diautentikasi' yang disebutkan oleh James.
Dengan melakukannya, tambahkan ACL level-bucket yang memungkinkan akun AWS apa pun (bukan hanya pengguna IAM Anda) untuk membuat daftar / menghapus / memodifikasi-acl untuk bucket tersebut.
yaitu baca / tulis publik untuk siapa saja dengan akun aws.
sumber
Saya berhasil memperbaiki ini tanpa harus menulis kebijakan - dari konsol S3 (web ui) saya memilih ember dan pada tab izin pilih "Pengguna AWS yang Diotentikasi" dan tandai semua kotak.
UPDATE: seperti yang ditunjukkan dalam komentar "Setiap Pengguna AWS yang Diotentikasi" bukan hanya pengguna di akun Anda itu semua adalah pengguna yang diautentikasi AWS, harap gunakan dengan hati-hati
sumber
Bahkan jika kebijakan IAM Anda diatur dengan benar, Anda masih bisa mendapatkan kesalahan seperti
An error occurred (AccessDenied) when calling the <OPERATION-NAME> operation: Access Denied
karena persyaratan MFA (Multi-Factor Authentication) pada kredensial Anda. Ini dapat membuat Anda lengah karena jika Anda sudah masuk ke konsol AWS akan tampak bahwa kredensial Anda berfungsi dengan baik, dan izin menolak pesan kesalahan dari aws cli tidak terlalu membantu.Ada beberapa instruksi bagus tentang cara mengatur MFA dengan aws cli:
Pada dasarnya, Anda perlu mendapatkan alamat perangkat MFA Anda, dan mengirimkannya dengan kode dari perangkat Anda untuk mendapatkan token sementara.
sumber
Saya hanya pergi pada webUI dan mengklik pada ember, lalu pergi ke izin dan kemudian pergi ke kebijakan. Ketika saya membukanya saya hanya mengklik delete. Saya melakukan ini karena saya pikir itu konfigurasi juga.
Saya kembali ke halaman s3 utama, lalu mengklik ember dan berusaha menghapusnya dan berhasil.
bahkan ketika saya melakukannya dengan aws-cli menggunakan
Bagaimanapun, itu adalah hal yang bekerja untuk saya. Kebijakan tentang izin menghentikan Anda dari menghapus ember.
sumber
Setelah saya mendapatkan kesalahan ini dengan hanya mencoba menjalankan:
aws s3 cp s3://[bucketName]/[fileName] .
dalam folder di mana saya tidak memiliki izin. Ini konyol, tapi pastikan Anda adalah pemilik folder tempat Anda berada sebelum pindah!
sumber
Masalah muncul ketika Anda memasukkan nama sumber daya atau objek yang tidak valid. Saya memiliki masalah yang sama dengan boto3 (dalam kasus saya itu adalah nama ember tidak valid)
sumber