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

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

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

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

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

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