Controllo dell'accesso alle risorse Kinesis Video Streams tramite AWS IoT - Flusso di video Amazon Kinesis

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Controllo dell'accesso alle risorse Kinesis Video Streams tramite AWS IoT

Questa sezione descrive come consentire a un dispositivo (ad esempio una videocamera) di inviare dati audio e video solo a un particolare flusso video Kinesis. Puoi farlo utilizzando il provider di AWS IoT credenziali e un ruolo AWS Identity and Access Management (IAM).

I dispositivi possono utilizzare i certificati X.509 a cui connettersi AWS IoT utilizzando i protocolli di autenticazione reciproca TLS. Altri Servizi AWS (ad esempio, Kinesis Video Streams) non supportano l'autenticazione basata su certificati, ma possono essere AWS richiamati utilizzando AWS credenziali in formato Signature Version 4. L'algoritmo Signature Version 4 richiede in genere che il chiamante disponga di un ID di chiave di accesso e di una chiave di accesso segreta. AWS IoT dispone di un provider di credenziali che consente di utilizzare il certificato X.509 integrato come identità univoca del dispositivo per autenticare AWS le richieste (ad esempio, le richieste a Kinesis Video Streams). Ciò elimina la necessità di memorizzare un ID della chiave di accesso e una chiave di accesso segreta sul dispositivo.

Il provider di credenziali autentica un client (in questo caso, un Kinesis Video Streams SDK in esecuzione sulla videocamera a cui desideri inviare i dati a un flusso video) utilizzando un certificato X.509 ed emette un token di sicurezza temporaneo con privilegi limitati. Puoi utilizzare il token per firmare e autenticare qualsiasi AWS richiesta (in questo caso, una chiamata a Kinesis Video Streams). Per ulteriori informazioni, consulta Autorizzazione delle chiamate dirette ai servizi. AWS

Questo modo di autenticare le richieste della videocamera a Kinesis Video Streams richiede la creazione e la configurazione di un ruolo IAM e l'associazione di policy IAM appropriate al ruolo in modo che il fornitore di credenziali possa assumere AWS IoT il ruolo per tuo conto.

Per ulteriori informazioni in merito, consulta la documentazione. AWS IoTAWS IoT Core Per ulteriori informazioni su IAM, consulta AWS Identity and Access Management (IAM).

AWS IoT ThingName come nome dello stream

Fase 1: Creare qualsiasi tipo di AWS IoT oggetto e qualsiasi AWS IoT cosa

In AWS IoT, una cosa è una rappresentazione di un dispositivo o di un'entità logica specifici. In questo caso, qualsiasi AWS IoT elemento rappresenta il flusso video Kinesis per cui desideri configurare il controllo degli accessi a livello di risorsa. Per creare un oggetto, devi innanzitutto creare un tipo di oggetto. AWS IoT È possibile utilizzare i tipi di AWS IoT oggetto per memorizzare informazioni di descrizione e configurazione comuni a tutti gli elementi associati allo stesso tipo di oggetto.

  1. Il comando di esempio seguente crea un tipo di oggetto kvs_example_camera:

    aws --profile default iot create-thing-type --thing-type-name kvs_example_camera > iot-thing-type.json
  2. Questo comando di esempio crea l'kvs_example_camera_streamoggetto del tipo di kvs_example_camera oggetto:

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

Fase 2: Creare un ruolo IAM che venga assunto da AWS IoT

I ruoli IAM sono simili agli utenti, in quanto un ruolo è un' AWS identità con politiche di autorizzazione che determinano ciò che l'identità può e non può fare. AWS Un ruolo può essere assunto da chiunque ne abbia bisogno. Tuttavia, quando assumi un ruolo, vengono fornite le credenziali di sicurezza provvisorie per la sessione del ruolo.

Il ruolo creato in questa fase può essere assunto AWS IoT per ottenere credenziali temporanee dal servizio di token di sicurezza (STS) quando si eseguono richieste di autorizzazione delle credenziali dal client. In questo caso, il client è l'SDK Kinesis Video Streams in esecuzione sulla videocamera.

Eseguire la procedura seguente per creare e configurare questo ruolo IAM:

  1. Crea un ruolo IAM.

    Il comando di esempio seguente crea un ruolo IAM denominato KVSCameraCertificateBasedIAMRole:

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

    Puoi utilizzare il seguente JSON della policy di attendibilità per iam-policy-document.json:

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "credentials.iot.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
  2. Successivamente, allega una politica di autorizzazioni al ruolo IAM che hai creato in precedenza. Questa politica di autorizzazioni consente il controllo selettivo dell'accesso (un sottoinsieme di operazioni supportate) per una risorsa. AWS In questo caso, la AWS risorsa è il flusso video a cui desideri che la videocamera invii i dati. In altre parole, una volta completate tutte le fasi di configurazione, questa telecamera sarà in grado di inviare dati solo a questo flusso video.

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

    Puoi utilizzare la seguente policy IAM JSON per il iam-permission-document file .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}/*" } ] }

    Tieni presente che questa politica autorizza le azioni specificate solo su un flusso video (AWS risorsa) specificato dal segnaposto ($ {credentials-iot:}). ThingName Questo segnaposto assume il valore dell'attributo AWS IoT thing ThingName quando il provider di AWS IoT credenziali invia il nome del flusso video nella richiesta.

  3. Successivamente, crea un Role Alias per il tuo ruolo IAM. L'alias del ruolo è un modello di dati alternativo che punta al ruolo IAM. Una richiesta del fornitore di AWS IoT credenziali deve includere un alias di ruolo per indicare quale ruolo IAM assumere per ottenere le credenziali temporanee dall'STS.

    Il comando di esempio seguente crea un alias del ruolo denominato 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. Ora puoi creare la politica che consentirà di AWS IoT assumere un ruolo con il certificato (una volta allegato) utilizzando l'alias del ruolo.

    Il seguente comando di esempio crea una politica per AWS IoT calledKvsCameraIoTPolicy.

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

    È possibile utilizzare il comando seguente per creare il iot-policy-document documento.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

Fase 3: Creare e configurare il certificato X.509

La comunicazione tra un dispositivo (il tuo flusso video) AWS IoT è protetta tramite l'uso di certificati X.509.

  1. Create il certificato a cui allegare la politica creata AWS IoT in precedenza.

    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. Allega la politica per AWS IoT (KvsCameraIoTPolicycreata in precedenza) a questo certificato.

    aws --profile default iot attach-policy --policy-name KvsCameraIoTPolicy --target $(jq --raw-output '.certificateArn' certificate)
  3. Allega AWS IoT thing (kvs_example_camera_stream) al certificato che hai appena creato:

    aws --profile default iot attach-thing-principal --thing-name kvs_example_camera_stream --principal $(jq --raw-output '.certificateArn' certificate)
  4. Per autorizzare le richieste tramite il provider di AWS IoT credenziali, è necessario l'endpoint delle AWS IoT credenziali, che è univoco per il proprio ID. Account AWS È possibile utilizzare il seguente comando per ottenere l'endpoint delle credenziali. AWS IoT

    aws --profile default iot describe-endpoint --endpoint-type iot:CredentialProvider --output text > iot-credential-provider.txt
  5. Oltre al certificato X.509 creato in precedenza, è necessario disporre anche di un certificato CA per stabilire la fiducia con il servizio di backend tramite TLS. Puoi ottenere il certificato CA utilizzando il comando seguente:

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

Fase 4: Verifica le AWS IoT credenziali con il tuo stream video Kinesis

Ora puoi testare le AWS IoT credenziali che hai configurato finora.

  1. In primo luogo, creare un Kinesis Video Stream con cui testare questa configurazione.

    Importante

    Create uno stream video con un nome identico al nome dell' AWS IoT oggetto creato nel passaggio precedente (kvs_example_camera_stream).

    aws kinesisvideo create-stream --data-retention-in-hours 24 --stream-name kvs_example_camera_stream
  2. Quindi, chiamate il provider delle AWS IoT credenziali per ottenere le credenziali temporanee:

    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

    È possibile utilizzare il seguente comando per ottenere: IOT_GET_CREDENTIAL_ENDPOINT

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

    L'output JSON contiene AccessKey, SecretKey e SessionToken, che puoi utilizzare per accedere a Kinesis Video Streams.

  3. Per il test, puoi utilizzare queste credenziali per richiamare l'API Kinesis Video DescribeStream Streams per il flusso video di esempio. 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

Fase 5: Implementazione di AWS IoT certificati e credenziali sul file system della videocamera e streaming dei dati nel flusso video

Nota

I passaggi di questa sezione descrivono l'invio di file multimediali a un flusso video Kinesis da una videocamera che utilizza il. Utilizzo di C++ Producer Library

  1. Copia il certificato X.509, la chiave privata e il certificato CA generati nei passaggi precedenti nel file system della videocamera. Specificate i percorsi in cui sono archiviati questi file, il nome dell'alias del ruolo e l'endpoint delle AWS IoT credenziali per l'esecuzione del gst-launch-1.0 comando o dell'applicazione di esempio.

  2. Il seguente comando di esempio utilizza l'autorizzazione AWS IoT del certificato per inviare video 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 come nome dello stream

Per rappresentare il tuo dispositivo (ad esempio, la tua videocamera) attraverso un AWS IoT oggetto, ma autorizzare un nome di stream diverso, puoi utilizzare l' AWS IoT certifiacateIdattributo come nome dello stream e fornire le autorizzazioni Kinesis Video Streams sullo streaming che utilizza. AWS IoT I passaggi per eseguire questa operazione sono simili a quelli descritti in precedenza, con alcune modifiche.

  • Modifica la politica delle autorizzazioni in base al tuo ruolo IAM (iam-permission-document.json) come segue:

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

    L'ARN risorsa utilizza l'ID certificato come segnaposto per il nome del flusso. L'autorizzazione IAM funzionerà quando utilizzi l'ID del certificato come nome dello stream. Ottieni l'ID del certificato dal certificato in modo da poterlo utilizzare come nome dello stream nella seguente descrizione della chiamata API stream.

    export CERTIFICATE_ID=`cat certificate | jq --raw-output '.certificateId'`
  • Verificare questa modifica utilizzando il comando CLI describe-stream di 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}
  • Passa il CertificateID al provider di credenziali AWS IoT nell'applicazione di esempio nell'SDK Kinesis Video Streams C++:

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

    Nota che stai passando il thingname al provider delle credenziali. AWS IoT È possibile utilizzare getenv per passare il thingname all'applicazione demo in modo simile al passaggio degli altri attributi. AWS IoT Utilizzare l'ID certificato come nome del flusso nei parametri della riga di comando quando si esegue l'applicazione di esempio.

Usa AWS IoT le credenziali per eseguire lo streaming su un nome di stream codificato

Per rappresentare il tuo dispositivo (ad esempio, la tua videocamera) attraverso un AWS IoT oggetto, ma autorizzare lo streaming verso uno specifico flusso video di Amazon Kinesis, fornisci le autorizzazioni di Amazon Kinesis Video Streams sullo streaming che utilizza. AWS IoT Il processo è simile alle sezioni precedenti, con alcune modifiche.

Modifica la politica delle autorizzazioni in base al tuo ruolo IAM (iam-permission-document.json) come segue:

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

Copia il certificato X.509, la chiave privata e il certificato CA generati nei passaggi precedenti nel file system della fotocamera.

Specificate i percorsi in cui sono archiviati questi file, il nome dell'alias del ruolo, il nome dell' AWS IoT oggetto e l'endpoint delle AWS IoT credenziali per l'esecuzione del gst-launch-1.0 comando o dell'applicazione di esempio.

Il seguente comando di esempio utilizza l'autorizzazione del AWS IoT certificato per inviare video ad 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"