Mengontrol akses ke sumber daya Kinesis Video Streams menggunakan AWS IoT - Amazon Kinesis Video Streams

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Mengontrol akses ke sumber daya Kinesis Video Streams menggunakan AWS IoT

Bagian ini menjelaskan cara mengaktifkan perangkat (misalnya, kamera) untuk mengirim data audio dan video ke satu aliran video Kinesis tertentu saja. Anda dapat melakukan ini dengan menggunakan penyedia AWS IoT kredensial dan peran AWS Identity and Access Management (IAM).

Perangkat dapat menggunakan sertifikat X.509 untuk terhubung AWS IoT menggunakan protokol otentikasi timbal balik TLS. Lainnya Layanan AWS (misalnya, Kinesis Video Streams) tidak mendukung otentikasi berbasis sertifikat, tetapi dapat AWS dipanggil menggunakan kredensil dalam format Signature Version 4. AWS Algoritma Signature Version 4 biasanya mengharuskan penelepon untuk memiliki ID kunci akses dan kunci akses rahasia. AWS IoT memiliki penyedia kredensi yang memungkinkan Anda menggunakan sertifikat X.509 bawaan sebagai identitas perangkat unik untuk mengautentikasi AWS permintaan (misalnya, permintaan ke Kinesis Video Streams). Ini menghilangkan kebutuhan untuk menyimpan ID kunci akses dan kunci akses rahasia di perangkat Anda.

Penyedia kredensi mengautentikasi klien (dalam hal ini, SDK Kinesis Video Streams yang berjalan di kamera yang ingin Anda kirim data ke aliran video) menggunakan sertifikat X.509 dan mengeluarkan token keamanan hak istimewa terbatas sementara. Anda dapat menggunakan token untuk menandatangani dan mengautentikasi AWS permintaan apa pun (dalam hal ini, panggilan ke Kinesis Video Streams). Untuk informasi selengkapnya, lihat Mengotorisasi Panggilan Langsung ke AWS Layanan.

Cara mengautentikasi permintaan kamera Anda ke Kinesis Video Streams ini mengharuskan Anda membuat dan mengonfigurasi peran IAM dan melampirkan kebijakan IAM yang sesuai ke peran tersebut sehingga penyedia kredensi dapat mengambil peran AWS IoT tersebut atas nama Anda.

Untuk informasi selengkapnya AWS IoT, lihat AWS IoT Core Dokumentasi. Untuk informasi selengkapnya tentang tag IAM, lihat AWS Identity and Access Management (IAM).

AWS IoT ThingName sebagai nama aliran

Langkah 1: Buat tipe AWS IoT benda dan AWS IoT benda

Dalam AWS IoT, sesuatu adalah representasi dari perangkat tertentu atau entitas logis. Dalam hal ini, AWS IoT sesuatu mewakili aliran video Kinesis Anda yang ingin Anda konfigurasikan kontrol akses tingkat sumber daya. Untuk membuat sesuatu, pertama, Anda harus membuat tipe AWS IoT benda. Anda dapat menggunakan tipe AWS IoT benda untuk menyimpan deskripsi dan informasi konfigurasi yang umum untuk semua hal yang terkait dengan jenis hal yang sama.

  1. Contoh perintah berikut menciptakan tipe bendakvs_example_camera:

    aws --profile default iot create-thing-type --thing-type-name kvs_example_camera > iot-thing-type.json
  2. Perintah contoh ini menciptakan kvs_example_camera_stream hal dari tipe kvs_example_camera benda:

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

Langkah 2: Buat peran IAM untuk diasumsikan oleh AWS IoT

Peran IAM mirip dengan pengguna, karena peran adalah AWS identitas dengan kebijakan izin yang menentukan apa yang dapat dan tidak dapat dilakukan identitas. AWS Peran dapat diasumsikan oleh siapa saja yang membutuhkannya. Saat Anda mengambil peran, itu memberi Anda kredensyal keamanan sementara untuk sesi peran Anda.

Peran yang Anda buat dalam langkah ini dapat diasumsikan oleh AWS IoT untuk mendapatkan kredensil sementara dari layanan token keamanan (STS) saat melakukan permintaan otorisasi kredensi dari klien. Dalam hal ini, klien adalah Kinesis Video Streams SDK yang berjalan di kamera Anda.

Lakukan langkah-langkah berikut untuk membuat dan mengonfigurasi peran IAM ini:

  1. Buat peran IAM.

    Contoh perintah berikut menciptakan peran IAM yang disebutKVSCameraCertificateBasedIAMRole:

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

    Anda dapat menggunakan kebijakan kepercayaan berikut JSON untuk: iam-policy-document.json

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "credentials.iot.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
  2. Selanjutnya, lampirkan kebijakan izin ke peran IAM yang sebelumnya Anda buat. Kebijakan izin ini memungkinkan kontrol akses selektif (subset operasi yang didukung) untuk sumber daya. AWS Dalam hal ini, AWS sumber daya adalah aliran video yang Anda ingin kamera Anda kirim data. Dengan kata lain, setelah semua langkah konfigurasi selesai, kamera ini akan dapat mengirim data hanya ke aliran video ini.

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

    Anda dapat menggunakan kebijakan IAM berikut JSON untuk.json: iam-permission-document

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

    Perhatikan bahwa kebijakan ini mengotorisasi tindakan yang ditentukan hanya pada aliran video (AWS resource) yang ditentukan oleh placeholder ($ {credentials-iot:}). ThingName Placeholder ini mengambil nilai atribut AWS IoT thing ThingName saat penyedia AWS IoT kredensional mengirimkan nama aliran video dalam permintaan.

  3. Selanjutnya, buat Alias Peran untuk peran IAM Anda. Alias peran adalah model data alternatif yang menunjuk ke peran IAM. Permintaan penyedia AWS IoT kredensyal harus menyertakan alias peran untuk menunjukkan peran IAM mana yang harus diambil untuk mendapatkan kredensyal sementara dari STS.

    Perintah contoh berikut menciptakan alias peran yang disebutKvsCameraIoTRoleAlias,

    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. Sekarang Anda dapat membuat kebijakan yang akan memungkinkan AWS IoT untuk mengambil peran dengan sertifikat (setelah dilampirkan) menggunakan alias peran.

    Perintah contoh berikut membuat kebijakan untuk AWS IoT dipanggilKvsCameraIoTPolicy.

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

    Anda dapat menggunakan perintah berikut untuk membuat dokumen JSON iot-policy-document .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

Langkah 3: Buat dan konfigurasikan sertifikat X.509

Komunikasi antara perangkat (aliran video Anda) dan AWS IoT dilindungi melalui penggunaan sertifikat X.509.

  1. Buat sertifikat yang harus Anda lampirkan kebijakan untuk AWS IoT yang sebelumnya Anda buat.

    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. Lampirkan kebijakan untuk AWS IoT (KvsCameraIoTPolicydibuat sebelumnya) ke sertifikat ini.

    aws --profile default iot attach-policy --policy-name KvsCameraIoTPolicy --target $(jq --raw-output '.certificateArn' certificate)
  3. Lampirkan AWS IoT thing (kvs_example_camera_stream) Anda ke sertifikat yang baru saja Anda buat:

    aws --profile default iot attach-thing-principal --thing-name kvs_example_camera_stream --principal $(jq --raw-output '.certificateArn' certificate)
  4. Untuk mengotorisasi permintaan melalui penyedia AWS IoT kredensyal, Anda memerlukan titik akhir AWS IoT kredensyal, yang unik untuk ID Anda. Akun AWS Anda dapat menggunakan perintah berikut untuk mendapatkan titik akhir AWS IoT kredensil.

    aws --profile default iot describe-endpoint --endpoint-type iot:CredentialProvider --output text > iot-credential-provider.txt
  5. Selain sertifikat X.509 yang dibuat sebelumnya, Anda juga harus memiliki sertifikat CA untuk membangun kepercayaan dengan layanan backend melalui TLS. Anda bisa mendapatkan sertifikat CA menggunakan perintah berikut:

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

Langkah 4: Uji AWS IoT kredensialnya dengan aliran video Kinesis Anda

Sekarang Anda dapat menguji AWS IoT kredensil yang telah Anda atur sejauh ini.

  1. Pertama, buat aliran video Kinesis yang ingin Anda uji konfigurasi ini.

    penting

    Buat streaming video dengan nama yang identik dengan nama AWS IoT benda yang Anda buat di langkah sebelumnya (kvs_example_camera_stream).

    aws kinesisvideo create-stream --data-retention-in-hours 24 --stream-name kvs_example_camera_stream
  2. Selanjutnya, hubungi penyedia AWS IoT kredensi untuk mendapatkan kredensil sementara:

    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
    catatan

    Anda dapat menggunakan perintah berikut untuk mendapatkanIOT_GET_CREDENTIAL_ENDPOINT:

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

    Output JSON berisi AccessKey, SecretKey, dan SessionToken, yang dapat Anda gunakan untuk mengakses Kinesis Video Streams.

  3. Untuk pengujian, Anda dapat menggunakan kredensyal ini untuk menjalankan API Kinesis Video DescribeStream Streams untuk aliran video sampel. kvs_example_camera_stream

    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

Langkah 5: Menyebarkan AWS IoT sertifikat dan kredensyal pada sistem file kamera Anda dan streaming data ke aliran video Anda

catatan

Langkah-langkah di bagian ini menjelaskan pengiriman media ke aliran video Kinesis dari kamera yang menggunakan. Menggunakan Pustaka Produser C ++

  1. Salin sertifikat X.509, kunci pribadi, dan sertifikat CA yang dihasilkan pada langkah sebelumnya ke sistem file kamera Anda. Tentukan jalur tempat file ini disimpan, nama alias peran, dan titik akhir AWS IoT kredensial untuk menjalankan gst-launch-1.0 perintah atau aplikasi sampel Anda.

  2. Contoh perintah berikut menggunakan otorisasi AWS IoT sertifikat untuk mengirim video ke 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 sebagai nama aliran

Untuk mewakili perangkat Anda (misalnya, kamera Anda) melalui AWS IoT sesuatu, tetapi mengotorisasi nama streaming yang berbeda, maka Anda dapat menggunakan AWS IoT certifiacateId atribut sebagai nama streaming dan memberikan izin Kinesis Video Streams pada streaming menggunakan. AWS IoT Langkah-langkah untuk mencapai ini mirip dengan yang diuraikan sebelumnya, dengan beberapa perubahan.

  • Ubah kebijakan izin ke peran IAM Anda (iam-permission-document.json) sebagai berikut:

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

    Sumber daya ARN menggunakan ID sertifikat sebagai pengganti untuk nama aliran. Izin IAM akan berfungsi saat Anda menggunakan ID sertifikat sebagai nama aliran. Dapatkan ID sertifikat dari sertifikat sehingga Anda dapat menggunakannya sebagai nama aliran dalam mendeskripsikan panggilan API aliran berikut.

    export CERTIFICATE_ID=`cat certificate | jq --raw-output '.certificateId'`
  • Verifikasi perubahan ini menggunakan perintah CLI Describe-stream Kinesis Video Streams:

    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}
  • Meneruskan CertificateId ke AWS IoT penyedia kredensyal dalam contoh aplikasi di Kinesis Video Streams C++ SDK:

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

    Perhatikan bahwa Anda meneruskan thingname ke penyedia AWS IoT kredensi. Anda dapat menggunakan getenv untuk meneruskan thingname ke aplikasi demo yang mirip dengan meneruskan atribut lainnya. AWS IoT Gunakan ID sertifikat sebagai nama aliran dalam parameter baris perintah saat Anda menjalankan aplikasi sampel.

Gunakan AWS IoT kredensi untuk melakukan streaming ke nama aliran hard-coded

Untuk mewakili perangkat Anda (misalnya, kamera Anda) melalui AWS IoT sesuatu, tetapi mengotorisasi streaming ke aliran video Amazon Kinesis tertentu, berikan izin Amazon Kinesis Video Streams pada streaming menggunakan. AWS IoT Prosesnya mirip dengan bagian sebelumnya, dengan beberapa perubahan.

Ubah kebijakan izin ke peran IAM Anda (iam-permission-document.json) sebagai berikut:

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

Salin sertifikat X.509, kunci pribadi, dan sertifikat CA yang dihasilkan pada langkah sebelumnya ke sistem file kamera Anda.

Tentukan jalur tempat file ini disimpan, nama alias peran, nama AWS IoT benda, dan titik akhir AWS IoT kredensial untuk menjalankan gst-launch-1.0 perintah atau aplikasi sampel Anda.

Perintah contoh berikut menggunakan otorisasi AWS IoT sertifikat untuk mengirim video ke Amazon 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="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"