Apakah memasang bucket S3 langsung ke instance EC2 aman?

8

seperti judul pertanyaan saya katakan, saya ingin tahu apakah ini praktik yang baik atau tidak,

Saya tahu saya bisa memasangnya dalam instance EC2 tapi saya bertanya-tanya apakah, karena saya akan menambahkan lebih banyak instance untuk mengukur aplikasi saya, ini dapat menyebabkan beberapa masalah; apakah Anda memiliki pengalaman dengan ini?

Saya menggunakan S3 untuk memungkinkan unggahan file melalui skrip PHP, jadi pada dasarnya pertanyaannya adalah:

Apakah ini praktik yang baik untuk menggunakan mouting atau adakah cara yang lebih baik untuk menangani unggahan file pengguna?

Terima kasih sebelumnya

Enrico Tuttobene
sumber
1
Perangkat lunak apa yang Anda rencanakan untuk digunakan untuk memasang ember S3? Bagaimana aplikasi Anda menggunakan ember yang dipasang? Bagaimana Anda mendefinisikan "aman"?
Eric Hammond

Jawaban:

14

Jika Anda menggunakan S3 untuk menyimpan data dari unggahan pengguna, terutama di lingkungan terdistribusi, satu pertimbangan besar adalah kenyataan bahwa S3 'konsisten pada akhirnya' (walaupun, beberapa wilayah konsisten baca-tulis-tulis). Konsekuensi dari ini adalah bahwa Anda mungkin berhasil mengunggah file, tetapi jika Anda memeriksa keberadaannya segera setelah itu, mungkin menemukannya tidak ada. Masalah ini lebih jelas untuk skenario seperti pembaruan atau penghapusan, di mana bahkan konsistensi baca-setelah-menulis tidak akan membantu.

Hal di atas akan berlaku untuk unggahan Anda ke S3 terlepas dari pendekatan yang Anda lakukan. Bahkan, ini berlaku untuk sebagian besar masalah yang mungkin diharapkan dari S3 - ini bukan pendekatan yang digunakan untuk menyimpan data karena keterbatasan S3 yang kemungkinan akan menjadi yang paling bermasalah.

S3fs menggunakan S3 API - seperti halnya PHP (atau SDK lainnya). Selain itu, S3 dirancang untuk menangani tingkat konkurensi yang cukup tinggi - jadi (selain masalah konsistensi) seharusnya tidak ada masalah untuk memasangnya pada beberapa contoh (mengingat ini bukan sistem file tradisional - masalah seperti mengunci, dll ditangani di sisi S3).

Karena itu, ada beberapa potensi keuntungan dan kerugian dari setiap implementasi:

S3fs:

  • Tidak ada dukungan untuk unduhan parsial / terpotong-potong (sejauh yang saya tahu) - jadi Anda harus mengunduh file lengkap untuk membaca bagian mana pun dari itu - mungkin bukan masalah jika Anda hanya menggunakannya untuk menyimpan (dan menyajikan) unggahan.
  • Ditulis dalam C ++ kemungkinan peningkatan kinerja
  • Aplikasi Anda mendapat manfaat dari setiap pembaruan untuk s3fs
  • Menerapkan caching (baik file lengkap dan informasi file) - memiliki potensi untuk meningkatkan kecepatan sedikit, dan mengurangi biaya
  • Terbatas pada fungsi yang terpapar sekering

SDK:

  • Paparan set lengkap fitur yang ditawarkan S3 - tergantung pada kasus penggunaan Anda, ini mungkin cukup untuk pantas menggunakan SDK
  • Integrasi yang mungkin lebih ketat dengan aplikasi Anda - kesalahan yang dikembalikan, dll dapat memungkinkan aplikasi Anda untuk membuat pilihan yang lebih baik (dan karena itu lebih tepat)
  • Setiap keuntungan yang mungkin perlu dikodekan untuk - aplikasi Anda harus mengambil keuntungan dari mereka dan tetap up to date dengan perubahan di masa depan untuk S3
  • Lebih banyak kerumitan dan overhead pada kode Anda

Dalam hal 'keselamatan', Anda dapat berarti 'mencegah korupsi data' atau 'mencegah akses tidak sah'. Berkenaan dengan yang pertama, SDK mungkin membantu sedikit untuk berurusan dengan konsistensi akhirnya (dalam bentuk kesalahan yang lebih banyak), tetapi penyimpanan yang mendasarinya sama, dan saya berharap perbedaannya kecil. Berkenaan dengan kontrol akses - Anda dapat menggunakan IAM untuk membuat akun terbatas, tetapi akun itu masih akan membutuhkan akses baca / tulis ke file S3 Anda. Keduanya harus cukup aman, dalam kedua kasus, sistem Anda perlu dikompromikan untuk mendapatkan akses ke bucket S3 Anda - namun saya menyarankan, bahwa dengan S3fs (karena kredensial biasanya disimpan di luar akar web, dan tidak dapat diakses sama sekali melalui PHP) ada keamanan yang sedikit lebih baik.

Pendapat pribadi: Saya mendukung s3fs untuk kasus di mana ada direktori unggahan tunggal (mis. Satu situs memanfaatkannya) dan di mana aksesnya akan cukup sederhana (hanya perlu mengunggah file dan sesekali memperbarui / menghapus). Jika Anda akan memerlukan akses yang lebih kompleks (mis. Unduhan parsial, banyak ember, dll) atau akan menggunakan S3 SDK untuk tujuan lain, maka saya akan tetap menggunakan SDK untuk unggahan juga.

cyberx86
sumber
0

Anda dapat mengizinkan pengguna untuk mengunggah langsung ke s3 dari browser tanpa mengunggah ke server Anda (dan kemudian mengunggah ke s3.)

Berikut adalah tips yang bagus untuk ini: https://leonid.shevtsov.me/post/demystifying-s3-browser-upload/

setelah file diunggah, jika Anda perlu memproses file (zip, transcode, dll) Anda bisa menggunakan S3fs

Cristian Sepulveda
sumber