Controlando o acesso aos recursos do Kinesis Video Streams usando AWS IoT - Amazon Kinesis Video Streams

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Controlando o acesso aos recursos do Kinesis Video Streams usando AWS IoT

Esta seção descreve como permitir que um dispositivo (por exemplo, uma câmera) envie dados de áudio e vídeo somente para um determinado stream de vídeo do Kinesis. Você pode fazer isso usando o AWS IoT provedor de credenciais e um AWS Identity and Access Management (IAM) papel.

Os dispositivos podem usar certificados X.509 para se conectar a AWS IoT usando TLS protocolos de autenticação mútua. Outros Serviços da AWS (por exemplo, Kinesis Video Streams) não oferecem suporte à autenticação baseada em certificados, mas podem ser chamados usando AWS credenciais em AWS Formato Signature Version 4. O algoritmo Signature Version 4 normalmente exige que o chamador tenha um ID de chave de acesso e uma chave de acesso secreta. AWS IoT tem um provedor de credenciais que permite que você use o certificado X.509 incorporado como a identidade exclusiva do dispositivo para autenticação AWS solicitações (por exemplo, solicitações para o Kinesis Video Streams). Isso elimina a necessidade de armazenar um ID de chave de acesso e uma chave de acesso secreta em seu dispositivo.

O provedor de credenciais autentica um cliente (nesse caso, um Kinesis Video SDK Streams que está sendo executado na câmera para a qual você deseja enviar dados para um stream de vídeo) usando um certificado X.509 e emite um token de segurança temporário com privilégios limitados. Você pode usar o token para assinar e autenticar qualquer AWS solicitação (nesse caso, uma chamada para o Kinesis Video Streams). Para obter mais informações, consulte Autorização de chamadas diretas para AWS Serviços.

Essa forma de autenticar as solicitações da sua câmera no Kinesis Video Streams exige que você crie e configure IAM uma função e anexe políticas IAM apropriadas à função para que o AWS IoT o provedor de credenciais pode assumir a função em seu nome.

Para obter mais informações sobre AWS IoT, veja AWS IoT Core Documentação. Para obter mais informações sobreIAM, consulte AWS Identity and Access Management (IAM).

AWS IoT ThingName como nome do stream

Etapa 1: criar um AWS IoT tipo de coisa e um AWS IoT objeto

Em AWS IoT, uma coisa é uma representação de um dispositivo específico ou entidade lógica. Nesse caso, um AWS IoT A coisa representa seu stream de vídeo do Kinesis que você deseja configurar para o controle de acesso em nível de recurso. Para criar uma coisa, primeiro, você deve criar uma AWS IoT tipo de coisa. Você pode usar: AWS IoT tipos de coisas para armazenar informações de descrição e configuração que são comuns a todas as coisas associadas ao mesmo tipo de coisa.

  1. O comando de exemplo a seguir cria um tipo de coisa kvs_example_camera:

    aws --profile default iot create-thing-type --thing-type-name kvs_example_camera > iot-thing-type.json
  2. Esse exemplo de comando cria kvs_example_camera_stream uma coisa do tipo kvs_example_camera coisa:

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

Etapa 2: Criar uma IAM função a ser assumida por AWS IoT

IAMas funções são semelhantes às dos usuários, pois uma função é uma AWS identidade com políticas de permissões que determinam o que a identidade pode ou não fazer em AWS. Uma função pode ser assumida por qualquer pessoa que precise dela. Quando você assume uma função, ela fornece credenciais de segurança temporárias para sua sessão de função.

A função que você cria nesta etapa pode ser assumida por AWS IoT para obter credenciais temporárias do serviço de token de segurança (STS) ao realizar solicitações de autorização de credenciais do cliente. Nesse caso, o cliente é o Kinesis SDK Video Streams que está sendo executado na sua câmera.

Execute as etapas a seguir para criar e configurar essa IAM função:

  1. Crie uma IAM função.

    O comando de exemplo a seguir cria uma IAM função chamadaKVSCameraCertificateBasedIAMRole:

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

    Você pode usar a seguinte política de confiança JSON paraiam-policy-document.json:

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "credentials.iot.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
  2. Em seguida, anexe uma política de permissões à IAM função que você criou anteriormente. Essa política de permissões permite o controle seletivo de acesso (um subconjunto de operações suportadas) para um AWS recurso. Neste caso, o AWS recurso é o stream de vídeo para o qual você deseja que sua câmera envie dados. Em outras palavras, quando todas as etapas de configuração forem concluídas, essa câmera poderá enviar dados somente para esse streaming de vídeo.

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

    Você pode usar a seguinte IAM política JSON para o 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:ThingName}/*" } ] }

    Observe que essa política autoriza as ações especificadas somente em um stream de vídeo (AWS resource) que é especificado pelo espaço reservado ($ {credentials-iot:}). ThingName Esse espaço reservado assume o valor do AWS IoT atributo de coisa ThingName quando o AWS IoT o provedor de credenciais envia o nome do stream de vídeo na solicitação.

  3. Em seguida, crie um alias de função para sua IAM função. O alias da função é um modelo de dados alternativo que aponta para a IAM função. Uma AWS IoT a solicitação do provedor de credenciais deve incluir um alias de função para indicar qual IAM função assumir para obter as credenciais temporárias do. STS

    O exemplo de comando a seguir cria um alias de função chamado 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. Agora você pode criar a política que habilitará AWS IoT para assumir a função com o certificado (depois de anexado) usando o alias da função.

    O exemplo de comando a seguir cria uma política para AWS IoT chamadoKvsCameraIoTPolicy.

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

    Você pode usar o comando a seguir para criar o 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

Etapa 3: Criar e configurar o certificado X.509

Comunicação entre um dispositivo (seu stream de vídeo) e AWS IoT é protegido pelo uso de certificados X.509.

  1. Crie o certificado ao qual você deve anexar a política para AWS IoT que você criou 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. Anexe a política para AWS IoT (KvsCameraIoTPolicycriado anteriormente) para este certificado.

    aws --profile default iot attach-policy --policy-name KvsCameraIoTPolicy --target $(jq --raw-output '.certificateArn' certificate)
  3. Anexe seu AWS IoT coisa (kvs_example_camera_stream) para o certificado que você acabou de criar:

    aws --profile default iot attach-thing-principal --thing-name kvs_example_camera_stream --principal $(jq --raw-output '.certificateArn' certificate)
  4. Para autorizar solicitações por meio do AWS IoT provedor de credenciais, você precisa do AWS IoT endpoint de credenciais, que é exclusivo para seu Conta da AWS IDENTIFICAÇÃO. Você pode usar o comando a seguir para obter o AWS IoT endpoint de credenciais.

    aws --profile default iot describe-endpoint --endpoint-type iot:CredentialProvider --output text > iot-credential-provider.txt
  5. Além do certificado X.509 criado anteriormente, você também deve ter um certificado CA para estabelecer confiança com o serviço de back-end. TLS Você pode obter o certificado CA usando o seguinte comando:

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

Etapa 4: testar o AWS IoT credenciais com seu stream de vídeo do Kinesis

Agora você pode testar o AWS IoT credenciais que você configurou até agora.

  1. Primeiro, crie um streaming de vídeo do Kinesis com o qual você deseja testar essa configuração.

    Importante

    Crie um stream de vídeo com um nome idêntico ao AWS IoT nome da coisa que você criou na etapa anterior (kvs_example_camera_stream).

    aws kinesisvideo create-stream --data-retention-in-hours 24 --stream-name kvs_example_camera_stream
  2. Em seguida, ligue para o AWS IoT provedor de credenciais para obter as credenciais temporárias:

    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

    Você pode usar o comando a seguir para obter oIOT_GET_CREDENTIAL_ENDPOINT:

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

    A saída JSON contém o accessKeysecretKey, e osessionToken, que você pode usar para acessar o Kinesis Video Streams.

  3. Para seu teste, você pode usar essas credenciais para invocar o Kinesis Video DescribeStream API Streams para o stream de vídeo de amostra. 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

Etapa 5: Implantação AWS IoT certificados e credenciais no sistema de arquivos da sua câmera e dados de streaming para seu stream de vídeo

nota

As etapas desta seção descrevem o envio de mídia para um stream de vídeo do Kinesis a partir de uma câmera que está usando o. Use a biblioteca de produtores de C++

  1. Copie o certificado X.509, a chave privada e o certificado CA gerados nas etapas anteriores para o sistema de arquivos da sua câmera. Especifique os caminhos para onde esses arquivos são armazenados, o nome do alias da função e o AWS IoT endpoint de credenciais para executar o gst-launch-1.0 comando ou seu aplicativo de amostra.

  2. O exemplo de comando a seguir usa AWS IoT autorização de certificado para enviar vídeo para o 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 nome do stream

Para representar seu dispositivo (por exemplo, sua câmera) por meio de um AWS IoT coisa, mas autorize um nome de fluxo diferente, então você pode usar o AWS IoT certificateIdatribua como nome do stream e forneça permissões ao Kinesis Video Streams no stream usando AWS IoT. As etapas para fazer isso são semelhantes às descritas anteriormente, com algumas alterações.

  • Modifique a política de permissões para sua IAM função (iam-permission-document.json) da seguinte forma:

    { "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

    O recurso ARN usa o ID do certificado como espaço reservado para o nome do stream. A IAM permissão funcionará quando você usar o ID do certificado como nome do stream. Obtenha o ID do certificado para que você possa usá-lo como nome do fluxo na descrição a seguir da API chamada de fluxo.

    export CERTIFICATE_ID=`cat certificate | jq --raw-output '.certificateId'`
  • Verifique essa alteração usando o comando describe-stream do Kinesis Video CLI 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}
  • Passe o certificateId para o AWS IoT provedor de credenciais no aplicativo de amostra no 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);
    nota

    Observe que você está passando o nome da coisa para o AWS IoT provedor de credenciais. Você pode usar getenv para passar o nome da coisa para o aplicativo de demonstração, semelhante a passar o outro AWS IoT atributos. Use o ID do certificado como o nome de streaming nos parâmetros da linha de comando quando estiver executando o aplicativo de amostra.

Use AWS IoT credenciais para transmitir para um nome de fluxo codificado

Para representar seu dispositivo (por exemplo, sua câmera) por meio de um AWS IoT coisa, mas autorize o streaming para um stream de vídeo específico do Amazon Kinesis, forneça permissões do Amazon Kinesis Video Streams no stream usando AWS IoT. O processo é semelhante às seções anteriores, com algumas alterações.

Modifique a política de permissões para sua IAM função (iam-permission-document.json) da seguinte forma:

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

Copie o certificado X.509, a chave privada e o certificado CA gerados nas etapas anteriores para o sistema de arquivos da sua câmera.

Especifique os caminhos para onde esses arquivos são armazenados, o nome do alias da função, o AWS IoT nome da coisa, e o AWS IoT endpoint de credenciais para executar o gst-launch-1.0 comando ou seu aplicativo de amostra.

O exemplo de comando a seguir usa AWS IoT autorização de certificado para enviar vídeo para o 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"