Control del 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.

Control del 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 concreta. Para ello, utilice el proveedor de AWS IoT credenciales y un rol AWS Identity and Access Management (IAM).

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

El proveedor de credenciales autentica un cliente (en este caso, un Kinesis Video SDK Streams que se esté ejecutando en la cámara y que desee enviar datos a una transmisión de vídeo) mediante un certificado X.509 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 Autorizar llamadas directas a los servicios. AWS

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

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

AWS IoT ThingName como nombre de transmisión

Paso 1: Crea cualquier tipo de AWS IoT cosa y cualquier AWS IoT cosa

En AWS IoT, una cosa es una representación de un dispositivo o entidad lógica específicos. En este caso, AWS IoT algo representa la transmisión de vídeo de Kinesis y quiere configurar el control de acceso a nivel de recursos. Para crear una cosa, primero debe crear un AWS IoT tipo de cosa. Puede usar los tipos de AWS IoT cosas para almacenar la información de descripción y configuración que es 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: Crea un IAM rol para que lo asuma AWS IoT

IAMlos roles 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 en él 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.

El rol que cree en este paso se puede utilizar AWS IoT para obtener credenciales temporales del servicio de token de seguridad (STS) al realizar solicitudes de autorización de credenciales desde el cliente. En este caso, el cliente es el Kinesis Video SDK Streams que se ejecuta en la cámara.

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

  1. Cree un IAM rol.

    El siguiente comando de ejemplo crea un IAM rol llamadoKVSCameraCertificateBasedIAMRole:

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

    Puede utilizar la siguiente política de confianza JSON paraiam-policy-document.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 IAM rol que creó anteriormente. Esta política de permisos permite el control de acceso selectivo (un subconjunto de operaciones compatibles) a un AWS recurso. En este caso, el AWS recurso es la transmisión de vídeo a la que desea que su cámara envíe 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 la siguiente IAM política JSON para el iam-permission-document archivo .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 únicamente 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 IAM rol. El alias del rol es un modelo de datos alternativo que apunta al IAM rol. La solicitud del proveedor de AWS IoT credenciales debe incluir un alias de rol para indicar qué IAM rol 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 el rol con el certificado (una vez que esté adjunto) utilizando el alias del rol.

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

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

    Puede usar el siguiente comando para crear el documento 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

Paso 3: Crear y configurar el certificado X.509

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

  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 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 certificado X.509 creado anteriormente, también debe tener un certificado de CA para establecer una relación de confianza con el servicio de backend. 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 las AWS IoT credenciales con la 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

    Cree una transmisión de vídeo con un nombre idéntico al nombre de la AWS IoT cosa que creó 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`

    La salida JSON contiene el accessKeysecretKey, y elsessionToken, que puede utilizar para acceder a Kinesis Video Streams.

  3. Para la prueba, puede utilizar estas credenciales para invocar Kinesis Video DescribeStream API Streams para la transmisión de vídeo de kvs_example_camera_stream muestra.

    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: implementar AWS IoT certificados y credenciales en el sistema de archivos de la cámara y transmitir los datos a la transmisión de vídeo

nota

En los pasos de esta sección se describe el envío de contenido multimedia a una transmisión de vídeo de Kinesis desde una cámara que utiliza el. Utilice la biblioteca de productores de C++

  1. Copie el certificado X.509, la clave privada y el certificado de CA generados en los pasos anteriores en el sistema de archivos de la cámara. Especifique las rutas en las que se almacenan estos archivos, el nombre del alias de la función 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 utiliza la autorización de AWS IoT un certificado para enviar vídeo 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 utilizar el AWS IoT certificateId atributo como nombre de la transmisión y proporcionar permisos a Kinesis Video Streams en la transmisión AWS IoT mediante. Los pasos para lograrlo son similares a los descritos anteriormente, con algunos cambios.

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

    { "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 recurso ARN usa el identificador del certificado como marcador de posición para el nombre de la transmisión. El IAM permiso funcionará cuando utilices el ID del certificado como nombre de la transmisión. Obtenga el ID del certificado del certificado para poder usarlo como nombre de transmisión en la siguiente descripción de la API llamada de transmisión.

    export CERTIFICATE_ID=`cat certificate | jq --raw-output '.certificateId'`
  • Compruebe este cambio con el comando CLI describe-stream de 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}
  • Páselo certificateId al proveedor de AWS IoT credenciales de la aplicación de ejemplo de Kinesis Video Streams SDK C++:

    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 está pasando el nombre de la cosa al proveedor de AWS IoT credenciales. Puede usar getenv para pasar el nombre de la cosa a la aplicación de demostración de forma similar a como se pasa con el resto de atributos. AWS IoT 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.

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

Para representar su dispositivo (por ejemplo, su cámara) a través de una AWS IoT cosa, pero autorizar la transmisión a una transmisión de vídeo específica de Amazon Kinesis, proporcione los permisos de Amazon Kinesis Video Streams en 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 IAM rol (iam-permission-document.json) de la siguiente manera:

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

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

Especifique las rutas en las que se almacenan estos archivos, el nombre del alias de la función, el nombre AWS IoT del objeto 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 la autorización de un AWS IoT certificado para enviar vídeo 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"