を使用して Kinesis Video Streams リソースへのアクセスを制御する AWS IoT - Amazon Kinesis Video Streams

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

を使用して Kinesis Video Streams リソースへのアクセスを制御する AWS IoT

このセクションでは、デバイス (カメラなど) が 1 つの特定の Kinesis ビデオストリームにのみオーディオおよびビデオデータを送信できるようにする方法について説明します。これを行うには、 AWS IoT 認証情報プロバイダーと AWS Identity and Access Management (IAM) ロールを使用します。

デバイスは X.509 証明書を使用して TLS AWS IoT 相互認証プロトコルを使用して接続できます。その他 AWS のサービス (Kinesis Video Streams など) は証明書ベースの認証をサポートしていませんが、 AWS 署名バージョン 4 AWS 形式の認証情報を使用して呼び出すことができます。署名バージョン 4 のアルゴリズムでは、通常、呼び出し元がアクセスキー ID とシークレットアクセスキーを持っている必要があります。 AWS IoT には、組み込みの X.509 証明書を固有のデバイス ID AWS として使用してリクエスト (Kinesis Video Streams へのリクエストなど) を認証できる認証情報プロバイダーがあります。これにより、アクセスキー ID とシークレットアクセスキーをデバイスに保存する必要がなくなります。

認証情報プロバイダーは、X.509 証明書を使用してクライアント (この場合は、ビデオストリームにデータを送信するカメラで実行されている Kinesis Video Streams SDK) を認証し、権限が制限された一時的なセキュリティトークンを発行します。このトークンを使用して、 AWS あらゆるリクエスト (この場合は Kinesis Video Streams への呼び出し) に署名し、認証できます。詳細については、「サービスへの直接呼び出しの承認」を参照してください。 AWS

Kinesis Video Streams へのカメラのリクエストを認証するこの方法では、IAM ロールを作成して設定し、 AWS IoT 認証情報プロバイダーがユーザーに代わってロールを引き継ぐことができるように、そのロールに適切な IAM ポリシーをアタッチする必要があります。

詳細については、「ドキュメント」を参照してください。 AWS IoTAWS IoT CoreIAM の詳細については、AWS Identity and Access Management (IAM) を参照してください。

AWS IoT ThingName ストリーム名として

ステップ 1: AWS IoTAWS IoT 任意のタイプと任意のモノを作成する

では AWS IoT、モノは特定のデバイスまたは論理エンティティを表現したものです。この場合、リソースレベルのアクセス制御を設定したい Kinesis AWS IoT ビデオストリームを表すモノがあります。モノを作成するには、まず Thing タイプを作成する必要があります。 AWS IoT AWS IoT モノのタイプには、同じタイプに関連するすべてのモノに共通する説明や設定情報を保存できます。

  1. 次のコマンド例では、モノのタイプ kvs_example_camera が作成されます。

    aws --profile default iot create-thing-type --thing-type-name kvs_example_camera > iot-thing-type.json
  2. 以下のコマンド例は、kvs_example_camera_streamkvs_example_cameraそのタイプのモノを作成します。

    aws --profile default iot create-thing --thing-name kvs_example_camera_stream --thing-type-name kvs_example_camera > iot-thing.json

ステップ 2: 引き受ける IAM ロールを作成する AWS IoT

IAM ロールは、ID で実行できることとできないことを決定するアクセス権限ポリシーを持つ AWS ID であるという点で、ユーザーと同様です。 AWSロールは、そのロールを必要とするどのユーザーでも引き受けることができます。ロールを引き受けると、ロールセッション用の一時的なセキュリティ認証情報が提供されます。

このステップで作成するロールは、クライアントからの認証情報承認リクエストを実行するときに、セキュリティトークンサービス (STS) から一時的な認証情報を取得するものと見なすことができます。 AWS IoT この場合、クライアントはカメラで実行されている KKinesis Video Streams SDK です。

この IAM ロールを作成して設定するには、以下のステップを実行します。

  1. IAM ロールを作成します。

    次のコマンド例では、 KVSCameraCertificateBasedIAMRoleという IAM ロールが作成されます。

    aws --profile default iam create-role --role-name KVSCameraCertificateBasedIAMRole --assume-role-policy-document 'file://iam-policy-document.json' > iam-role.json

    iam-policy-document.json には、次の信頼ポリシー JSON を使用できます。

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "credentials.iot.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
  2. 次に、以前に作成した IAM ロールにアクセス権限ポリシーをアタッチします。このアクセス権限ポリシーにより、リソースに対する選択的アクセス制御 (サポートされているオペレーションのサブセット) が可能になります。 AWS この場合、 AWS リソースはカメラにデータを送信させたいビデオストリームです。つまり、すべての設定ステップが完了すると、このカメラはこのビデオストリームにのみデータを送信できるようになります。

    aws --profile default iam put-role-policy --role-name KVSCameraCertificateBasedIAMRole --policy-name KVSCameraIAMPolicy --policy-document 'file://iam-permission-document.json'

    iam-permission-document.json には次の IAM ポリシー JSON を使用できます。

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "kinesisvideo:DescribeStream", "kinesisvideo:PutMedia", "kinesisvideo:TagStream", "kinesisvideo:GetDataEndpoint" ], "Resource": "arn:aws:kinesisvideo:*:*:stream/${credentials-iot:ThingName}/*" } ] }

    このポリシーは、プレースホルダー ($ {credentials-iot:}) で指定されたビデオストリーム (AWS リソース) でのみ指定されたアクションを許可することに注意してください。ThingNameThingName AWS IoT 認証情報プロバイダーがリクエストで動画ストリーム名を送信すると、このプレースホルダーは AWS IoT Thing 属性の値を引き継ぎます。

  3. 次に、IAM ロールのロールエイリアスを作成します。ロールエイリアスは、IAM ロールをポイントする代替データモデルです。 AWS IoT 認証情報プロバイダーのリクエストには、STS から一時的な認証情報を取得するためにどの IAM ロールを引き受けるかを示すロールエイリアスを含める必要があります。

    次のサンプルコマンドでは、KvsCameraIoTRoleAlias というロールエイリアスが作成されます。

    aws --profile default iot create-role-alias --role-alias KvsCameraIoTRoleAlias --role-arn $(jq --raw-output '.Role.Arn' iam-role.json) --credential-duration-seconds 3600 > iot-role-alias.json
  4. これで、ロールエイリアスを使用して (証明書が添付されたら) AWS IoT その証明書でロールを引き受けることができるポリシーを作成できます。

    以下のサンプルコマンドは、 AWS IoT という名のポリシーを作成しますKvsCameraIoTPolicy

    aws --profile default iot create-policy --policy-name KvsCameraIoTPolicy --policy-document 'file://iot-policy-document.json'

    以下のコマンドを使用して、 iot-policy-document .json ドキュメント JSON を作成できます。

    cat > iot-policy-document.json <<EOF { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iot:AssumeRoleWithCertificate" ], "Resource": "$(jq --raw-output '.roleAliasArn' iot-role-alias.json)" } ] } EOF

ステップ 3: X.509 証明書を作成して設定する

デバイス (ビデオストリーム) AWS IoT と間の通信は X.509 証明書を使用して保護されます。

  1. 以前に作成したポリシーを添付する必要がある証明書を作成します。 AWS IoT

    aws --profile default iot create-keys-and-certificate --set-as-active --certificate-pem-outfile certificate.pem --public-key-outfile public.pem.key --private-key-outfile private.pem.key > certificate
  2. AWS IoT (KvsCameraIoTPolicy以前に作成した) のポリシーをこの証明書に添付します。

    aws --profile default iot attach-policy --policy-name KvsCameraIoTPolicy --target $(jq --raw-output '.certificateArn' certificate)
  3. 作成したばかりの証明書に AWS IoT Thing (kvs_example_camera_stream) をアタッチします。

    aws --profile default iot attach-thing-principal --thing-name kvs_example_camera_stream --principal $(jq --raw-output '.certificateArn' certificate)
  4. AWS IoT 認証情報プロバイダーを通じてリクエストを承認するには、 AWS アカウント ID AWS IoT 固有の認証情報エンドポイントが必要です。 AWS IoT 以下のコマンドを使用して認証情報エンドポイントを取得できます。

    aws --profile default iot describe-endpoint --endpoint-type iot:CredentialProvider --output text > iot-credential-provider.txt
  5. 以前に作成した X.509 証明書に加えて、TLS を介してバックエンドサービスとの信頼を確立するための CA 証明書も必要です。CA 証明書は、次のコマンドを使用して取得できます。

    curl --silent 'https://www.amazontrust.com/repository/SFSRootCAG2.pem' --output cacert.pem

ステップ 4: Kinesis AWS IoT ビデオストリームで認証情報をテストする

これで、 AWS IoT これまでに設定した認証情報をテストできます。

  1. まず、この設定のテストに使用する Kinesis ビデオストリームを作成します。

    重要

    前のステップ (kvs_example_camera_stream) で作成した AWS IoT Thing 名と同じ名前で動画ストリームを作成します。

    aws kinesisvideo create-stream --data-retention-in-hours 24 --stream-name kvs_example_camera_stream
  2. 次に、 AWS IoT 認証情報プロバイダーを呼び出して一時的な認証情報を取得します。

    curl --silent -H "x-amzn-iot-thingname:kvs_example_camera_stream" --cert certificate.pem --key private.pem.key https://IOT_GET_CREDENTIAL_ENDPOINT/role-aliases/KvsCameraIoTRoleAlias/credentials --cacert ./cacert.pem > token.json
    注記

    以下のコマンドを使用して取得できますIOT_GET_CREDENTIAL_ENDPOINT

    IOT_GET_CREDENTIAL_ENDPOINT=`cat iot-credential-provider.txt`

    出力 JSON には、Kinesis Video Streams へのアクセスに使用できるaccessKey、secretKey、sessionToken が含まれます。

  3. テストでは、 DescribeStream kvs_example_camera_streamこれらの認証情報を使用してサンプルビデオストリームの Kinesis Video Streams API を呼び出すことができます。

    AWS_ACCESS_KEY_ID=$(jq --raw-output '.credentials.accessKeyId' token.json) AWS_SECRET_ACCESS_KEY=$(jq --raw-output '.credentials.secretAccessKey' token.json) AWS_SESSION_TOKEN=$(jq --raw-output '.credentials.sessionToken' token.json) aws kinesisvideo describe-stream --stream-name kvs_example_camera_stream

ステップ 5: AWS IoT 証明書と認証情報をカメラのファイルシステムにデプロイし、データをビデオストリームにストリーミングする

注記

このセクションでは、を使用するカメラから Kinesis ビデオストリームにメディアを送信する手順について説明します。C++ プロデューサーライブラリの使用

  1. 前の手順で生成した X.509 証明書、秘密鍵、および CA 証明書をカメラのファイルシステムにコピーします。これらのファイルを保存するパス、ロールエイリアス名、 AWS IoT gst-launch-1.0コマンドまたはサンプルアプリケーションを実行するための認証情報エンドポイントを指定します。

  2. 以下のサンプルコマンドは、 AWS IoT 証明書認証を使用してビデオを Kinesis Video Streams に送信します。

    gst-launch-1.0 rtspsrc location=rtsp://YourCameraRtspUrl short-header=TRUE ! rtph264depay ! video/x-h264,format=avc,alignment=au ! h264parse ! kvssink stream-name="kvs_example_camera_stream" aws-region="YourAWSRegion" iot-certificate="iot-certificate,endpoint=credential-account-specific-prefix.credentials.iot.aws-region.amazonaws.com,cert-path=/path/to/certificate.pem,key-path=/path/to/private.pem.key,ca-path=/path/to/cacert.pem,role-aliases=KvsCameraIoTRoleAlias"

AWS IoT CertificateId ストリーム名として

AWS IoT Thing を通じてデバイス (カメラなど) を表現し、別のストリーム名を認証する場合は、 AWS IoT certifiacateId属性をストリーム名として使用し、を使用してストリームに対する Kinesis Video Streams 権限を付与できます。 AWS IoT手順は前に説明した手順と似ていますが、いくつか変更点があります。

  • IAM ロール (iam-permission-document.json) のアクセス権限ポリシーを次のように変更します。

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "kinesisvideo:DescribeStream", "kinesisvideo:PutMedia", "kinesisvideo:TagStream", "kinesisvideo:GetDataEndpoint" ], "Resource": "arn:aws:kinesisvideo:*:*:stream/${credentials-iot:AwsCertificateId}/*" } ] }
    注記

    リソース ARN では、ストリーム ID のプレースホルダーとして証明書 ID を使用します。IAM 権限は、証明書 ID をストリーム名として使用すると機能します。証明書から証明書 ID を取得して、次の describe stream API 呼び出しでストリーム名として使用できるようにします。

    export CERTIFICATE_ID=`cat certificate | jq --raw-output '.certificateId'`
  • Kinesis Video Streams の describe-stream CLI コマンドを使用して、この変更を確認します。

    AWS_ACCESS_KEY_ID=$(jq --raw-output '.credentials.accessKeyId' token.json) AWS_SECRET_ACCESS_KEY=$(jq --raw-output '.credentials.secretAccessKey' token.json) AWS_SESSION_TOKEN=$(jq --raw-output '.credentials.sessionToken' token.json) aws kinesisvideo describe-stream --stream-name ${CERTIFICATE_ID}
  • KKinesis Video Streams C++ SDK AWS IoT のサンプルアプリケーションの認証情報プロバイダーに CercertificateId を渡します。

    credential_provider = make_unique<IotCertCredentialProvider>(iot_get_credential_endpoint, cert_path, private_key_path, role_alias, ca_cert_path, certificateId);
    注記

    認証情報プロバイダーにモノの名前を渡していることに注意してください。 AWS IoT 他の属性を渡すのと同様に、getenv を使用してデモアプリケーションに thingname を渡すことができます。 AWS IoT サンプルアプリケーションを実行するときに、コマンドラインパラメータでストリーム名として証明書 ID を使用します。

AWS IoT 認証情報を使用して、ハードコードされたストリーム名にストリーミングします。

特定の Amazon Kinesis ビデオストリームへのストリーミングを許可しながら、デバイス (カメラなど) を何らかの方法で表現するには、を使用してストリームに対する Amazon Kinesis Video Streams アクセス権限を付与します。 AWS IoT AWS IoTこのプロセスは前のセクションと似ていますが、いくつか変更があります。

IAM ロール (iam-permission-document.json) のアクセス権限ポリシーを次のように変更します。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "kinesisvideo:DescribeStream", "kinesisvideo:PutMedia", "kinesisvideo:TagStream", "kinesisvideo:GetDataEndpoint" ], "Resource": "arn:aws:kinesisvideo:*:*:stream/YourStreamName/*" } ] }

前のステップで生成した X.509 証明書、プライベートキー、CA 証明書をカメラのファイルシステムにコピーします。

これらのファイルを保存するパス、ロールエイリアス名、 AWS IoT Thing 名、 AWS IoT gst-launch-1.0コマンドまたはサンプルアプリケーションを実行するための認証情報エンドポイントを指定します。

以下のサンプルコマンドは、 AWS IoT 証明書認証を使用して Amazon Kinesis ビデオストリームに動画を送信します。

gst-launch-1.0 rtspsrc location=rtsp://YourCameraRtspUrl short-header=TRUE ! rtph264depay ! video/x-h264,format=avc,alignment=au ! h264parse ! kvssink stream-name="YourStreamName" aws-region="YourAWSRegion" iot-certificate="iot-certificate,endpoint=credential-account-specific-prefix.credentials.iot.aws-region.amazonaws.com,cert-path=/path/to/certificate.pem,key-path=/path/to/private.pem.key,ca-path=/path/to/cacert.pem,role-aliases=KvsCameraIoTRoleAlias,iot-thing-name=YourThingName"