アーカイブの暗号化
Vonage Video暗号化により、データが暗号化されていない状態で静止することのないアーカイブを作成することができます。
以下の方法でアーカイブを保護することができます:
- アーカイブストレージのフォールバックをオフにする - デフォルトでは、指定したAmazon S3またはMicrosoft Azureサーバにファイルをアップロードできなかった場合、Vonageはそのサーバにアーカイブファイルを保存します。REST APIを使用してアーカイブのアップロードターゲットを設定することで、このフォールバックストレージを防ぐことができます。
- Vonageビデオ暗号化を使用する - これにより、データが暗号化されていない状態で静止することのないアーカイブを作成することができます。これは最高レベルのセキュリティを提供します。
- Use Amazon S3 server-side encryption - これは暗号化にAmazon S3が管理する暗号鍵を使用します。詳細は この開発者ガイド.
Vonageビデオ暗号化では、Vonageアーカイブ内のビデオおよびオーディオデータは、Vonageに提供する公開鍵証明書を使用して暗号化されます。
機能概要
Vonage Videoプラットフォームの暗号化アーカイブ機能により、データが暗号化されていない状態で静止することのないアーカイブを作成することができます。
まず、アーカイブで使用する公開鍵と秘密鍵の RSA 鍵ペアを作成します。REST APIコールを使用して、公開鍵証明書をVonageと共有します。(同じ REST 呼び出しで、アーカイブに使用する Amazon S3 または Microsoft Azure アップロード先の詳細を送信します)。
暗号化アーカイブ機能では、アップロード先を設定する必要があります)。秘密鍵をローカルに保存し 個人使用のみ.
その後、Vonageはランダムに生成されたパスワードを使用して各アーカイブを暗号化し、証明書で暗号化し、暗号化されたパスワードを当社のサーバーに保存します。
アーカイブの準備ができると、サーバへのコールバックで通知され、パスワードを問い合わせることができます。Vonageは暗号化されていないパスワードを保存することはなく、Vonageはパスワードを復号化することはできません(秘密鍵の保持者だけがパスワードを復号化することができます)。
その後、秘密鍵を使ってパスワードを復号化し、そのパスワードを使って暗号化されたアーカイブを復号化することができます。復号化されたアーカイブファイルはMPEG-TS形式です。
Vonageはアーカイブの暗号化にAES-256アルゴリズムを使用しています。
生成されたパスワードは、OAEPパディング付きのRSA暗号化を使って暗号化される。暗号化アーカイブは、構成されたアーカイブでのみ使用でき、個々のストリームアーカイブでは使用できないことに注意してください。
このガイドでは、以下について見ていく:
暗号化アーカイブ証明書の作成
ア ー カ イ ブで使用す る X.509 PEM 証明書 と 、 それに対応す る 秘密鍵を作成 し ます:
(注: これはOpenSSL 1.0.1でテストされています)。
その証明書をVonageに送り、Vonageはその証明書を使ってアーカイブを復号化するために必要な暗号化されたパスワードを生成します。パスワードは秘密鍵で復号化され、アーカイブはパスワードで復号化されます。パスワードはアーカイブごとに異なります。
鍵のサイズは2048ビット以下でなければならない。アーカイブ・ターゲットを設定するために、Vonage video REST API に証明書を JSON データで送信します(次のセクションを参照)。証明書は JSON データに含まれるため、データを base64 エンコードして送信するか、証明書の改行文字を " \n" に置き換えてください。
以下の例では、証明書をbase64エンコードしている:
Base64エンコードされた証明書文字列は次のようになる:
"LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0..."
改行文字を置換した証明書文字列は次のようになる:
"-----BEGIN CERTIFICATE-----\n...\n...\n -----END CERTIFICATE-----"
暗号化されたアーカイブ証明書をVonageに送る
証明書を設定し、アーカイブの暗号化を有効にするには、以下のURLにHTTP PUTリクエストを送信します:
/v2/project/archive/storage
交換 appId をプロジェクトのApp IDに置き換えてください。
を使用して REST API リクエストを認証します。 認証ヘッダー:
Authorization: Basic base64(APP_ID:API_SECRET)
以下のクレームでJSONウェブトークンを作成する:
{
"iss": "your_app_id",
"ist": "project",
"iat": current_timestamp_in_seconds,
"exp": expire_timestamp_in_seconds,
"jti": "jwt_nonce"
}
- セット
issをあなたのVonage Video App IDに追加します。 Vonageアカウント プロジェクトページ)。 - セット
istを「プロジェクト」に変更した。 - セット
iatを現在のUnixエポックタイムスタンプ(トークンが作成された時)に秒単位で変換します。 - セット
expをトークンの有効期限に設定します。セキュリティのため、トークン作成時間に近い有効期限(たとえば、作成後3分)を使用し、REST API呼び出しごとに新しいトークンを作成することをお勧めします。有効期限の最大許容範囲は5分です。 - セット
jtiをJWTの一意な識別子に変換する。これはオプションである。JWTの JSONウェブトークン仕様 詳細はこちら。
プロジェクトの秘密鍵をJWT秘密鍵として使用し、HMAC-SHA256暗号化アルゴリズムで署名します。(秘密鍵は、プロジェクトの Video APIアカウント を参照)。例えば、以下のPythonコードはREST APIコールで使用できるトークンを作成します:
import jwt # See https://pypi.python.org/pypi/PyJWT
import time
import uuid
print jwt.encode({"iss": "my-project-API-key",
"iat": int(time.time()),
"exp": int(time.time()) + 180,
"ist": "project",
"jti": str(uuid.uuid4())()},
'my-project-API-secret',
algorithm='RS256')
交換 my-project-API-key そして my-project-API-secret をVonage VideoプロジェクトのアプリIDとシークレットで設定します。
を設定します。 Content-type ヘッダは、REST API呼び出しの application/json:
Content-Type:application/json
証明書の改行文字を "\n"JSONデータの文字列リテラルで使用できるようにします。アーカイブ・ストレージを設定する REST メソッドを呼び出すときに送信する JSON データのプロパティとして、公開鍵証明書を渡します。次のセクションを参照してください。
Amazon S3ターゲットに暗号化アーカイブを設定する
Amazon S3ターゲットで使用する公開鍵証明書を指定するには、REST APIコールのJSONデータを以下のフォーマットに設定します:
{
"type": "s3",
"config": {
"bucket": "example.com.archive-bucket",
"secretKey": "BvKwyshsmEATx5mngeloHwgKrYMbP+",
"accessKey": "AWFS7BAO536E6MXA"
},
"fallback": "none",
"certificate": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0..."
}
セット bucket をアーカイブのアップロードに使用するAmazon S3バケットの名前に設定します。バケット名を secretKey そして accessKey プロパティを、そのバケットのAmazon S3のシークレットキーとアクセスキーに設定します。
フォールバック・プロパティを "none" を使用して、アップロードに失敗した場合にアーカイブファイルがVonageビデオクラウドに保存されないようにします。プロパティを "opentok" アップロードに失敗した場合、ダッシュボードでアーカイブを利用できるようにします。
証明書プロパティに、Vonage がアーカイブの暗号化に使用する公開鍵証明書を設定します。証明書を必ずbase64エンコードするか、証明書の改行文字を "\n"これは、JSONデータの文字列リテラルで使用できるようにするためです。
Microsoft Azureターゲットに暗号化アーカイブを設定する
Microsoft Azure ターゲットで使用する公開鍵証明書を指定するには、REST API 呼び出しの JSON データに以下の形式を使用するように設定します:
{
"type": "azure",
"config": {
"accountName":"myAccountname",
"accountKey":"myAccountKey",
"container": "containerName"
},
"fallback": "none",
"certificate" : "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0...
}
Microsoft Azureのコンテナ名に合わせてコンテナを設定します。コンテナ名を accountName そして accountKey プロパティをMicrosoft Azureストレージの認証情報と一致させます。
を設定する。 fallback プロパティ "none" を使用して、アップロードに失敗した場合にアーカイブファイルがVonageビデオクラウドに保存されないようにします。プロパティを "opentok" アップロードに失敗した場合、ダッシュボードでアーカイブを利用できるようにします。
を設定する。 certificate プロパティに、Vonage がアーカイブの暗号化に使用する公開鍵証明書を指定します。証明書を必ずbase64エンコードするか、証明書の改行文字を "\n"JSONデータの文字列リテラルで使用できるようにします。Base64エンコードされた証明書文字列は次のようになります:
"LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0..."
REST APIレスポンス
- ステータスコード200のレスポンスは成功を示す。
- ステータスコード400のレスポンスは、無効なJSONデータが含まれているか、アップロード先が指定されていないことを示します。
- ステータスコード403のレスポンスは、無効なプロジェクトアプリIDまたはプライベートキーを渡したことを示します。
例
次のコマンドラインの例は、Amazon S3バケットにアップロードするアーカイブを暗号化する際にVonageが使用する証明書を安全に設定します:
の値を設定する。 app_id をVonage VideoプロジェクトのアプリIDに設定します。
の値を設定します。 your-s3-bucket そして your-s3-access-key をAmazon S3の証明書と一致させます。証明書の値を証明書の文字列で置き換えてください。
以下のコマンドラインの例は、Microsoft Azureのバケットにアップロードするアーカイブを暗号化する際にVonageが使用する証明書を安全に設定します:
の値を設定する。 app_id をVonage VideoプロジェクトのアプリIDに設定します。
の値を設定します。 your-azure-account-name, your-azure-account-nameそして your-azure-container をAmazon S3の証明書と一致させます。証明書の値を証明書の文字列で置き換えてください。
アーカイブの復号化
ダッシュボードを使用してアーカイブステータスのコールバックを設定できます。の「アーカイブステータスの変更」を参照してください。 アーカイブ開発者ガイド.
アーカイブが作成された後、コールバック URL へのアーカイブ ステータスの POST リクエストには password プロパティが含まれます:
{
"id" : "b40ef09b-3811-4726-b508-e41a0f96c68f",
"event": "archive",
"createdAt" : 1384221380000,
"duration" : 328,
"name" : "Foo",
"partnerId" : 123456,
"reason" : "",
"sessionId" : "2_MX40NzIwMzJ-flR1ZSBPERUIDIwMTN-MC45NDQ2MzE2NH4",
"size" : 18023312,
"status" : "uploaded",
"password" : "e42c...d23"
}
パスワードは、証明書で暗号化されたAESキーと初期化ベクターで、base64エンコードされたバイナリ・データ形式である。
バイナリデータの最初の3バイトは、バージョン(1バイト)、アルゴリズム(1バ イト)、モード(1バイト)を表す。このバージョンでは、長さが1、アルゴリズムが1(AES-256を示す)、モードが1(CBCを示す)に設定されている。
次の32バイトはキーである。残りの16バイトは初期化ベクターである。
まず、パスワードを復号化し、秘密鍵を使って復号化する:
その後、パスワードを使ってアーカイブファイルを復号化する:
-K が鍵
-iv は初期化ベクトル
xxd は、opensslに供給できるように、バイナリ解読され復号化されたパスワードを16進数に変換する。スイッチの詳細については、xxdのマニュアルページを読んでほしい。
暗号化アーカイブの無効化
暗号化されたアーカイブを無効にするには、アーカイブ・ストレージURLにHTTP PUTリクエストを送信する ( 暗号化されたアーカイブ証明書をVonageに送るただし、リクエストとともに送信するJSONデータでは、証明書をNULLに設定する。
Amazon S3ターゲットの暗号化アーカイブを無効にする
Amazon S3アーカイブ・ターゲットの公開鍵証明書を削除する(アーカイブから暗号化を解除する)には、以下のJSONデータでREST APIを呼び出します:
{
"type": "s3",
"config": {
"bucket": "example.com.archive-bucket",
"secretKey": "BvKwyshsmEATx5mngeloHwgKrYMbP+",
"accessKey": "AWFS7BAO536E6MXA"
},
"fallback": "none",
"certificate" : null
}
セット bucket をアーカイブのアップロードに使用するAmazon S3バケットの名前に設定します。
バケット名を secretKey そして accessKey プロパティを、そのバケットのAmazon S3シークレットキーとアクセスキーに設定します。
プロパティに fallback プロパティ to "none" を使用して、アップロードに失敗した場合にアーカイブファイルがVonageクラウドに保存されないようにします。
プロパティを "opentok" を設定し、アップロードに失敗した場合にVonageダッシュボードでアーカイブを利用できるようにします。
を設定します。 certificate プロパティをnullに設定する。
Microsoft Azureターゲットの暗号化アーカイブを無効にする
Microsoft Azureアーカイブターゲットの公開鍵証明書を削除する(アーカイブの暗号化を解除する)には、以下のJSONデータを指定してREST APIを呼び出します:
{
"type": "azure",
"config": {
"accountName":"myAccountname",
"accountKey":"myAccountKey",
"container": "containerName"
},
"certificate" : null
}
セット container をMicrosoft Azureコンテナ名と一致させる。
を設定します。 accountName そして accountKey プロパティをMicrosoft Azureストレージの認証情報と一致させます。
を設定します。 fallback プロパティ "none" を使用して、アップロードに失敗した場合にアーカイブファイルがVonageクラウドに保存されないようにします。
プロパティを "opentok" を設定し、アップロードに失敗した場合にVonageダッシュボードでアーカイブを利用できるようにします。
を設定します。 certificate プロパティ null.
REST APIレスポンス
- ステータスコード200の応答は、暗号化の無効化に成功したことを示す。
- ステータスコード400のレスポンスは、無効なJSONデータが含まれているか、アップロード先が指定されていないことを示します。
- ステータスコード403の応答は、無効なプロジェクトApp IDまたはパートナーシークレットを渡したことを示します。
例
以下のコマンドラインの例は、S3ターゲットの暗号化アーカイブを無効にする:
の値を設定する。 app_id をVonage Video App IDに設定します。
の値を設定します。 your-s3-bucket そして your-s3-access-key をAmazon S3の認証情報と一致させる。
既知の問題
暗号化されたアーカイブの期間は、すべての Vonage Video REST API 呼び出し、Vonage Video サーバ SDK のメソッド、およびアーカイブのステータス変更コールバックで、常に 0 として報告されます。