將 S3 儲存桶直接安裝到 EC2 實例中是否安全?
正如我的問題的標題所說,我想知道這是否是一個好習慣,
我知道我可以將它安裝在 EC2 實例中,但我想知道,由於我將添加更多實例來擴展我的應用程序,這是否會導致一些問題;你有這方面的經驗嗎?
我正在使用 S3 允許通過 PHP 腳本上傳文件,所以基本上問題是:
使用 mouting 是一種好習慣還是有更好的方法來處理使用者文件上傳?
提前致謝
如果您使用 S3 來儲存來自使用者上傳的數據,尤其是在分佈式環境中,那麼一個重要的考慮因素是 S3 是“最終一致的”(儘管某些區域是先讀後寫一致的)。這樣做的結果是您可以成功上傳文件,但如果您在之後立即檢查它的存在,可能會發現它不存在。對於更新或刪除等場景,這個問題更為明顯,即使是寫後讀一致性也無濟於事。
無論您採用何種方法,上述內容都將適用於您上傳到 S3 的內容。事實上,對於 S3 的大多數問題來說都是如此——與其說是用於儲存數據的方法,不如說是 S3 的局限性可能是最成問題的。
S3fs 使用 S3 API - 就像 PHP(或其他)SDK 一樣。此外,S3 旨在處理相當高的並發性 - 所以(除了一致性問題)在多個實例上安裝它應該沒有問題(記住它不是傳統的文件系統 - 像鎖定這樣的問題,等在S3端處理)。
也就是說,每種實現都有一些潛在的優點和缺點:
S3fs:
- 不支持部分/分塊下載(據我所知)-因此您必須下載完整文件才能閱讀其中的任何部分-如果您只是使用它來儲存(和提供)上傳,這可能不是問題。
- 用 C++ 編寫可能的性能提升
- 您的應用程序可以從 s3fs 的任何更新中受益
- 實現記憶體(完整文件和文件資訊) - 有可能提高速度並降低成本
- 僅限於熔斷器暴露的功能
開發工具包:
- 公開 S3 必須提供的全部功能 - 根據您的案例,這可能足以值得使用 SDK
- 與您的應用程序可能更緊密的集成 - 返回的錯誤等可能允許您的應用程序做出更明智(因此更精確)的選擇
- 任何可能的優勢都需要進行編碼 - 您的應用程序必須利用它們並與 S3 的未來更改保持同步
- 程式碼的複雜性和成本更大
在“安全”方面,您可能意味著“防止數據損壞”或“防止未經授權的訪問”。對於前者,SDK 可能有助於處理最終一致性(以更詳細的錯誤形式),但底層儲存是相同的,我希望差異很小。關於訪問控制 - 您可以使用 IAM 創建一個受限帳戶,但該帳戶仍然需要對您的 S3 文件進行讀/寫訪問。兩者都應該足夠安全,在任何一種情況下,您的系統都需要受到攻擊才能訪問您的 S3 儲存桶 - 但是我建議使用 S3fs(因為憑證通常儲存在 webroot 之外,並且根本無法通過PHP) 安全性稍好一些。
個人觀點:對於只有一個上傳目錄(例如,一個使用它的網站)並且訪問相當簡單(只需要上傳文件並偶爾更新/刪除)的情況,我更喜歡 s3fs。如果您需要更複雜的訪問(例如部分下載、多個儲存桶等)或將 S3 SDK 用於其他目的,那麼我也會堅持使用 SDK 進行上傳。