Share via


Självstudie: Etablera enheter med hjälp av symmetriska nyckelregistreringsgrupper

Den här självstudien visar hur du på ett säkert sätt etablerar flera simulerade symmetriska nyckelenheter till en enda IoT Hub med hjälp av en registreringsgrupp.

Azure IoT Hub Device Provisioning Service stöder två typer av registreringar för etableringsenheter:

  • Registreringsgrupper: används för att registrera flera relaterade enheter. Den här självstudien visar etablering med registreringsgrupper.
  • Enskilda registreringar: Används för att registrera en enskild enhet.

Azure IoT Hub Device Provisioning Service stöder tre former av autentisering för etablering av enheter:

  • X.509-certifikat
  • Betrodd plattformsmodul (TPM)
  • Symmetriska nycklar – Den här självstudien visar symmetrisk nyckelattestering

Vissa enheter kanske inte har något certifikat, TPM eller någon annan säkerhetsfunktion som kan användas för att identifiera enheten på ett säkert sätt. För sådana enheter innehåller Azure IoT Hub Device Provisioning Service (DPS) symmetrisk nyckelattestering. Symmetrisk nyckelattestering kan användas för att identifiera en enhet baserat på unik information som MAC-adressen eller ett serienummer.

I den här självstudien slutför du följande mål:

  • Definiera ett unikt registrerings-ID för varje enhet.
  • Skapa en registreringsgrupp som använder symmetrisk nyckelattestering.
  • Skapa en enhetsnyckel för varje enhet med dess unika registrerings-ID och delade registreringsgruppnyckel.
  • Etablera enheter med enhetsnyckeln och exempelkoden i Azure IoT-enhets-SDK:er.

Den här självstudien är inriktad på en Windows-baserad arbetsstation. Du kan dock utföra procedurerna i Linux. Ett Linux-exempel finns i Självstudie: Etablera för geo-svarstid.

Kommentar

Om du har slutfört snabbstarten tidigare: Etablera en simulerad symmetrisk nyckelenhet och fortfarande har konfigurerat dina Azure-resurser och din utvecklingsmiljö kan du fortsätta till Skapa en symmetrisk nyckelregistreringsgrupp i den här självstudien.

Förutsättningar

  • Om du använder en Windows-utvecklingsmiljö installerar du Visual Studio 2022 med arbetsbelastningen "Skrivbordsutveckling med C++" aktiverad. Visual Studio 2019, Visual Studio 2017 och Visual Studio 2015 stöds också. För Linux eller macOS, se lämpligt avsnitt i Förbereda utvecklingsmiljön i SDK-dokumentationen.

  • Installera det senaste CMake-byggsystemet. Kontrollera att du kontrollerar alternativet som lägger till den körbara CMake-filen i sökvägen.

    Viktigt!

    Kontrollera att Visual Studio-kraven (Visual Studio och arbetsbelastningen Skrivbordsutveckling med C++) är installerade på datorn innan du CMake startar installationen. När förutsättningarna är uppfyllda och nedladdningen har verifierats installerar du CMake-byggesystemet. Tänk också på att äldre versioner av CMake-byggsystemet inte kan generera lösningsfilen som används i den här artikeln. Se till att använda den senaste versionen av CMake.

  • Installera .NET SDK 6.0 eller senare på din Windows-baserade dator. Du kan använda följande kommando för att kontrollera din version.

    dotnet --info
    
  • Installera Python 3.7 eller senare installerat på din Windows-baserade dator. Du kan kontrollera din version av Python genom att köra python --version.
  • Installera den senaste versionen av Git. Kontrollera att Git har lagts till i de miljövariabler som är tillgängliga för kommandofönstret. Se Software Freedom Conservancys Git-klientverktyg för den senaste versionen av git verktyg som ska installeras, vilket inkluderar Git Bash, kommandoradsappen som du kan använda för att interagera med din lokala Git-lagringsplats.

Förbereda utvecklingsmiljön

I det här avsnittet förbereder du en utvecklingsmiljö för att skapa Azure IoT Device SDK för C. Exempelkoden etablerar enheten under enhetens startsekvens.

  1. I en webbläsare går du till versionssidan för Azure IoT C SDK.

  2. Kopiera taggnamnet för den senaste versionen av Azure IoT C SDK, till exempel: lts_03_2024.

  3. Öppna en Windows-kommandotolk och kör följande kommandon för att klona den senaste versionen av Azure IoT Device SDK för C GitHub-lagringsplatsen. Ersätt <release-tag> med taggen som du kopierade i föregående steg.

    git clone -b <release-tag> https://github.com/Azure/azure-iot-sdk-c.git
    cd azure-iot-sdk-c
    git submodule update --init
    

    Den här åtgärden kan ta flera minuter att slutföra.

  4. När åtgärden är klar kör du följande kommandon från azure-iot-sdk-c katalogen:

    mkdir cmake
    cd cmake
    
  5. Kodexemplet använder en symmetrisk nyckel för att tillhandahålla attestering. Kör följande kommando för att skapa en version av SDK:n som är specifik för din utvecklingsklientplattform som innehåller enhetsetableringsklienten:

    cmake -Dhsm_type_symm_key:BOOL=ON -Duse_prov_client:BOOL=ON  ..
    

    Dricks

    Om cmake du inte hittar C++-kompilatorn kan du få byggfel när du kör kommandot ovan. Om det händer kan du prova att köra kommandot i Visual Studio-kommandotolken.

  6. När bygget har slutförts ser de sista utdataraderna ut ungefär som följande utdata:

    $ cmake -Dhsm_type_symm_key:BOOL=ON -Duse_prov_client:BOOL=ON  ..
    -- Building for: Visual Studio 16 2019
    -- Selecting Windows SDK version 10.0.19041.0 to target Windows 10.0.22621.
    -- The C compiler identification is MSVC 19.29.30146.0
    -- The CXX compiler identification is MSVC 19.29.30146.0
    
    ...
    
    -- Configuring done
    -- Generating done
    -- Build files have been written to: C:/azure-iot-sdk-c/cmake
    
  1. Öppna en kommandotolk eller Git Bash-terminal.

  2. Klona Azure IoT SDK för C# GitHub-lagringsplatsen med följande kommando:

    git clone https://github.com/Azure/azure-iot-sdk-csharp.git
    
  1. Öppna en kommandotolk eller Git Bash-terminal.

  2. Klona Azure IoT SDK för Node.js GitHub-lagringsplats med följande kommando:

    git clone https://github.com/Azure/azure-iot-sdk-node.git --recursive
    
  1. Öppna en kommandotolk eller Git Bash-terminal.

  2. Klona Azure IoT Device SDK för Python GitHub-lagringsplatsen med följande kommando:

    git clone -b v2 https://github.com/Azure/azure-iot-sdk-python.git --recursive
    

    Kommentar

    Exemplen som används i den här självstudien finns i v2-grenen på azure-iot-sdk-python-lagringsplatsen. V3 av Python SDK är tillgängligt för användning i betaversion. Information om hur du uppdaterar V2-kodexempel för att använda en V3-version av Python SDK finns i migreringsguiden för Azure IoT Device SDK för Python.

  1. Öppna en kommandotolk eller Git Bash-terminal.

  2. Klona Azure IoT SDK för Java GitHub-lagringsplatsen med följande kommando:

    git clone https://github.com/Azure/azure-iot-sdk-java.git --recursive
    
  3. Gå till rotkatalogen azure-iot-sdk-java och skapa projektet för att ladda ned alla paket som behövs. Det här steget kan ta flera minuter att slutföra.

    cd azure-iot-sdk-java
    mvn install -DskipTests=true
    

Skapa en symmetrisk nyckelregistreringsgrupp

  1. Logga in på Azure-portalen och gå till instansen av enhetsetableringstjänsten.

  2. Välj Hantera registreringar i avsnittet Inställningar i navigeringsmenyn.

  3. Välj Lägg till registreringsgrupp.

  4. På fliken Registrering + etableringsidan Lägg till registreringsgrupp anger du följande information för att konfigurera information om registreringsgruppen:

    Fält beskrivning
    Intyg Välj Symmetrisk nyckel som attesteringsmekanism.
    Inställningar för symmetrisk nyckel Markera rutan Generera symmetriska nycklar automatiskt om du vill använda slumpmässigt genererade nycklar. Avmarkera den här rutan om du vill ange egna nycklar.
    Gruppnamn Ange ett namn för gruppen med enheter. Namnet på registreringsgruppen är en skiftlägeskänslig sträng (upp till 128 tecken lång) med alfanumeriska tecken plus specialtecken: '-', '.', '_', ':'. Det sista tecknet måste vara alfanumeriskt eller streck ('-').
    Etableringsstatus Markera kryssrutan Aktivera den här registreringen om du vill att den här registreringsgruppen ska vara tillgänglig för att etablera enheter. Avmarkera den här rutan om du vill att gruppen ska inaktiveras. Du kan ändra den här inställningen senare.
    Ometableringsprincip Välj en återetableringsprincip som visar hur du vill att DPS ska hantera enheter som begär ometablering. Mer information finns i Ometableringsprinciper

    Screenshot that shows adding an enrollment group for symmetric key attestation.

  5. Välj Nästa: IoT-hubbar.

  6. På fliken IoT-hubbarsidan Lägg till registreringsgrupp anger du följande information för att avgöra vilka IoT-hubbar som registreringsgruppen kan etablera enheter till:

    Fält beskrivning
    IoT-målhubbar Välj en eller flera av dina länkade IoT-hubbar eller lägg till en ny länk till en IoT-hubb. Mer information om hur du länkar IoT-hubbar till din DPS-instans finns i Länka och hantera IoT-hubbar.
    Allokeringsprincip Om du har valt fler än en länkad IoT-hubb väljer du hur du vill tilldela enheter till de olika hubbarna. Mer information om allokeringsprinciper finns i Använda allokeringsprinciper.

    Om du bara valde en länkad IoT-hubb rekommenderar vi att du använder principen för jämnt viktad distribution .

    Screenshot that shows connecting IoT hubs to the new enrollment group.

  7. Välj Nästa: Enhetsinställningar

  8. På fliken Enhetsinställningarsidan Lägg till registreringsgrupp anger du följande information för att definiera hur nyligen etablerade enheter ska konfigureras:

    Fält beskrivning
    IoT Edge Kontrollera Aktivera IoT Edge på etablerade enheter om alla enheter som etablerats via den här gruppen kör Azure IoT Edge. Avmarkera den här rutan om den här gruppen endast gäller för enheter som inte är IoT Edge-aktiverade. Antingen är alla enheter i en grupp IoT Edge-aktiverade eller så kan ingen vara det.
    Enhetstaggar Använd den här textrutan om du vill ange eventuella taggar som du vill använda för enhetstvillingar för etablerade enheter.
    Önskade egenskaper Använd den här textrutan om du vill ange önskade egenskaper som du vill använda för enhetstvillingar för etablerade enheter.

    Mer information finns i Understand and use device twins in IoT Hub (Förstå och använda enhetstvillingar i IoT Hub).

  9. Välj Nästa: Granska + skapa.

  10. På fliken Granska + skapa kontrollerar du alla dina värden och väljer sedan Skapa.

När du skapar registreringsgruppen genererar DPS en primärnyckel och en sekundär nyckel och lägger sedan till dem i registreringsposten. Din symmetriska nyckelregistreringsgrupp visas under kolumnen Gruppnamnfliken Registreringsgrupper .

Öppna registreringen och kopiera värdet för primärnyckeln. Den här nyckeln är din gruppnyckel.

Välj ett unikt registrerings-ID för enheten

Ett unikt registrerings-ID måste definieras för att identifiera varje enhet. Du kan använda MAC-adressen, serienumret eller någon unik information från enheten.

I det här exemplet använder vi en kombination av en MAC-adress och ett serienummer som bildar följande sträng för ett registrerings-ID.

sn-007-888-abc-mac-a1-b2-c3-d4-e5-f6

Skapa unika registrerings-ID:n för varje enhet. Registrerings-ID:t är en skiftlägeskänslig sträng (upp till 128 tecken lång) med alfanumeriska tecken plus följande specialtecken: - . _ :. Det sista tecknet måste vara alfanumeriskt eller streck (-).

Härled en enhetsnyckel

Om du vill generera enhetsnycklar använder du den primära nyckeln för registreringsgruppen för att beräkna en HMAC-SHA256-hash för registrerings-ID:t för varje enhet. Resultatet konverteras sedan till Base 64-format för varje enhet.

Varning

Enhetskoden för varje enhet bör endast innehålla den härledda enhetsnyckeln för den enheten. Inkludera inte din grupps primärnyckel i enhetskoden. En komprometterad gruppnyckel kan äventyra säkerheten för alla enheter som autentiseras med den.

IoT-tillägget för Azure CLI tillhandahåller kommandot az iot dps enrollment-group compute-device-key för att generera härledda enhetsnycklar. Det här kommandot kan användas från både Windows- och Linux-system.

Ersätt värdet för parametern --key med primärnyckeln från din registreringsgrupp.

Ersätt värdet för parametern --registration-id med ditt registrerings-ID.

az iot dps enrollment-group compute-device-key --key <group_primary_key> --registration-id <device_registration_id>

Exempelresultat:

"Jsm0lyGpjaVYVP2g3FnmnmG9dI/9qU24wNoykUmermc="

Varje enhet använder sin härledda enhetsnyckel och unika registrerings-ID för att utföra symmetrisk nyckelattestering med registreringsgruppen under etableringen.

Förbereda och köra enhetsetableringskoden

I det här avsnittet uppdaterar du enhetsexempelkoden för att skicka enhetens startsekvens till enhetsetableringstjänstens instans. Den här startsekvensen gör att enheten identifieras, autentiseras och tilldelas till en IoT-hubb som är länkad till enhetsetableringstjänstens instans.

Exempeletableringskoden utför följande uppgifter i ordning:

  1. Autentiserar enheten med enhetsetableringsresursen med hjälp av följande tre parametrar:

    • ID-omfånget för enhetsetableringstjänsten
    • Registrerings-ID för din enhet.
    • Den härledda enhetsnyckeln för din enhet.
  2. Tilldelar enheten till den IoT-hubb som redan är länkad till enhetsetableringstjänstens instans.

Så här uppdaterar och kör du etableringsexemplet med din enhetsinformation:

  1. På huvudmenyn i enhetsetableringstjänsten väljer du Översikt.

  2. Kopiera ID-omfångsvärdet.

    Screenshot that shows copying the ID scope from the DPS overview pane.

  3. I Visual Studio öppnar du lösningsfilen azure_iot_sdks.sln som har genererats genom att köra CMake. Lösningsfilen bör vara på följande plats:

    
    \azure-iot-sdk-c\cmake\azure_iot_sdks.sln
    
    

    Dricks

    Om filen inte genererades i din cmake-katalog kontrollerar du att du har använt en ny version av CMake-byggsystemet.

  4. I Fönstret Solution Explorer i Visual Studio går du till mappen Provision_Samples. Expandera exempelprojektet med namnet prov_dev_client_sample. Expandera Källfiler och öppna prov_dev_client_sample.c.

  5. Leta reda på konstanten id_scope och ersätt värdet med det ID-omfångsvärde som du kopierade från Azure-portalen.

    static const char* id_scope = "0ne00002193";
    
  6. Hitta definitionen för funktionen main() i samma fil. Kontrollera att variabeln hsm_type är inställd på SECURE_DEVICE_TYPE_SYMMETRIC_KEY enligt nedan:

    SECURE_DEVICE_TYPE hsm_type;
    //hsm_type = SECURE_DEVICE_TYPE_TPM;
    //hsm_type = SECURE_DEVICE_TYPE_X509;
    hsm_type = SECURE_DEVICE_TYPE_SYMMETRIC_KEY;
    
  7. Hitta anropet till prov_dev_set_symmetric_key_info() i prov_dev_client_sample.c som har kommenterats ut.

    // Set the symmetric key if using they auth type
    //prov_dev_set_symmetric_key_info("<symm_registration_id>", "<symmetric_Key>");
    

    Avkommentera funktionsanropet och ersätt platshållarvärdena (inklusive vinkelparenteserna) med det registrerings-ID som du valde i Välj ett unikt registrerings-ID för enheten och den härledda enhetsnyckeln som du genererade i Härled en enhetsnyckel.

    // Set the symmetric key if using they auth type
    prov_dev_set_symmetric_key_info("sn-007-888-abc-mac-a1-b2-c3-d4-e5-f6", "Jsm0lyGpjaVYVP2g3FnmnmG9dI/9qU24wNoykUmermc=");
    

    Varning

    Tänk på att det här steget lämnar den härledda enhetsnyckeln inkluderad som en del av avbildningen för varje enhet, vilket inte är en rekommenderad metod för säkerhet. Detta är en av anledningarna till att säkerhet och användarvänlighet ofta är kompromisser. Du måste granska säkerheten för dina enheter helt baserat på dina egna krav.

  8. Spara filen.

  9. Högerklicka på projektet prov_dev_client_sample och välj Ange som startprojekt.

  10. I Visual Studio-menyn väljer du Felsökning>Starta utan felsökning för att köra lösningen. I kommandotolken återskapa projektet väljer du Ja för att återskapa projektet innan du kör det.

    Följande utdata är ett exempel på hur enheten ansluter till etableringstjänstinstansen som ska tilldelas till en IoT-hubb:

    Provisioning API Version: 1.9.1
    
    Registering Device
    
    Provisioning Status: PROV_DEVICE_REG_STATUS_CONNECTED
    Provisioning Status: PROV_DEVICE_REG_STATUS_ASSIGNING
    
    Registration Information received from service: contoso-hub-2.azure-devices.net, deviceId: sn-007-888-abc-mac-a1-b2-c3-d4-e5-f6
    Press enter key to exit:
    

Exempeletableringskoden utför följande uppgifter:

  1. Autentiserar enheten med enhetsetableringsresursen med hjälp av följande tre parametrar:

    • ID-omfånget för enhetsetableringstjänsten
    • Registrerings-ID för din enhet.
    • Den härledda enhetsnyckeln för din enhet.
  2. Tilldelar enheten till den IoT-hubb som redan är länkad till enhetsetableringstjänstens instans.

  3. Skickar ett testtelemetrimeddelande till IoT-hubben.

Så här uppdaterar och kör du etableringsexemplet med din enhetsinformation:

  1. På huvudmenyn i enhetsetableringstjänsten väljer du Översikt.

  2. Kopiera ID-omfångsvärdet.

    Screenshot that shows copying the ID scope from the DPS overview pane.

  3. Öppna en kommandotolk och gå till SymmetricKeySample på den klonade SDK-lagringsplatsen:

    cd .\azure-iot-sdk-csharp\provisioning\device\samples\how to guides\SymmetricKeySample
    
  4. Öppna Parameters.cs i en textredigerare i mappen SymmetricKeySample. Den här filen visar de parametrar som refereras till av exemplet. Endast de tre första obligatoriska parametrarna används i den här artikeln när du kör exemplet. Granska koden i den här filen. Inga ändringar behövs.

    Parameter Obligatoriskt Beskrivning
    --i eller --IdScope Sant ID-omfånget för DPS-instansen
    --r eller --RegistrationId Sant Enhetens registrerings-ID. Registrerings-ID:t är en skiftlägeskänslig sträng (upp till 128 tecken lång) med alfanumeriska tecken plus specialtecken: '-', '.', '_', ':'. Det sista tecknet måste vara alfanumeriskt eller streck ('-').
    --p eller --PrimaryKey Sant Primärnyckeln för en enskild registrering eller den härledda enhetsnyckeln för en gruppregistrering.
    --g eller --GlobalDeviceEndpoint Falsk Den globala slutpunkten för enheter att ansluta till. Standardvärdet är global.azure-devices-provisioning.net
    --t eller --TransportType Falsk Transporten som ska användas för att kommunicera med enhetsetableringsinstansen. Standardvärdet är Mqtt. Möjliga värden är Mqtt, Mqtt_WebSocket_Only, Mqtt_Tcp_Only, Amqp, Amqp_WebSocket_Only, Amqp_Tcp_onlyoch Http1.
  5. Öppna ProvisioningDeviceClientSample.cs i en textredigerare i mappen SymmetricKeySample. Den här filen visar hur klassen SecurityProviderSymmetricKey används tillsammans med klassen ProvisioningDeviceClient för att etablera din simulerade symmetriska nyckelenhet. Granska koden i den här filen. Inga ändringar behövs.

  6. Skapa och kör exempelkoden med följande kommando:

    • Ersätt <id-scope> med det ID-omfång som du kopierade från Azure-portalen.
    • Ersätt <registration-id> med det registrerings-ID som du valde i Välj ett unikt registrerings-ID för enheten.
    • Ersätt <primarykey> med den härledda enhetsnyckeln som du genererade.
    dotnet run --i <id-scope> --r <registration-id> --p <primarykey>
    
  7. Du bör se något som liknar följande utdata. En "TestMessage"-sträng skickas till hubben som ett testmeddelande.

    D:\azure-iot-sdk-csharp\provisioning\device\samples\how to guides\SymmetricKeySample>dotnet run --i 0ne00000A0A --r sn-007-888-abc-mac-a1-b2-c3-d4-e5-f6 --p sbDDeEzRuEuGKag+kQKV+T1QGakRtHpsERLP0yPjwR93TrpEgEh/Y07CXstfha6dhIPWvdD1nRxK5T0KGKA+nQ==
    
    Initializing the device provisioning client...
    Initialized for registration Id sn-007-888-abc-mac-a1-b2-c3-d4-e5-f6.
    Registering with the device provisioning service...
    Registration status: Assigned.
    Device sn-007-888-abc-mac-a1-b2-c3-d4-e5-f6 registered to contoso-hub-2.azure-devices.net.
    Creating symmetric key authentication for IoT Hub...
    Testing the provisioned device with IoT Hub...
    Sending a telemetry message...
    Finished.
    

Exempeletableringskoden utför följande uppgifter i ordning:

  1. Autentiserar enheten med enhetsetableringsresursen med hjälp av följande fyra parametrar:

    • PROVISIONING_HOST
    • PROVISIONING_IDSCOPE
    • PROVISIONING_REGISTRATION_ID
    • PROVISIONING_SYMMETRIC_KEY
  2. Tilldelar enheten till den IoT-hubb som redan är länkad till enhetsetableringstjänstens instans.

  3. Skickar ett testtelemetrimeddelande till IoT-hubben.

Så här uppdaterar och kör du etableringsexemplet med din enhetsinformation:

  1. På huvudmenyn i enhetsetableringstjänsten väljer du Översikt.

  2. Kopiera ID-omfångsvärdet.

    Screenshot that shows copying the ID scope from the DPS overview pane.

  3. Öppna en kommandotolk för att köra Node.js kommandon och gå till följande katalog:

    cd azure-iot-sdk-node\provisioning\device\samples
    
  4. I mappen provisioning/device/samples öppnar du register_symkey.js och granskar koden.

    Exemplet är som standard MQTT som transportprotokoll. Om du vill använda ett annat protokoll kommenterar du ut följande rad och avkommentarer raden för lämpligt protokoll.

    var ProvisioningTransport = require('azure-iot-provisioning-device-mqtt').Mqtt;
    

    Observera också att exempelkoden anger en anpassad nyttolast:

    provisioningClient.setProvisioningPayload({a: 'b'});
    

    Du kan kommentera ut den här koden eftersom den inte behövs för den här självstudien. En anpassad nyttolast kan användas när du använder en anpassad allokeringswebbhook för att tilldela enheten till en IoT Hub. Mer information finns i Självstudie: Använda anpassade allokeringsprinciper.

    Metoden provisioningClient.register() försöker registrera enheten.

  5. I kommandotolken kör du följande kommandon för att ange miljövariabler som används av exemplet:

    • Det första kommandot anger PROVISIONING_HOST miljövariabeln till slutpunkten Global enhet. Den här slutpunkten är densamma för alla DPS-instanser.
    • Ersätt <id-scope> med det ID-omfång som du kopierade från Azure-portalen.
    • Ersätt <registration-id> med det registrerings-ID som du valde i Välj ett unikt registrerings-ID för enheten.
    • Ersätt <defived-device-key> med den härledda enhetsnyckeln som du genererade i Härled en enhetsnyckel.
    set PROVISIONING_HOST=global.azure-devices-provisioning.net
    
    set PROVISIONING_IDSCOPE=<id-scope>
    
    set PROVISIONING_REGISTRATION_ID=<registration-id>
    
    set PROVISIONING_SYMMETRIC_KEY=<derived-device-key>
    
  6. Skapa och kör exempelkoden med hjälp av följande kommandon:

     npm install
    
    node register_symkey.js
    
  7. Du bör nu se något som liknar följande utdata. En "Hello World"-sträng skickas till hubben som ett testmeddelande.

    registration succeeded
    assigned hub=contoso-hub-2.azure-devices.net
    deviceId=sn-007-888-abc-mac-a1-b2-c3-d4-e5-f6
    payload=undefined
    Client connected
    send status: MessageEnqueued
    

Exempeletableringskoden utför följande uppgifter i ordning:

  1. Autentiserar enheten med enhetsetableringsresursen med hjälp av följande fyra parametrar:

    • PROVISIONING_HOST
    • PROVISIONING_IDSCOPE
    • PROVISIONING_REGISTRATION_ID
    • PROVISIONING_SYMMETRIC_KEY
  2. Tilldelar enheten till den IoT-hubb som redan är länkad till enhetsetableringstjänstens instans.

  3. Skickar ett testtelemetrimeddelande till IoT-hubben.

Så här uppdaterar och kör du etableringsexemplet med din enhetsinformation:

  1. På huvudmenyn i enhetsetableringstjänsten väljer du Översikt.

  2. Kopiera ID-omfångsvärdet.

    Screenshot that shows copying the ID scope from the DPS overview pane.

  3. Öppna en kommandotolk och gå till katalogen där exempelfilen provision_symmetric_key.py finns.

    cd azure-iot-sdk-python\samples\async-hub-scenarios
    
  4. I kommandotolken kör du följande kommandon för att ange miljövariabler som används av exemplet:

    • Det första kommandot anger PROVISIONING_HOST miljövariabeln till slutpunkten Global enhet. Den här slutpunkten är densamma för alla DPS-instanser.
    • Ersätt <id-scope> med det ID-omfång som du kopierade från Azure-portalen.
    • Ersätt <registration-id> med det registrerings-ID som du valde i Välj ett unikt registrerings-ID för enheten.
    • Ersätt <defived-device-key> med den härledda enhetsnyckeln som du genererade i Härled en enhetsnyckel.
    set PROVISIONING_HOST=global.azure-devices-provisioning.net
    
    set PROVISIONING_IDSCOPE=<id-scope>
    
    set PROVISIONING_REGISTRATION_ID=<registration-id>
    
    set PROVISIONING_SYMMETRIC_KEY=<derived-device-key>
    
  5. Installera biblioteket azure-iot-device genom att köra följande kommando.

    pip install azure-iot-device
    
  6. Kör Python-exempelkoden i provision_symmetric_key.py.

    python provision_symmetric_key.py
    
  7. Du bör nu se något som liknar följande utdata. Några exempel på telemetrimeddelanden för vindhastighet skickas också till hubben som ett test.

    D:\azure-iot-sdk-python\samples\async-hub-scenarios>python provision_symmetric_key.py
    The complete registration result is
    sn-007-888-abc-mac-a1-b2-c3-d4-e5-f6
    contoso-hub-2.azure-devices.net
    initialAssignment
    null
    Will send telemetry from the provisioned device
    sending message #1
    sending message #2
    sending message #3
    sending message #4
    sending message #5
    sending message #6
    sending message #7
    sending message #8
    sending message #9
    sending message #10
    done sending message #1
    done sending message #2
    done sending message #3
    done sending message #4
    done sending message #5
    done sending message #6
    done sending message #7
    done sending message #8
    done sending message #9
    done sending message #10
    

Exempeletableringskoden utför följande uppgifter i ordning:

  1. Autentiserar enheten med enhetsetableringsresursen med hjälp av följande fyra parametrar:

    • GLOBAL_ENDPOINT
    • SCOPE_ID
    • REGISTRATION_ID
    • SYMMETRIC_KEY
  2. Tilldelar enheten till den IoT-hubb som redan är länkad till enhetsetableringstjänstens instans.

  3. Skickar ett testtelemetrimeddelande till IoT-hubben.

Så här uppdaterar och kör du etableringsexemplet med din enhetsinformation:

  1. På huvudmenyn i enhetsetableringstjänsten väljer du Översikt.

  2. Kopiera ID-omfångsvärdet.

    Screenshot that shows copying the ID scope from the DPS overview pane.

  3. Öppna Java-enhetens exempelkod för redigering. Den fullständiga sökvägen till enhetens exempelkod är:

    azure-iot-sdk-java/provisioning/provisioning-samples/provisioning-symmetrickey-individual-sample/src/main/java/samples/com/microsoft/azure/sdk/iot/ProvisioningSymmetricKeyIndividualEnrollmentSample.java

  4. Ange värdet för följande variabler för din DPS- och enhetsregistrering:

    • Ersätt [Your scope ID here] med det ID-omfång som du kopierade från Azure-portalen.
    • Ersätt [Your Provisioning Service Global Endpoint here] med den globala enhetsslutpunkten: global.azure-devices-provisioning.net. Den här slutpunkten är densamma för alla DPS-instanser.
    • Ersätt [Enter your Symmetric Key here] med den härledda enhetsnyckeln som du genererade i Härled en enhetsnyckel.
    • Ersätt [Enter your Registration ID here] med det registrerings-ID som du valde i Välj ett unikt registrerings-ID för enheten.
    private static final String SCOPE_ID = "[Your scope ID here]";
    private static final String GLOBAL_ENDPOINT = "[Your Provisioning Service Global Endpoint here]";
    private static final String SYMMETRIC_KEY = "[Enter your Symmetric Key here]";
    private static final String REGISTRATION_ID = "[Enter your Registration ID here]";
    

    Varning

    Tänk på att det här steget lämnar den härledda enhetsnyckeln inkluderad som en del av avbildningen för varje enhet, vilket inte är en rekommenderad metod för säkerhet. Detta är en av anledningarna till att säkerhet och användarvänlighet ofta är kompromisser. Du måste granska säkerheten för dina enheter helt baserat på dina egna krav.

  5. Öppna en kommandotolk för att skapa. Gå till projektmappen för etableringsexempel för Java SDK-lagringsplatsen.

    cd azure-iot-sdk-java\provisioning\provisioning-device-client-samples\provisioning-symmetrickey-individual-sample
    
  6. Skapa exemplet.

    mvn clean install
    
  7. Gå till target mappen och kör den skapade .jar filen. java I kommandot ersätter du {version} platshållaren med versionen i .jar filnamnet på datorn.

    cd target
    java -jar ./provisioning-symmetrickey-individual-sample-{version}-with-deps.jar
    
  8. Du bör nu se något som liknar följande utdata.

    Starting...
    Beginning setup.
    WARNING: sun.reflect.Reflection.getCallerClass is not supported. This will impact performance.
    2022-10-07 18:14:48,388 DEBUG (main) [com.microsoft.azure.sdk.iot.provisioning.device.ProvisioningDeviceClient] - Initialized a ProvisioningDeviceClient instance using SDK version 2.0.2
    2022-10-07 18:14:48,390 DEBUG (main) [com.microsoft.azure.sdk.iot.provisioning.device.ProvisioningDeviceClient] - Starting provisioning thread...
    Waiting for Provisioning Service to register
    2022-10-07 18:14:48,392 INFO (global.azure-devices-provisioning.net-002edcf5-CxnPendingConnectionId-azure-iot-sdk-ProvisioningTask) [com.microsoft.azure.sdk.iot.provisioning.device.internal.task.ProvisioningTask] - Opening the connection to device provisioning service...
    2022-10-07 18:14:48,518 INFO (global.azure-devices-provisioning.net-002edcf5-Cxn002edcf5-azure-iot-sdk-ProvisioningTask) [com.microsoft.azure.sdk.iot.provisioning.device.internal.task.ProvisioningTask] - Connection to device provisioning service opened successfully, sending initial device registration message
    2022-10-07 18:14:48,521 INFO (global.azure-devices-provisioning.net-002edcf5-Cxn002edcf5-azure-iot-sdk-RegisterTask) [com.microsoft.azure.sdk.iot.provisioning.device.internal.task.RegisterTask] - Authenticating with device provisioning service using symmetric key
    2022-10-07 18:14:49,252 INFO (global.azure-devices-provisioning.net-002edcf5-Cxn002edcf5-azure-iot-sdk-ProvisioningTask) [com.microsoft.azure.sdk.iot.provisioning.device.internal.task.ProvisioningTask] - Waiting for device provisioning service to provision this device...
    2022-10-07 18:14:49,253 INFO (global.azure-devices-provisioning.net-002edcf5-Cxn002edcf5-azure-iot-sdk-ProvisioningTask) [com.microsoft.azure.sdk.iot.provisioning.device.internal.task.ProvisioningTask] - Current provisioning status: ASSIGNING
    2022-10-07 18:14:52,459 INFO (global.azure-devices-provisioning.net-002edcf5-Cxn002edcf5-azure-iot-sdk-ProvisioningTask) [com.microsoft.azure.sdk.iot.provisioning.device.internal.task.ProvisioningTask] - Device provisioning service assigned the device successfully
    IotHUb Uri : contoso-hub-2.azure-devices.net
    Device ID : sn-007-888-abc-mac-a1-b2-c3-d4-e5-f6
    2022-10-07 18:14:58,424 INFO (main) [com.microsoft.azure.sdk.iot.device.transport.ExponentialBackoffWithJitter] - NOTE: A new instance of ExponentialBackoffWithJitter has been created with the following properties. Retry Count: 2147483647, Min Backoff Interval: 100, Max Backoff Interval: 10000, Max Time Between Retries: 100, Fast Retry Enabled: true
    2022-10-07 18:14:58,436 INFO (main) [com.microsoft.azure.sdk.iot.device.transport.ExponentialBackoffWithJitter] - NOTE: A new instance of ExponentialBackoffWithJitter has been created with the following properties. Retry Count: 2147483647, Min Backoff Interval: 100, Max Backoff Interval: 10000, Max Time Between Retries: 100, Fast Retry Enabled: true
    2022-10-07 18:14:58,440 DEBUG (main) [com.microsoft.azure.sdk.iot.device.DeviceClient] - Initialized a DeviceClient instance using SDK version 2.1.1
    2022-10-07 18:14:58,450 DEBUG (main) [com.microsoft.azure.sdk.iot.device.transport.mqtt.MqttIotHubConnection] - Opening MQTT connection...
    2022-10-07 18:14:58,471 DEBUG (main) [com.microsoft.azure.sdk.iot.device.transport.mqtt.Mqtt] - Sending MQTT CONNECT packet...
    2022-10-07 18:14:59,314 DEBUG (main) [com.microsoft.azure.sdk.iot.device.transport.mqtt.Mqtt] - Sent MQTT CONNECT packet was acknowledged
    2022-10-07 18:14:59,315 DEBUG (main) [com.microsoft.azure.sdk.iot.device.transport.mqtt.Mqtt] - Sending MQTT SUBSCRIBE packet for topic devices/sn-007-888-abc-mac-a1-b2-c3-d4-e5-f6/messages/devicebound/#
    2022-10-07 18:14:59,378 DEBUG (main) [com.microsoft.azure.sdk.iot.device.transport.mqtt.Mqtt] - Sent MQTT SUBSCRIBE packet for topic devices/sn-007-888-abc-mac-a1-b2-c3-d4-e5-f6/messages/devicebound/# was acknowledged
    2022-10-07 18:14:59,379 DEBUG (main) [com.microsoft.azure.sdk.iot.device.transport.mqtt.MqttIotHubConnection] - MQTT connection opened successfully
    2022-10-07 18:14:59,381 DEBUG (main) [com.microsoft.azure.sdk.iot.device.transport.IotHubTransport] - The connection to the IoT Hub has been established
    2022-10-07 18:14:59,383 DEBUG (main) [com.microsoft.azure.sdk.iot.device.transport.IotHubTransport] - Updating transport status to new status CONNECTED with reason CONNECTION_OK
    2022-10-07 18:14:59,389 DEBUG (main) [com.microsoft.azure.sdk.iot.device.DeviceIO] - Starting worker threads
    2022-10-07 18:14:59,392 DEBUG (main) [com.microsoft.azure.sdk.iot.device.transport.IotHubTransport] - Invoking connection status callbacks with new status details
    2022-10-07 18:14:59,395 DEBUG (main) [com.microsoft.azure.sdk.iot.device.transport.IotHubTransport] - Client connection opened successfully
    2022-10-07 18:14:59,404 INFO (main) [com.microsoft.azure.sdk.iot.device.DeviceClient] - Device client opened successfully
    Sending message from device to IoT Hub...
    2022-10-07 18:14:59,408 DEBUG (main) [com.microsoft.azure.sdk.iot.device.transport.IotHubTransport] - Message was queued to be sent later ( Message details: Correlation Id [32cf12c4-4db1-4562-9d8c-267c0506636f] Message Id [2e1717be-cfcf-41a7-b1c0-59edeb8ea865] )
    Press any key to exit...
    2022-10-07 18:14:59,409 DEBUG (contoso-hub-2.azure-devices.net-sn-007-888-abc-mac-a1-b2-c3-d4-e5-f6-c32c76d0-Cxn0e70bbf7-8476-441d-8626-c17250585ee6-azure-iot-sdk-IotHubSendTask) [com.microsoft.azure.sdk.iot.device.transport.IotHubTransport] - Sending message ( Message details: Correlation Id [32cf12c4-4db1-4562-9d8c-267c0506636f] Message Id [2e1717be-cfcf-41a7-b1c0-59edeb8ea865] )
    2022-10-07 18:14:59,777 DEBUG (MQTT Call: sn-007-888-abc-mac-a1-b2-c3-d4-e5-f6) [com.microsoft.azure.sdk.iot.device.transport.IotHubTransport] - IotHub message was acknowledged. Checking if there is record of sending this message ( Message details: Correlation Id [32cf12c4-4db1-4562-9d8c-267c0506636f] Message Id [2e1717be-cfcf-41a7-b1c0-59edeb8ea865] )
    2022-10-07 18:14:59,779 DEBUG (contoso-hub-2.azure-devices.net-sn-007-888-abc-mac-a1-b2-c3-d4-e5-f6-c32c76d0-Cxn0e70bbf7-8476-441d-8626-c17250585ee6-azure-iot-sdk-IotHubSendTask) [com.microsoft.azure.sdk.iot.device.transport.IotHubTransport] - Invoking the callback function for sent message, IoT Hub responded to message ( Message details: Correlation Id [32cf12c4-4db1-4562-9d8c-267c0506636f] Message Id [2e1717be-cfcf-41a7-b1c0-59edeb8ea865] ) with status OK
    Message received! Response status: OK
    

Bekräfta registreringen av enhetsetablering

I den här självstudien använde du allokeringsprincipen för statisk konfiguration för att tilldela enheter som registreras via registreringsgruppen till samma IoT-hubb. För allokeringar där en enhet kan etableras till en av flera IoT-hubbar kan du dock undersöka registreringsgruppens registreringsposter för att se vilken IoT-hubb som enheten har etablerats till:

  1. I Azure-portalen går du till din DPS-instans.

  2. På menyn Inställningar väljer du Hantera registreringar.

  3. Välj Registreringsgrupper.

  4. Välj den registreringsgrupp som du skapade för den här självstudien.

  5. På sidan Information om registreringsgrupp väljer du Registreringsstatus.

  6. Leta reda på enhets-ID:t för enhets-ID-kolumnen och anteckna IoT-hubben i kolumnen Tilldelad IoT-hubb.

    Du kan välja enhetsposten för att se mer information som den första tvillingen som tilldelats enheten.

Så här verifierar du enheten på din IoT-hubb:

  1. I Azure-portalen går du till den IoT-hubb som enheten har tilldelats till.

  2. I menyn Enhetshantering väljer du Enheter.

  3. Om enheten har etablerats bör dess enhets-ID visas i listan med Status inställd som aktiverad. Om du inte ser enheten väljer du Uppdatera.

    Device is registered with the IoT hub

Kommentar

Om du ändrade det första enhetstvillingtillståndet från standardvärdet i registreringsgruppen kan en enhet hämta önskat tvillingtillstånd från hubben och agera därefter. Mer information finns i Understand and use device twins in IoT Hub (Förstå och använda enhetstvillingar i IoT Hub).

Etablera fler enheter

Om du vill etablera fler enheter via registreringsgruppen följer du stegen i föregående avsnitt för att:

  1. Välj ett unikt registrerings-ID för enheten.

  2. Härled en enhetsnyckel. Precis som tidigare använder du primärnyckeln för registreringsgruppen som gruppnyckel.

  3. Kör enhetsetableringskoden. Ersätt nödvändiga artefakter med din nya härledda enhetsnyckel och registrerings-ID.

Rensa resurser

Om du planerar att fortsätta arbeta med och utforska enhetsklientexemplet ska du inte rensa resurserna som skapades i den här självstudien. Om du inte planerar att fortsätta använder du följande steg för att ta bort alla resurser som skapats i den här självstudien.

Ta bort din registreringsgrupp

Om du tar bort en registreringsgrupp tas inte de registreringsposter som är associerade med den bort. Dessa överblivna poster räknas mot registreringskvoten för DPS-instansen. Därför är det bästa praxis att ta bort alla registreringsposter som är associerade med en registreringsgrupp innan du tar bort själva registreringsgruppen.

  1. I Azure-portalen går du till din DPS-instans.

  2. På menyn Inställningar väljer du Hantera registreringar.

  3. Välj fliken Registreringsgrupper .

  4. Välj namnet på den registreringsgrupp som du använde för den här självstudien för att öppna informationssidan.

  5. På sidan Registreringsinformation väljer du Registreringsstatus. Markera sedan kryssrutan bredvid kolumnrubriken Enhets-ID för att markera alla registreringsposter för registreringsgruppen. Välj Ta bort överst på sidan för att ta bort registreringsposterna.

  6. Gå tillbaka till sidan Hantera registreringar .

  7. Markera kryssrutan bredvid namnet på den registreringsgrupp som du använde för den här självstudien.

  8. Välj Ta bort längst upp på sidan.

Ta bort enhetsregistreringar från IoT Hub

  1. I Azure-portalen går du till den IoT-hubb som enheten har tilldelats till.

  2. Välj Enheter i avsnittet Enhetshantering i navigeringsmenyn.

  3. Markera kryssrutan bredvid enhets-ID för de enheter som du registrerade i den här självstudien.

  4. Välj Ta bort längst upp på sidan.

Nästa steg

I den här självstudien etablerade du flera enheter till en enda IoT-hubb med hjälp av en registreringsgrupp. Lär dig sedan hur du etablerar IoT-enheter över flera hubbar.