
⑧動画配信用にクラウドストレージの設定を変更(AWS)
前回の記事はこちら
はじめに

AWS S3上にアップロードされたMPEG2-TSファイルをHLS(HTTP Live Streaming)で配信するには、これらの動画ファイルをHTTPで公開する必要があります。
本章では、MPEG2-TSファイル保存用に作成したAWS S3バケットを、公開する為の設定を行います。
公開の為に実施する設定は以下の2点です。
静的ウェブサイトホスティングの有効化
バケットをパブリックアクセス許可に設定する
【注意!!】
本章では、AWS S3を一般公開(パブリックアクセス可能な状態)する設定を行います。
しかし、この設定を行うと、URLを知っている人は誰でも動画を取得できる状態になります。
実装・構築技術的な部分を中心に話を進めるために、簡易的な方法として、パブリックアクセス可能な状態にしていきますが、インターネット上に公開される、という状況を十分理解したうえで、撮影する映像には十分注意してください。
さらに、実際にシステムとして運用していくためには、外部からは見られないような対策が必須です。
例えば、S3のオブジェクトを指定した時間だけ一時的に公開可能にするPreSignedURLを生成する方法や、MPEG2-TSをAESで暗号化してHLSで配信する方法、AWSの認証サービス(Cognito)を使用して、ログインユーザー認証機構を設ける、など、セキュリティやプライバシーの面から、様々な対策を施す必要があります。
以降の説明ではAWSのコンソール画面のキャプチャー画像を使っていますが、AWSのコンソール画面は、頻繁にデザインが変更されますので、違うデザインのコンソールに変わっている可能性があります。
静的ウェブサイトホスティングの有効化
まずは、バケットの静的ウェブサイトホスティング設定を有効にします。
この設定を有効にすると、設定したS3バケットに固有のURLが付与され、静的なHTTPコンテンツを公開する準備ができます。
S3のページで、対象のバケットを選択し、「プロパティ」タブを開きます。
スクロールさせていくと、ページの下の方に「静的ウェブサイトホスティング」の項目がありますので、「編集」ボタンを押します。

「静的ウェブサイトホスティング」の設定画面が開きますので、下記のように設定してください
「静的ウェブサイトホスティング」を「有効」に設定
「ホスティングタイプ」を「静的ウェブサイトをホストする」に設定
「インデックスドキュメント」に「index.html」と入力

設定が完了すると、「静的ウェブサイトホスティング」が「有効」に変更され、「バケットウェブサイトエンドポイント」の箇所に、このバケットにアクセスする為のURLが表示されます。

このURLをメモしておいてください。
バケットをパブリックアクセス許可に設定する
静的ウェブサイトホスティングを有効にしただけでは、バケットに保存されたファイルを取得することはできません。
公開するには、さらに以下の2つの設定を行う必要があります。
パブリックアクセスのブロック設定を無効にする
バケットポリシーを記述する
パブリックアクセスのブロック設定を無効にする
S3のページで、対象のバケットを選択し、「アクセス許可」タブを開き、「ブロックパブリックアクセス(バケット設定)の「編集」を押します。

ブロックパブリックアクセス設定画面が開き、最初は「パブリックアクセスをすべてブロック」にチェックが付いていると思いますので、そのチェックを外して、すべての項目にチェックが付いていない状態にします。

この状態で「変更の保存」を押すと、確認画面が表示されます。

入力欄に「確認」と入力して「確認」ボタンを押すと、パブリックアクセスのブロックが解除されます。
バケットポリシーを記述する
次に、どのようなアクションを許可するかをバケットポリシーとして記述します。
すぐ下の「バケットポリシー」項目の「編集」ボタンを押すと、「バケットポリシー」の入力画面が表示されます。

この入力欄に下記のJSONを入力します。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "PublicReadGetObject",
"Effect": "Allow",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::[バケット名]/*"
}
]
}
このポリシーでは、対象バケット内に保存されたオブジェクトに対するHTTP GETのみを許可する設定です。
上記のJSONの [バケット名] の箇所に、対象バケットの名称を入れて、入力欄に転記して、保存してください。
設定確認
以上の設定ができたら、実際に公開されているか確認してみます。
対象のバケットに保存されているMPEG2-TSファイルをブラウザでダウンロードしてみます。
MPEG2-TSファイルが保存されていなければ、何か別のファイルをバケットにアップロードしてください。
静的ウェブサイトホスティングの所に記載されたURLに、ダウンロードするファイルのパスを追加したURLを、ブラウザに入力して、ダウンロード(もしくはブラウザ上で表示)できれば、設定は完了です。