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 protocolli di autenticazione TLS reciproca. 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 SDK Streams 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 su Kinesis Video Streams richiede la creazione e la configurazione di IAM un ruolo e l'applicazione di politiche IAM appropriate al ruolo in modo che il fornitore delle 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 suIAM, vedere 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 IAM ruolo da assumere AWS IoT

IAMi ruoli sono simili agli utenti, in quanto un ruolo è un' AWS identità con politiche di autorizzazioni 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 questo passaggio può essere assunto AWS IoT per ottenere credenziali temporanee dal servizio token di sicurezza (STS) quando si eseguono richieste di autorizzazione delle credenziali dal client. In questo caso, il client è Kinesis SDK Video Streams in esecuzione sulla videocamera.

Esegui i seguenti passaggi per creare e configurare questo IAM ruolo:

  1. Crea un IAM ruolo.

    Il comando di esempio seguente crea un IAM ruolo chiamatoKVSCameraCertificateBasedIAMRole:

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

    È possibile utilizzare la seguente politica di attendibilità JSON periam-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 IAM ruolo 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 IAM politica 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. Quindi, crea un alias di ruolo per il tuo ruolo. IAM L'alias di ruolo è un modello di dati alternativo che rimanda al ruolo. IAM Una richiesta del fornitore di AWS IoT credenziali deve includere un alias di ruolo per indicare il IAM ruolo da assumere per ottenere le credenziali temporanee da. 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 è possibile 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 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

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 tramite il quale stabilire la fiducia con il servizio di backend. 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 il accessKeysecretKey, e ilsessionToken, che è possibile utilizzare per accedere a Kinesis Video Streams.

  3. Per il test, puoi utilizzare queste credenziali per richiamare Kinesis Video DescribeStream API 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. Usa la libreria Producer C++

  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 certificateIdattributo 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 IAM ruolo (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

    La risorsa ARN utilizza l'ID del certificato come segnaposto per il nome dello stream. L'IAMautorizzazione 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 API chiamata in streaming.

    export CERTIFICATE_ID=`cat certificate | jq --raw-output '.certificateId'`
  • Verifica questa modifica utilizzando il comando Kinesis Video CLI Streams describe-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 ${CERTIFICATE_ID}
  • Passalo certificateId al fornitore di AWS IoT credenziali nell'applicazione di esempio in 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

    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 IAM ruolo (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/*" } ] }

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