Azureの小ネタ (改)

~Azureネタを中心に、色々とその他の技術的なことなどを~

Azure Storage の Client Side Encryption

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 を使って暗号化してあります。

暗号化結果

以下が、アップロード元と、暗号化されたファイルを開いた結果です。

f:id:StateMachine:20150709163945p:plain

ダウンロードも同様にRequestOptionをつけてダウンロードすればよいでしょう。

参考