はじめに
清水です。昨日(2024/02/01)のエントリでAWSのマネージド型ライブストリーミングソリューションであるAmazon Interactive Video Service (Amazon IVS)のLow-Latency Streamingでポリシーによる再生制限ができるPlayback restriction policiesが利用可能になったアップデートについてお届けしました。
What's New at AWSでもアップデート情報が2024/02/01付でポストされていますね。
このIVS Low-Latency StreamingのPlayback Restriction Policy、アップデートブログではAWSマネジメントコンソールからの操作を紹介しましたが、AWS CLIをはじめとしたAPIでももちろんサポートされています。本エントリではAWS CLIを使ってPlayback Restriction Policyの操作をしてみたのでまとめてみたいと思います。
本エントリでのAWS CLIの環境について
残念なことに、本検証を行った2024/02/02 19:00の時点でAWS CLI v2ではPlayback Restriction Policy関連のAPIが未対応なようでした。
CloudShellのデフォルトのAWS CLI環境(バージョンは2.15.15
でした)でPlayback Restriction Policyの一覧表示コマンドを実行すると、以下のようにコマンドが見つからない旨、表示されてしまいます。
[cloudshell-user@ip-10-130-54-157 ~]$ aws --version
aws-cli/2.15.15 Python/3.11.6 Linux/6.1.66-91.160.amzn2023.x86_64 exec-env/CloudShell exe/x86_64.amzn.2023 prompt/off
[cloudshell-user@ip-10-130-54-157 ~]$ aws ivs list-playback-restriction-policies
usage: aws [options] <command> <subcommand> [<subcommand> ...] [parameters]
To see help text, you can run:
aws help
aws <command> help
aws <command> <subcommand> help
aws: error: argument operation: Invalid choice, valid choices are:
batch-get-channel | batch-get-stream-key
batch-start-viewer-session-revocation | create-channel
create-recording-configuration | create-stream-key
delete-channel | delete-playback-key-pair
delete-recording-configuration | delete-stream-key
get-channel | get-playback-key-pair
get-recording-configuration | get-stream
get-stream-key | get-stream-session
import-playback-key-pair | list-channels
list-playback-key-pairs | list-recording-configurations
list-stream-keys | list-stream-sessions
list-streams | list-tags-for-resource
put-metadata | start-viewer-session-revocation
stop-stream | tag-resource
untag-resource | update-channel
help
手元のMacでAWS CLI v2環境を最新版にしたところバージョンが2.15.16にはなりましたが、やはりPlayback Restriction Policyのコマンドは見つからない状況です。
% aws --version
aws-cli/2.15.16 Python/3.11.6 Darwin/22.6.0 exe/x86_64 prompt/off
% aws ivs list-playback-restriction-policies --profile shimizu.toshiya
usage: aws [options] <command> <subcommand> [<subcommand> ...] [parameters]
To see help text, you can run:
aws help
aws <command> help
aws <command> <subcommand> help
aws: error: argument operation: Invalid choice, valid choices are:
batch-get-channel | batch-get-stream-key
batch-start-viewer-session-revocation | create-channel
create-recording-configuration | create-stream-key
delete-channel | delete-playback-key-pair
delete-recording-configuration | delete-stream-key
get-channel | get-playback-key-pair
get-recording-configuration | get-stream
get-stream-key | get-stream-session
import-playback-key-pair | list-channels
list-playback-key-pairs | list-recording-configurations
list-stream-keys | list-stream-sessions
list-streams | list-tags-for-resource
put-metadata | start-viewer-session-revocation
stop-stream | tag-resource
untag-resource | update-channel
help
確認してみたところ、AWS CLI v1ではバージョン1.32.33
でPlayback Restriction Policyに対応済みのようです。
AWS CLI v2でもすぐに対応するとは思いつつも、AWS CLIでPlayback Restriction Policyを真っ先に操作してみたい!ということで、以下ブログエントリを参考に、CloudShellで使い捨てなAWS CLI v1環境を準備して動作を確認しました。
上記ブログエントリ当時のERROR/WARNING内容と少し異なるようですが、バージョン1.32.33
のAWS CLIが実行できるようなのでこちらで検証を進めています。
[cloudshell-user@ip-10-130-54-157 ~]$ aws --version
aws-cli/2.15.15 Python/3.11.6 Linux/6.1.66-91.160.amzn2023.x86_64 exec-env/CloudShell exe/x86_64.amzn.2023 prompt/off
[cloudshell-user@ip-10-130-54-157 ~]$ sudo pip3 uninstall -y awsebcli && sudo pip3 install --upgrade awscli
WARNING: Skipping awsebcli as it is not installed.
WARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager. It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv
<中略>
ERROR: pip's dependency resolver does not currently take into account all the packages that are installed. This behaviour is the source of the following dependency conflicts.
boto3 1.28.62 requires botocore<1.32.0,>=1.31.62, but you have botocore 1.34.33 which is incompatible.
boto3 1.28.62 requires s3transfer<0.8.0,>=0.7.0, but you have s3transfer 0.10.0 which is incompatible.
Successfully installed awscli-1.32.33 botocore-1.34.33 colorama-0.4.4 docutils-0.16 pyasn1-0.5.1 rsa-4.7.2 s3transfer-0.10.0
WARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager. It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv
[cloudshell-user@ip-10-130-54-157 ~]$ aws --version
aws-cli/1.32.33 Python/3.9.16 Linux/6.1.66-91.160.amzn2023.x86_64 exec-env/CloudShell botocore/1.34.33
Playback Restriction Policyの表示(ListとGet)
AWS CLI環境の準備ができたら、まずは前回のブログエントリ執筆時に作成したPlayback Restriction Policyの表示からはじめてみます。
aws ivs list-playback-restriction-policies
コマンド、aws ivs get-playback-restriction-policy
コマンドを使用します。
- list-playback-restriction-policies — AWS CLI 1.32.33 Command Reference
- get-playback-restriction-policy — AWS CLI 1.32.33 Command Reference
aws ivs list-playback-restriction-policies
コマンドはオプションなしで実行可能です。
$ aws ivs list-playback-restriction-policies
以下のような実行結果となります。
$ aws ivs list-playback-restriction-policies
{
"playbackRestrictionPolicies": [
{
"allowedCountries": [
"JP"
],
"allowedOrigins": [
"https://ivs.example.net"
],
"arn": "arn:aws:ivs:ap-northeast-1:123456789012:playback-restriction-policy/grxxxxxxxxHT",
"enableStrictOriginEnforcement": false,
"name": "playback-restriction-policy-1",
"tags": {}
}
]
}
aws ivs get-playback-restriction-policy
コマンドは--arn
オプションでplayback restriction policyのARNを指定します。
$ aws ivs get-playback-restriction-policy \
--arn <value>
実行結果は以下です。出力内容はaws ivs list-playback-restriction-policies
と同じですね。
$ aws ivs get-playback-restriction-policy --arn "arn:aws:ivs:ap-northeast-1:123456789012:playback-restriction-policy/grxxxxxxxxHT"
{
"playbackRestrictionPolicy": {
"allowedCountries": [
"JP"
],
"allowedOrigins": [
"https://ivs.example.net"
],
"arn": "arn:aws:ivs:ap-northeast-1:123456789012:playback-restriction-policy/grxxxxxxxxHT",
"enableStrictOriginEnforcement": false,
"name": "playback-restriction-policy-1",
"tags": {}
}
}
Playback Restriction Policyの作成(Create)
続いてPlayback Restriction Policyの作成です。aws ivs create-playback-restriction-policy
コマンドを使用します。
オプションとしてPlayback Restriction Policy作成時に指定する項目、Policyの名前やAllowed Countries、Allowed Origins、そしてStrict origin enforcementの有無などを設定します。 ただし、いずれも指定が必須ではありません。
$ aws ivs create-playback-restriction-policy \
[--name <value>] \
[--allowed-countries <value>] \
[--allowed-origins <value>] \
[--enable-strict-origin-enforcement | --no-enable-strict-origin-enforcement]
--name
オプションは作成するPlayback restriction policyの名前ですね。名前なので必須と思いきや、これも必須ではありません。
--allowed-countries
で再生許可をする国を指定します。国の指定方法はISO 3166-1 alpha-2というコードを使用する必要があります。わかりやすいところでいえば、日本ならJP
、アメリカ合衆国ならUS
となります。指定しなかった場合はすべての国に対して再生が許可されます。
--allowed-origins
では再生を許可する(CORSレスポンスヘッダを返す)サイトを指定します。指定方法はOriginヘッダの書式と同様で https://example1.com という形式のほか、ワイルドカードを使って https://*.example2.com という形式での指定もできます。指定をしない場合はすべてのOriginが許可対象となります。また
指定可能なOriginが5つまでである点に注意しましょう。(Service Quotas (Low-Latency Streaming) - Amazon Interactive Video Service)
Strict origin enforcementの有効/無効は--enable-strict-origin-enforcement
または--no-enable-strict-origin-enforcement
で指定します。指定しない場合(デフォルト)は無効となります。
実行結果は以下のようになります。コマンドの返り値として作成したPlayback Restriction Policyの詳細が返ります。
$ aws ivs create-playback-restriction-policy \
> --name prp-created-by-aws-cli \
> --allowed-countries '["JP","US"]' \
> --allowed-origins '["https://*.example.net","http://ivs.example.net"]' \
> --enable-strict-origin-enforcement
{
"playbackRestrictionPolicy": {
"allowedCountries": [
"JP",
"US"
],
"allowedOrigins": [
"https://*.example.net",
"http://ivs.example.net"
],
"arn": "arn:aws:ivs:ap-northeast-1:123456789012:playback-restriction-policy/5Fxxxxxxxxm8",
"enableStrictOriginEnforcement": true,
"name": "prp-created-by-aws-cli",
"tags": {}
}
}
実行後、aws ivs list-playback-restriction-policies
コマンドを実行してみました。2つ目のPlayback Restriction Policyが作成されていますね。
$ aws ivs list-playback-restriction-policies
{
"playbackRestrictionPolicies": [
{
"allowedCountries": [
"JP",
"US"
],
"allowedOrigins": [
"https://*.example.net",
"http://ivs.example.net"
],
"arn": "arn:aws:ivs:ap-northeast-1:123456789012:playback-restriction-policy/5Fxxxxxxxxm8",
"enableStrictOriginEnforcement": true,
"name": "prp-created-by-aws-cli",
"tags": {}
},
{
"allowedCountries": [
"JP"
],
"allowedOrigins": [
"https://ivs.example.net"
],
"arn": "arn:aws:ivs:ap-northeast-1:123456789012:playback-restriction-policy/grxxxxxxxxHT",
"enableStrictOriginEnforcement": false,
"name": "playback-restriction-policy-1",
"tags": {}
}
]
}
Playback Restriction Policyの更新(Update)
続いてPlayback Restriction Policyの更新を行います。更新はaws ivs update-playback-restriction-policy
コマンドです。
更新(変更)対象となるPlayback restriction policyのARNが必須指定なオプションです。そのほか、変更後のPolicyの名前やAllowed Countries、Allowed Origins、そしてStrict origin enforcementの有無などをオプションで設定します。
$ aws ivs update-playback-restriction-policy \
--arn <value> \
[--name <value>] \
[--allowed-countries <value>] \
[--allowed-origins <value>] \
[--enable-strict-origin-enforcement | --no-enable-strict-origin-enforcement]
実際にaws ivs update-playback-restriction-policy
コマンドの実行を確認してみます。まずはPlayback Restriction Policyの変更前の状態をaws ivs get-playback-restriction-policy
コマンドで確認します。
$ aws ivs get-playback-restriction-policy \
> --arn "arn:aws:ivs:ap-northeast-1:123456789012:playback-restriction-policy/5Fxxxxxxxxm8"
{
"playbackRestrictionPolicy": {
"allowedCountries": [
"JP",
"US"
],
"allowedOrigins": [
"https://*.example.net",
"http://ivs.example.net"
],
"arn": "arn:aws:ivs:ap-northeast-1:123456789012:playback-restriction-policy/5Fxxxxxxxxm8",
"enableStrictOriginEnforcement": true,
"name": "prp-created-by-aws-cli",
"tags": {}
}
}
日本国内からのみ再生を許可するように、そして再生を許可するサイト(Origin)も変更してみます。
$ aws ivs update-playback-restriction-policy \
> --arn "arn:aws:ivs:ap-northeast-1:123456789012:playback-restriction-policy/5Fxxxxxxxxm8" \
> --allowed-countries '["JP"]' \
> --allowed-origins '["https://ivs.example.net"]'
{
"playbackRestrictionPolicy": {
"allowedCountries": [
"JP"
],
"allowedOrigins": [
"https://ivs.example.net"
],
"arn": "arn:aws:ivs:ap-northeast-1:123456789012:playback-restriction-policy/5Fxxxxxxxxm8",
"enableStrictOriginEnforcement": true,
"name": "prp-created-by-aws-cli",
"tags": {}
}
}
返り値から変更できていることが確認できますね。念のため、aws ivs get-playback-restriction-policy
コマンドでも確認してみます。
$ aws ivs get-playback-restriction-policy \
> --arn "arn:aws:ivs:ap-northeast-1:123456789012:playback-restriction-policy/5Fxxxxxxxxm8"{
"playbackRestrictionPolicy": {
"allowedCountries": [
"JP"
],
"allowedOrigins": [
"https://ivs.example.net"
],
"arn": "arn:aws:ivs:ap-northeast-1:123456789012:playback-restriction-policy/5Fxxxxxxxxm8",
"enableStrictOriginEnforcement": true,
"name": "prp-created-by-aws-cli",
"tags": {}
}
}
さらに、Strict origin enforcementを無効にしてみます。
$ aws ivs update-playback-restriction-policy \
> --arn "arn:aws:ivs:ap-northeast-1:123456789012:playback-restriction-policy/5Fxxxxxxxxm8" \
> --no-enable-strict-origin-enforcement
{
"playbackRestrictionPolicy": {
"allowedCountries": [
"JP"
],
"allowedOrigins": [
"https://ivs.example.net"
],
"arn": "arn:aws:ivs:ap-northeast-1:123456789012:playback-restriction-policy/5Fxxxxxxxxm8",
"enableStrictOriginEnforcement": false,
"name": "prp-created-by-aws-cli",
"tags": {}
}
}
$ aws ivs get-playback-restriction-policy \
> --arn "arn:aws:ivs:ap-northeast-1:123456789012:playback-restriction-policy/5Fxxxxxxxxm8"
{
"playbackRestrictionPolicy": {
"allowedCountries": [
"JP"
],
"allowedOrigins": [
"https://ivs.example.net"
],
"arn": "arn:aws:ivs:ap-northeast-1:123456789012:playback-restriction-policy/5Fxxxxxxxxm8",
"enableStrictOriginEnforcement": false,
"name": "prp-created-by-aws-cli",
"tags": {}
}
}
Playback Restriction Policyの削除(Delete)
Playback Restriction Policyの削除はaws ivs delete-playback-restriction-policy
コマンドで行います。--arn
オプションで削除対象のPlayback Restriction PolicyのARNを指定します。
$ aws ivs delete-playback-restriction-policy \
--arn <value>
以下が実行結果です。実行後の返り値はありませんので、実行前後でaws ivs list-playback-restriction-policies
コマンドで確認しています。
$ aws ivs list-playback-restriction-policies
{
"playbackRestrictionPolicies": [
{
"allowedCountries": [
"JP"
],
"allowedOrigins": [
"https://ivs.example.net"
],
"arn": "arn:aws:ivs:ap-northeast-1:123456789012:playback-restriction-policy/5Fxxxxxxxxm8",
"enableStrictOriginEnforcement": false,
"name": "prp-created-by-aws-cli",
"tags": {}
},
{
"allowedCountries": [
"JP"
],
"allowedOrigins": [
"https://ivs.example.net"
],
"arn": "arn:aws:ivs:ap-northeast-1:123456789012:playback-restriction-policy/grxxxxxxxxHT",
"enableStrictOriginEnforcement": false,
"name": "playback-restriction-policy-1",
"tags": {}
}
]
}
$ aws ivs delete-playback-restriction-policy \
> --arn "arn:aws:ivs:ap-northeast-1:123456789012:playback-restriction-policy/5Fxxxxxxxxm8"
$ aws ivs list-playback-restriction-policies
{
"playbackRestrictionPolicies": [
{
"allowedCountries": [
"JP"
],
"allowedOrigins": [
"https://ivs.example.net"
],
"arn": "arn:aws:ivs:ap-northeast-1:123456789012:playback-restriction-policy/grxxxxxxxxHT",
"enableStrictOriginEnforcement": false,
"name": "playback-restriction-policy-1",
"tags": {}
}
]
}
Channelの作成や更新時にPlayback Restriction PolicyをAWS CLIでアタッチする
Playback Restriction Policyの表示、作成、更新、削除をAWS CLIで行う方法についてそれぞれ確認してきました。最後に、IVS Low-Latency StreamingのChannelリソースに対して、Playback Restriction PolicyをChannel作成時にアタッチする方法、またChannel更新時にアタッチする方法について確認してみます。
Channel作成時のaws ivs create-channel
コマンド、もしくはChannel更新時のaws ivs update-channel
コマンドそれぞれの実行時に--playback-restriction-policy-arn
オプションでアタッチするPlayback Restriction Policyを指定することができます。Playback Restriction PolicyはARNでの指定になる点に注意しましょう。
なおChannelの作成、更新などは以下エントリなどを参照ください。
あらかじめアタッチ用のPlayback Restriction Policyをaws ivs create-playback-restriction-policy
コマンドで作成しておきます。
$ aws ivs create-playback-restriction-policy \
> --name prp-created-by-aws-cli \
> --allowed-countries '["JP","US"]' \
> --allowed-origins '["https://*.example.net","http://ivs.example.net"]' \
> --no-enable-strict-origin-enforcement
{
"playbackRestrictionPolicy": {
"allowedCountries": [
"JP",
"US"
],
"allowedOrigins": [
"https://*.example.net",
"http://ivs.example.net"
],
"arn": "arn:aws:ivs:ap-northeast-1:123456789012:playback-restriction-policy/U7xxxxxxxxIY",
"enableStrictOriginEnforcement": false,
"name": "prp-created-by-aws-cli",
"tags": {}
}
}
Channelの新規作成(create-channel)の場合
まずはChannelリソースの新規作成時です。aws ivs create-channel
コマンドにオプション--playback-restriction-policy-arn
でPlayback Restriction PolicyのARNを指定します。
$ aws ivs create-channel \
> --name "prp-aws-cli-test-channel-1" \
> --playback-restriction-policy-arn "arn:aws:ivs:ap-northeast-1:123456789012:playback-restriction-policy/U7xxxxxxxxIY"
{
"channel": {
"arn": "arn:aws:ivs:ap-northeast-1:123456789012:channel/SZxxxxxxxxxb",
"authorized": false,
"ingestEndpoint": "62xxxxxxxx2b.global-contribute.live-video.net",
"insecureIngest": false,
"latencyMode": "LOW",
"name": "prp-aws-cli-test-channel-1",
"playbackRestrictionPolicyArn": "arn:aws:ivs:ap-northeast-1:123456789012:playback-restriction-policy/U7xxxxxxxxIY",
"playbackUrl": "https://62xxxxxxxx2b.ap-northeast-1.playback.live-video.net/api/video/v1/ap-northeast-1.123456789012.channel.SZxxxxxxxxxb.m3u8",
"preset": "",
"recordingConfigurationArn": "",
"tags": {},
"type": "STANDARD"
},
"streamKey": {
"arn": "arn:aws:ivs:ap-northeast-1:123456789012:stream-key/LgxxxxxxxxU2",
"channelArn": "arn:aws:ivs:ap-northeast-1:123456789012:channel/SZxxxxxxxxxb",
"tags": {},
"value": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
}
}
Channelの更新(update-channel)の場合
更新についても同様に、aws ivs update-channel
コマンドにオプション--playback-restriction-policy-arn
でPlayback Restriction PolicyのARNを指定します。
まずはPlayback Restriction PolicyがアタッチされていないChannelをaws ivs create-channel
コマンドで作成します。
$ aws ivs create-channel \
> --name "prp-aws-cli-test-channel-2"
{
"channel": {
"arn": "arn:aws:ivs:ap-northeast-1:123456789012:channel/AlxxxxxxxxFy",
"authorized": false,
"ingestEndpoint": "62xxxxxxxx2b.global-contribute.live-video.net",
"insecureIngest": false,
"latencyMode": "LOW",
"name": "prp-aws-cli-test-channel-2",
"playbackRestrictionPolicyArn": "",
"playbackUrl": "https://62xxxxxxxx2b.ap-northeast-1.playback.live-video.net/api/video/v1/ap-northeast-1.123456789012.channel.AlxxxxxxxxFy.m3u8",
"preset": "",
"recordingConfigurationArn": "",
"tags": {},
"type": "STANDARD"
},
"streamKey": {
"arn": "arn:aws:ivs:ap-northeast-1:123456789012:stream-key/e9xxxxxxxxWZ",
"channelArn": "arn:aws:ivs:ap-northeast-1:123456789012:channel/AlxxxxxxxxFy",
"tags": {},
"value": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
}
}
aws ivs update-channel
コマンドでChannelリソースの更新を行います。実行後、"playbackRestrictionPolicyArn"
に値が設定されていることが確認できますね。
$ aws ivs update-channel \
> --arn "arn:aws:ivs:ap-northeast-1:123456789012:channel/AlxxxxxxxxFy" \
> --playback-restriction-policy-arn "arn:aws:ivs:ap-northeast-1:123456789012:playback-restriction-policy/U7xxxxxxxxIY"
{
"channel": {
"arn": "arn:aws:ivs:ap-northeast-1:123456789012:channel/AlxxxxxxxxFy",
"authorized": false,
"ingestEndpoint": "62xxxxxxxx2b.global-contribute.live-video.net",
"insecureIngest": false,
"latencyMode": "LOW",
"name": "prp-aws-cli-test-channel-2",
"playbackRestrictionPolicyArn": "arn:aws:ivs:ap-northeast-1:123456789012:playback-restriction-policy/U7xxxxxxxxIY",
"playbackUrl": "https://62xxxxxxxx2b.ap-northeast-1.playback.live-video.net/api/video/v1/ap-northeast-1.123456789012.channel.AlxxxxxxxxFy.m3u8",
"preset": "",
"recordingConfigurationArn": "",
"tags": {},
"type": "STANDARD"
}
}
まとめ
AWS CLIを使ってIVS Low-Latency StreamingのPlayback Restriction Policyを操作してみました。List/GetとCreate、Update、そしてDeleteと、シンプルに操作体系がまとまっている印象です。Allowed Countries指定時の国コード、Allowed Origins指定時の書式、Strict origin enforcementの有効/無効の指定方法などがポイントになるかと思います。しっかり抑えておきましょう。また本エントリ執筆時点で未対応だったAWS CLI v2、きっとすぐに対応されると思います、待ち遠しいですね。