如何在Amazon S3上配置加密文件系統(tǒng)
提及云計算,亞馬遜Amazon S3是備受關(guān)注的商業(yè)云存儲服務(wù)。Amazon S3以能承受的價格提供高可用性、可擴展、無限容量的對象存儲服務(wù)。為了加速云產(chǎn)品的廣泛采用,產(chǎn)品通過明確的API和SDK打造一個良好的開發(fā)者生態(tài)系統(tǒng)。
S3QL作為一款開源云端文件系統(tǒng),基于FUSE的文件系統(tǒng)提供多個商業(yè)或開源的云存儲后端,如Amazon S3、 Google Cloud Storage、Rackspace CloudFiles以及OpenStack。并且3QL提供最大2T的文件大小、壓縮、UNIX屬性、加密、重復(fù)數(shù)據(jù)刪除等支持功能。但S3QL限制是不能把同一個S3FS文件系統(tǒng)在幾個不同的電腦上同時掛載,只能一臺電腦訪問它。另外,ACL也并沒有被支持。
筆者從Xmodulo網(wǎng)站了解到,基于Amazon S3用S3QL配置一個加密文件系統(tǒng)的技巧說明。作為一個使用范例,將節(jié)省如何在掛載的S3QL文件系統(tǒng)上運行rsync備份工具。(圖片來源Xmodulo網(wǎng)站)
前期工作準(zhǔn)備
首先,需要一個Amazon AWS帳號(注冊是免費的,但需要有效的信用卡)。創(chuàng)建AWS access key,S3QL使用這些信息來訪問你的AWS帳號。之后通過AWS管理面板訪問AWS S3,并為S3QL創(chuàng)建一個新的空bucket。
為了能獲取最佳性能考慮,選擇一個距離你最近的區(qū)域。
Linux上安裝S3QL
大多數(shù)Linux發(fā)行版中都有預(yù)先編譯好的S3QL軟件包。對于Debian、Ubuntu或Linux Mint,通過以下命令行可以進行安裝:
- \$ sudo apt-get install s3ql
對于Fedora:
- \$ sudo yum install s3ql
對Arch Linux使用AUR進行安裝。
●首次配置S3QL
在~/.s3ql目錄中創(chuàng)建autoinfo2文件,S3QL一個默認的配置文件。這個文件包括AWS access key,S3 bucket名以及加密口令。這個加密口令將被用來加密一個隨機生成的主密鑰,而主密鑰將被用來實際地加密S3QL文件系統(tǒng)數(shù)據(jù)。
- \$ mkdir ~/.s3ql
- \$ vi ~/.s3ql/authinfo2

指定的AWS S3 bucket需要預(yù)先通過AWS管理面板來創(chuàng)建。為了安全起見,讓authinfo2文件僅對創(chuàng)建人可訪問。
- \$ chmod 600 ~/.s3ql/authinfo2
●創(chuàng)建S3QL文件系統(tǒng)
在AWS S3上創(chuàng)建一個S3QL文件系統(tǒng),使用mkfs.s3ql工具來創(chuàng)建一個新的S3QL系統(tǒng)。其中bucket名應(yīng)該與authinfo2文件中所指定的相符。使用“--ssl”參數(shù)將強制使SSL連接到后端存儲服務(wù)器。默認情況下,mkfs.s3ql命令在S3QL文件系統(tǒng)中啟用壓縮和加密。
- \$ mkfs.s3ql s3://[bucket-name] --ssl
輸入一個加密口令。請輸入在~/.s3ql/autoinfo2中通過“fs-passphrase”指定的那個口令。
如果一個新文件系統(tǒng)被成功創(chuàng)建,你將會看到這樣的輸出:

#p#
●掛載S3QL文件系統(tǒng)
當(dāng)創(chuàng)建S3QL文件系統(tǒng)之后,下一步要掛載它。首先創(chuàng)建一個本地的掛載點,然后使用mount.s3ql命令來掛載S3QL文件系統(tǒng)。
- \$ mkdir ~/mnt_s3ql
- \$ mount.s3ql s3://[bucket-name] ~/mnt_s3ql
掛載一個S3QL文件系統(tǒng)不需要特權(quán),只要確定掛載點有寫權(quán)限即可。
因為性能原因,S3QL文件系統(tǒng)維護了一份本地文件緩存,里面包括了最近訪問的文件。可以通過“--cachesize”和“--max-cache-entries”選項來自定義文件緩存的大小。
如果想要除你以外的用戶訪問一個已掛載的S3QL文件系統(tǒng),使用“--allow-other”選項。如果你想通過NFS導(dǎo)出已掛載S3QL文件系統(tǒng)到其他設(shè)備,使用“--nfs”選項。

- \$ df ~/mnt_s3ql
- \$ mount | grep s3ql
運行mount.s3ql之后,檢查S3QL文件系統(tǒng)是否被成功掛載。
卸載S3QL文件系統(tǒng)
卸載一個S3QL文件系統(tǒng),使用umount.s3ql命令。它將會等待所有數(shù)據(jù)(包括本地文件系統(tǒng)緩存中的部分)成功傳輸?shù)胶蠖朔?wù)器。這個過程時間取決于等待寫的數(shù)據(jù)的多少。
- \$ umount.s3ql ~/mnt_s3ql

查看S3QL文件系統(tǒng)統(tǒng)計信息,你可以使用s3qlstat命令,它將會顯示總的數(shù)據(jù)、元數(shù)據(jù)大小、重復(fù)文件刪除率和壓縮率等信息。還可以使用fsck.s3ql命令來檢查和修復(fù) S3QL 文件系統(tǒng)。與 fsck 命令類似,待檢查的文件系統(tǒng)必須首先被卸載。
- \$ s3qlstat ~/mnt_s3ql
- \$ fsck.s3ql s3://[bucket-name]
S3QL使用案例:Rsync備份
之前也提到將介紹本地文件系統(tǒng)備份。使用rsync增量備份工具,特別是因為S3QL提供了一個rsync的封裝腳本(/usr/lib/s3ql/pcp.py)。這個腳本允許你使用多個rsync進程遞歸地復(fù)制目錄樹到S3QL目標(biāo)。
- \$ /usr/lib/s3ql/pcp.py -h

下面這個命令使用4個并發(fā)的rsync連接來備份~/Documents里的所有內(nèi)容到一個S3QL文件系統(tǒng)。
- \$ /usr/lib/s3ql/pcp.py -a --quiet --processes=4 ~/Documents ~/mnt_s3ql
這些文件將首先被復(fù)制到本地文件緩存中,然后在后臺再逐步地同步到后端服務(wù)器。