View a markdown version of this page

Controlar el acceso a los recursos de Kinesis Video Streams mediante AWS IoT - Amazon Kinesis Video Streams

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Controlar el acceso a los recursos de Kinesis Video Streams mediante AWS IoT

En esta sección se describe cómo permitir que un dispositivo (por ejemplo, una cámara) envíe datos de audio y vídeo únicamente a una transmisión de vídeo de Kinesis en particular. Para ello, utilice el proveedor de AWS IoT credenciales y una función AWS Identity and Access Management (IAM).

Los dispositivos pueden usar X.509 certificados para conectarse AWS IoT mediante protocolos de autenticación mutua TLS. Otros Servicios de AWS (por ejemplo, Kinesis Video Streams) no admiten la autenticación basada en certificados, pero se pueden llamar con AWS credenciales en el formato AWS Signature Version 4. El algoritmo Signature Version 4 normalmente requiere que la persona que llama tenga una ID de clave de acceso y una clave de acceso secreta. AWS IoT cuenta con un proveedor de credenciales que le permite usar el X.509 certificado integrado como la identidad única del dispositivo para autenticar AWS las solicitudes (por ejemplo, las solicitudes a Kinesis Video Streams). Esto elimina la necesidad de almacenar una ID de clave de acceso y una clave de acceso secreta en su dispositivo.

El proveedor de credenciales autentica a un cliente (en este caso, un SDK de Kinesis Video Streams que se ejecuta en la cámara a la que quieres enviar datos a una transmisión de vídeo) mediante un X.509 certificado y emite un token de seguridad temporal con privilegios limitados. Puede usar el token para firmar y autenticar cualquier AWS solicitud (en este caso, una llamada a Kinesis Video Streams). Para obtener más información, consulte Autorización de llamadas directas a los servicios. AWS

Esta forma de autenticar las solicitudes de su cámara en Kinesis Video Streams requiere que cree y configure un rol de IAM y que adjunte las políticas de IAM adecuadas al rol para que el proveedor de AWS IoT credenciales pueda asumir el rol en su nombre.

Para obtener más información al respecto AWS IoT, consulte la documentación. AWS IoT Core Para obtener más información acerca del uso de (IAM), consulte AWS Identity and Access Management (IAM).

AWS IoT ThingName como nombre de transmisión

Paso 1: Crea un AWS IoT tipo de cosa y un AWS IoT thing

En AWS IoT, una cosa es una representación de un dispositivo o entidad lógica específicos. En este caso, una AWS IoT cosa representa la transmisión de vídeo de Kinesis en la que desea configurar el control de acceso a nivel de recursos. Para crear una cosa, primero debe crear un AWS IoT tipo de cosa. Puedes usar tipos de AWS IoT cosas para almacenar información de descripción y configuración que sea común a todas las cosas asociadas al mismo tipo de cosa.

  1. El siguiente comando de ejemplo crea un tipo de objeto kvs_example_camera:

    aws --profile default iot create-thing-type --thing-type-name kvs_example_camera > iot-thing-type.json
  2. Este comando de ejemplo crea la kvs_example_camera_stream cosa del tipo de kvs_example_camera cosa:

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

Paso 2: Cree un rol de IAM que asumirá AWS IoT

Los roles de IAM son similares a los de los usuarios, en el sentido de que un rol es una AWS identidad con políticas de permisos que determinan lo que la identidad puede y no puede hacer. AWS Cualquier persona que lo necesite puede asumir un rol. Cuando se asume un rol, este proporciona credenciales de seguridad temporales para la sesión del rol.

La función que cree en este paso puede asumirse obteniendo AWS IoT credenciales temporales del servicio de tokens de seguridad (STS) al realizar las solicitudes de autorización de credenciales del cliente. En este caso, el cliente es el SDK de Kinesis Video Streams que se ejecuta en su cámara.

Realice los siguientes pasos para crear y configurar este rol de IAM:

  1. Crear un rol de IAM.

    El siguiente comando de ejemplo crea un rol de IAM denominado KVSCameraCertificateBasedIAMRole:

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

    Puede utilizar el siguiente JSON de política de confianza para iam-policy-document.json:

    JSON
    { "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "credentials.iot.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
  2. A continuación, adjunte una política de permisos al rol de IAM que creó anteriormente. Esta política de permisos permite el control de acceso selectivo (un subconjunto de operaciones admitidas) a un AWS recurso. En este caso, el AWS recurso es la transmisión de vídeo a la que quieres que envíe tu cámara datos. En otras palabras, una vez completados todos los pasos de configuración, esta cámara podrá enviar datos únicamente a esta secuencia de vídeo.

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

    Puedes usar el siguiente JSON de la política de IAM para: 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}/*" } ] }

    Ten en cuenta que esta política autoriza las acciones especificadas solo en una transmisión de vídeo (AWS recurso) especificada por el marcador de posición. (${credentials-iot:ThingName}) Este marcador de posición toma el valor del atributo AWS IoT thing ThingName cuando el proveedor de AWS IoT credenciales envía el nombre de la transmisión de vídeo en la solicitud.

  3. A continuación, cree un alias de rol para su rol de IAM. El alias de rol es un modelo de datos alternativo que apunta al rol de IAM. La solicitud de un proveedor de AWS IoT credenciales debe incluir un alias de rol para indicar qué rol de IAM se debe asumir para obtener las credenciales temporales del STS.

    El siguiente comando de ejemplo crea un alias de rol denominado 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. Ahora puede crear la política que le permitirá AWS IoT asumir la función con el certificado (una vez adjuntado) utilizando el alias de la función.

    El siguiente comando de ejemplo crea una política para los AWS IoT llamadosKvsCameraIoTPolicy.

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

    Puedes usar el siguiente comando para crear el iot-policy-document.json documento 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

Paso 3: Crear y configurar el X.509 certificado

La comunicación entre un dispositivo (tu transmisión de vídeo) AWS IoT está protegida mediante el uso de X.509 certificados.

  1. Cree el certificado al que debe adjuntar la política AWS IoT que creó anteriormente.

    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. Adjunte la política para AWS IoT (KvsCameraIoTPolicycreada anteriormente) a este certificado.

    aws --profile default iot attach-policy --policy-name KvsCameraIoTPolicy --target $(jq --raw-output '.certificateArn' certificate)
  3. Adjunta tu AWS IoT cosa (kvs_example_camera_stream) al certificado que acabas de crear:

    aws --profile default iot attach-thing-principal --thing-name kvs_example_camera_stream --principal $(jq --raw-output '.certificateArn' certificate)
  4. Para autorizar las solicitudes a través del proveedor de AWS IoT credenciales, necesitas el punto final de AWS IoT las credenciales, que es exclusivo de tu Cuenta de AWS ID. Puedes usar el siguiente comando para obtener el punto final de las AWS IoT credenciales.

    aws --profile default iot describe-endpoint --endpoint-type iot:CredentialProvider --output text > iot-credential-provider.txt
  5. Además del X.509 certificado creado anteriormente, también debes tener un certificado de CA para establecer la confianza en el servicio de backend a través de TLS. Puede obtener el certificado de CA utilizando el siguiente comando:

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

Paso 4: Pruebe el AWS IoT credenciales con su transmisión de vídeo de Kinesis

Ahora puede probar las AWS IoT credenciales que ha configurado hasta ahora.

  1. En primer lugar, cree una secuencia de vídeo de Kinesis con la que desee probar esta configuración.

    importante

    Crea una transmisión de vídeo con un nombre idéntico al nombre de la AWS IoT cosa que creaste en el paso anterior (kvs_example_camera_stream).

    aws kinesisvideo create-stream --data-retention-in-hours 24 --stream-name kvs_example_camera_stream
  2. A continuación, llama al proveedor de AWS IoT credenciales para obtener las credenciales temporales:

    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
    nota

    Puede usar el siguiente comando para obtenerIOT_GET_CREDENTIAL_ENDPOINT:

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

    El JSON de salida contiene el accessKeysecretKey, y elsessionToken, que puede usar para acceder a las transmisiones de video de Kinesis.

  3. Para la prueba, puede usar estas credenciales para invocar la DescribeStream API de Kinesis Video Streams para la transmisión de vídeo de muestrakvs_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

Paso 5: Implementación AWS IoT certificados y credenciales en el sistema de archivos de la cámara y transmisión de datos a la transmisión de vídeo

nota

Los pasos de esta sección describen el envío de contenido multimedia a una transmisión de vídeo de Kinesis desde una cámara que utiliza elUsa la biblioteca de productores de C++.

  1. Copie el X.509 certificado, la clave privada y el certificado de CA generados en los pasos anteriores al sistema de archivos de la cámara. Especifique las rutas en las que se almacenan estos archivos, el nombre del alias del rol y el punto final de AWS IoT las credenciales para ejecutar el gst-launch-1.0 comando o la aplicación de muestra.

  2. El siguiente comando de ejemplo usa la autorización de AWS IoT certificados para enviar vídeos a 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 como nombre de transmisión

Para representar su dispositivo (por ejemplo, su cámara) a través de una AWS IoT cosa, pero autorizar un nombre de transmisión diferente, puede usar el AWS IoT certificateId atributo como su nombre de transmisión y conceder permisos a Kinesis Video Streams sobre la transmisión que utiliza AWS IoT. Los pasos para lograrlo son similares a los descritos anteriormente, con algunos cambios.

  • Modifique la política de permisos para su rol de IAM (iam-permission-document.json) de la siguiente manera:

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

    El ARN del recurso utiliza un ID de certificado como marcador de posición del nombre de secuencia. El permiso de IAM funcionará cuando utilices el ID del certificado como nombre de la transmisión. Obtén el identificador del certificado para poder usarlo como nombre de transmisión en la siguiente llamada a la API de transmisión que se describe a continuación.

    export CERTIFICATE_ID=`cat certificate | jq --raw-output '.certificateId'`
  • Verifique este cambio utilizando el comando describe-stream de Kinesis Video Streams en la 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}
  • Pase el certificateID al proveedor de AWS IoT credenciales de la aplicación de ejemplo del SDK de C++ de Kinesis Video Streams:

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

    Tenga en cuenta que lo está pasando al proveedor de credenciales. thingname AWS IoT Puedes usarlo getenv para pasar el nombre de la cosa a la aplicación de demostración de forma similar a como pasaste los demás AWS IoT atributos. Utilice el ID de certificado como nombre de secuencia en los parámetros de la línea de comandos cuando ejecute la aplicación de ejemplo.

Uso AWS IoT credenciales para transmitir a un nombre de transmisión codificado

Para representar su dispositivo (por ejemplo, su cámara) a través de AWS IoT algo, pero autorizar la transmisión a una transmisión de vídeo de Amazon Kinesis específica, proporcione permisos de Amazon Kinesis Video Streams sobre la transmisión mediante. AWS IoT El proceso es similar al de las secciones anteriores, con algunos cambios.

Modifique la política de permisos de su rol de IAM (iam-permission-document.json) de la siguiente manera:

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

Copie el X.509 certificado, la clave privada y el certificado de CA generados en los pasos anteriores al sistema de archivos de la cámara.

Especifique las rutas en las que se almacenan estos archivos, el nombre del alias del rol, el nombre de la AWS IoT cosa y el punto final de AWS IoT las credenciales para ejecutar el gst-launch-1.0 comando o la aplicación de muestra.

El siguiente comando de ejemplo utiliza una autorización AWS IoT certificada para enviar vídeos a 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"