こんにちは、上坂(@takashiuesaka)です。
今日は珍しくAzure メディアサービスのネタでも。
メディアサービスでEncodeやTranscode、配信などコンテンツを扱う時には必ずBlobStorageを使用してコンテンツを投入する必要があります。そしてコンテンツを配信用に加工した後であれば、AESで暗号化したりDRMかけたりすることでセキュリティを高めたり著作権保護したりできますが、加工前のコンテンツはBlobにそのまま置かれています。
もちろん、Publicコンテナに配置することはあり得ませんのでコンテンツが外に漏れることはありませんが、それでもコンテンツが素のまま置いてあるのは精神的によろしくない、なんとかならないの?という要望をいただくことがあります。
これに応える形でリリースされた機能として、Asset encryption optionsというものがあります。これを使えば、コンテンツを投入する時に(つまりBlobに配置された時に)暗号化され、Encode等の加工時には自動的に復号されて処理されます。
精神的な安心を簡単に得られるのでとてもお勧めです。やり方はとても簡単で、Assetを作るときに、オプションでStorageEncryptedと指定するだけです。
var _mediaServicesAccountName = "<アカウント名>"; var _mediaServicesAccountKey = "<アカウントキー>";
var _cachedCredentials = new MediaServicesCredentials(
var _context = new CloudMediaContext(_cachedCredentials); var file = "BigBuckBunny.mp4";
var assetName = Path.GetFileNameWithoutExtension(file);
// ポイントはここ。アセット作るときにオプションでStorageEncryptedを指定するだけ! IAsset inputAsset = _context.Assets.Create(assetName, AssetCreationOptions.StorageEncrypted);
var assetFile = inputAsset.AssetFiles.Create(Path.GetFileName(file)); var policy = _context.AccessPolicies.Create(
注意点は、暗号化されたファイルをなんら加工せずに復号化して取り出したい場合です。当たり前ですが、Blobを直接ダウンロードしてきても再生できません。暗号化済みなので。メディアサービスに復号してもらう必要があります。
メディアサービスに復号化してもらうためには、AssetFile.Downloadメソッドを使います。メディアサービスは暗号化されたファイルをAssetFileとして認識しているわけですが、このAssetFileクラスのDownloadメソッドを使えば復号化した結果を取得できます。
公開ポリシーとロケーター(エンドポインとのこと)作ってダウンロードすればよいのかと思いきや、そうじゃありませんのでお気を付けください。(というか自分がこれにハマったんですけどね)