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 de protocoles d'authentification TLS mutuelle. 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 IAM 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 et IAM, consultez Gestion des identités et des accès pour AWS IoT.

AWS IoT exige que les appareils envoient l'extension Server Name Indication (SNI) au protocole Transport Layer Security (TLS) et fournissent l'adresse complète du point de terminaison 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 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 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.

  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. Après avoir validé le certificat, le fournisseur d'informations d'identification 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 pour 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 de l'objet comme valeur de l'en-tête de x-amzn-iot-thingname HTTP demande.

    Ces trois variables fonctionnent 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 utiliser ARN pour se connecter 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 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 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 la section Modification de la durée maximale de session d'un rôle (AWS API) dans le guide de l'utilisateur d' AWS Identity and Access Management.

    Pour plus d'informations à ce sujetAPI, 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. Faites une HTTPS demande auprès du 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 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. Ceci est transmis en tant que valeur de l'x-amzn-iot-thingnameHTTPen-tête. Cette valeur n'est requise que si vous utilisez des attributs d'objets comme variables de stratégie dans AWS IoT Core nos IAM politiques.

      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 à 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 utilisecurl, mais vous pouvez utiliser n'importe quel HTTP client.

    curl --cert your certificate --key your private key -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'JSONobjet suivant est un exemple de sortie de la curl commande.

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