Saya memiliki bucket sederhana yang terlihat seperti images.mysite.com
di S3 saya dan bucket lain yang berisi cadangan, dll.
Saya ingin mengizinkan pengguna tertentu untuk dapat mengakses images.mysite.com
keranjang untuk mengunggah gambar. Namun, saya TIDAK ingin dia melihat salah satu ember lainnya; bahkan tidak ada.
Saya tidak dapat membuat kebijakan yang melakukan ini; setiap kali saya mencoba sesuatu yang membatasi, itu akhirnya memblokir daftar keranjang apa pun.
https://s3.console.aws.amazon.com/s3/buckets/my-bucket-name/
. Dengan cara ini Anda mencegah mereka melihat seluruh daftar dan tidak mengubah apa pun pada kebijakan Anda saat ini.Jawaban:
Saya telah mencoba ini untuk sementara waktu dan akhirnya menemukan solusi yang berhasil. Anda harus menggunakan "Sumber Daya" yang berbeda bergantung pada jenis tindakan yang Anda lakukan. Juga saya menyertakan beberapa tindakan yang hilang dalam jawaban sebelumnya (seperti
DeleteObject
) dan membatasi beberapa lagi (sepertiPutBucketAcl
).Kebijakan IAM berikut berfungsi untuk saya sekarang:
Tindakan yang terkait dengan keranjang dan yang terkait objek harus memiliki arn yang berbeda.
sumber
ListAllMyBuckets
danGetBucketLocation
untuk semua bucket S3 ("arn:aws:s3:::*"
akan berfungsi daripada"*"
untuk sumber daya). Seperti yang dinyatakan dalam entri blog AWS ini "sebagai tambahan, saat ini Anda tidak dapat memfilter bucket tertentu secara selektif, jadi pengguna harus memiliki izin untuk mencantumkan semua bucket untuk akses konsol."Kasus penggunaan kami: Menyediakan ruang cadangan untuk klien aplikasi cloud kami yang dapat diakses oleh klien secara langsung menggunakan alat S3 umum. Tentu saja, tidak ada klien yang melihat apa yang dimiliki klien lain.
Seperti yang dijelaskan cloudberryman, "Anda dapat membuat daftar semua keranjang atau tidak sama sekali.", Jadi kita harus mencari solusi. Latar Belakang:
Memberikan hak ListAllMyBuckets kepada pengguna diperlukan agar konsol AWS S3 atau S3Fox terhubung tanpa pesan kesalahan. Tetapi ListAllMyBuckets mencantumkan semua keranjang, terkait sumber daya yang ditetapkan (sebenarnya, hanya arn: ... ::: * berfungsi). Itu bug yang serius, jika Anda bertanya kepada saya. Btw. menolak ListBucket untuk semua keranjang tidak mencegahnya untuk dicantumkan, karena ListBucket memberikan hak untuk mencantumkan konten keranjang.
Ada 3 kemungkinan yang saya anggap sebagai solusi. Saya memilih yang terakhir.
(1) gunakan nama bucket samar, misalnya GUID
Keuntungan: mudah diatur
Kerugian: sulit untuk dikelola, terutama untuk klien. (bayangkan menemukan GUID tertentu di antara ribuan lainnya.) Juga menunjukkan jumlah keranjang = jumlah klien yang menggunakan layanan cadangan.
(2) gunakan satu keranjang dengan folder khusus klien
Ini adalah bagaimana Amazon menyarankan melalui contoh S3 / IAM mereka untuk menyediakan ruang untuk diakses hanya oleh pengguna atau kelompok pengguna tertentu. Lihat: Contoh AWS Kebijakan IAM
Keuntungan: cukup mudah untuk disiapkan, sesuai dengan ide AWS
Kerugian: memaksa untuk membuat keberadaan semua bucket menjadi publik, sehingga klien dapat menemukan bucket "rumah" mereka. Akuntansi AWS menyediakan statistik penggunaan bucket, tetapi bukan penggunaan folder, yang mempersulit penghitungan biaya oleh klien.
(3) jangan berikan hak akses untuk ListAllMyBuckets
Keuntungan: Anda mendapatkan apa yang Anda inginkan: klien tidak dapat melihat keranjang klien lain
Kerugian: klien tidak dapat melihat keranjangnya sendiri. S3Browser hadir dengan pesan bagus "tidak dapat melakukan" dan meminta nama bucket untuk dimasukkan. S3Fox melontarkan pesan kesalahan saat menghubungkan ke root, tetapi memungkinkan navigasi langsung ke keranjang klien jika nama keranjang diketahui. Konsol Amazon S3 tidak berfungsi sama sekali.
Semoga ini membantu menangani S3 IAM saat Anda membutuhkannya.
sumber
Tidak mungkin menyediakan akses ke Konsol S3 tanpa memberikan
ListAllMyBuckets
izin.Dalam kasus saya (dan mungkin kasus Anda juga, pembaca masa depan), alternatif yang dapat diterima adalah mengalihkan pengguna yang masuk langsung ke keranjang yang Anda ingin mereka lihat.
Untuk melakukannya, tambahkan baris berikut ke url masuk IAM Anda:
/s3/?bucket=bucket-name
URL Masuk Lengkap (ganti alias dan nama keranjang Anda ):
https://your-alias.signin.aws.amazon.com/console/s3/?bucket=bucket-name
Kebijakan IAM (ganti nama keranjang ):
Untuk informasi lebih lanjut tentang cara membuat izin khusus bucket bagi pengguna, baca blog ini: http://mikeferrier.com/2011/10/27/granting-access-to-a-single-s3-bucket-using-amazon-iam /
sumber
Coba kebijakan ini. Juga pertimbangkan bahwa tidak ada cara untuk membiarkan daftar pengguna hanya keranjang yang dipilih. Anda dapat mencantumkan semua keranjang atau tidak sama sekali.
sumber
s3:*
untuk membuatnya bekerja untuk saya. Saya juga punya"Resource": ["arn:aws:s3:::your_bucket_here", "arn:aws:s3:::your_bucket_here/*"]
, tapi ini mungkin tidak diperlukan.Saya menafsirkan pertanyaan ini sebagai: "Dapatkah saya mengizinkan akses ke satu keranjang di mana keranjang lain tidak dapat diakses dan dengan demikian tidak terlihat." Sebab, menunjukkan nama bucket yang tidak diberi akses tetap sama dengan kebocoran informasi.
Dan jawaban yang benar adalah tidak. Izin yang diperlukan adalah ListAllMyBuckets yang akan memungkinkan pengguna untuk melihat SEMUA keranjang. Meninggalkan izin ini akan membuat konsol tidak dapat digunakan.
sumber
Ada cara yang bagus untuk memungkinkan pengguna mengakses keranjang tertentu tanpa harus memiliki pengetahuan tentang keranjang lain. Kebijakan grup seperti di bawah ini akan memungkinkan pengguna untuk hanya melihat "keranjang a". Satu-satunya tangkapan adalah bahwa pengguna hanya akan dapat mengakses keranjang jika mereka terhubung ke titik akhir keranjang yang diberikan. Untuk contoh di bawah ini adalah bucket-a.s3.amazonaws.com. Bucket mungkin juga harus mengizinkan "Pengguna yang Diautentikasi" agar hal ini terjadi.
Metode ini telah diuji dengan Cyberduck di Mac OS / X dan menggunakan paket s3cmd
sumber
Bingung mengapa tidak ada jawaban yang diperiksa?
Mari kita uraikan setiap pernyataan kebijakan dari solusi di atas:
Pernyataan kebijakan dari ini berlaku untuk konten bucket, tetapi bukan buck itu sendiri. Ini mungkin bukan pertanyaan yang ditanyakan, karena Anda tidak dapat melihat apa yang ada di keranjang.
Kebijakan dua pernyataan yang diturunkan dari ini memberikan akses hanya baca ke keranjang di (
arn:aws:s3:::your_bucket_here/
) hanya baca , tetapi masih memungkinkan operasi CRUD pada konten keranjang (arn:aws:s3:::your_bucket_here/*
).Namun, kebijakan tersebut menyertakan pernyataan di bawah ini, yang memungkinkan pengguna melihat semua keranjang di titik akhir. Ini mungkin bukan pertanyaan yang ditanyakan.
Namun, hal di atas sangat berguna jika Anda menggunakan klien yang menjelajah toko S3. Jika klien Anda mengakses store dan bukan bucket secara langsung, Anda memerlukan akses ke daftar bucket di root.
sumber
Mungkin kasus penggunaan paling sederhana:
sumber
This policy contains the following error: The policy must contain a valid version string
(listing included)
arti bagaimana mencantumkan hanya keranjang yang diizinkan untuk dimasuki pengguna? Sejauh ini (dan menurut semua jawaban lainnya), tampaknya AWS tidak mengizinkan Anda melakukan itu.Ada cara mudah atau solusi untuk melakukan ini menggunakan Organisasi AWS. Organisasi AWS memungkinkan Anda memiliki banyak akun pengguna. Akun utama Anda akan dapat memiliki beberapa akun AWS (Sub) dan layanan apa pun (s3 / EC2 / *) yang ditambahkan di akun AWS mana pun, hanya sumber daya tersebut yang akan terlihat.
Silakan lihat https://aws.amazon.com/blogs/aws/aws-organizations-policy-based-management-for-multiple-aws-accounts/ https://aws.amazon.com/organizations/
Organisasi Di halaman Akun Saya
sumber
Saya menemukan solusi ini:
AWS FLOW:
Kebijakan ember:
Kebijakan IAM:
aws iam get-user -–user-name USER-NAME --profile = ExampleProfile
aws iam get-role --role-name ROLE-NAME --profile = ExampleProfile
Sumber: https://aws.amazon.com/blogs/security/how-to-restrict-amazon-s3-bucket-access-to-a-specific-iam-role/
PS hati-hati dengan kebijakan ember, Anda bisa keluar tanpa izin
sumber
Seperti yang telah dibahas dengan baik di atas, mencantumkan hanya satu keranjang di konsol tidak memungkinkan. Namun jika akses bucket S3 dilampirkan ke IAM, IAM dapat langsung mengakses bucket jika URL ke bucket tersedia. URL bucket S3 akan menjadi seperti ini:
https://s3.console.aws.amazon.com/s3/buckets/BucketName
Jika BucketName adalah nama keranjang yang dapat diakses IAM
sumber
Saya berhasil mendapatkan yang berikut ini bekerja. Artinya, daftar keranjang lain menerima pesan Akses Ditolak. Tapi masih bisa melihat ember yang saya inginkan jika saya terhubung dengan nama ember yang ditetapkan sebagai jalur.
Saya menggunakan Cyberduck untuk menguji koneksi ini.
sumber
Meskipun tidak mungkin membatasi
s3:ListAllMyBuckets
tindakan ke keranjang tertentu, sebagai solusinya Anda dapat mengirimi mereka URL Konsol untuk wadah tertentu, misalnyahttps://s3.console.aws.amazon.com/s3/buckets/BUCKET_NAME/
Sumber: Daftar pembatasan bucket S3 dari S3 Console
Untuk melakukan itu, Anda harus menentukan dokumen kebijakan berikut untuk pengguna atau grup tertentu:
Di mana
my-bucket-1
danmy-bucket-2
ember Anda untuk memberi akses baca dan tulis.Terkait:
sumber
Coba kebijakan ini. Pengguna tidak dapat mencantumkan keranjang apa pun, mereka harus menggunakan tautan langsung ke keranjang yang diizinkan.
Misalnya: s3.console.aws.amazon.com/s3/buckets/bucketname/?region=us-east-1&tab=overview
sumber
Mirip dengan yang dijelaskan orang lain di atas:
Namun inilah bagian yang hilang. Meskipun tidak mungkin untuk mengakses bucket melalui S3-> Home, Anda hanya dapat mengakses bucket yang diinginkan melalui tautan langsung.
Anda dapat menemukan informasi lebih lanjut di posting berikut:
https://aws.amazon.com/premiumsupport/knowledge-center/s3-console-access-certain-bucket/
sumber
Solusi di bawah ini berhasil untuk saya. Saya menginginkan kebijakan untuk memberikan akses ke pengguna tertentu my_iam_user di keranjang tertentu my-s3-bucket .
Kebijakan ini mengizinkan pengguna saya untuk membuat daftar, menghapus, dan mengambil file pada keranjang s3 tertentu.
sumber
Saya hanya menambahkan kebutuhan serupa, diselesaikan dengan ini:
sumber
Saya menggunakan hal-hal berikut untuk menyembunyikan konten bucket dari pengguna lain. Ini tidak hanya membantu menyembunyikan keranjang lain (jangan gunakan ListAllMyBuckets), tetapi juga folder dalam keranjang yang sama, saat Anda membuat satu keranjang, tetapi ingin memiliki subfolder di dalamnya yang menetapkan izin yang tepat untuk Pengguna / subfolder IAM.
Kebijakan berikut ini diterapkan ke IAM Group dan semua pengguna ada di Grup ini. Anda perlu mengambil
aws:userid
dan membuat subfolder dengan nama yang sama di bucket.UserID dapat diambil:
aws iam get-user --user-name "user_name_for_folder_access":
sumber
Solusi sederhana yang bagus yang kami buat adalah memblokir pengguna untuk masuk ke direktori root. Jadi mereka harus login dengan jalur jarak jauh yang diatur ke folder yang diinginkan.
sumber
Tidak, saat ini membatasi pengguna untuk melihat keranjang selektif di bawah root atau di mana pun tidak dapat dilakukan. Anda hanya memiliki 3 opsi itu sekarang.
Saya memilih untuk meminta klien menggunakan nama bucket secara eksplisit.
sumber
Ini dirinci oleh Amazon di http://blogs.aws.amazon.com/security/post/Tx3VRSWZ6B3SHAV/Writing-IAM-Policies-How-to-grant-access-to-an-Amazon-S3-bucket
sumber
Ini bekerja dengan sempurna untuk saya. Pengguna dapat mengunggah, mengunduh, dan mendapatkan daftar file tetapi tidak akan dapat melihat file dari keranjang lain.
sumber
Tambahkan
Deny
klausul untuk keranjang yang tidak ingin Anda akses. Ingatlah bahwa mereka mungkin masih terdaftar, tetapi Anda tidak akan dapat mengakses konten di dalamnya.sumber