Carpe Diem

備忘録

Amazon Cloud Drive で暗号化して保存する

概要

Amazon Cloud Driveを暗号化して扱う方法です。

※ファイルの追加、更新はできますが削除ができません

考え方

基本的なデータの流れは以下です。

f:id:quoll00:20160223100558p:plain

  1. cloud用、local用にEncFS(暗号化)の同期フォルダを用意
  2. AmazonCloudDriveをcloud側のEncrypted(暗号化)フォルダにマウント
  3. 各Decrypted(復号)フォルダをUnionFSで1つの場所にマウント(local側はRW、cloud側はRO
  4. 新規ファイルの追加、更新時はRWのlocal側にのみ書き込まれる
  5. localに追記された変更点を、AmazonCloudDriveへアップロード
  6. cloud側EncryptedフォルダがAmazonCloudDriveと再同期すれば新規ファイルが確認できる

f:id:quoll00:20160223100208p:plain

という流れになります。

環境

環境構築

acd_cliのインストール

acd_cliが使うので以下を参考にインストールしてください。

Amazon Cloud Driveをコマンドラインで操作する


フォルダの用意

$ mkdir -p ~/cloud/encrypted
$ mkdir -p ~/cloud/decrypted
$ mkdir -p ~/local/decrypted
$ mkdir -p ~/local/encrypted
$ mkdir ~/union

encfsで暗号化フォルダと復号フォルダを同期させます。

$ encfs ~/local/encrypted ~/local/decrypted

クラウドと同期

$ acd_cli mount --modules="subdir,subdir=/Encrypted" \
~/cloud/encrypted

cloud側もlocalと同じ設定ファイルでencfs同期します。

$ ENCFS6_CONFIG=~/local/encrypted/.encfs6.xml encfs \
~/cloud/encrypted ~/cloud/decrypted
EncFS Password:

localとcloudをUnionFSでまとめる

$ unionfs-fuse -o cow \
$HOME/local/decrypted=RW:$HOME/cloud/decrypted=RO $HOME/union

動作検証

フォルダやファイルの追加

ファイルやフォルダをunionの中に入れます。

$ tree union
union/
├── fuga.txt
└── hoge
    └── piyo.txt

するとUnionFSの仕組み上、localの方に追加されます。

$ tree local/
local/
├── decrypted
│   ├── fuga.txt
│   └── hoge
│       └── piyo.txt
└── encrypted
    ├── ,G1Qqlb46fQGV6PwHbQBJpmB
    │   └── fGGZgdcFK1pVTS76QruWQdBq
    └── JRwC4PLl48pKXYRkfLreJcmY

cloudは変化ありません。

$ tree cloud/
cloud/
├── decrypted
└── encrypted

この段階では当然ですがまだAmazon Cloud Driveへはアップロードされません。 f:id:quoll00:20160222211138p:plain

同期

それでは同期コマンドでアップロードします。

$ acd_cli sync
$ acd_cli --utf upload --overwrite --exclude-ending encfs6.xml \
~/local/encrypted/* /Encrypted/

きちんと同期されました。 f:id:quoll00:20160222211058p:plain


cloudを確認

きちんと同期されることが分かります。

$ tree cloud/
cloud/
├── decrypted
│   ├── fuga.txt
│   └── hoge
│       └── piyo.txt
└── encrypted
    ├── ,G1Qqlb46fQGV6PwHbQBJpmB
    │   └── fGGZgdcFK1pVTS76QruWQdBq
    └── JRwC4PLl48pKXYRkfLreJcmY

アンマウント

作業が終わったらアンマウントします。

$ fusermount -u ~/union
$ fusermount -u ~/cloud/encrypted
$ fusermount -u ~/cloud/decrypted
$ fusermount -u ~/local/decrypted

ソース