Autoriser les appels directs vers des AWS services à l'aide d'un fournisseur AWS IoT Core d'informations d'identification - AWS IoT Core

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 des AWS services à l'aide d'un fournisseur AWS IoT Core d'informations d'identification

Les appareils peuvent utiliser des certificats X.509 pour se connecter à AWS IoT Core l'aide des protocoles d'authentification mutuelle TLS. AWS Les autres services ne prennent pas en charge l'authentification par certificat, mais ils peuvent être appelés à l'aide AWS d'informations d'identification au format AWS 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 AWS authentifier les 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 quelle AWS demande. Pour authentifier vos AWS demandes, vous devez créer et configurer un rôle AWS Identity and Access Management (IAM) et associer les politiques IAM 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 IAM, consultez Gestion des identités et des accès pour AWS IoT.

AWS IoT exige que les appareils envoient l'extension SNI (Server Name Indication) au protocole TLS (Transport Layer Security) et fournissent l'adresse complète du point de terminaison sur le host_name terrain. Le champ host_name doit contenir le point de terminaison que vous appelez, et il doit être :

  • L’endpointAddress renvoyée par aws 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.

AWS IoT Core flux de travail du fournisseur d'informations d'identification
  1. L' AWS IoT Core appareil envoie une demande HTTPS au fournisseur d'informations d'identification pour obtenir un jeton de sécurité. La demande inclut le certificat X.509 de l'appareil pour l'authentification.

  2. Le fournisseur d'informations d'identification transmet la demande au module AWS IoT Core d'authentification et d'autorisation pour valider le certificat et vérifier que l'appareil est autorisé à demander le jeton de sécurité.

  3. Si le certificat est valide et est autorisé à demander un jeton de sécurité, le module AWS IoT Core d'authentification et d'autorisation indique la réussite. Dans le cas contraire, il envoie une exception à l'appareil.

  4. Une fois que le fournisseur d'informations d'identification a validé le certificat, il appelle AWS Security Token Service (AWS STS) pour endosser le rôle IAM que vous avez créé à son intention.

  5. AWS STS renvoie un jeton de sécurité temporaire à privilèges limités au fournisseur d'informations d'identification.

  6. Le fournisseur d'informations d'identification renvoie le jeton de sécurité à l'appareil.

  7. L'appareil utilise le jeton de sécurité pour signer une AWS demande avec AWS Signature Version 4.

  8. Le service demandé invoque IAM à valider la signature et à autoriser la demande par rapport aux stratégies d'accès attachées au rôle IAM que vous avez créé pour le fournisseur d'informations d'identification.

  9. Si IAM valide la signature avec succès et autorise la demande, celle-ci aboutit. 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é

  1. Configurez le rôle IAM que le fournisseur d'informations d'identification endosse 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 chaque 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 d'objet dans sa demande adressée à un service AWS , le fournisseur d'informations d'identification ajoute credentials-iot:ThingName et credentials-iot:ThingTypeName en tant que variables de contexte au jeton de sécurité. Le fournisseur d'informations d'identification fournit credentials-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 d'objet comme valeur de l'en-tête de la demande HTTP x-amzn-iot-thingname.

    Ces trois variables opèrent uniquement pour les stratégies IAM, et non pour les stratégies AWS IoT Core .

  2. Vérifiez 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 iam:GetRole des iam:PassRole autorisations et des autorisations à un AWS utilisateur. L'autorisation iam:GetRole autorise l'utilisateur à obtenir des informations sur le rôle que vous venez de créer. L'iam:PassRoleautorisation 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" } }
  3. Créez un alias de AWS IoT Core rôle. L'appareil qui va passer des appels directs aux AWS services doit savoir quel rôle ARN utiliser lors de la connexion AWS IoT Core. Coder en dur l'ARN de rôle n'est pas une bonne solution, car cela vous contraint de mettre à jour l'appareil chaque fois que l'ARN de rôle est modifié. Il vaut mieux utiliser l'API CreateRoleAlias pour créer un alias de rôle qui pointe vers l'ARN de rôle. Si l'ARN de rôle est modifié, il vous suffit de mettre à jour l'alias de rôle. Aucune modification n'est nécessaire sur l'appareil. Cette API accepte 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. ARN du rôle auquel l'alias de rôle fait référence.

    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).

    Note

    Le fournisseur AWS IoT Core d'identifiants 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 valeur credentialDurationSeconds doit être inférieure ou égale à la durée maximale de session du rôle IAM auquel l'alias de rôle fait référence.

    Pour plus d'informations sur cette API, consultez CreateRoleAlias.

  4. 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" } ] }
  5. Adressez une demande HTTPS au fournisseur d'informations d'identification pour obtenir un jeton de sécurité. Fournissez les informations suivantes :

    • Certificate : s'agissant d'une demande HTTP avec authentification mutuelle TLS, vous devez fournir le certificat et la clé privée à votre client lorsque vous faites 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 AWS IoT Core.

      Pour vous assurer que votre appareil communique avec lui AWS IoT Core (et non avec un service se faisant passer pour lui), consultez 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: nom d'objet que vous avez créé lors de l'enregistrement de votre AWS IoT Core objet. Celui-ci est transmis comme valeur de l'en-tête HTTP x-amzn-iot-thingname. Cette valeur n'est requise que si vous utilisez des attributs d'objet comme variables de stratégie dans AWS IoT Core les politiques IAM.

      Note

      Le nom ThingNameque vous fournissez x-amzn-iot-thingname doit correspondre au nom de la ressource d' AWS IoT objet affectée à un certificat. Si cela ne correspond pas, une erreur 403 est renvoyée.

    Exécutez la commande suivante dans le AWS CLI pour obtenir le point de terminaison du fournisseur d'informations d'identification pour votre Compte AWS. Pour plus d'informations sur cette API, consultez DescribeEndpoint.

    aws iot describe-endpoint --endpoint-type iot:CredentialProvider

    L'objet JSON ci-dessous est un exemple de sortie de la commande describe-endpoint. 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 adresser une demande HTTPS au fournisseur d'informations d'identification pour qu'il renvoie un jeton de sécurité. L'exemple de commande suivant utilise curl, mais vous pouvez utiliser n'importe quel client HTTP.

    curl --cert your certificate --key your device certificate key pair -H "x-amzn-iot-thingname: your thing name" --cacert AmazonRootCA1.pem https://your endpoint /role-aliases/your role alias/credentials

    Cette 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'objet JSON ci-dessous est un exemple de sortie de la commande curl.

    {"credentials":{"accessKeyId":"access key","secretAccessKey":"secret access key","sessionToken":"session token","expiration":"2018-01-18T09:18:06Z"}}

    Vous pouvez ensuite utiliser les sessionToken valeurs accessKeyIdsecretAccessKey, et pour signer les demandes adressées aux AWS services. Pour une end-to-end démonstration, consultez l'article Comment éliminer le besoin d'informations d' AWS identification codées en dur sur les appareils en utilisant le billet de blog du fournisseur AWS IoT d'informations d'identification sur le blog sur la AWS sécurité.