Azure StorageでClient Side Encryption (クライアントサイド暗号化)がPreviewで使えるようになっていたので試してみました。
パッケージ
パッケージは、Azure Storage ClientのPreview版と、Azure Key Vaultの正式版、Azure Key VaultのExtension(これはPreview)が必要です。
Install-Package WindowsAzure.Storage -Pre Install-Package Microsoft.Azure.KeyVault Install-Package Microsoft.Azure.KeyVault.Extensions -Pre
Azure Key Vault Extensionには、Azure Storage向けにいくつか便利なクラスが定義されていて、それを使います。
それを使うと、Azure Key Vaultのライブラリは使いますが、Azure Key Vault自身を使わなくても試すことができますので、今回それで。
暗号化しつつアップロード
以下のコードのとおり、BlobRequestOptionsにEncryptionPolicy の設定を指定を行えば、透過的に暗号化したアップロードされます。
// The key material must be 128, 192, 256, 384 or 512 bits of data var keyBytes = Encoding.UTF8.GetBytes("YwvqKyyUvR1Ty73PwynF3qsoiXCC7GK2"); //256 bits var symmetricKey = new SymmetricKey("hoge", keyBytes); // upload test file. var encryptionPolicy = new BlobEncryptionPolicy(symmetricKey, null); var blobRequestOptions = new BlobRequestOptions() {EncryptionPolicy = encryptionPolicy}; blob.UploadFromFile(@"c:\temp\test.txt", FileMode.Open, null, blobRequestOptions);
BlobEncryptionPolicy の第一引数には、 Microsoft.Azure.KeyVault.Core.IKey を指定します。このIKeyを実装したクラスが、Extensions側に2つ定義されています。
- Microsoft.Azure.KeyVault.RsaKey
- Microsoft.Azure.KeyVault.SymmetricKey
上の例では、SymmetricKey を使って暗号化してあります。
暗号化結果
以下が、アップロード元と、暗号化されたファイルを開いた結果です。
ダウンロードも同様にRequestOptionをつけてダウンロードすればよいでしょう。