Kılavuz: Coğrafi gecikme süresi için düzenleme

Bu öğretici, bir ayırma politikası kullanarak, birden çok sanal simetrik anahtar cihazını bir IoT Hubs grubuna güvenli bir şekilde nasıl sağlayabileceğinizi göstermektedir. IoT Hub Cihaz Sağlama Hizmeti (DPS), yerleşik ayırma ilkeleri ve özel ayırma ilkeleri desteği aracılığıyla çeşitli ayırma senaryolarını destekler.

Coğrafi konum/coğrafi gecikme süresi sağlanması yaygın bir tahsisat senaryosudur. Bir cihaz konumlar arasında hareket ettikçe, cihazın her konuma en yakın IoT hub'ına sağlanmasıyla ağ gecikme süresi iyileştirilir. Bu senaryoda, bölgelere yayılan bir grup IoT hub'ı kayıtlar için seçilir. Bu kayıtlar için yerleşik En düşük gecikme süresi ayırma ilkesi seçilir. Bu ilke, Cihaz Sağlama Hizmeti'nin cihaz gecikme süresini değerlendirmesine ve ioT hub'ları grubundan gizli IoT hub'ını belirlemesine neden olur.

Bu öğreticide, bölgeler arasında cihaz sağlamayı göstermek için Azure IoT C SDK'sından sanal bir cihaz örneği kullanılır. Bu öğreticide aşağıdaki adımları gerçekleştireceksiniz:

  • İki bölgesel IoT hub'ı (Batı ABD 2 ve Doğu ABD) oluşturmak için Azure CLI'yi kullanın
  • Cihazları coğrafi konum temelinde sağlayan bir kayıt oluşturma (en düşük gecikme süresi)
  • Aynı bölgelerde (Batı ABD 2 ve Doğu ABD) cihaz olarak görev yapmak üzere iki bölgesel Linux VM oluşturmak için Azure CLI'yi kullanın
  • Her iki Linux VM'de de Azure IoT C SDK'sı için geliştirme ortamını ayarlama
  • Cihazların simülasyonunu yapın ve en yakın bölgedeki IoT hub'ına sağlandığını doğrulayın.

Önemli

Bazı bölgeler zaman zaman Sanal Makinelerin oluşturulmasına yönelik kısıtlamaları zorunlu kılabilir. Bu kılavuzu yazarken westus2 ve eastus bölgeleri VM'lerin oluşturulmasına izin verdi. Bu bölgelerden birinde oluşturamıyorsanız farklı bir bölge deneyebilirsiniz. VM oluştururken Azure coğrafi bölgelerini seçme hakkında daha fazla bilgi edinmek için bkz . Azure'da sanal makineler için bölgeler

Önkoşullar

İki bölgesel IoT hub'ı oluşturma

Bu bölümde bir Azure kaynak grubu ve iki yeni bölgesel IoT hub kaynağı oluşturacaksınız. IoT hub'larından biri Batı ABD 2 bölgesi, diğeri ise Doğu ABD bölgesi içindir.

Önemli

Bu öğreticide oluşturulan tüm kaynaklar için aynı kaynak grubunu kullanmanızı öneririz. Aynı kaynak grubunu kullanmak, işlemi tamamladıktan sonra temizlemeyi kolaylaştırır.

  1. Azure Cloud Shell'de aşağıdaki az group create komutuyla bir kaynak grubu oluşturun :

    az group create --name contoso-us-resource-group --location eastus
    
  2. eastus konumunda bir IoT hub'ı oluşturun ve aşağıdaki az iot hub create komutuyla oluşturduğunuz kaynak grubuna ekleyin (değerini kendi benzersiz adınızla değiştirin{unique-hub-name}):

    az iot hub create --name {unique-hub-name} --resource-group contoso-us-resource-group --location eastus --sku S1
    

    Bu komutun tamamlanması birkaç dakika sürebilir.

  3. Şimdi westus2 konumunda bir IoT hub oluşturun ve aşağıdaki az iot hub create komutuyla oluşturduğunuz kaynak grubuna ekleyin (yerine kendi benzersiz adınızı yazın{unique-hub-name}):

    az iot hub create --name {unique-hub-name} --resource-group contoso-us-resource-group --location westus2 --sku S1
    

    Bu komutun tamamlanması birkaç dakika sürebilir.

Coğrafi gecikme süresi için bir kayıt oluştur.

Bu bölümde, cihazlarınız için yeni bir kayıt grubu oluşturacaksınız.

Kolaylık olması için bu öğreticide kaydetme işlemi ile birlikte simetrik anahtar doğrulaması kullanılır. Daha güvenli bir çözüm için, güven zinciriyle X.509 sertifika kanıtlamasını kullanmayı göz önünde bulundurun.

  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ünden 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ı Simetrik anahtarları otomatik olarak oluştur kutusunu işaretleyin.
    Grup adı Grubunuz için contoso-us-devices adını verin veya kendi grup adınızı girin. 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.
  5. İleri: IoT hub'ları'ı seçin.

  6. İki IoT hub'ınızı kayıt grubuna eklemek için aşağıdaki adımları kullanın:

    1. Kayıt grubu ekle sayfasının IoT hub'ları sekmesinde Hedef IoT hub'ları bölümünde IoT hub'ına bağlantı ekle'yi seçin.

    2. IoT Hub’a Bağlantı Ekle sayfasında, eastus bölgesinde oluşturduğunuz IoT hub'ını seçin ve ona iothubowner erişimini atayın.

    3. Kaydet'i seçin.

    4. IoT hub'ına bağlantı ekle'yi yeniden seçin ve westus2 bölgesinde oluşturduğunuz IoT hub'ını eklemek için aynı adımları izleyin.

    5. Hedef IoT hub'ları açılan menüsünde her iki IoT hub'ını da seçin.

  7. Ayırma ilkesi için En düşük gecikme süresi'ni seçin.

  8. Gözden geçir ve oluştur’u seçin.

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

  10. Kayıt grubunuz oluşturulduktan sonra kayıt grupları listesinden contoso-us-devices adını seçin.

  11. Birincil anahtarı kopyalayın. Bu anahtar daha sonra her iki simülasyon cihazı için de benzersiz cihaz anahtarları oluşturmak için kullanılır.

Bölgesel Linux VM'leri oluşturma

Bu bölümde, biri Batı ABD 2 ve biri Doğu ABD 2'de iki bölgesel Linux sanal makinesi (VM) oluşturacaksınız. Bu VM'ler, her iki bölgeden cihazlar için cihaz sağlamayı göstermek üzere her bölgeden bir cihaz benzetimi örneği çalıştırır.

Temizlemeyi kolaylaştırmak için, bu VM'leri oluşturulan IoT hub'larını içeren aynı kaynak grubuna ( contoso-us-resource-group) ekleyin.

  1. Azure Cloud Shell'de aşağıdaki komutu çalıştırarak komutta aşağıdaki parametre değişikliklerini yaptıktan sonra Doğu ABD bölgesi VM'sini oluşturun:

    --name: Doğu ABD bölgesel cihaz VM'niz için benzersiz bir ad girin.

    --admin-username: Kendi yönetici kullanıcı adınızı kullanın.

    --admin-password: Kendi yönetici parolanızı kullanın.

    az vm create \
    --resource-group contoso-us-resource-group \
    --name ContosoSimDeviceEast \
    --location eastus \
    --image Canonical:UbuntuServer:18.04-LTS:18.04.201809110 \
    --admin-username contosoadmin \
    --admin-password myContosoPassword2018 \
    --authentication-type password
    --public-ip-sku Standard
    

    Bu komutun tamamlanması birkaç dakika sürer.

  2. Komut tamamlandıktan sonra Doğu ABD bölgesi VM'nizin publicIpAddress değerini kopyalayın.

  3. Azure Cloud Shell'de komutunu çalıştırarak komutunda aşağıdaki parametre değişikliklerini yaptıktan sonra Batı ABD 2 bölgesi VM'sini oluşturun:

    --name: Batı ABD 2 bölgesel cihaz VM'niz için benzersiz bir ad girin.

    --admin-username: Kendi yönetici kullanıcı adınızı kullanın.

    --admin-password: Kendi yönetici parolanızı kullanın.

    az vm create \
    --resource-group contoso-us-resource-group \
    --name ContosoSimDeviceWest2 \
    --location westus2 \
    --image Canonical:UbuntuServer:18.04-LTS:18.04.201809110 \
    --admin-username contosoadmin \
    --admin-password myContosoPassword2018 \
    --authentication-type password
    --public-ip-sku Standard
    

    Bu komutun tamamlanması birkaç dakika sürer.

  4. Komut tamamlandıktan sonra Batı ABD 2 bölge vm'nizin publicIpAddress değerini kopyalayın.

  5. İki komut satırı penceresi açın.

  6. SSH kullanarak her kabuktaki bölgesel VM'lerden birine bağlanın.

    Yönetici kullanıcı adınızı ve parametre olarak kopyaladığınız genel IP adresini SSH'ye geçirin. İstendiğinde yönetici parolasını girin.

    ssh contosoadmin@1.2.3.4
    
    contosoadmin@ContosoSimDeviceEast:~$
    
    ssh contosoadmin@5.6.7.8
    
    contosoadmin@ContosoSimDeviceWest:~$
    

Azure IoT C SDK geliştirme ortamını hazırlama

Bu bölümde, her VM'de Azure IoT C SDK'sını klonlaacaksınız. SDK, her bölgeden cihaz sağlama simülasyonu sağlayan bir örnek içerir.

Her VM için:

  1. Aşağıdaki komutları kullanarak CMake, g++, gcc ve Git'i yükleyin:

    sudo apt-get update
    sudo apt-get install cmake build-essential libssl-dev libcurl4-openssl-dev uuid-dev git-all
    
  2. SDK'nın en son sürümünün etiket adını bulun ve kopyalayın.

  3. Her iki VM'de de Azure IoT Cihaz SDK'sını C için klonlayın. Parametrenin değeri -b olarak önceki adımda bulduğunuz etiketi kullanın, örneğin: lts_03_2025.

    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ı için birkaç dakika beklemeniz gerekebilir.

  4. Depo içinde yeni bir cmake klasörü oluşturun ve bu klasöre geçin.

    mkdir ~/azure-iot-sdk-c/cmake
    cd ~/azure-iot-sdk-c/cmake
    
  5. Sdk'nın geliştirme istemci platformunuza özgü bir sürümünü oluşturan aşağıdaki komutu çalıştırın:

    cmake -Dhsm_type_symm_key:BOOL=ON -Duse_prov_client:BOOL=ON  ..
    
  6. Derleme başarılı olduktan sonra, son birkaç çıkış satırı aşağıdaki çıkışa benzer şekilde görünür:

    -- IoT Client SDK Version = 1.7.0
    -- Provisioning SDK Version = 1.7.0
    -- Looking for include file stdint.h
    -- Looking for include file stdint.h - found
    -- Looking for include file stdbool.h
    -- Looking for include file stdbool.h - found
    -- target architecture: x86_64
    -- Performing Test CXX_FLAG_CXX11
    -- Performing Test CXX_FLAG_CXX11 - Success
    -- Found OpenSSL: /usr/lib/x86_64-linux-gnu/libcrypto.so (found version "1.1.1")
    -- Found CURL: /usr/lib/x86_64-linux-gnu/libcurl.so (found version "7.58.0")
    -- Found CURL: /usr/lib/x86_64-linux-gnu/libcurl.so
    -- target architecture: x86_64
    -- iothub architecture: x86_64
    -- Configuring done
    -- Generating done
    -- Build files have been written to: /home/contosoadmin/azure-iot-sdk-c/azure-iot-sdk-c
    

Benzersiz cihaz anahtarlarını türet

Grup kayıtlarında simetrik anahtar kanıtlamasını kullanırken, kayıt grubu anahtarlarını doğrudan kullanmazsınız. Bunun yerine, her cihaz için kayıt grubu anahtarından benzersiz bir anahtar türetebilirsiniz.

Öğreticinin bu bölümünde, cihaz için benzersiz kayıt kimliğinin HMAC-SHA256 değerini hesaplamak için grup ana anahtarından bir cihaz anahtarı oluşturursunuz. Sonuç daha sonra Base64 biçimine dönüştürülür.

Önemli

Grup ana anahtarınızı cihaz koduna eklemeyin.

Hem eastus hem de westus2 cihazları için:

  1. openssl kullanarak benzersiz anahtarınızı oluşturun. Aşağıdaki Bash kabuk betiğini kullanarak, daha önce kopyaladığınız kayıt grubunun Birincil Anahtarını{primary-key} ile ve her cihaz için kendi benzersiz kayıt kimliğinizi {contoso-simdevice} ile değiştirin. 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.

    KEY={primary-key}
    REG_ID={contoso-simdevice}
    
    keybytes=$(echo $KEY | base64 --decode | xxd -p -u -c 1000)
    echo -n $REG_ID | openssl sha256 -mac HMAC -macopt hexkey:$keybytes -binary | base64
    
  2. Kod çıktısı aşağıdaki anahtara benzer bir değer verir:

    p3w2DQr9WqEGBLUSlFi1jPQ7UWQL4siAGy75HFTFbf8=
    
  3. Artık her cihazın kendi türetilmiş cihaz anahtarı ve sağlama işlemi sırasında kayıt grubuyla simetrik anahtar kanıtlaması gerçekleştirmek için benzersiz kayıt kimliği vardır.

Her bölgeden cihazların simülasyonunu yapın

Bu bölümde, her iki bölgesel VM için de Azure IoT C SDK'sında bir sağlama örneğini güncelleştirmiş olacaksınız.

Örnek kod, sağlama isteğini Cihaz Sağlama Hizmeti örneğine gönderen bir cihaz başlatma dizisinin simülasyonunu oluşturur. Önyükleme sırası, cihazın tanınmasına ve gecikme süresine göre en yakın IoT hub'ına atanmasına neden olur.

  1. Azure portalında, Cihaz Sağlama Hizmetiniz için Genel Bakış sekmesini seçin ve Kimlik Kapsamı değerini not edin.

    Azure portalından Cihaz Sağlama Hizmeti uç noktası bilgilerini ayıklayın.

  2. Her iki VMS'de de düzenleme için ~/azure-iot-sdk-c/provisioning_client/samples/prov_dev_client_sample/prov_dev_client_sample.c dosyasını açın.

    vi ~/azure-iot-sdk-c/provisioning_client/samples/prov_dev_client_sample/prov_dev_client_sample.c
    
  3. Her iki VM'de de sabiti id_scope bulun ve değerini daha önce kopyaladığınız Kimlik Kapsamı değerinizle değiştirin.

    static const char* id_scope = "0ne00002193";
    
  4. her iki VM'de de işlevin main() tanımını aynı dosyada bulun. Emin olun, değişken hsm_type, kayıt grubu kanıtlama yöntemiyle eşleşmesi için aşağıdaki kod örneğinde gösterildiği gibi SECURE_DEVICE_TYPE_SYMMETRIC_KEY olarak ayarlanmış olduğundan.

    Her iki VM'de de dosyalarda yaptığınız değişiklikleri kaydedin.

    SECURE_DEVICE_TYPE hsm_type;
    //hsm_type = SECURE_DEVICE_TYPE_TPM;
    //hsm_type = SECURE_DEVICE_TYPE_X509;
    hsm_type = SECURE_DEVICE_TYPE_SYMMETRIC_KEY;
    
  5. prov_dev_set_symmetric_key_info() çağrısını açıklama satırı yapılmış olan prov_dev_client_sample.c'de, her iki VM'de de bulun.

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

    İşlev çağrılarının açıklamasını kaldırın ve yer tutucu değerlerini (köşeli ayraçlar dahil) önceki bölümde türetdiğiniz her cihaz için benzersiz kayıt kimlikleri ve türetilmiş cihaz anahtarlarıyla değiştirin. Aşağıdaki işlev çağrılarında gösterilen anahtarlar örnektir. Daha önce oluşturduğunuz anahtarları kullanın.

    Doğu ABD:

    // Set the symmetric key if using they auth type
    prov_dev_set_symmetric_key_info("contoso-simdevice-east", "p3w2DQr9WqEGBLUSlFi1jPQ7UWQL4siAGy75HFTFbf8=");
    

    Batı ABD:

    // Set the symmetric key if using they auth type
    prov_dev_set_symmetric_key_info("contoso-simdevice-west", "J5n4NY2GiBYy7Mp4lDDa5CbEe6zDU/c62rhjCuFWxnc=");
    
  6. Her iki VM'de de dosyayı kaydedin.

  7. Her iki VM'de de aşağıdaki Bash betiğinde gösterilen örnek klasöre gidin ve örneği oluşturun.

    cd ~/azure-iot-sdk-c/cmake/provisioning_client/samples/prov_dev_client_sample/
    cmake --build . --target prov_dev_client_sample --config Debug
    
  8. Derleme başarılı olduktan sonra, her bölgeden bir cihazın simülasyonunu yapmak için her iki VM'de de prov_dev_client_sample.exe çalıştırın. Her cihazın simülasyon cihazının bölgesine en yakın IoT hub'ına ayrıldığına dikkat edin.

    Simülasyonu çalıştırın:

    ~/azure-iot-sdk-c/cmake/provisioning_client/samples/prov_dev_client_sample/prov_dev_client_sample
    

    Doğu ABD VM'sinden örnek çıktı:

    contosoadmin@ContosoSimDeviceEast:~/azure-iot-sdk-c/cmake/provisioning_client/samples/prov_dev_client_sample$ ./prov_dev_client_sample
    Provisioning API Version: 1.2.9
    
    Registering Device
    
    Provisioning Status: PROV_DEVICE_REG_STATUS_CONNECTED
    Provisioning Status: PROV_DEVICE_REG_STATUS_ASSIGNING
    Provisioning Status: PROV_DEVICE_REG_STATUS_ASSIGNING
    
    Registration Information received from service: contoso-east-hub.azure-devices.net, deviceId: contoso-simdevice-east
    Press enter key to exit:
    
    

    Batı ABD VM'sinden örnek çıktı:

    contosoadmin@ContosoSimDeviceWest:~/azure-iot-sdk-c/cmake/provisioning_client/samples/prov_dev_client_sample$ ./prov_dev_client_sample
    Provisioning API Version: 1.2.9
    
    Registering Device
    
    Provisioning Status: PROV_DEVICE_REG_STATUS_CONNECTED
    Provisioning Status: PROV_DEVICE_REG_STATUS_ASSIGNING
    Provisioning Status: PROV_DEVICE_REG_STATUS_ASSIGNING
    
    Registration Information received from service: contoso-west-hub.azure-devices.net, deviceId: contoso-simdevice-west
    Press enter key to exit:
    

Kaynakları temizleme

Bu öğreticide oluşturulan kaynaklarla çalışmaya devam etmek istiyorsanız, bunları bırakabilirsiniz. Aksi takdirde, gereksiz ücretlerden kaçınmak için bu öğretici tarafından oluşturulan tüm kaynakları silmek için aşağıdaki adımları kullanın.

Buradaki adımlarda, contoso-us-resource-group adlı aynı kaynak grubunda açıklandığı gibi bu öğreticideki tüm kaynakları oluşturduğunuz varsayılır.

Önemli

Silinen kaynak grupları geri alınamaz. Kaynak grubu ve içindeki tüm kaynaklar kalıcı olarak silinir. Yanlış kaynak grubunu veya kaynakları yanlışlıkla silmediğinizden emin olun. IoT Hub'ı tutmak istediğiniz kaynakların bulunduğu mevcut bir kaynak grubunda oluşturduysanız kaynak grubunu silmek yerine IoT Hub kaynağını silin.

Kaynak grubunu ada göre silmek için:

  1. Azure Portal’ında oturum açın.

  2. Kaynak grupları’nı seçin.

  3. Ada göre filtrele... metin kutusuna, kaynaklarınızı içeren contoso-us-resource-group kaynak grubunun adını yazın.

  4. Sonuç listesinde kaynak grubunuzun sağında ... ve ardından Kaynak grubunu sil'i seçin.

  5. Kaynak grubunun silinmesini onaylamanız istenir. Onaylamak için kaynak grubunuzun adını yeniden yazın ve sil'i seçin. Birkaç dakika sonra kaynak grubu ve içerdiği kaynakların tümü silinir.

Sonraki adımlar

Özel ayırma ilkeleri hakkında daha fazla bilgi edinmek için bkz.