Share via


Öğretici: Simetrik anahtar kayıt gruplarını kullanarak cihaz sağlama

Bu öğreticide, bir kayıt grubu kullanarak tek bir IoT Hub'a birden çok sanal simetrik anahtar cihazını güvenli bir şekilde sağlama gösterilmektedir.

Azure IoT Hub Cihaz Sağlama Hizmeti, cihaz sağlama için iki tür kaydı destekler:

  • Kayıt grupları: Birden fazla ilgili cihazı kaydetmek için kullanılır. Bu öğreticide kayıt gruplarıyla sağlama gösterilmektedir.
  • Bireysel kayıtlar: Tek bir cihazı kaydetmek için kullanılır.

Azure IoT Hub Cihaz Sağlama Hizmeti, cihaz sağlama için üç kimlik doğrulama biçimi destekler:

  • X.509 sertifikaları
  • Güvenilen platform modülü (TPM)
  • Simetrik anahtarlar - Bu öğreticide simetrik anahtar kanıtlama gösterilmektedir

Bazı cihazların sertifika, TPM veya cihazı güvenli bir şekilde tanımlamak için kullanılabilecek başka bir güvenlik özelliği olmayabilir. Bu tür cihazlar için Azure IoT Hub Cihaz Sağlama Hizmeti (DPS) simetrik anahtar kanıtlamasını içerir. Simetrik anahtar kanıtlama, MAC adresi veya seri numarası gibi benzersiz bilgilere dayalı olarak bir cihazı tanımlamak için kullanılabilir.

Bu öğreticide aşağıdaki hedefleri tamamlaacaksınız:

  • Her cihaz için benzersiz bir kayıt kimliği tanımlayın.
  • Simetrik anahtar kanıtlaması kullanan bir kayıt grubu oluşturun.
  • Benzersiz kayıt kimliğini ve paylaşılan kayıt grubu anahtarını kullanarak her cihaz için bir cihaz anahtarı oluşturun.
  • Azure IoT cihaz SDK'larında cihaz anahtarını ve örnek kodu kullanarak cihazları sağlayın.

Bu öğretici, Windows tabanlı bir iş istasyonuna yöneliktir. Ancak yordamları Linux üzerinde gerçekleştirebilirsiniz. Linux örneği için bkz . Öğretici: Coğrafi gecikme süresi için sağlama.

Not

Daha önce Hızlı Başlangıç: Sanal bir simetrik anahtar cihazı sağladıysanız ve Azure kaynaklarınızı ve geliştirme ortamınızı hala ayarladıysanız, bu öğreticide Simetrik anahtar kayıt grubu oluşturma bölümüne geçebilirsiniz.

Önkoşullar

  • Windows geliştirme ortamı kullanıyorsanız Visual Studio 2022'yi 'C++ile masaüstü geliştirme' iş yükü etkin olarak yükleyin. Visual Studio 2019, Visual Studio 2017 ve Visual Studio 2015 de desteklenir. Linux veya macOS için SDK belgelerindeki Geliştirme ortamınızı hazırlama bölümündeki uygun bölüme bakın.

  • En son CMake derleme sistemini yükleyin. CMake yürütülebilir dosyasını yolunuza ekleyen seçeneği işaretlediğinizden emin olun.

    Önemli

    Yüklemeyi başlatmadan CMake önce makinenizde Visual Studio önkoşullarının (Visual Studio ve 'C++ile masaüstü geliştirme' iş yükü) yüklü olduğunu onaylayın. Önkoşullar sağlandıktan ve indirme doğrulandıktan sonra, CMake derleme sistemini yükleyin. Ayrıca, CMake derleme sisteminin eski sürümlerinin bu makalede kullanılan çözüm dosyasını oluşturamaya çalışmadığını unutmayın. CMake'nin en son sürümünü kullandığınızdan emin olun.

  • Windows tabanlı makinenize .NET SDK 6.0 veya üzerini yükleyin. Sürümünüzü denetlemek için aşağıdaki komutu kullanabilirsiniz.

    dotnet --info
    
  • Windows tabanlı makinenize yüklü Python 3.7 veya üzerini yükleyin. komutunu çalıştırarak python --versionPython sürümünüzü de kontrol edebilirsiniz.
  • En son Git sürümünü yükleyin. Git'in komut penceresi tarafından erişilebilen ortam değişkenlerine eklendiğinden emin olun. Yüklenecek araçların en son sürümü git için, yerel Git deponuzla etkileşim kurmak için kullanabileceğiniz komut satırı uygulaması Git Bash'i içeren Yazılım Özgürlüğü Koruması'nın Git istemci araçlarına bakın.

Geliştirme ortamınızı hazırlama

Bu bölümde, C için Azure IoT Cihaz SDK'sını derlemek için bir geliştirme ortamı hazırlamış olacaksınız. Örnek kod, cihazın önyükleme sırası sırasında cihazı sağlar.

  1. Web tarayıcısında Azure IoT C SDK'sının Yayın sayfasına gidin.

  2. Azure IoT C SDK'sının en son sürümünün etiket adını kopyalayın, örneğin: lts_03_2024.

  3. Bir Windows komut istemi açın ve C GitHub deposu için Azure IoT Cihaz SDK'sının en son sürümünü kopyalamak için aşağıdaki komutları çalıştırın. değerini önceki adımda kopyaladığınız etiketle değiştirin <release-tag> .

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

    Bu işlemin tamamlanması birkaç dakika sürebilir.

  4. İşlem tamamlandığında dizinden azure-iot-sdk-c aşağıdaki komutları çalıştırın:

    mkdir cmake
    cd cmake
    
  5. Kod örneği, kanıtlama sağlamak için bir simetrik anahtar kullanır. Sdk'nın geliştirme istemci platformunuza özgü, cihaz sağlama istemcisini içeren bir sürümünü oluşturmak için aşağıdaki komutu çalıştırın:

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

    İpucu

    cmake C++ derleyicinizi bulamazsa, yukarıdaki komutu çalıştırırken derleme hataları alabilirsiniz. Böyle bir durumda Visual Studio komut isteminde komutunu çalıştırmayı deneyin.

  6. Derleme başarıyla tamamlandığında, son birkaç çıkış satırı aşağıdaki çıkışa benzer olacaktır:

    $ 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. Bir komut istemi veya Git Bash terminali açın.

  2. Aşağıdaki komutu kullanarak C# GitHub deposu için Azure IoT SDK'sını kopyalayın:

    git clone https://github.com/Azure/azure-iot-sdk-csharp.git
    
  1. Bir komut istemi veya Git Bash terminali açın.

  2. Aşağıdaki komutu kullanarak Node.js GitHub deposu için Azure IoT SDK'sını kopyalayın:

    git clone https://github.com/Azure/azure-iot-sdk-node.git --recursive
    
  1. Bir komut istemi veya Git Bash terminali açın.

  2. Aşağıdaki komutu kullanarak Python GitHub deposu için Azure IoT Cihaz SDK'sını kopyalayın:

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

    Not

    Bu öğreticide kullanılan örnekler azure-iot-sdk-python deposunun v2 dalında yer alır. Python SDK'sının V3'leri beta sürümünde kullanılabilir. Python SDK'sının V3 sürümünü kullanmak üzere V2 kod örneklerini güncelleştirme hakkında bilgi için bkz . Python için Azure IoT Cihaz SDK'sı geçiş kılavuzu.

  1. Bir komut istemi veya Git Bash terminali açın.

  2. Aşağıdaki komutu kullanarak Java GitHub deposu için Azure IoT SDK'sını kopyalayın:

    git clone https://github.com/Azure/azure-iot-sdk-java.git --recursive
    
  3. Kök azure-iot-sdk-java dizine gidin ve gerekli tüm paketleri indirmek için projeyi oluşturun. Bu adımın tamamlanması birkaç dakika sürebilir.

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

Simetrik anahtar kayıt grubu oluşturma

  1. Azure portalında oturum açın ve Cihaz Sağlama Hizmeti örneğine gidin.

  2. Gezinti menüsünün Ayarlar bölümünde Kayıtları yönet'i seçin.

  3. Kayıt grubu ekle'yi seçin.

  4. Kayıt grubu ekle sayfasının Kayıt + sağlama sekmesinde, kayıt grubu ayrıntılarını yapılandırmak için aşağıdaki bilgileri sağlayın:

    Alan Açıklama
    Tasdik Kanıtlama mekanizması olarak Simetrik anahtar'ı seçin.
    Simetrik anahtar ayarları Rastgele oluşturulan anahtarları kullanmak istiyorsanız Simetrik anahtarları otomatik olarak oluştur kutusunu işaretleyin. Kendi anahtarlarınızı sağlamak istiyorsanız bu kutunun işaretini kaldırın.
    Grup adı Cihaz grubu için bir ad belirtin. Kayıt grubu adı, alfasayısal karakterlerin yanı sıra özel karakterler içeren büyük/küçük harfe duyarlı olmayan bir dizedir (en fazla 128 karakter uzunluğundadır): '-', '.', '_', ':'. Son karakter alfasayısal veya tire ('-') olmalıdır.
    Sağlama durumu Bu kayıt grubunun cihazları sağlamak için kullanılabilir olmasını istiyorsanız Bu kaydı etkinleştir kutusunu işaretleyin. Grubun devre dışı bırakılmasını istiyorsanız bu kutunun işaretini kaldırın. Bu ayarı daha sonra değiştirebilirsiniz.
    yeniden sağlama ilkesi DPS'nin yeniden sağlama isteyen cihazları nasıl işlemesini istediğinizi yansıtan bir yeniden sağlama ilkesi seçin. Daha fazla bilgi için bkz . İlkeleri yeniden sağlama

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

  5. İleri: IoT hub'ları'ı seçin.

  6. Kayıt grubu ekle sayfasının IoT hub'ları sekmesinde, kayıt grubunun cihazları hangi IoT hub'larına sağlayabileceğini belirlemek için aşağıdaki bilgileri sağlayın:

    Alan Açıklama
    Hedef IoT hub'ları Bağlı IoT hub'larınızdan birini veya daha fazlasını seçin veya bir IoT hub'ına yeni bir bağlantı ekleyin. IoT hub'larını DPS örneğinize bağlama hakkında daha fazla bilgi edinmek için bkz . IoT hub'larını bağlama ve yönetme.
    Ayırma ilkesi Birden fazla bağlı IoT hub'ı seçtiyseniz cihazları farklı hub'lara nasıl atamak istediğinizi seçin. Ayırma ilkeleri hakkında daha fazla bilgi edinmek için bkz . Ayırma ilkelerini kullanma.

    Yalnızca bir bağlantılı IoT hub'ı seçtiyseniz, Eşit ağırlıklı dağıtım ilkesini kullanmanızı öneririz.

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

  7. İleri: Cihaz ayarları'nı seçin

  8. Kayıt grubu ekle sayfasının Cihaz ayarları sekmesinde, yeni sağlanan cihazların nasıl yapılandırılacağını tanımlamak için aşağıdaki bilgileri sağlayın:

    Alan Açıklama
    IoT Edge Bu grup aracılığıyla sağlanan tüm cihazlar Azure IoT Edge çalıştıracaksa sağlanan cihazlarda IoT Edge'i etkinleştir seçeneğini işaretleyin. Bu grup yalnızca IoT Edge özellikli olmayan cihazlar içinse bu kutunun işaretini kaldırın. Bir gruptaki tüm cihazlar IoT Edge etkin olur veya hiçbiri olamaz.
    Cihaz etiketleri Sağlanan cihazların cihaz ikizlerine uygulamak istediğiniz etiketleri sağlamak için bu metin kutusunu kullanın.
    İstenen özellikler Sağlanan cihazların cihaz ikizlerine uygulamak istediğiniz tüm istenen özellikleri sağlamak için bu metin kutusunu kullanın.

    Daha fazla bilgi için bkz. IoT Hub'ındaki cihaz ikizlerini kavrama ve kullanma.

  9. Sonraki: Gözden geçirme ve oluşturma’yı seçin.

  10. Gözden Geçir + oluştur sekmesinde tüm değerlerinizi doğrulayın ve Oluştur'u seçin.

Kayıt grubunu oluşturduğunuzda, DPS bir birincil anahtar ve ikincil anahtar oluşturur ve bunları kayıt girişine ekler. Simetrik anahtar kayıt grubunuz, Kayıt Grupları sekmesindeki Grup adı sütununun altında görünür.

Kaydı açın ve Birincil Anahtarın değerini kopyalayın. Bu anahtar, grup anahtarınızdır.

Cihaz için benzersiz bir kayıt kimliği seçin

Her cihazı tanımlamak için benzersiz bir kayıt kimliği tanımlanmalıdır. MAC adresini, seri numarasını veya cihazdaki herhangi bir benzersiz bilgiyi kullanabilirsiniz.

Bu örnekte, bir kayıt kimliği için aşağıdaki dizeyi oluşturan bir MAC adresi ve seri numarasının birleşimini kullanırız.

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

Her cihaz için benzersiz kayıt kimlikleri oluşturun. Kayıt kimliği, alfasayısal karakterlerden oluşan büyük/küçük harfe duyarlı olmayan bir dizedir (en fazla 128 karakter uzunluğundadır) ve şu özel karakterleri içerir: - . _ :. Son karakter alfasayısal veya tire (-) olmalıdır.

Cihaz anahtarı türet

Cihaz anahtarları oluşturmak için kayıt grubu birincil anahtarını kullanarak her cihaz için kayıt kimliğinin HMAC-SHA256 karması hesaplayın. Sonuç daha sonra her cihaz için Temel 64 biçimine dönüştürülür.

Uyarı

Her cihaz için cihaz kodunuz yalnızca bu cihaz için türetilmiş cihaz anahtarını içermelidir. Grup birincil anahtarınızı cihaz koduna eklemeyin. Güvenliği aşılmış bir grup anahtarı, kimliği doğrulanan tüm cihazların güvenliğini tehlikeye atabilir.

Azure CLI için IoT uzantısı, türetilmiş cihaz anahtarları oluşturmak için az iot dps enrollment-group compute-device-key komutunu sağlar. Bu komut hem Windows tabanlı hem de Linux sistemlerden kullanılabilir.

parametresinin --key değerini kayıt grubunuzdaki Birincil Anahtar ile değiştirin.

parametresinin --registration-id değerini kayıt kimliğiniz ile değiştirin.

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

Örnek sonuç:

"Jsm0lyGpjaVYVP2g3FnmnmG9dI/9qU24wNoykUmermc="

Her cihaz, sağlama sırasında kayıt grubuyla simetrik anahtar kanıtlaması gerçekleştirmek için türetilmiş cihaz anahtarını ve benzersiz kayıt kimliğini kullanır.

Cihaz sağlama kodunu hazırlama ve çalıştırma

Bu bölümde, cihazın önyükleme sırasını Cihaz Sağlama Hizmeti örneğine göndermek için cihaz örnek kodunu güncelleştirirsiniz. Bu önyükleme sırası cihazın tanınmasına, kimliğinin doğrulanmasına ve Cihaz Sağlama Hizmeti örneğine bağlı bir IoT hub'ına atanmalarına neden olur.

Örnek sağlama kodu aşağıdaki görevleri sırayla gerçekleştirir:

  1. Aşağıdaki üç parametreyi kullanarak Cihazınızın Kimliğini Cihaz Sağlama kaynağınızla doğrular:

    • Cihaz Sağlama Hizmetinizin Kimlik Kapsamı
    • Cihazınızın kayıt kimliği.
    • Cihazınız için türetilmiş cihaz anahtarı.
  2. Cihazı, Cihaz Sağlama Hizmeti örneğiniz ile bağlantılı olan IoT hub'ına atar.

Sağlama örneğini cihaz bilgilerinizle güncelleştirmek ve çalıştırmak için:

  1. Cihaz Sağlama Hizmetinizin ana menüsünde Genel Bakış'ı seçin.

  2. Kimlik Kapsamı değerini kopyalayın.

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

  3. Visual Studio’da, CMake çalıştırılarak oluşturulan azure_iot_sdks.sln çözüm dosyasını açın. Çözüm dosyası şu konumda olmalıdır:

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

    İpucu

    Dosya cmake dizininizde oluşturulmadıysa, CMake derleme sisteminin son sürümünü kullandığınızdan emin olun.

  4. Visual Studio'nun Çözüm Gezgini penceresinde Provision_Samples klasörüne gidin. prov_dev_client_sample adlı örnek projeyi genişletin. Kaynak Dosyalar'ı genişletin ve prov_dev_client_sample.c dosyasını açın.

  5. Sabiti id_scope bulun ve değerini Azure portalından kopyaladığınız Kimlik Kapsamı değeriyle değiştirin.

    static const char* id_scope = "0ne00002193";
    
  6. Aynı dosyada main() işlevinin tanımını bulun. hsm_type değişkeninin aşağıda gösterildiği gibi SECURE_DEVICE_TYPE_SYMMETRIC_KEY değerine ayarlandığından emin olun:

    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. prov_dev_client_sample.c'de açıklama satırı yapılan aramasını prov_dev_set_symmetric_key_info() bulun.

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

    İşlev çağrısını açıklamayı kaldırın ve yer tutucu değerlerini (köşeli ayraçlar dahil) Cihaz için benzersiz bir kayıt kimliği seçme bölümünde seçtiğiniz kayıt kimliğiyle ve Cihaz anahtarı türetme bölümünde oluşturduğunuz türetilmiş cihaz anahtarıyla değiştirin.

    // 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=");
    

    Dikkat

    Bu adımın, önerilen bir güvenlik en iyi uygulaması olmayan, her cihaz için görüntünün bir parçası olarak eklenen türetilmiş cihaz anahtarını bıraktığına dikkat edin. Bu, güvenlik ve kullanım kolaylığının genellikle dezavantajlar olmasının bir nedenidir. Kendi gereksinimlerinize göre cihazlarınızın güvenliğini tamamen gözden geçirmeniz gerekir.

  8. Dosyayı kaydedin.

  9. prov_dev_client_sample projesine sağ tıklayın ve Başlangıç Projesi Olarak Ayarla'yı seçin.

  10. Çözümü çalıştırmak için Visual Studio menüsünde Hata Ayıkla>Hata ayıklama olmadan başlat'ı seçin. Projeyi yeniden oluşturma isteminde, çalıştırmadan önce projeyi yeniden derlemek için Evet'i seçin.

    Aşağıdaki çıkış, ioT hub'ına atanacak sağlama Hizmeti örneğine başarıyla bağlanan bir cihaz örneğidir:

    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:
    

Örnek sağlama kodu aşağıdaki görevleri gerçekleştirir:

  1. Aşağıdaki üç parametreyi kullanarak Cihazınızın Kimliğini Cihaz Sağlama kaynağınızla doğrular:

    • Cihaz Sağlama Hizmetinizin Kimlik Kapsamı
    • Cihazınızın kayıt kimliği.
    • Cihazınız için türetilmiş cihaz anahtarı.
  2. Cihazı, Cihaz Sağlama Hizmeti örneğiniz ile bağlantılı olan IoT hub'ına atar.

  3. IoT hub'ına bir test telemetri iletisi gönderir.

Sağlama örneğini cihaz bilgilerinizle güncelleştirmek ve çalıştırmak için:

  1. Cihaz Sağlama Hizmetinizin ana menüsünde Genel Bakış'ı seçin.

  2. Kimlik Kapsamı değerini kopyalayın.

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

  3. Bir komut istemi açın ve kopyalanan SDK deposundaki SymmetricKeySample'a gidin:

    cd .\azure-iot-sdk-csharp\provisioning\device\samples\how to guides\SymmetricKeySample
    
  4. SymmetricKeySample klasöründe, Parameters.cs bir metin düzenleyicisinde açın. Bu dosya, örnek tarafından başvuruda bulunılan parametreleri gösterir. Bu makalede örneği çalıştırırken yalnızca ilk üç gerekli parametre kullanılır. Bu dosyadaki kodu gözden geçirin. Değişiklik gerekmez.

    Parametre Zorunlu Açıklama
    --i veya --IdScope True DPS örneğinin Kimlik Kapsamı
    --r veya --RegistrationId True Cihazın kayıt kimliği. Kayıt kimliği, alfasayısal karakterlerin yanı sıra özel karakterler içeren büyük/küçük harfe duyarlı olmayan bir dizedir (en fazla 128 karakter uzunluğundadır): '-', '.', '_', ':'. Son karakter alfasayısal veya tire ('-') olmalıdır.
    --p veya --PrimaryKey True Tek bir kaydın birincil anahtarı veya grup kaydının türetilmiş cihaz anahtarı.
    --g veya --GlobalDeviceEndpoint False Cihazların bağlanabilmesi için genel uç nokta. Varsayılan değer: global.azure-devices-provisioning.net
    --t veya --TransportType False Cihaz sağlama örneğiyle iletişim kurmak için kullanılacak aktarım. varsayılan değeridir Mqtt. Olası değerler , , Mqtt_WebSocket_Only, Mqtt_Tcp_Only, Amqp, Amqp_WebSocket_Only, Amqp_Tcp_onlyve Http1değerlerini içerirMqtt.
  5. SymmetricKeySample klasöründe, ProvisioningDeviceClientSample.cs bir metin düzenleyicisinde açın. Bu dosya, sanal simetrik anahtar cihazınızı sağlamak için ProvisioningDeviceClient sınıfıyla birlikte SecurityProviderSymmetricKey sınıfının nasıl kullanıldığını gösterir. Bu dosyadaki kodu gözden geçirin. Değişiklik gerekmez.

  6. Aşağıdaki komutu kullanarak örnek kodu derleyin ve çalıştırın:

    • değerini Azure portalından kopyaladığınız Kimlik Kapsamı ile değiştirin<id-scope>.
    • değerini cihaz için benzersiz bir kayıt kimliği seçin bölümünde seçtiğiniz kayıt kimliğiyle değiştirin<registration-id>.
    • değerini, oluşturduğunuz türetilmiş cihaz anahtarıyla değiştirin <primarykey> .
    dotnet run --i <id-scope> --r <registration-id> --p <primarykey>
    
  7. Aşağıdaki çıkışa benzer bir şey görmeniz gerekir. Hub'a test iletisi olarak bir "TestMessage" dizesi gönderilir.

    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.
    

Örnek sağlama kodu aşağıdaki görevleri sırayla gerçekleştirir:

  1. Aşağıdaki dört parametreyi kullanarak Cihazınızın Kimliğini Cihaz Sağlama kaynağınızla doğrular:

    • PROVISIONING_HOST
    • PROVISIONING_IDSCOPE
    • PROVISIONING_REGISTRATION_ID
    • PROVISIONING_SYMMETRIC_KEY
  2. Cihazı, Cihaz Sağlama Hizmeti örneğiniz ile bağlantılı olan IoT hub'ına atar.

  3. IoT hub'ına bir test telemetri iletisi gönderir.

Sağlama örneğini cihaz bilgilerinizle güncelleştirmek ve çalıştırmak için:

  1. Cihaz Sağlama Hizmetinizin ana menüsünde Genel Bakış'ı seçin.

  2. Kimlik Kapsamı değerini kopyalayın.

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

  3. Node.js komutları yürütmek için bir komut istemi açın ve aşağıdaki dizine gidin:

    cd azure-iot-sdk-node\provisioning\device\samples
    
  4. Sağlama/cihaz/örnekler klasöründe register_symkey.js açın ve kodu gözden geçirin.

    Örnek, aktarım protokolü olarak varsayılan olarak MQTT'ye sahiptir. Farklı bir protokol kullanmak istiyorsanız, aşağıdaki satırı açıklama satırı yapın ve uygun protokol için satırın açıklamasını kaldırın.

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

    Örnek kodun özel bir yük ayarlandığını da fark edin:

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

    Bu öğretici için gerekli olmadığından bu kodu açıklama satırı yapabilirsiniz. Özel bir yük, cihazınızı bir IoT Hub'a atamak için özel ayırma web kancası kullandığınızda kullanılabilir. Daha fazla bilgi için bkz . Öğretici: Özel ayırma ilkelerini kullanma.

    provisioningClient.register() yöntemi, cihazınızın kaydını dener.

  5. Komut isteminde aşağıdaki komutları çalıştırarak örnek tarafından kullanılan ortam değişkenlerini ayarlayın:

    • İlk komut ortam değişkenini PROVISIONING_HOSTGenel cihaz uç noktasına ayarlar. Bu uç nokta tüm DPS örnekleri için aynıdır.
    • değerini Azure portalından kopyaladığınız Kimlik Kapsamı ile değiştirin<id-scope>.
    • değerini cihaz için benzersiz bir kayıt kimliği seçin bölümünde seçtiğiniz kayıt kimliğiyle değiştirin<registration-id>.
    • değerini, Cihaz anahtarı türet bölümünde oluşturduğunuz türetilmiş cihaz anahtarıyla değiştirin<defived-device-key>.
    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. Aşağıdaki komutları kullanarak örnek kodu derleyin ve çalıştırın:

     npm install
    
    node register_symkey.js
    
  7. Şimdi aşağıdaki çıkışa benzer bir şey görmeniz gerekir. Hub'a test iletisi olarak bir "Merhaba Dünya" dizesi gönderilir.

    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
    

Örnek sağlama kodu aşağıdaki görevleri sırayla gerçekleştirir:

  1. Aşağıdaki dört parametreyi kullanarak Cihazınızın Kimliğini Cihaz Sağlama kaynağınızla doğrular:

    • PROVISIONING_HOST
    • PROVISIONING_IDSCOPE
    • PROVISIONING_REGISTRATION_ID
    • PROVISIONING_SYMMETRIC_KEY
  2. Cihazı, Cihaz Sağlama Hizmeti örneğiniz ile bağlantılı olan IoT hub'ına atar.

  3. IoT hub'ına bir test telemetri iletisi gönderir.

Sağlama örneğini cihaz bilgilerinizle güncelleştirmek ve çalıştırmak için:

  1. Cihaz Sağlama Hizmetinizin ana menüsünde Genel Bakış'ı seçin.

  2. Kimlik Kapsamı değerini kopyalayın.

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

  3. Bir komut istemi açın ve örnek dosyanın (provision_symmetric_key.py) bulunduğu dizine gidin.

    cd azure-iot-sdk-python\samples\async-hub-scenarios
    
  4. Komut isteminde aşağıdaki komutları çalıştırarak örnek tarafından kullanılan ortam değişkenlerini ayarlayın:

    • İlk komut ortam değişkenini PROVISIONING_HOSTGenel cihaz uç noktasına ayarlar. Bu uç nokta tüm DPS örnekleri için aynıdır.
    • değerini Azure portalından kopyaladığınız Kimlik Kapsamı ile değiştirin<id-scope>.
    • değerini cihaz için benzersiz bir kayıt kimliği seçin bölümünde seçtiğiniz kayıt kimliğiyle değiştirin<registration-id>.
    • değerini, Cihaz anahtarı türet bölümünde oluşturduğunuz türetilmiş cihaz anahtarıyla değiştirin<defived-device-key>.
    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. Aşağıdaki komutu çalıştırarak azure-iot-device kitaplığını yükleyin.

    pip install azure-iot-device
    
  6. python örnek kodunu provision_symmetric_key.py çalıştırın.

    python provision_symmetric_key.py
    
  7. Şimdi aşağıdaki çıkışa benzer bir şey görmeniz gerekir. Bazı örnek rüzgar hızı telemetri iletileri de test olarak hub'a gönderilir.

    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
    

Örnek sağlama kodu aşağıdaki görevleri sırayla gerçekleştirir:

  1. Aşağıdaki dört parametreyi kullanarak Cihazınızın Kimliğini Cihaz Sağlama kaynağınızla doğrular:

    • GLOBAL_ENDPOINT
    • SCOPE_ID
    • REGISTRATION_ID
    • SYMMETRIC_KEY
  2. Cihazı, Cihaz Sağlama Hizmeti örneğiniz ile bağlantılı olan IoT hub'ına atar.

  3. IoT hub'ına bir test telemetri iletisi gönderir.

Sağlama örneğini cihaz bilgilerinizle güncelleştirmek ve çalıştırmak için:

  1. Cihaz Sağlama Hizmetinizin ana menüsünde Genel Bakış'ı seçin.

  2. Kimlik Kapsamı değerini kopyalayın.

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

  3. Düzenlemek için Java cihaz örnek kodunu açın. Cihaz örnek kodunun tam yolu:

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

  4. DPS'niz ve cihaz kaydınız için aşağıdaki değişkenlerin değerini ayarlayın:

    • değerini Azure portalından kopyaladığınız Kimlik Kapsamı ile değiştirin[Your scope ID here].
    • değerini Genel cihaz uç noktasıyla değiştirin[Your Provisioning Service Global Endpoint here]: global.azure-devices-provisioning.net. Bu uç nokta tüm DPS örnekleri için aynıdır.
    • değerini, Cihaz anahtarı türet bölümünde oluşturduğunuz türetilmiş cihaz anahtarıyla değiştirin[Enter your Symmetric Key here].
    • değerini cihaz için benzersiz bir kayıt kimliği seçin bölümünde seçtiğiniz kayıt kimliğiyle değiştirin[Enter your Registration ID here].
    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]";
    

    Dikkat

    Bu adımın, önerilen bir güvenlik en iyi uygulaması olmayan, her cihaz için görüntünün bir parçası olarak eklenen türetilmiş cihaz anahtarını bıraktığına dikkat edin. Bu, güvenlik ve kullanım kolaylığının genellikle dezavantajlar olmasının bir nedenidir. Kendi gereksinimlerinize göre cihazlarınızın güvenliğini tamamen gözden geçirmeniz gerekir.

  5. Oluşturmak için bir komut istemi açın. Java SDK deposunun sağlama örnek proje klasörüne gidin.

    cd azure-iot-sdk-java\provisioning\provisioning-device-client-samples\provisioning-symmetrickey-individual-sample
    
  6. Örneği derleyin.

    mvn clean install
    
  7. Klasöre target gidin ve oluşturulan .jar dosyayı yürütür. komutunda java yer tutucusunu {version} makinenizdeki dosya adında bulunan .jar sürümle değiştirin.

    cd target
    java -jar ./provisioning-symmetrickey-individual-sample-{version}-with-deps.jar
    
  8. Şimdi aşağıdaki çıkışa benzer bir şey görmeniz gerekir.

    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
    

Cihaz sağlama kaydınızı onaylayın

Bu öğreticide , kayıt grubu aracılığıyla kaydolan cihazları aynı IoT hub'ına atamak için Statik yapılandırma ayırma ilkesini kullandınız. Ancak, bir cihazın birkaç IoT hub'ına sağlanabileceği ayırmalar için, cihazın hangi IoT hub'ına sağlandığını görmek için kayıt grubunun kayıt kayıtlarını inceleyebilirsiniz:

  1. Azure portalında DPS örneğine gidin.

  2. Ayarlar menüsünde Kayıtları yönet'i seçin.

  3. Kayıt grupları'nı seçin.

  4. Bu öğretici için oluşturduğunuz kayıt grubunu seçin.

  5. Kayıt Grubu Ayrıntıları sayfasında Kayıt durumu'nu seçin.

  6. Cihaz Cihaz Kimliği sütununuzun cihaz kimliğini bulun ve Atanan IoT hub sütunundaKi IoT hub'ını not edin.

    Cihaza atanan ilk ikiz gibi diğer ayrıntıları görmek için cihaz kaydını seçebilirsiniz.

IoT hub'ınızdaki cihazı doğrulamak için:

  1. Azure portalında, cihazınızın atandığı IoT hub'ına gidin.

  2. Cihaz yönetimi menüsünde Cihazlar'ı seçin.

  3. Cihazınız başarıyla sağlandıysa cihaz kimliği listede, Durum etkin olarak ayarlanmış olarak görünmelidir. Cihazınızı görmüyorsanız Yenile'yi seçin.

    Device is registered with the IoT hub

Not

İlk cihaz ikizi durumunu kayıt grubundaki varsayılan değerden değiştirdiyseniz, bir cihaz hub'dan istenen ikiz durumunu çekebilir ve buna göre hareket edebilir. Daha fazla bilgi için bkz. IoT Hub'ındaki cihaz ikizlerini kavrama ve kullanma.

Daha fazla cihaz sağlama

Kayıt grubu aracılığıyla daha fazla cihaz sağlamak için önceki bölümlerde verilen adımları izleyerek şunları yapın:

  1. Cihaz için benzersiz bir kayıt kimliği seçin.

  2. Bir cihaz anahtarı türet. Daha önce yaptığınız gibi, grup anahtarı olarak kayıt grubunun birincil anahtarını kullanın.

  3. Cihaz sağlama kodunu çalıştırın. Gerekli yapıtları yeni türetilmiş cihaz anahtarınız ve kayıt kimliğiniz ile değiştirin.

Kaynakları temizleme

Cihaz istemci örneği üzerinde çalışmaya ve keşfetmeye devam etmek istiyorsanız, bu öğreticide oluşturulan kaynakları temizlemeyin. Devam etmek istemiyorsanız, bu öğreticide oluşturulan tüm kaynakları silmek için aşağıdaki adımları kullanın.

Kayıt grubunuzu silme

Kayıt grubu silindiğinde, onunla ilişkilendirilmiş kayıt kayıtları silinmez. Bu yalnız bırakılmış kayıtlar, DPS örneğinin kayıt kotasına göre sayılır. Bu nedenle, kayıt grubunun kendisini silmeden önce bir kayıt grubuyla ilişkili tüm kayıt kayıtlarını silmek en iyi yöntemdir.

  1. Azure portalında DPS örneğine gidin.

  2. Ayarlar menüsünde Kayıtları yönet'i seçin.

  3. Kayıt grupları sekmesini seçin.

  4. Ayrıntılar sayfasını açmak için bu öğreticide kullandığınız kayıt grubunun adını seçin.

  5. Kayıt ayrıntıları sayfasında Kayıt durumu'nu seçin. Ardından Cihaz Kimliği sütun üst bilgisinin yanındaki onay kutusunu seçerek kayıt grubunun tüm kayıt kayıtlarını seçin. Kayıt kayıtlarını silmek için sayfanın üst kısmındaki Sil'i seçin.

  6. Kayıtları yönet sayfasına geri dönün.

  7. Bu öğretici için kullandığınız kayıt grubunun adının yanındaki onay kutusunu seçin.

  8. Sayfanın üst kısmından Sil’i seçin.

IoT Hub'dan cihaz kayıtlarını silme

  1. Azure portalında, cihazınızın atandığı IoT hub'ına gidin.

  2. Gezinti menüsünün Cihaz yönetimi bölümünden Cihazlar'ı seçin.

  3. Bu öğreticide kaydettiğiniz cihazların cihaz kimliğinin yanındaki onay kutusunu seçin.

  4. Sayfanın üst kısmından Sil’i seçin.

Sonraki adımlar

Bu öğreticide, kayıt grubunu kullanarak tek bir IoT hub'ına birden çok cihaz sağladınız. Ardından, IoT cihazlarını birden çok hub'da sağlamayı öğrenin.