如何在Amazon S3上配置加密文件系统
提及云计算,亚马逊Amazon S3是备受关注的商业云存储服务。Amazon S3以能承受的价格提供高可用性、可扩展、无限容量的对象存储服务。为了加速云产品的广泛采用,产品通过明确的API和SDK打造一个良好的开发者生态系统。
S3QL作为一款开源云端文件系统,基于FUSE的文件系统提供多个商业或开源的云存储后端,如Amazon S3、 Google Cloud Storage、Rackspace CloudFiles以及OpenStack。并且3QL提供最大2T的文件大小、压缩、UNIX属性、加密、重复数据删除等支持功能。但S3QL限制是不能把同一个S3FS文件系统在几个不同的电脑上同时挂载,只能一台电脑访问它。另外,ACL也并没有被支持。
笔者从Xmodulo网站了解到,基于Amazon S3用S3QL配置一个加密文件系统的技巧说明。作为一个使用范例,将节省如何在挂载的S3QL文件系统上运行rsync备份工具。(图片来源Xmodulo网站)
前期工作准备
首先,需要一个Amazon AWS帐号(注册是免费的,但需要有效的信用卡)。创建AWS access key,S3QL使用这些信息来访问你的AWS帐号。之后通过AWS管理面板访问AWS S3,并为S3QL创建一个新的空bucket。
为了能获取最佳性能考虑,选择一个距离你最近的区域。
Linux上安装S3QL
大多数Linux发行版中都有预先编译好的S3QL软件包。对于Debian、Ubuntu或Linux Mint,通过以下命令行可以进行安装:
\$ sudo apt-get install s3ql
对于Fedora:
\$ sudo yum install s3ql
对Arch Linux使用AUR进行安装。
●首次配置S3QL
在~/.s3ql目录中创建autoinfo2文件,S3QL一个默认的配置文件。这个文件包括AWS access key,S3 bucket名以及加密口令。这个加密口令将被用来加密一个随机生成的主密钥,而主密钥将被用来实际地加密S3QL文件系统数据。
\$ mkdir ~/.s3ql \$ vi ~/.s3ql/authinfo2
指定的AWS S3 bucket需要预先通过AWS管理面板来创建。为了安全起见,让authinfo2文件仅对创建人可访问。
\$ chmod 600 ~/.s3ql/authinfo2
●创建S3QL文件系统
在AWS S3上创建一个S3QL文件系统,使用mkfs.s3ql工具来创建一个新的S3QL系统。其中bucket名应该与authinfo2文件中所指定的相符。使用“--ssl”参数将强制使SSL连接到后端存储服务器。默认情况下,mkfs.s3ql命令在S3QL文件系统中启用压缩和加密。
\$ mkfs.s3ql s3://[bucket-name] --ssl
输入一个加密口令。请输入在~/.s3ql/autoinfo2中通过“fs-passphrase”指定的那个口令。
如果一个新文件系统被成功创建,你将会看到这样的输出:
●挂载S3QL文件系统
当创建S3QL文件系统之后,下一步要挂载它。首先创建一个本地的挂载点,然后使用mount.s3ql命令来挂载S3QL文件系统。
\$ mkdir ~/mnt_s3ql \$ mount.s3ql s3://[bucket-name] ~/mnt_s3ql
挂载一个S3QL文件系统不需要特权,只要确定挂载点有写权限即可。
因为性能原因,S3QL文件系统维护了一份本地文件缓存,里面包括了最近访问的文件。可以通过“--cachesize”和“--max-cache-entries”选项来自定义文件缓存的大小。
如果想要除你以外的用户访问一个已挂载的S3QL文件系统,使用“--allow-other”选项。如果你想通过NFS导出已挂载S3QL文件系统到其他设备,使用“--nfs”选项。
\$ df ~/mnt_s3ql \$ mount | grep s3ql
运行mount.s3ql之后,检查S3QL文件系统是否被成功挂载。
卸载S3QL文件系统
卸载一个S3QL文件系统,使用umount.s3ql命令。它将会等待所有数据(包括本地文件系统缓存中的部分)成功传输到后端服务器。这个过程时间取决于等待写的数据的多少。
\$ umount.s3ql ~/mnt_s3ql
查看S3QL文件系统统计信息,你可以使用s3qlstat命令,它将会显示总的数据、元数据大小、重复文件删除率和压缩率等信息。还可以使用fsck.s3ql命令来检查和修复 S3QL 文件系统。与 fsck 命令类似,待检查的文件系统必须首先被卸载。
\$ s3qlstat ~/mnt_s3ql \$ fsck.s3ql s3://[bucket-name]
S3QL使用案例:Rsync备份
之前也提到将介绍本地文件系统备份。使用rsync增量备份工具,特别是因为S3QL提供了一个rsync的封装脚本(/usr/lib/s3ql/pcp.py)。这个脚本允许你使用多个rsync进程递归地复制目录树到S3QL目标。
\$ /usr/lib/s3ql/pcp.py -h
下面这个命令使用4个并发的rsync连接来备份~/Documents里的所有内容到一个S3QL文件系统。