Alibaba Cloud CDNを使ったプライベートコンテンツの配信について

お久しぶりです。mosuke5です。
オブジェクトストレージのプライベートコンテンツをCDNを通して配信する方法について最近調べることがあったのでご紹介します。

1. 概要

CDNについてはみなさんご存知かと思います。Alibaba CloudにもCDNのサービスがあり、特に中国においても1000近いノードをもっていることは特徴の一つです。そういえば、過去には中国国内でCDNを配信した実験をしたブログもかきました。

CDNというと、動画や画像といったコンテンツをCDNノードを使って配信するわけですが、そのスピードやCDNノードの場所といったところが気になるポイントとしてまず上がってくることがおおいです。一方で、実際に配信するとなると、パブリックなコンテンツだけでなく、例えば会員だけが見ることができる動画などプライベートなコンテンツを配信したい場合もあるでしょう。そういったプライベートコンテンツをAlibaba Cloudで、どのように配信できるかご紹介します。

全体像

プライベートなコンテンツの配信を行う場合には、下記のようなフローで一時アクセス用のURLを発行してアクセスすることができます。今回の前提として、コンテンツをAlibaba Cloudのオブジェクトストレージ(通称OSS)に保存しているとします。そのオブジェクトストレージに保存されたプライベートなコンテンツをCDNを経由して配信したいとします。

2. 設定方法

2-1. オブジェクトストレージを非公開設定にする

まずは、基本的なところですが、非公開コンテンツなのでオブジェクトストレージは「非公開モード」にします。これを忘れるといわゆる情報漏えいだったり、有料コンテンツが漏れてしまい利益の損失になってしまいます。余談ですが、オブジェクトストレージの権限設定ミスで情報漏えいに至った事故は昨今耐えません。

2-2. CDNでプライベートOSSを参照できるように設定する

CDNからプライベートのOSSを参照できるように設定します。CDNのコンソール画面から「プライベートバケット Back-to-Source」という設定項目があるのでクリックします。いままでに有効化したことない場合には「今すぐ承認」ボタンがあるのでこちらをクリックします。RAMでCDNサービスからOSSへのアクセス権を許可するロールが作成されます。

ロールが作成されると下記の通り有効にできるようになります。

この設定が完了するとプライベートのオブジェクトストレージのバケットであってもCDNを通して閲覧することができるようになります。しかし、この状態では、まだ完全ではありません。オブジェクトストレージに直接は閲覧することができないが、CDNを通してしまえばすべてのコンテンツが丸見えだからです。

2-3. CDNのURL認証機能を有効化する

続いて、CDNのURL認証機能を使っていきます。URL認証は、プライベートなコンテンツに対して、一時的に有効なURLを発行してアクセスできるようにする機能です。公式ドキュメントはこちら。

設定画面では下記のようになっており、認証タイプと暗号に使うキーを指定する必要があります。認証タイプはA,B,Cとあるのですが、仕組みは基本的に同じでアクセスする際のURLの形式が異なります。認証タイプの違いは、詳しくは公式ドキュメントをお好みのものを選びましょう。今回はAを選びます。
マスターキーですが今回はテストのため「xxxxxxxxxxxxx」とします。

3. URL生成とアクセス

では実際どのようにアクセスできるのでしょうか?
ドキュメントには認証タイプAの場合は下記の通りgetパラメータにauth_keyを追加することでアクセスできる書いてあります。

http://DomainName/Filename?auth_key=timestamp-rand-uid-md5hash

これのauth_keyをどうやって作るか見ていきます。
auth_keyは下記のルールに沿って作られるとドキュメントに書いてあります。これを具体的な事例を踏まえてみていきます。

sstring = "URI-Timestamp-rand-uid-PrivateKey"
HashValue = md5sum(sstring)

たとえば、http://mosuke5-cdn.sbcloud.ne.jp/test.jpg というURLでアクセスできる画像の場合、上のそれぞれの項目は下記のとおりになります。

URI /test.jpg
Timestamp 少し癖があって、ここで指定したタイムスタンプから1800秒間有効です。例えば、「1522815000」(2018年4月4日 13:10:00)を指定した場合 で30分後の2018年4月4日 13:40:00 まで有効になります。
rand 0
uid 0
PrivateKey xxxxxxxxxxxxx

なのでハッシュ化すべき文字列は/test.jpg-1522815000-0-0-xxxxxxxxxxxxx となります。こちらをmd5でハッシュ化すると、ff8b9a5e70b643067c04ebf8a6e43c8f になります。

というわけで、http://mosuke5-cdn.sbcloud.ne.jp/test.jpg?auth_key=1522815000-0-0-ff8b9a5e70b643067c04ebf8a6e43c8f でアクセスしてみると、きちんと画像が見えることが確認できます。

このハッシュ値を作ったのが、有効期限 2018年4月4日 13:40:00までとしたので、13:40を過ぎてアクセスすると403できちんと怒られます。

4. まとめ

以上に見てきたように、CDNでのコンテンツの配信も、URL認証機能を使ってプライベートコンテンツの配信も可能です。URL認証を利用するには少し慣れが必要ですが、このブログがみなさんのちからの助けになればと思います。まだ、細かな設定まではできませんが、Alibaba CloudのCDNもいろんな用途で使っていけそうです。と実感がわいてきました。

この記事をシェアする