Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
Autoriser les appels directs vers AWS services utilisant AWS IoT Core fournisseur d'informations d'identification
Les appareils peuvent utiliser des certificats X.509 pour se connecter à AWS IoT Core en utilisant TLS des protocoles d'authentification mutuelle. Autre AWS les services ne prennent pas en charge l'authentification basée sur des certificats, mais ils peuvent être appelés à l'aide de AWS informations d'identification dans AWS Format de signature version 4. L'algorithme Signature Version 4 exige normalement que l'appelant dispose d'un identifiant de clé d'accès et d'une clé d'accès secrète. AWS IoT Core dispose d'un fournisseur d'informations d'identification qui vous permet d'utiliser le certificat X.509 intégré comme identité unique de l'appareil pour vous authentifier AWS demandes. Ainsi, vous n'avez plus besoin de stocker un ID de clé d'accès et une clé d'accès secrète sur votre appareil.
Le fournisseur d'informations d'identification authentifie un mandataire en utilisant un certificat X.509 et émet un jeton de sécurité temporaire à privilèges limités. Le jeton peut être utilisé pour signer et authentifier n'importe quel AWS demande. Cette façon d'authentifier votre AWS les demandes vous obligent à créer et à configurer un AWS Identity and Access Management (IAM) et associez IAM les politiques appropriées au rôle afin que le fournisseur d'informations d'identification puisse assumer le rôle en votre nom. Pour plus d'informations sur AWS IoT Core etIAM, voyezGestion des identités et des accès pour AWS IoT.
AWS IoT exige que les appareils envoient l'extension Server Name Indication (SNI)host_name
sur le terrain. Le champ host_name
doit contenir le point de terminaison que vous appelez, et il doit être :
-
L’
endpointAddress
renvoyée paraws iot describe-endpoint
.--endpoint-type iot:CredentialProvider
Les connexions tentées par des appareils sans la valeur host_name
correcte échoueront.
Le schéma suivant illustre le flux de travail du fournisseur d'informations d'identification.
-
Le AWS IoT Core l'appareil HTTPS demande un jeton de sécurité au fournisseur d'informations d'identification. La demande inclut le certificat X.509 de l'appareil pour l'authentification.
-
Le fournisseur d'informations d'identification transmet la demande au AWS IoT Core module d'authentification et d'autorisation pour valider le certificat et vérifier que l'appareil est autorisé à demander le jeton de sécurité.
-
Si le certificat est valide et autorisé à demander un jeton de sécurité, le AWS IoT Core le module d'authentification et d'autorisation renvoie un message de réussite. Dans le cas contraire, il envoie une exception à l'appareil.
-
Après avoir validé le certificat avec succès, le fournisseur d'informations d'identification invoque le AWS Security Token Service (AWS STS) pour assumer le IAM rôle que vous lui avez créé.
-
AWS STS renvoie un jeton de sécurité temporaire à privilèges limités au fournisseur d'informations d'identification.
-
Le fournisseur d'informations d'identification renvoie le jeton de sécurité à l'appareil.
-
L'appareil utilise le jeton de sécurité pour signer un AWS demande auprès de AWS Version de signature 4.
-
Le service demandé est invoqué IAM pour valider la signature et autoriser la demande conformément aux politiques d'accès associées au IAM rôle que vous avez créé pour le fournisseur d'informations d'identification.
-
Si la IAM signature est validée avec succès et autorise la demande, celle-ci est acceptée. Sinon, IAM envoie une exception.
La section suivante explique comment utiliser un certificat pour obtenir un jeton de sécurité. Elle est rédigée en partant du principe que vous avez déjà enregistré un appareil et créé, puis activé votre propre certificat pour celui-ci.
Comment utiliser un certificat pour obtenir un jeton de sécurité
-
Configurez le IAM rôle que le fournisseur d'informations d'identification assume au nom de votre appareil. Attachez la stratégie d'approbation suivante au rôle.
{ "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Principal": {"Service": "credentials.iot.amazonaws.com"}, "Action": "sts:AssumeRole" } }
Pour chacun AWS service que vous souhaitez appeler, associez une politique d'accès au rôle. Le fournisseur d'informations d'identification prend en charge les variables de stratégie suivantes :
-
credentials-iot:ThingName
-
credentials-iot:ThingTypeName
-
credentials-iot:AwsCertificateId
Lorsque l'appareil fournit le nom de l'objet dans sa demande à un AWS service, le fournisseur d'informations d'identification ajoute
credentials-iot:ThingName
etcredentials-iot:ThingTypeName
en tant que variables contextuelles au jeton de sécurité. Le fournisseur d'informations d'identification fournitcredentials-iot:AwsCertificateId
en tant que variable de contexte, même si l'appareil ne fournit pas le nom d'objet dans la demande. Vous transmettez le nom de l'objet comme valeur de l'en-tête dex-amzn-iot-thingname
HTTP demande.Ces trois variables ne fonctionnent que pour IAM les politiques, et non AWS IoT Core politiques.
-
-
Assurez-vous que l'utilisateur qui effectue l'étape suivante (création d'un alias de rôle) est autorisé à transmettre le rôle nouvellement créé à AWS IoT Core. La politique suivante accorde à la fois des
iam:PassRole
autorisationsiam:GetRole
et des autorisations à un AWS utilisateur. L'autorisationiam:GetRole
autorise l'utilisateur à obtenir des informations sur le rôle que vous venez de créer. L'iam:PassRole
autorisation permet à l'utilisateur de transmettre le rôle à un autre AWS service.{ "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Action": [ "iam:GetRole", "iam:PassRole" ], "Resource": "arn:aws:iam::
your Compte AWS id
:role/your role name
" } } -
Créez un AWS IoT Core alias de rôle. L'appareil qui va passer des appels directs à AWS les services doivent savoir quel rôle ARN utiliser lors de la connexion à AWS IoT Core. Le codage en dur du rôle n'ARNest pas une bonne solution car il vous oblige à mettre à jour l'appareil chaque fois que le rôle ARN change. Une meilleure solution consiste à utiliser le
CreateRoleAlias
API pour créer un alias de rôle pointant vers le rôleARN. Si le rôle ARN change, il vous suffit de mettre à jour l'alias du rôle. Aucune modification n'est nécessaire sur l'appareil. Cela API prend les paramètres suivants :roleAlias
-
Obligatoire. Chaîne arbitraire qui identifie l'alias de rôle. Elle fait office de clé primaire dans le modèle de données d'alias de rôle. Elle contient entre 1 et 128 caractères et doit se composer uniquement de caractères alphanumériques et de symboles =, @ et -. Les caractères alphabétiques majuscules et minuscules sont autorisés.
roleArn
-
Obligatoire. Le ARN rôle auquel fait référence l'alias de rôle.
credentialDurationSeconds
-
Facultatif. Durée de validité (en secondes) des informations d'identification. La valeur minimale est de 900 secondes (15 minutes). La valeur maximale est de 43 200 secondes (12 heures). La valeur par défaut est de 3 600 secondes (1 heure).
Important
Le AWS IoT Core Le fournisseur d'informations d'identification peut délivrer un identifiant dont la durée de vie maximale est de 43 200 secondes (12 heures). Le fait que les informations d'identification soient valides jusqu'à 12 heures peut contribuer à réduire le nombre d'appels au fournisseur d'informations d'identification en mettant les informations d'identification en cache plus longtemps.
La
credentialDurationSeconds
valeur doit être inférieure ou égale à la durée maximale de session du IAM rôle référencé par l'alias de rôle. Pour plus d'informations, consultez Modifier la durée maximale de session d'un rôle (AWS API) à partir du AWS Guide de l'utilisateur d'Identity and Access Management.
Pour plus d'informations à ce sujetAPI, consultez CreateRoleAlias.
-
Attachez une stratégie au certificat de l'appareil. La stratégie attachée au certificat de l'appareil doit accorder à l'appareil l'autorisation d'assumer le rôle. Pour ce faire, vous devez accorder une autorisation à l'alias de rôle pour l'action
iot:AssumeRoleWithCertificate
, comme dans l'exemple suivant.{ "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Action":"iot:AssumeRoleWithCertificate", "Resource":"arn:aws:iot:your region:your_aws_account_id:rolealias/your role alias" } ] }
-
Faites une HTTPS demande au fournisseur d'informations d'identification pour obtenir un jeton de sécurité. Fournissez les informations suivantes :
-
Certificat : comme il s'agit d'une HTTP demande d'authentification TLS mutuelle, vous devez fournir le certificat et la clé privée à votre client lors de la demande. Utilisez le même certificat et la même clé privée que ceux que vous avez utilisés lors de l'enregistrement de votre certificat auprès de AWS IoT Core.
Pour vous assurer que votre appareil communique avec AWS IoT Core (et non un service se faisant passer pour lui), consultez la section Authentification du serveur, suivez les liens pour télécharger les certificats CA appropriés, puis copiez-les sur votre appareil.
-
RoleAlias: nom de l'alias de rôle que vous avez créé pour le fournisseur d'informations d'identification.
-
ThingName: Le nom de l'objet que vous avez créé lorsque vous avez enregistré votre AWS IoT Core chose. Ceci est transmis comme valeur de l'
x-amzn-iot-thingname
HTTPen-tête. Cette valeur n'est requise que si vous utilisez des attributs d'objets comme variables de politique dans AWS IoT Core ou IAM des politiques.Note
Le nom ThingNameque vous fournissez
x-amzn-iot-thingname
doit correspondre au nom du AWS IoT Ressource d'objet affectée à un certificat. Si cela ne correspond pas, une erreur 403 est renvoyée.
Exécutez la commande suivante dans AWS CLI pour obtenir le point de terminaison du fournisseur d'informations d'identification pour votre Compte AWS. Pour plus d'informations à ce sujetAPI, consultez DescribeEndpoint. Pour les points FIPS de terminaison compatibles, voir. AWS IoT Core- points de terminaison du fournisseur d'informations d'identification
aws iot describe-endpoint --endpoint-type iot:CredentialProvider
L'JSONobjet suivant est un exemple de sortie de la describe-endpoint commande. Il contient le paramètre
endpointAddress
que vous utilisez pour demander un jeton de sécurité.{ "endpointAddress": "
your_aws_account_specific_prefix
.credentials.iot.your region
.amazonaws.com" }Utilisez le point de terminaison pour HTTPS demander au fournisseur d'informations d'identification de renvoyer un jeton de sécurité. L'exemple de commande suivant utilise
curl
, mais vous pouvez utiliser n'importe quel HTTP client.curl --cert
your certificate
--keyyour device certificate key pair
-H "x-amzn-iot-thingname:your thing name
" --cacert AmazonRootCA1.pem https://your endpoint
/role-aliases/your role alias
/credentialsCette commande renvoie un objet de jeton de sécurité qui contient les éléments
accessKeyId
,secretAccessKey
,sessionToken
, ainsi qu'un délai d'expiration. L'JSONobjet suivant est un exemple de sortie de lacurl
commande.{"credentials":{"accessKeyId":"
access key
","secretAccessKey":"secret access key
","sessionToken":"session token
","expiration":"2018-01-18T09:18:06Z"}}Vous pouvez ensuite utiliser les
sessionToken
valeursaccessKeyId
secretAccessKey
, et pour signer les demandes destinées à AWS services. Pour une end-to-end démonstration, voir Comment éliminer le besoin de codage en dur AWS Informations d'identification dans les appareils à l'aide du AWS IoT Article deblog du fournisseur d'informations d'identification sur le AWS Blog sur la sécurité. -