Zelfstudie: Apparaten inrichten met behulp van symmetrische sleutelinschrijvingsgroepen
Deze zelfstudie laat zien hoe u veilig meerdere gesimuleerde symmetrische sleutelapparaten kunt inrichten voor één IoT Hub met behulp van een inschrijvingsgroep.
De Azure IoT Hub Device Provisioning Service ondersteunt twee typen inschrijvingen voor inrichtingsapparaten:
- Registratiegroepen: wordt gebruikt om meerdere gerelateerde apparaten in te schrijven. In deze zelfstudie wordt het inrichten met inschrijvingsgroepen gedemonstreert.
- Afzonderlijke inschrijvingen: wordt gebruikt om één apparaat in te schrijven.
De Azure IoT Hub Device Provisioning Service ondersteunt drie vormen van verificatie voor het inrichten van apparaten:
- X.509-certificaten
- Tpm (Trusted Platform Module)
- Symmetrische sleutels : in deze zelfstudie wordt de attestation van symmetrische sleutels gedemonstreert
Sommige apparaten hebben mogelijk geen certificaat, TPM of een andere beveiligingsfunctie die kan worden gebruikt om het apparaat veilig te identificeren. Voor dergelijke apparaten bevat de Azure IoT Hub Device Provisioning Service (DPS) symmetrische sleutelverklaring. Attestation van symmetrische sleutels kan worden gebruikt om een apparaat te identificeren op basis van unieke informatie, zoals het MAC-adres of een serienummer.
In deze zelfstudie voltooit u de volgende doelstellingen:
- Definieer een unieke registratie-id voor elk apparaat.
- Maak een inschrijvingsgroep die gebruikmaakt van attestation met symmetrische sleutels.
- Produceer een apparaatsleutel voor elk apparaat met behulp van de unieke registratie-id en de gedeelde inschrijvingsgroepssleutel.
- Apparaten inrichten met behulp van de apparaatsleutel en voorbeeldcode in de Azure IoT-apparaat-SDK's.
Deze zelfstudie is gericht op een Windows-werkstation. U kunt de procedures echter ook uitvoeren op Linux. Zie Zelfstudie: Inrichten voor geolatentie voor een Linux-voorbeeld.
Notitie
Als u eerder de quickstart hebt voltooid : Een gesimuleerd symmetrisch sleutelapparaat inrichten en nog steeds uw Azure-resources en ontwikkelomgeving hebben ingesteld, kunt u doorgaan met het maken van een symmetrische sleutelinschrijvingsgroep in deze zelfstudie.
Vereisten
Als u geen Azure-abonnement hebt, maakt u een gratis account voordat u begint.
Voer de stappen uit in IoT Hub Device Provisioning Service instellen met Azure Portal.
Als u een Windows-ontwikkelomgeving gebruikt, installeert u Visual Studio 2022 met de workload Desktopontwikkeling met C++ . Visual Studio 2019, Visual Studio 2017 en Visual Studio 2015 worden ook ondersteund. Voor Linux of macOS raadpleegt u het desbetreffende gedeelte in Uw ontwikkelomgeving voorbereiden in de SDK-documentatie.
Installeer het nieuwste CMake-buildsysteem. Controleer de optie waarmee het uitvoerbare CMake-bestand aan uw pad wordt toegevoegd.
Belangrijk
Controleer of de vereisten voor Visual Studio (Visual Studio en de workload Desktopontwikkeling met C++) op uw computer zijn geïnstalleerd voordat u de
CMake
installatie start. Zodra aan de vereisten is voldaan en de download is geverifieerd, installeert u het CMake-bouwsysteem. Houd er ook rekening mee dat oudere versies van het CMake-buildsysteem het oplossingsbestand dat in dit artikel wordt gebruikt, niet kunnen genereren. Zorg ervoor dat u de nieuwste versie van CMake gebruikt.
Installeer .NET SDK 6.0 of hoger op uw Windows-computer. U kunt de volgende opdracht gebruiken om uw versie te controleren.
dotnet --info
- Installeer Node.js v4.0+.
- Installeer Python 3.7 of hoger die op uw Windows-computer is geïnstalleerd. U kunt uw versie van Python controleren door
python --version
uit te voeren.
Installeer Java SE Development Kit 8 of hoger die op uw computer is geïnstalleerd.
Download en installeer Maven.
- Installeer de meest recente versie van Git. Zorg ervoor dat Git is toegevoegd aan de omgevingsvariabelen die toegankelijk zijn voor het opdrachtvenster. Zie de Git-clienthulpprogramma's van Software Freedom Conservancy voor de nieuwste versie van
git
hulpprogramma's die u kunt installeren, waaronder Git Bash, de opdrachtregel-app die u kunt gebruiken om te communiceren met uw lokale Git-opslagplaats.
Uw ontwikkelomgeving voorbereiden
In deze sectie bereidt u een ontwikkelomgeving voor om de Azure IoT Device SDK voor C te bouwen. De voorbeeldcode richt het apparaat in tijdens de opstartvolgorde van het apparaat.
Ga in een webbrowser naar de releasepagina van de Azure IoT C SDK.
Kopieer de tagnaam voor de nieuwste versie van de Azure IoT C SDK, bijvoorbeeld:
lts_03_2024
.Open een Windows-opdrachtprompt en voer de volgende opdrachten uit om de nieuwste versie van de Azure IoT Device SDK voor C GitHub-opslagplaats te klonen. Vervang
<release-tag>
door de tag die u in de vorige stap hebt gekopieerd.git clone -b <release-tag> https://github.com/Azure/azure-iot-sdk-c.git cd azure-iot-sdk-c git submodule update --init
Het kan enkele minuten duren voordat deze bewerking is voltooid.
Wanneer de bewerking is voltooid, voert u de volgende opdrachten uit vanuit de
azure-iot-sdk-c
map:mkdir cmake cd cmake
In het codevoorbeeld wordt een symmetrische sleutel gebruikt om attestation te bieden. Voer de volgende opdracht uit om een versie van de SDK te bouwen die specifiek is voor uw ontwikkelclientplatform met de client voor apparaatinrichting:
cmake -Dhsm_type_symm_key:BOOL=ON -Duse_prov_client:BOOL=ON ..
Tip
Als
cmake
uw C++-compiler niet wordt gevonden, kunnen er buildfouten optreden tijdens het uitvoeren van de bovenstaande opdracht. Als dit gebeurt, voert u de opdracht uit in de Visual Studio-opdrachtprompt.Wanneer de build is voltooid, zien de laatste paar uitvoerregels er ongeveer als volgt uit:
$ 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
Open een opdrachtprompt of Git Bash-terminal.
Kloon de Azure IoT SDK voor C# GitHub-opslagplaats met behulp van de volgende opdracht:
git clone https://github.com/Azure/azure-iot-sdk-csharp.git
Open een opdrachtprompt of Git Bash-terminal.
Kloon de GitHub-opslagplaats Azure IoT SDK voor Node.js met behulp van de volgende opdracht:
git clone https://github.com/Azure/azure-iot-sdk-node.git --recursive
Open een opdrachtprompt of Git Bash-terminal.
Kloon de Azure IoT Device SDK voor Python GitHub-opslagplaats met behulp van de volgende opdracht:
git clone -b v2 https://github.com/Azure/azure-iot-sdk-python.git --recursive
Notitie
De voorbeelden die in deze zelfstudie worden gebruikt, bevinden zich in de v2-vertakking van de opslagplaats azure-iot-sdk-python. V3 van de Python SDK is beschikbaar voor gebruik in bètaversie. Zie de Migratiehandleiding voor Azure IoT Device SDK voor Python voor informatie over het bijwerken van V2-codevoorbeelden voor het gebruik van een V3-versie van de Python SDK.
Open een opdrachtprompt of Git Bash-terminal.
Kloon de Azure IoT SDK voor Java GitHub-opslagplaats met behulp van de volgende opdracht:
git clone https://github.com/Azure/azure-iot-sdk-java.git --recursive
Ga naar de hoofdmap
azure-iot-sdk-java
en bouw het project om alle benodigde pakketten te downloaden. Het kan enkele minuten duren voordat deze stap is voltooid.cd azure-iot-sdk-java mvn install -DskipTests=true
Een registratiegroep met symmetrische sleutels maken
Meld u aan bij Azure Portal en navigeer naar uw Device Provisioning Service-exemplaar.
Selecteer Inschrijvingen beheren in de sectie Instellingen van het navigatiemenu.
Selecteer Inschrijvingsgroep toevoegen.
Geef op het tabblad Registratie en inrichting van de pagina Inschrijvingsgroep toevoegen de volgende informatie op om de details van de inschrijvingsgroep te configureren:
Veld Beschrijving Attest Selecteer symmetrische sleutel als attestation-mechanisme. Instellingen voor symmetrische sleutels Schakel het selectievakje Symmetrische sleutels genereren automatisch in als u willekeurig gegenereerde sleutels wilt gebruiken. Schakel dit selectievakje uit als u uw eigen sleutels wilt opgeven. Groepsnaam Geef een naam op voor de groep apparaten. De naam van de inschrijvingsgroep is een niet-hoofdlettergevoelige tekenreeks (maximaal 128 tekens lang) met alfanumerieke tekens plus de speciale tekens: '-'
,'.'
,'_'
, .':'
Het laatste teken moet alfanumeriek of streepje ('-'
) zijn.Inrichtingsstatus Schakel het selectievakje Deze inschrijving inschakelen in als u wilt dat deze inschrijvingsgroep beschikbaar is voor het inrichten van apparaten. Schakel dit selectievakje uit als u wilt dat de groep wordt uitgeschakeld. U kunt deze instelling later wijzigen. Beleid voor opnieuw inrichten Kies een beleid voor opnieuw inrichten dat aangeeft hoe DPS apparaten verwerkt die herinrichting aanvragen. Zie Beleid voor opnieuw inrichten voor meer informatie Selecteer Volgende: IoT-hubs.
Geef op het tabblad IoT Hubs van de pagina Inschrijvingsgroep toevoegen de volgende informatie op om te bepalen aan welke IoT-hubs de inschrijvingsgroep apparaten kan inrichten:
Veld Beschrijving IoT-doelhubs Selecteer een of meer gekoppelde IoT-hubs of voeg een nieuwe koppeling toe aan een IoT-hub. Zie IoT-hubs koppelen en beheren voor meer informatie over het koppelen van IoT-hubs aan uw DPS-exemplaar. Toewijzingsbeleid Als u meer dan één gekoppelde IoT-hub hebt geselecteerd, selecteert u hoe u apparaten wilt toewijzen aan de verschillende hubs. Zie Toewijzingsbeleid gebruiken voor meer informatie over toewijzingsbeleid.
Als u slechts één gekoppelde IoT-hub hebt geselecteerd, raden we u aan het gelijkmatig gewogen distributiebeleid te gebruiken.Volgende selecteren: Apparaatinstellingen
Geef op het tabblad Apparaatinstellingen van de pagina Inschrijvingsgroep toevoegen de volgende informatie op om te definiëren hoe nieuw ingerichte apparaten worden geconfigureerd:
Veld Beschrijving IoT Edge Schakel IoT Edge in op ingerichte apparaten als alle apparaten die via deze groep zijn ingericht, Azure IoT Edge uitvoeren. Schakel dit selectievakje uit als deze groep alleen voor niet-IoT Edge-apparaten is ingeschakeld. Alle apparaten in een groep zijn ingeschakeld voor IoT Edge of geen. Apparaattags Gebruik dit tekstvak om alle tags op te geven die u wilt toepassen op de apparaatdubbels van ingerichte apparaten. Gewenste eigenschappen Gebruik dit tekstvak om de gewenste eigenschappen op te geven die u wilt toepassen op de apparaatdubbels van ingerichte apparaten. Zie Apparaatdubbels begrijpen en gebruiken in IoT Hub voor meer informatie.
Selecteer Volgende: Beoordelen en maken.
Controleer op het tabblad Controleren en maken al uw waarden en selecteer Vervolgens Maken.
Wanneer u de inschrijvingsgroep maakt, genereert DPS een primaire sleutel en secundaire sleutel en voegt deze vervolgens toe aan de inschrijvingsvermelding. Uw symmetrische sleutelregistratiegroep wordt weergegeven onder de kolom Groepsnaam op het tabblad Inschrijvingsgroepen .
Open de inschrijving en kopieer de waarde van de primaire sleutel. Deze sleutel is uw groepssleutel.
Kies een unieke registratie-id voor het apparaat
Er moet een unieke registratie-id worden gedefinieerd om elk apparaat te identificeren. U kunt het MAC-adres, serienummer of een unieke informatie van het apparaat gebruiken.
In dit voorbeeld gebruiken we een combinatie van een MAC-adres en serienummer die de volgende tekenreeks vormen voor een registratie-id.
sn-007-888-abc-mac-a1-b2-c3-d4-e5-f6
Maak unieke registratie-id's voor elk apparaat. De registratie-id is een hoofdlettergevoelige tekenreeks (maximaal 128 tekens lang) met alfanumerieke tekens plus de volgende speciale tekens: - . _ :
. Het laatste teken moet alfanumeriek of streepje (-
) zijn.
Een apparaatsleutel afleiden
Als u apparaatsleutels wilt genereren, gebruikt u de primaire sleutel van de inschrijvingsgroep om een HMAC-SHA256-hash van de registratie-id voor elk apparaat te berekenen. Het resultaat wordt vervolgens geconverteerd naar base 64-indeling voor elk apparaat.
Waarschuwing
De apparaatcode voor elk apparaat mag alleen de afgeleide apparaatsleutel voor dat apparaat bevatten. Neem de primaire groepssleutel niet op in de apparaatcode. Een gecompromitteerde groepssleutel kan de beveiliging van alle apparaten die ermee worden geverifieerd, in gevaar komen.
De IoT-extensie voor de Azure CLI biedt de opdracht az iot dps enrollment-group compute-device-key voor het genereren van afgeleide apparaatsleutels. Deze opdracht kan worden gebruikt vanuit zowel Windows- als Linux-systemen.
Vervang de waarde van de --key
parameter door de primaire sleutel uit uw inschrijvingsgroep.
Vervang de waarde van de --registration-id
parameter door uw registratie-id.
az iot dps enrollment-group compute-device-key --key <group_primary_key> --registration-id <device_registration_id>
Voorbeeldresultaat:
"Jsm0lyGpjaVYVP2g3FnmnmG9dI/9qU24wNoykUmermc="
Elk apparaat gebruikt de afgeleide apparaatsleutel en de unieke registratie-id om symmetrische sleutelattestatie uit te voeren bij de inschrijvingsgroep tijdens het inrichten.
De apparaatinrichtingscode voorbereiden en uitvoeren
In deze sectie werkt u de voorbeeldcode van het apparaat bij om de opstartvolgorde van het apparaat naar uw Device Provisioning Service-exemplaar te verzenden. Deze opstartvolgorde zorgt ervoor dat het apparaat wordt herkend, geverifieerd en toegewezen aan een IoT-hub die is gekoppeld aan het Device Provisioning Service-exemplaar.
De voorbeeldinrichtingscode voert de volgende taken uit, in volgorde:
Verifieert uw apparaat met uw Device Provisioning-resource met behulp van de volgende drie parameters:
- Het id-bereik van uw Device Provisioning Service
- De registratie-id voor uw apparaat.
- De afgeleide apparaatsleutel voor uw apparaat.
Hiermee wordt het apparaat toegewezen aan de IoT-hub die al is gekoppeld aan uw Device Provisioning Service-exemplaar.
Het inrichtingsvoorbeeld bijwerken en uitvoeren met de apparaatgegevens:
Selecteer Overzicht in het hoofdmenu van Device Provisioning Service.
Kopieer de waarde van het id-bereik .
Open in Visual Studio het oplossingsbestand azure_iot_sdks.sln dat is gegenereerd door CMake uit te voeren. Het oplossingsbestand bevindt zich als het goed is op de volgende locatie:
\azure-iot-sdk-c\cmake\azure_iot_sdks.sln
Tip
Als het bestand niet in de cmake-directory is gegenereerd, controleer dan of u een recente versie van het CMake-build-systeem hebt gebruikt.
Ga in het venster Solution Explorer van Visual Studio naar de map Provision_Samples. Vouw het voorbeeldproject met de naam prov_dev_client_sample uit. Vouw bronbestanden uit en open prov_dev_client_sample.c.
Zoek de
id_scope
constante en vervang de waarde door de id-bereikwaarde die u hebt gekopieerd uit Azure Portal.static const char* id_scope = "0ne00002193";
Zoek de definitie voor de functie
main()
op in hetzelfde bestand. Zorg ervoor dat de variabelehsm_type
is ingesteld opSECURE_DEVICE_TYPE_SYMMETRIC_KEY
, zoals hieronder wordt weergegeven:SECURE_DEVICE_TYPE hsm_type; //hsm_type = SECURE_DEVICE_TYPE_TPM; //hsm_type = SECURE_DEVICE_TYPE_X509; hsm_type = SECURE_DEVICE_TYPE_SYMMETRIC_KEY;
Zoek de aanroep in
prov_dev_set_symmetric_key_info()
prov_dev_client_sample.c die als commentaar is opgenomen.// Set the symmetric key if using they auth type //prov_dev_set_symmetric_key_info("<symm_registration_id>", "<symmetric_Key>");
Verwijder opmerkingen bij de functie-aanroep en vervang de waarden van de tijdelijke aanduiding (inclusief de punthaken) door de registratie-id die u hebt gekozen in Kies een unieke registratie-id voor het apparaat en de afgeleide apparaatsleutel die u hebt gegenereerd in Een apparaatsleutel afleiden.
// 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=");
Let op
Houd er rekening mee dat deze stap de afgeleide apparaatsleutel verlaat die is opgenomen als onderdeel van de installatiekopieën voor elk apparaat, wat geen aanbevolen beveiligingsprocedures is. Dit is een van de redenen waarom beveiliging en gebruiksgemak vaak compromissen zijn. U moet de beveiliging van uw apparaten volledig controleren op basis van uw eigen vereisten.
Sla het bestand op.
Klik met de rechtermuisknop op het prov_dev_client_sample project en selecteer Instellen als opstartproject.
Selecteer in het menu van Visual Studio de optie Debug>Start without debugging om de oplossing uit te voeren. Klik in de prompt om het project opnieuw te bouwen op Yes om het project opnieuw te bouwen voordat het wordt uitgevoerd.
De volgende output is een voorbeeld waarbij het apparaat met succes verbinding maakt met het inrichtingsservice-exemplaar voor toewijzing aan een IoT-hub:
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:
Met de voorbeeldinrichtingscode worden de volgende taken uitgevoerd:
Verifieert uw apparaat met uw Device Provisioning-resource met behulp van de volgende drie parameters:
- Het id-bereik van uw Device Provisioning Service
- De registratie-id voor uw apparaat.
- De afgeleide apparaatsleutel voor uw apparaat.
Hiermee wordt het apparaat toegewezen aan de IoT-hub die al is gekoppeld aan uw Device Provisioning Service-exemplaar.
Hiermee wordt een testbericht verzonden naar de IoT-hub.
Het inrichtingsvoorbeeld bijwerken en uitvoeren met de apparaatgegevens:
Selecteer Overzicht in het hoofdmenu van Device Provisioning Service.
Kopieer de waarde van het id-bereik .
Open een opdrachtprompt en ga naar symmetricKeySample in de gekloonde SDK-opslagplaats:
cd .\azure-iot-sdk-csharp\provisioning\device\samples\how to guides\SymmetricKeySample
Open Parameters.cs in de map SymmetricKeySample in een teksteditor. Dit bestand bevat de parameters waarnaar wordt verwezen door het voorbeeld. Alleen de eerste drie vereiste parameters worden in dit artikel gebruikt bij het uitvoeren van het voorbeeld. Controleer de code in dit bestand. Er zijn geen wijzigingen nodig.
Parameter Vereist Beschrijving --i
of--IdScope
Waar Het id-bereik van het DPS-exemplaar --r
of--RegistrationId
Waar De registratie-id voor het apparaat. De registratie-id is een niet-hoofdlettergevoelige tekenreeks (maximaal 128 tekens lang) met alfanumerieke tekens plus de speciale tekens: '-'
,'.'
,'_'
.':'
Het laatste teken moet alfanumeriek of streepje ('-'
) zijn.--p
of--PrimaryKey
Waar De primaire sleutel van een afzonderlijke inschrijving of de afgeleide apparaatsleutel van een groepsinschrijving. --g
of--GlobalDeviceEndpoint
Onwaar Het globale eindpunt waarmee apparaten verbinding kunnen maken. Standaard ingesteld op global.azure-devices-provisioning.net
--t
of--TransportType
Onwaar Het transport dat moet worden gebruikt om te communiceren met het inrichtingsexemplaren van het apparaat. Standaard ingesteld op Mqtt
. Mogelijke waarden zijn, zoalsMqtt
,Mqtt_WebSocket_Only
,Mqtt_Tcp_Only
,Amqp
,Amqp_WebSocket_Only
, enAmqp_Tcp_only
Http1
.Open ProvisioningDeviceClientSample.cs in de map SymmetricKeySample in een teksteditor. Dit bestand laat zien hoe de klasse SecurityProviderSymmetricKey werkt met de klasse ProvisioningDeviceClient om uw gesimuleerde symmetrische-sleutelapparaat in te richten. Controleer de code in dit bestand. Er zijn geen wijzigingen nodig.
Bouw en voer de voorbeeldcode uit met behulp van de volgende opdracht:
- Vervang
<id-scope>
door het id-bereik dat u hebt gekopieerd uit Azure Portal. - Vervang
<registration-id>
door de registratie-id die u hebt gekozen in Kies een unieke registratie-id voor het apparaat. - Vervang door
<primarykey>
de afgeleide apparaatsleutel die u hebt gegenereerd.
dotnet run --i <id-scope> --r <registration-id> --p <primarykey>
- Vervang
Als het goed is, ziet u iets vergelijkbaars met de volgende uitvoer. Een 'TestMessage'-tekenreeks wordt als testbericht naar de hub verzonden.
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.
De voorbeeldinrichtingscode voert de volgende taken uit, in volgorde:
Verifieert uw apparaat met uw Device Provisioning-resource met behulp van de volgende vier parameters:
PROVISIONING_HOST
PROVISIONING_IDSCOPE
PROVISIONING_REGISTRATION_ID
PROVISIONING_SYMMETRIC_KEY
Hiermee wordt het apparaat toegewezen aan de IoT-hub die al is gekoppeld aan uw Device Provisioning Service-exemplaar.
Hiermee wordt een testtelemetriebericht verzonden naar de IoT-hub.
Het inrichtingsvoorbeeld bijwerken en uitvoeren met de apparaatgegevens:
Selecteer Overzicht in het hoofdmenu van Device Provisioning Service.
Kopieer de waarde van het id-bereik .
Open een opdrachtprompt voor het uitvoeren van Node.js opdrachten en ga naar de volgende map:
cd azure-iot-sdk-node\provisioning\device\samples
Open in de map inrichting/apparaat/voorbeelden register_symkey. js en controleer de code.
Het voorbeeld wordt standaard ingesteld op MQTT als transportprotocol. Als u een ander protocol wilt gebruiken, markeert u de volgende regel en geeft u commentaar op de regel voor het juiste protocol.
var ProvisioningTransport = require('azure-iot-provisioning-device-mqtt').Mqtt;
U ziet ook dat met de voorbeeldcode een aangepaste nettolading wordt ingesteld:
provisioningClient.setProvisioningPayload({a: 'b'});
U kunt deze code commentaar geven, omdat deze niet nodig is voor deze zelfstudie. U kunt een aangepaste nettolading gebruiken wanneer u een webhook voor aangepaste toewijzing gebruikt om uw apparaat toe te wijzen aan een IoT Hub. Zie Zelfstudie: Aangepast toewijzingsbeleid gebruiken voor meer informatie.
De
provisioningClient.register()
-methode probeert uw apparaat te registreren.Voer in de opdrachtprompt de volgende opdrachten uit om omgevingsvariabelen in te stellen die door het voorbeeld worden gebruikt:
- Met de eerste opdracht wordt de
PROVISIONING_HOST
omgevingsvariabele ingesteld op het eindpunt van het globale apparaat. Dit eindpunt is hetzelfde voor alle DPS-exemplaren. - Vervang
<id-scope>
door het id-bereik dat u hebt gekopieerd uit Azure Portal. - Vervang
<registration-id>
door de registratie-id die u hebt gekozen in Kies een unieke registratie-id voor het apparaat. - Vervang door
<derived-device-key>
de afgeleide apparaatsleutel die u hebt gegenereerd in Een apparaatsleutel afleiden.
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>
- Met de eerste opdracht wordt de
Bouw en voer de voorbeeldcode uit met behulp van de volgende opdrachten:
npm install
node register_symkey.js
U ziet nu iets vergelijkbaars met de volgende uitvoer. Als testbericht wordt een tekenreeks 'Hallo wereld' naar de hub verzonden.
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
De voorbeeldinrichtingscode voert de volgende taken uit, in volgorde:
Verifieert uw apparaat met uw Device Provisioning-resource met behulp van de volgende vier parameters:
PROVISIONING_HOST
PROVISIONING_IDSCOPE
PROVISIONING_REGISTRATION_ID
PROVISIONING_SYMMETRIC_KEY
Hiermee wordt het apparaat toegewezen aan de IoT-hub die al is gekoppeld aan uw Device Provisioning Service-exemplaar.
Hiermee wordt een testbericht verzonden naar de IoT-hub.
Het inrichtingsvoorbeeld bijwerken en uitvoeren met de apparaatgegevens:
Selecteer Overzicht in het hoofdmenu van Device Provisioning Service.
Kopieer de waarde van het id-bereik .
Open een opdrachtprompt en ga naar de map waarin het voorbeeldbestand, provision_symmetric_key.py, zich bevindt.
cd azure-iot-sdk-python\samples\async-hub-scenarios
Voer in de opdrachtprompt de volgende opdrachten uit om omgevingsvariabelen in te stellen die door het voorbeeld worden gebruikt:
- Met de eerste opdracht wordt de
PROVISIONING_HOST
omgevingsvariabele ingesteld op het eindpunt van het globale apparaat. Dit eindpunt is hetzelfde voor alle DPS-exemplaren. - Vervang
<id-scope>
door het id-bereik dat u hebt gekopieerd uit Azure Portal. - Vervang
<registration-id>
door de registratie-id die u hebt gekozen in Kies een unieke registratie-id voor het apparaat. - Vervang door
<derived-device-key>
de afgeleide apparaatsleutel die u hebt gegenereerd in Een apparaatsleutel afleiden.
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>
- Met de eerste opdracht wordt de
Installeer de azure-iot-device-bibliotheek door de volgende opdracht uit te voeren.
pip install azure-iot-device
Voer de Python-voorbeeldcode uit in provision_symmetric_key.py.
python provision_symmetric_key.py
U ziet nu iets vergelijkbaars met de volgende uitvoer. Sommige voorbeelden van telemetrieberichten over windsnelheid worden ook als test naar de hub verzonden.
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
De voorbeeldinrichtingscode voert de volgende taken uit, in volgorde:
Verifieert uw apparaat met uw Device Provisioning-resource met behulp van de volgende vier parameters:
GLOBAL_ENDPOINT
SCOPE_ID
REGISTRATION_ID
SYMMETRIC_KEY
Hiermee wordt het apparaat toegewezen aan de IoT-hub die al is gekoppeld aan uw Device Provisioning Service-exemplaar.
Hiermee wordt een testbericht verzonden naar de IoT-hub.
Het inrichtingsvoorbeeld bijwerken en uitvoeren met de apparaatgegevens:
Selecteer Overzicht in het hoofdmenu van Device Provisioning Service.
Kopieer de waarde van het id-bereik .
Open de Java-voorbeeldcode voor het apparaat om deze te bewerken. Het volledige pad naar de voorbeeldcode voor het apparaat is:
azure-iot-sdk-java/provisioning/provisioning-samples/provisioning-symmetrickey-individual-sample/src/main/java/samples/com/microsoft/azure/sdk/iot/ProvisioningSymmetricKeyIndividualEnrollmentSample.java
Stel de waarde van de volgende variabelen in voor uw DPS- en apparaatinschrijving:
- Vervang
[Your scope ID here]
door het id-bereik dat u hebt gekopieerd uit Azure Portal. - Vervang
[Your Provisioning Service Global Endpoint here]
door het globale apparaateindpunt: global.azure-devices-provisioning.net. Dit eindpunt is hetzelfde voor alle DPS-exemplaren. - Vervang door
[Enter your Symmetric Key here]
de afgeleide apparaatsleutel die u hebt gegenereerd in Een apparaatsleutel afleiden. - Vervang
[Enter your Registration ID here]
door de registratie-id die u hebt gekozen in Kies een unieke registratie-id voor het apparaat.
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]";
Let op
Houd er rekening mee dat deze stap de afgeleide apparaatsleutel verlaat die is opgenomen als onderdeel van de installatiekopieën voor elk apparaat, wat geen aanbevolen beveiligingsprocedures is. Dit is een van de redenen waarom beveiliging en gebruiksgemak vaak compromissen zijn. U moet de beveiliging van uw apparaten volledig controleren op basis van uw eigen vereisten.
- Vervang
Open een opdrachtprompt voor compileren. Ga naar de projectmap van het inrichtingsvoorbeeld van de Java SDK-opslagplaats.
cd azure-iot-sdk-java\provisioning\provisioning-device-client-samples\provisioning-symmetrickey-individual-sample
Bouw het voorbeeld.
mvn clean install
Ga naar de
target
map en voer het gemaakte.jar
bestand uit. Vervang in dejava
opdracht de{version}
tijdelijke aanduiding door de versie in de.jar
bestandsnaam op uw computer.cd target java -jar ./provisioning-symmetrickey-individual-sample-{version}-with-deps.jar
U ziet nu iets vergelijkbaars met de volgende uitvoer.
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 [aaaa0000-bb11-2222-33cc-444444dddddd] Message Id [aaaa0000-bb11-2222-33cc-444444dddddd] ) 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 [aaaa0000-bb11-2222-33cc-444444dddddd] Message Id [aaaa0000-bb11-2222-33cc-444444dddddd] ) 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 [aaaa0000-bb11-2222-33cc-444444dddddd] Message Id [aaaa0000-bb11-2222-33cc-444444dddddd] ) 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 [aaaa0000-bb11-2222-33cc-444444dddddd] Message Id [aaaa0000-bb11-2222-33cc-444444dddddd] ) with status OK Message received! Response status: OK
De registratie van de apparaatinrichting bevestigen
In deze zelfstudie hebt u het beleid voor statische configuratietoewijzing gebruikt om apparaten toe te wijzen die zich registreren via de inschrijvingsgroep aan dezelfde IoT-hub. Voor toewijzingen waarbij een apparaat kan worden ingericht voor een van de verschillende IoT-hubs, kunt u de registratierecords van de inschrijvingsgroep controleren om te zien voor welke IoT-hub het apparaat is ingericht:
Ga in Azure Portal naar uw DPS-exemplaar.
Selecteer Inschrijvingen beheren in het menu Instellingen.
Selecteer Inschrijvingsgroepen.
Selecteer de inschrijvingsgroep die u voor deze zelfstudie hebt gemaakt.
Selecteer registratiestatus op de pagina Details van de inschrijvingsgroep.
Zoek de apparaat-id voor de kolom Apparaat-id van uw apparaat en noteer de IoT-hub in de kolom Toegewezen IoT-hub.
U kunt de apparaatrecord selecteren om meer details weer te geven, zoals de eerste dubbel die aan het apparaat is toegewezen.
Ga als volgende te werk om het apparaat op uw IoT-hub te verifiëren:
Ga in Azure Portal naar de IoT-hub waaraan uw apparaat is toegewezen.
Selecteer Apparaten in het menu Apparaatbeheer.
Als uw apparaat is ingericht, moet de apparaat-id worden weergegeven in de lijst, waarbij status is ingesteld als ingeschakeld. Als u uw apparaat niet ziet, selecteert u Vernieuwen.
Notitie
Als u de initiële status van de apparaatdubbel hebt gewijzigd van de standaardwaarde in de inschrijvingsgroep, kan een apparaat de gewenste dubbelstatus ophalen uit de hub en dienovereenkomstig handelen. Zie Apparaatdubbels begrijpen en gebruiken in IoT Hub voor meer informatie.
Meer apparaten inrichten
Volg de stappen in de voorgaande secties om meer apparaten in te richten via de inschrijvingsgroep:
Een apparaatsleutel afleiden. Zoals u eerder hebt gedaan, gebruikt u de primaire sleutel voor de inschrijvingsgroep als de groepssleutel.
Voer de apparaatinrichtingscode uit. Vervang de benodigde artefacten door uw nieuwe afgeleide apparaatsleutel en registratie-id.
Resources opschonen
Als u van plan bent om door te gaan met het voorbeeld van de apparaatclient, moet u de resources die in deze zelfstudie zijn gemaakt, niet opschonen. Als u niet van plan bent om door te gaan, gebruikt u de volgende stappen om alle resources te verwijderen die in deze zelfstudie zijn gemaakt.
Uw inschrijvingsgroep verwijderen
Als u een registratiegroep verwijdert, worden de bijbehorende registratierecords niet verwijderd. Deze zwevende records tellen mee voor het quotum voor registraties voor het DPS-exemplaar. Daarom is het raadzaam om alle registratierecords te verwijderen die zijn gekoppeld aan een inschrijvingsgroep voordat u de inschrijvingsgroep zelf verwijdert.
Ga in Azure Portal naar uw DPS-exemplaar.
Selecteer Inschrijvingen beheren in het menu Instellingen.
Selecteer het tabblad Inschrijvingsgroepen .
Selecteer de naam van de inschrijvingsgroep die u voor deze zelfstudie hebt gebruikt om de bijbehorende detailpagina te openen.
Selecteer registratiestatus op de pagina Inschrijvingsgegevens. Schakel vervolgens het selectievakje in naast de kolomkop Apparaat-id om alle registratierecords voor de inschrijvingsgroep te selecteren. Selecteer Verwijderen boven aan de pagina om de registratierecords te verwijderen.
Ga terug naar de pagina Inschrijvingen beheren.
Schakel het selectievakje in naast de naam van de inschrijvingsgroep die u voor deze zelfstudie hebt gebruikt.
Selecteer Verwijderen bovenaan de pagina.
Apparaatregistraties verwijderen uit IoT Hub
Ga in Azure Portal naar de IoT-hub waaraan uw apparaat is toegewezen.
Selecteer Apparaten in de sectie Apparaatbeheer van het navigatiemenu.
Schakel het selectievakje in naast de apparaat-id van de apparaten die u in deze zelfstudie hebt geregistreerd.
Selecteer Verwijderen bovenaan de pagina.
Volgende stappen
In deze zelfstudie hebt u meerdere apparaten ingericht voor één IoT-hub met behulp van een inschrijvingsgroep. Hierna leert u hoe u IoT-apparaten in meerdere hubs inricht.