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 di Kinesis Video Streams utilizzando AWS IoT
Questa sezione descrive come abilitare un dispositivo (ad esempio una videocamera) a inviare dati audio e video solo a un particolare flusso video Kinesis. È possibile farlo utilizzando il fornitore di AWS IoT credenziali e un ruolo AWS Identity and Access Management (IAM).
I dispositivi possono utilizzare X.509 i certificati per 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 richiamati utilizzando le AWS credenziali nel formato Signature Version 4. AWS L'algoritmo Signature Version 4 richiede in genere che il chiamante disponga di un ID della chiave di accesso e di una chiave di accesso segreta. AWS IoT dispone di un provider di credenziali che consente di utilizzare il X.509 certificato 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 delle credenziali autentica un client (in questo caso, un Kinesis Video Streams SDK in esecuzione sulla telecamera a cui si desidera inviare i dati a un flusso video) utilizzando un X.509 certificato 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 su Kinesis Video Streams richiede la creazione e la configurazione di un ruolo IAM e l'aggiunta di politiche IAM appropriate al ruolo in modo che il fornitore di AWS IoT credenziali possa assumere il ruolo per conto dell'utente.
Per ulteriori informazioni, consulta la Documentazione. AWS IoTAWS IoT Core Per ulteriori informazioni su IAM, consulta AWS Identity and Access Management (IAM)
Argomenti
AWS IoT ThingName come nome dello stream
Argomenti
Passaggio 1: creare un AWS IoT tipo di cosa e un AWS IoT thing
In AWS IoT, una cosa è una rappresentazione di un dispositivo o di un'entità logica specifica. In questo caso, qualsiasi AWS IoT oggetto rappresenta il flusso video Kinesis e desiderate configurare il controllo degli accessi a livello di risorsa. Per creare un oggetto, è necessario 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 oggetti associati allo stesso tipo di oggetto.
-
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 -
Questo comando di esempio crea l'
kvs_example_camera_streamoggetto del tipo dikvs_example_cameraoggetto: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 verrà assunto da AWS IoT
I ruoli IAM sono simili agli utenti, in quanto un ruolo è un' AWS identità con politiche di autorizzazione che determinano cosa può e non può fare l'identità. 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) durante l'esecuzione delle 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:
-
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.jsonPuoi utilizzare il seguente JSON della policy di attendibilità per
iam-policy-document.json: -
Quindi, allega una policy di autorizzazioni al ruolo IAM che hai creato in precedenza. Questa politica di autorizzazioni consente il controllo selettivo degli accessi (un sottoinsieme delle 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:
iam-permission-document.jsonTieni presente che questa policy 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 thingThingNamequando il fornitore delle AWS IoT credenziali invia il nome del flusso video nella richiesta. -
Quindi, crea un alias di ruolo per il tuo ruolo IAM. L'alias del ruolo è un modello di dati alternativo che punta al ruolo IAM. Una richiesta di fornitore di AWS IoT credenziali deve includere un alias di ruolo per indicare quale ruolo IAM assumere per ottenere le credenziali temporanee dal 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 -
Ora puoi creare la policy che consentirà di AWS IoT assumere il ruolo con il certificato (una volta collegato) utilizzando l'alias di ruolo.
Il seguente comando di esempio crea una policy per call AWS IoT .
KvsCameraIoTPolicyaws --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.jsondocumento 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 streaming video) AWS IoT è protetta tramite l'uso di X.509 certificati.
-
Crea il certificato a cui devi allegare la policy AWS IoT che hai creato 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 -
Allega la policy per AWS IoT (
KvsCameraIoTPolicycreata in precedenza) a questo certificato.aws --profile default iot attach-policy --policy-name KvsCameraIoTPolicy --target $(jq --raw-output '.certificateArn' certificate) -
Allega la tua AWS IoT cosa (
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) -
Per autorizzare le richieste tramite il fornitore di AWS IoT credenziali, è necessario l'endpoint delle AWS IoT credenziali, che è univoco per il tuo ID. Account AWS È possibile utilizzare il comando seguente per ottenere l'endpoint delle credenziali. AWS IoT
aws --profile default iot describe-endpoint --endpoint-type iot:CredentialProvider --output text > iot-credential-provider.txt -
Oltre al X.509 certificato creato in precedenza, è necessario disporre anche di un certificato CA per stabilire l'attendibilità 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: Testare il AWS IoT credenziali con il tuo streaming video Kinesis
Ora puoi testare AWS IoT le credenziali che hai impostato finora.
-
In primo luogo, creare un Kinesis Video Stream con cui testare questa configurazione.
Importante
Crea uno streaming video con un nome identico al nome dell' AWS IoT oggetto che hai creato nel passaggio precedente (
kvs_example_camera_stream).aws kinesisvideo create-stream --data-retention-in-hours 24 --stream-name kvs_example_camera_stream -
Quindi, chiama il fornitore 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.jsonNota
Puoi usare il seguente comando per ottenere:
IOT_GET_CREDENTIAL_ENDPOINTIOT_GET_CREDENTIAL_ENDPOINT=`cat iot-credential-provider.txt`Il JSON di output contiene i
accessKeyvalorisecretKey, esessionToken, che potete usare per accedere a Kinesis Video Streams. -
Per il test, puoi utilizzare queste credenziali per richiamare l'API Kinesis Video Streams per il flusso
DescribeStreamvideo di esempio.kvs_example_camera_streamAWS_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: distribuzione AWS IoT certificati e credenziali sul file system della videocamera e streaming di 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. Usa la libreria di produzione C++
-
Copia il X.509 certificato, 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.0comando o dell'applicazione di esempio. -
Il seguente comando di esempio utilizza l'autorizzazione del AWS IoT certificato per inviare video a Kinesis Video Streams:
gst-launch-1.0 rtspsrc location=rtsp://YourCameraRtspUrlshort-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 dispositivo (ad esempio, la videocamera) tramite un AWS IoT oggetto, ma autorizzare un nome di streaming diverso, è possibile utilizzare l' AWS IoT certificateIdattributo come nome dello stream e fornire le autorizzazioni Kinesis Video Streams sullo stream utilizzando. 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: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 dello 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} -
Passate il certificateID al fornitore delle AWS IoT credenziali nell'applicazione di
esempio nell'SDK C++ di Kinesis Video Streams: 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 codice al fornitore delle credenziali.
thingnameAWS IoT Puoi usarlogetenvper passare il thingname all'applicazione demo in modo simile a quando passi gli altri AWS IoT attributi. Utilizzare l'ID certificato come nome del flusso nei parametri della riga di comando quando si esegue l'applicazione di esempio.
Utilizzo AWS IoT credenziali per lo streaming verso un nome di streaming codificato
Per rappresentare il tuo dispositivo (ad esempio, la tua videocamera) attraverso un AWS IoT oggetto, ma autorizzare lo streaming su uno specifico streaming video Amazon Kinesis, fornisci le autorizzazioni Amazon Kinesis Video Streams sullo streaming utilizzando. 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:
Copia il X.509 certificato, la chiave privata e il certificato CA generati nei passaggi precedenti nel file system della videocamera.
Specifica 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 AWS IoT del certificato per inviare video ad Amazon Kinesis Video Streams:
gst-launch-1.0 rtspsrc location=rtsp://YourCameraRtspUrlshort-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"