Mise en service d'appareils qui ne disposent pas de certificats d'appareils à l'aide de la mise en service de flotte - 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.

Mise en service d'appareils qui ne disposent pas de certificats d'appareils à l'aide de la mise en service de flotte

En utilisant le provisionnement du AWS IoT parc, AWS IoT vous pouvez générer et délivrer en toute sécurité des certificats d'appareils et des clés privées à vos appareils lorsqu'ils se connectent AWS IoT pour la première fois. AWS IoT fournit des certificats clients signés par l'autorité de certification Amazon Root (CA).

Il existe deux façons d'utiliser la mise en service de flotte :

Allocation par revendication

Les appareils peuvent être fabriqués avec un certificat de revendication de mise en service et une clé privée (qui sont des informations d'identification à usage spécial) intégrés. Si ces certificats sont enregistrés AWS IoT, le service peut les échanger contre des certificats d'appareil uniques que l'appareil peut utiliser pour des opérations régulières. Le processus comprend les étapes suivantes :

Avant de livrer l'appareil
  1. Appelez CreateProvisioningTemplate pour créer un modèle de mise en service. Cette API renvoie un ARN de modèle. Pour de plus amples informations, veuillez consulter API MQTT de mise en service des appareils.

    Vous pouvez également créer un modèle de provisionnement de flotte dans la AWS IoT console.

    1. Dans le panneau de navigation, choisissez Connecter, puis Modèles de mise en service de flotte.

    2. Choisissez Créer un modèle et suivez les invites.

  2. Créez les certificats et les clés privées associées qui seront utilisés comme certificats de revendications de mise en service.

  3. Enregistrez ces certificats AWS IoT et associez-leur une politique IoT qui restreint l'utilisation des certificats. L'exemple suivant de stratégie IoT limite l'utilisation du certificat associé à cette stratégie aux appareils mis en service.

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": ["iot:Connect"], "Resource": "*" }, { "Effect": "Allow", "Action": ["iot:Publish","iot:Receive"], "Resource": [ "arn:aws:iot:aws-region:aws-account-id:topic/$aws/certificates/create/*", "arn:aws:iot:aws-region:aws-account-id:topic/$aws/provisioning-templates/templateName/provision/*" ] }, { "Effect": "Allow", "Action": "iot:Subscribe", "Resource": [ "arn:aws:iot:aws-region:aws-account-id:topicfilter/$aws/certificates/create/*", "arn:aws:iot:aws-region:aws-account-id:topicfilter/$aws/provisioning-templates/templateName/provision/*" ] } ] }
  4. Lorsque vous approvisionnez des appareils, autorisez le AWS IoT service à créer ou à mettre à jour des ressources IoT telles que des objets et des certificats dans votre compte. Pour ce faire, associez la politique AWSIoTThingsRegistration gérée à un rôle IAM (appelé rôle de provisionnement) qui fait confiance au principal du AWS IoT service.

  5. Fabriquez l'appareil avec le certificat de revendication de mise en service intégré de manière sécurisée.

L'appareil est maintenant prêt à être livré là où il sera installé pour être utilisé.

Important

Les clés privées des revendications de mise en service doivent être sécurisées à tout moment, y compris sur l'appareil. Nous vous recommandons d'utiliser AWS IoT CloudWatch des métriques et des journaux pour détecter les signes d'utilisation abusive. Si vous détectez une utilisation abusive, désactivez le certificat de revendication de mise en service afin qu’il ne puisse pas être utilisé pour la mise en service des appareils.

Pour initialiser l’appareil à utiliser
  1. L'appareil utilise le AWS IoT SDK pour appareils, kits de développement logiciel mobiles et AWS IoT client pour appareils pour se connecter et s'authentifier à AWS IoT l'aide du certificat de demande d'approvisionnement installé sur l'appareil.

    Note

    Pour des raisons de sécurité, le s articles certificateOwnershipToken retournés par CreateCertificateFromCsr et CreateKeysAndCertificate expire au bout d’une heure. RegisterThing doit être appelé avant l’expiration certificateOwnershipToken. Si le certificat créé par CreateCertificateFromCsr ou CreateKeysAndCertificate n’a pas été activé et n’a pas été attaché à une politique ou à un objet au moment où le jeton expire, le certificat est supprimé. Si le jeton expire, l’appareil peut appeler CreateCertificateFromCsr ou CreateKeysAndCertificate à nouveau pour générer un nouveau certificat.

  2. L'appareil obtient un certificat permanent et une clé privée en utilisant l'une de ces options. L'appareil utilisera le certificat et la clé pour toutes les futures authentifications avec AWS IoT.

    1. Appelez CreateKeysAndCertificatepour créer un nouveau certificat et une nouvelle clé privée à l'aide de l'autorité de AWS certification.

      Ou

    2. Appelez CreateCertificateFromCsr pour générer un certificat à partir d’une demande de signature de certificat qui conserve sa clé privée sécurisée.

  3. À partir de l'appareil, appelez RegisterThing pour enregistrer ce dernier auprès d' AWS IoT et créer des ressources cloud.

    Le service de mise en service de flotte utilise un modèle de mise en service pour définir et créer des ressources en cloud telles que des objets IoT. Le modèle peut spécifier les attributs et les groupes auxquels appartient l’objet. Les groupes d’objets doivent exister avant que le nouvel objet puisse y être ajouté.

  4. Après avoir enregistré le certificat permanent sur l’appareil, celui-ci doit se déconnecter de la session qu'il a ouverte avec le certificat de revendication de mise en service et se reconnecter à l'aide du certificat permanent.

L'appareil est maintenant prêt à communiquer normalement avec AWS IoT.

Allocation par utilisateur approuvé

Dans de nombreux cas, un appareil se connecte AWS IoT pour la première fois lorsqu'un utilisateur de confiance, tel qu'un utilisateur final ou un technicien d'installation, utilise une application mobile pour configurer l'appareil dans son emplacement de déploiement.

Important

Vous devez gérer l'accès et l'autorisation de l'utilisateur approuvé pour effectuer cette procédure. Une façon de le faire consiste à fournir et à gérer un compte pour l’utilisateur approuvé qui l’authentifie et lui accorde l’accès aux fonctionnalités AWS IoT et aux opérations d’API requises pour effectuer cette procédure.

Avant de livrer l'appareil
  1. Appelez CreateProvisioningTemplate pour créer un modèle de mise en service et renvoyer son templateArn et templateName.

  2. Créez un rôle IAM qui permettra à un utilisateur de confiance de lancer le processus de mise en service. Le modèle de mise en service permet uniquement à cet utilisateur de mettre en service un appareil. Par exemple :

    { "Effect": "Allow", "Action": [ "iot:CreateProvisioningClaim" ], "Resource": [ "arn:aws:iot:aws-region:aws-account-id:provisioningtemplate/templateName" ] }
  3. Lorsque vous approvisionnez des appareils, autorisez le AWS IoT service à créer ou à mettre à jour des ressources IoT, telles que des objets et des certificats dans votre compte. Pour ce faire, vous devez associer la politique AWSIoTThingsRegistration gérée à un rôle IAM (appelé rôle de provisionnement) qui fait confiance au principal du AWS IoT service.

  4. Fournissez les moyens d'identifier vos utilisateurs de confiance, par exemple en leur fournissant un compte capable de les authentifier et d'autoriser leurs interactions avec les opérations d' AWS API nécessaires à l'enregistrement de leurs appareils.

Pour initialiser l’appareil à utiliser
  1. Un utilisateur de confiance se connecte à votre application mobile ou service web de mise en service.

  2. L’application mobile ou l’application web utilise le rôle IAM et appelle CreateProvisioningClaim pour obtenir un certificat de revendication de mise en service temporaire auprès AWS IoT.

    Note

    Pour des raisons de sécurité, le certificat de demande de mise en service temporaire que CreateProvisioningClaim renvoie expire au bout de cinq minutes. Les étapes suivantes doivent renvoyer un certificat valide avant l'expiration du certificat de revendication de mise en service temporaire. Les certificats de revendication de mise en service temporaire n'apparaissent pas dans la liste des certificats de votre compte.

  3. L'application mobile ou l'application web fournit le certificat de revendication de mise en service à l'appareil ainsi que toutes les informations de configuration nécessaires, notamment les informations d'identification Wi-Fi.

  4. L'appareil utilise le certificat de revendication de mise en service temporaire pour se connecter à AWS IoT à l'aide du AWS IoT SDK pour appareils, kits de développement logiciel mobiles et AWS IoT client pour appareils.

  5. L'appareil obtient un certificat permanent et une clé privée en utilisant l'une de ces options dans les cinq minutes suivant la connexion au AWS IoT certificat de demande de provisionnement temporaire. L'appareil utilisera le certificat et la clé renvoyés par ces options pour toute future authentification AWS IoT.

    1. Appelez CreateKeysAndCertificatepour créer un nouveau certificat et une nouvelle clé privée à l'aide de l'autorité de AWS certification.

      Ou

    2. Appelez CreateCertificateFromCsr pour générer un certificat à partir d’une demande de signature de certificat qui conserve sa clé privée sécurisée.

    Note

    N'oubliez pas CreateKeysAndCertificateou CreateCertificateFromCsrdevez renvoyer un certificat valide dans les cinq minutes suivant la connexion AWS IoT au certificat de demande de provisionnement temporaire.

  6. L'appareil appelle RegisterThingpour enregistrer l'appareil auprès de celui-ci AWS IoT et créer des ressources cloud.

    La service de mise en service de flotte utilise un modèle de mise en service pour définir et créer des ressources en cloud telles que des objets IoT. Le modèle peut spécifier les attributs et les groupes auxquels appartient l’objet. Les groupes d’objets doivent exister avant que le nouvel objet puisse y être ajouté.

  7. Après avoir enregistré le certificat permanent sur l’appareil, celui-ci doit se déconnecter de la session qu'il a ouverte avec le certificat de revendication de mise en service temporaire et se reconnecter à l'aide du certificat permanent.

L'appareil est maintenant prêt à communiquer normalement avec AWS IoT.

Utilisation des hooks de pré-provisionnement avec l'interface de ligne de commande AWS

La procédure suivante crée un modèle de mise en service avec des hooks de mise en service en amont. La fonction Lambda utilisée ici est un exemple qui peut être modifié.

Pour créer et appliquer un hook de mise en service en amont à un modèle de mise en service
  1. Créez une fonction Lambda dont l’entrée et la sortie sont définies. Les fonctions Lambda sont hautement personnalisables. allowProvisioning et parameterOverrides sont nécessaires pour créer des hooks de pré-mise en service. Pour plus d'informations sur la création de fonctions Lambda, consultez la section Utilisation AWS Lambda avec l'interface de ligne de AWS commande.

    Voici un exemple de sortie de fonction Lambda :

    { "allowProvisioning": True, "parameterOverrides": { "incomingKey0": "incomingValue0", "incomingKey1": "incomingValue1" } }
  2. AWS IoT utilise des politiques basées sur les ressources pour appeler Lambda. Vous devez donc AWS IoT autoriser l'appel de votre fonction Lambda.

    Important

    Assurez-vous d’inclure le source-arn ou source-account dans les clés de contexte de condition globale des politiques associées à votre action Lambda afin d’empêcher toute manipulation des autorisations. Pour de plus amples informations à ce sujet, veuillez consulter Prévention du cas de figure de l’adjoint désorienté entre services.

    L’exemple suivant utilise add-permission pour donner à IoT l’autorisation d’appeler votre fonction Lambda.

    aws lambda add-permission \ --function-name myLambdaFunction \ --statement-id iot-permission \ --action lambda:InvokeFunction \ --principal iot.amazonaws.com
  3. Ajoutez un hook de pré-provisionnement à un modèle à l'aide de la commande create-provisioning-templateor update-provisioning-template.

    L'exemple de CLI suivant utilise le create-provisioning-templatepour créer un modèle de provisioning doté de hooks de pré-provisionnement :

    aws iot create-provisioning-template \ --template-name myTemplate \ --provisioning-role-arn arn:aws:iam:us-east-1:1234564789012:role/myRole \ --template-body file://template.json \ --pre-provisioning-hook file://hooks.json

    La sortie de cette commande ressemble à ce qui suit :

    { "templateArn": "arn:aws:iot:us-east-1:1234564789012:provisioningtemplate/myTemplate", "defaultVersionId": 1, "templateName": myTemplate }

    Pour gagner du temps, vous pouvez également charger un paramètre à partir d'un fichier au lieu de le taper en tant que valeur de paramètre de ligne de commande. Pour plus d’informations, consultez Loading Chargement AWS CLI from a File paramètres à partir d’un fichier. Le code suivant illustre le paramètre template au format JSON étendu :

    { "Parameters" : { "DeviceLocation": { "Type": "String" } }, "Mappings": { "LocationTable": { "Seattle": { "LocationUrl": "https://example.aws" } } }, "Resources" : { "thing" : { "Type" : "AWS::IoT::Thing", "Properties" : { "AttributePayload" : { "version" : "v1", "serialNumber" : "serialNumber" }, "ThingName" : {"Fn::Join":["",["ThingPrefix_",{"Ref":"SerialNumber"}]]}, "ThingTypeName" : {"Fn::Join":["",["ThingTypePrefix_",{"Ref":"SerialNumber"}]]}, "ThingGroups" : ["widgets", "WA"], "BillingGroup": "BillingGroup" }, "OverrideSettings" : { "AttributePayload" : "MERGE", "ThingTypeName" : "REPLACE", "ThingGroups" : "DO_NOTHING" } }, "certificate" : { "Type" : "AWS::IoT::Certificate", "Properties" : { "CertificateId": {"Ref": "AWS::IoT::Certificate::Id"}, "Status" : "Active" } }, "policy" : { "Type" : "AWS::IoT::Policy", "Properties" : { "PolicyDocument" : { "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action":["iot:Publish"], "Resource": ["arn:aws:iot:us-east-1:504350838278:topic/foo/bar"] }] } } } }, "DeviceConfiguration": { "FallbackUrl": "https://www.example.com/test-site", "LocationUrl": { "Fn::FindInMap": ["LocationTable",{"Ref": "DeviceLocation"}, "LocationUrl"]} } }

    Le code suivant illustre le paramètre pre-provisioning-hook au format JSON étendu :

    { "targetArn" : "arn:aws:lambda:us-east-1:765219403047:function:pre_provisioning_test", "payloadVersion" : "2020-04-01" }