View a markdown version of this page

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 X.509 sertifikat untuk terhubung AWS IoT menggunakan protokol otentikasi bersama TLS. Lain Layanan AWS nya (misalnya, Kinesis Video Streams) tidak mendukung otentikasi berbasis sertifikat, tetapi dapat dipanggil menggunakan AWS kredenSIAL dalam format AWS Signature Version 4. Algoritma Signature Version 4 biasanya mengharuskan pemanggil untuk memiliki ID kunci akses dan kunci akses rahasia. AWS IoT memiliki penyedia kredenSIAL yang memungkinkan Anda menggunakan X.509 sertifikat bawaan sebagai identitas perangkat unik untuk mengotentikasi AWS permintaan (misalnya, permintaan ke Kinesis Video Streams). Ini menghilangkan kebutuhan untuk menyimpan ID kunci akses dan kunci akses rahasia di perangkat Anda.

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

Cara mengotentikasi permintaan kamera ke Kinesis Video Streams ini mengharuskan Anda membuat dan mengonfigurasi peran IAM dan melampirkan kebijakan IAM yang sesuai ke peran tersebut sehingga penyedia AWS IoT kredenSIAL dapat mengambil peran 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 AWS IoT jenis benda dan AWS IoT hal

Dalam AWS IoT, sesuatu adalah representasi dari perangkat tertentu atau entitas logis. Dalam hal ini, sesuatu AWS IoT 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. Perintah contoh berikut membuat 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 benda 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 Suatu peran dapat diasumsikan oleh siapa saja yang membutuhkannya. Saat Anda mengambil peran, itu memberi Anda kredentif keamanan sementara untuk sesi peran Anda.

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

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

  1. Buat peran IAM.

    Perintah contoh berikut membuat peran IAM yang disebut: KVSCameraCertificateBasedIAMRole

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

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

    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 Anda buat sebelumnya. Kebijakan izin ini memungkinkan kontrol akses selektif (subset operasi yang didukung) untuk AWS sumber daya. Dalam hal ini, AWS sumber daya adalah aliran video yang Anda inginkan untuk mengirim data kamera Anda. 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 JSON kebijakan IAM berikut untuk: iam-permission-document.json

    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}/*" } ] }

    Perhatikan bahwa kebijakan ini mengesahkan tindakan yang ditentukan hanya pada aliran video (AWS sumber daya) yang ditentukan oleh plac (${credentials-iot:ThingName}) eholder. Placeholder ini mengambil nilai atribut AWS IoT thing ThingName saat penyedia AWS IoT kredenSIAL mengirimkan nama aliran video dalam permintaan.

  3. Selanjutnya, buat Role Alias untuk peran IAM Anda. Alias peran adalah model data alternatif yang menunjuk ke peran IAM. Per AWS IoT mintaan penyedia kredensional harus menyertakan alias peran untuk menunjukkan peran IAM mana yang harus diambil untuk mendapatkan kredenSIAL sementara dari STS.

    Perintah contoh berikut membuat 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 dipang AWS IoT gilKvsCameraIoTPolicy.

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

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

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

  1. Buat sertifikat yang harus Anda lampirkan kebijakan 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 benda Anda (kvs_example_camera_stream) 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 kredenSIAL, Anda memerlukan titik akhir AWS IoT kredenSIAL, yang unik untuk Akun AWS ID Anda. Anda dapat menggunakan perintah berikut untuk mendapatkan titik akhir AWS IoT kredenSIAL.

    aws --profile default iot describe-endpoint --endpoint-type iot:CredentialProvider --output text > iot-credential-provider.txt
  5. Selain X.509 sertifikat 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 kredensi dengan aliran video Kinesis Anda

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

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

    penting

    Buat aliran video dengan nama yang identik dengan nama AWS IoT benda yang Anda buat pada 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 kredenSIAL untuk mendapatkan kredenSIAL 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`

    JSON keluaran berisiaccessKey,secretKey, dansessionToken, yang dapat Anda gunakan untuk mengakses Streams Video Kinesis.

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

    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 kredensional 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 Gunakan pustaka produser C++ menggunakan.

  1. Salin X.509 sertifikat, 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. Perintah contoh 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 aliran yang berbeda, maka Anda dapat menggunakan AWS IoT certificateId atribut sebagai nama streaming Anda dan memberikan izin Streaming Video Kinesis pada streaming menggunakan. AWS IoT Langkah-langkah untuk mencapai ini mirip dengan yang diuraikan sebelumnya, dengan beberapa perubahan.

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

    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}/*" } ] }
    catatan

    Sumber daya ARN menggunakan ID sertifikat sebagai placeholder 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 deskripsi panggilan API aliran berikut.

    export CERTIFICATE_ID=`cat certificate | jq --raw-output '.certificateId'`
  • Verifikasi perubahan ini menggunakan perintah 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}
  • Berikan CertificateID ke penyedia AWS IoT kredenSIAL dalam aplikasi sampel 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 kredensional. Anda dapat menggunakan getenv untuk meneruskan nama benda ke aplikasi demo 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 kredenSIAL untuk melakukan streaming ke nama aliran berkode keras

Untuk mewakili perangkat Anda (misalnya, kamera Anda) melalui AWS IoT sesuatu, tetapi mengizinkan 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 untuk peran IAM Anda (iam-permission-document.json) sebagai berikut:

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

Salin X.509 sertifikat, 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 benda, dan titik akhir AWS IoT kredenSIAL untuk menjalankan gst-launch-1.0 perintah atau aplikasi sampel Anda. AWS IoT

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"