Autoriser les appels directs vers AWS services utilisant AWS IoT Core fournisseur 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 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) 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'identifiants.
  1. 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.

  2. 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é.

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

  4. 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éé.

  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 un AWS demande auprès de AWS Version de signature 4.

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

  9. 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é

  1. 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 et credentials-iot:ThingTypeName en tant que variables contextuelles 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 ne fonctionnent que pour IAM les politiques, et non AWS IoT Core politiques.

  2. 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 autorisations iam:GetRole 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 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.

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

    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'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 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 de blog du fournisseur d'informations d'identification sur le AWS Blog sur la sécurité.