Öğretici: Coğrafi gecikme süresi için sağlama
Bu öğreticide, bir ayırma ilkesi kullanarak ioT Hubs grubuna birden çok sanal simetrik anahtar cihazını güvenli bir şekilde sağlama işlemi gösterilmektedir. 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 için sağlama yaygın bir ayırma 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 Makineler 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
Azure aboneliğiniz yoksa başlamadan önce ücretsiz bir hesap oluşturun.
Azure portalıyla IoT Hub Cihazı Sağlama Hizmeti'ni ayarlama makalesindeki adımları tamamlayın.
Azure Cloud Shell'de Bash ortamını kullanın. Daha fazla bilgi için bkz . Azure Cloud Shell'de Bash için hızlı başlangıç.
CLI başvuru komutlarını yerel olarak çalıştırmayı tercih ediyorsanız Azure CLI'yı yükleyin . Windows veya macOS üzerinde çalışıyorsanız Azure CLI’yi bir Docker kapsayıcısında çalıştırmayı değerlendirin. Daha fazla bilgi için bkz . Docker kapsayıcısında Azure CLI'yi çalıştırma.
Yerel yükleme kullanıyorsanız az login komutunu kullanarak Azure CLI ile oturum açın. Kimlik doğrulama işlemini tamamlamak için terminalinizde görüntülenen adımları izleyin. Diğer oturum açma seçenekleri için bkz . Azure CLI ile oturum açma.
İstendiğinde, ilk kullanımda Azure CLI uzantısını yükleyin. Uzantılar hakkında daha fazla bilgi için bkz. Azure CLI ile uzantıları kullanma.
Yüklü sürümü ve bağımlı kitaplıkları bulmak için az version komutunu çalıştırın. En son sürüme yükseltmek için az upgrade komutunu çalıştırın.
İ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 önerilir. Bu işlem, işiniz bittikten sonra temizlemeyi kolaylaştırır.
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
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.
Ş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 kayıt oluşturma
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 kayıt ile simetrik anahtar kanıtlaması 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.
Azure portalında oturum açın ve Cihaz Sağlama Hizmeti örneğine gidin.
Gezinti menüsünün Ayarlar bölümünden Kayıtları yönet'i seçin.
Kayıt grubu ekle'yi seçin.
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.İleri: IoT hub'ları'ı seçin.
İki IoT hub'ınızı kayıt grubuna eklemek için aşağıdaki adımları kullanın:
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.
IoT hub'ına bağlantı ekle sayfasında eastus bölgesinde oluşturduğunuz IoT hub'ını seçin ve iothubowner erişimini atayın.
Kaydet'i seçin.
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.
Hedef IoT hub'ları açılan menüsünde her iki IoT hub'ını da seçin.
Ayırma ilkesi için En düşük gecikme süresi'ni seçin.
Gözden geçir ve oluştur’u seçin.
Gözden Geçir + oluştur sekmesinde tüm değerlerinizi doğrulayın ve Oluştur'u seçin.
Kayıt grubunuz oluşturulduktan sonra kayıt grupları listesinden contoso-us-devices adını seçin.
Birincil anahtarı kopyalayın. Bu anahtar daha sonra her iki simülasyon cihazı için de benzersiz cihaz anahtarları oluşturmak için kullanılacaktı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.
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.
Komut tamamlandıktan sonra Doğu ABD bölgesi VM'niz için publicIpAddress değerini kopyalayın.
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.
Komut tamamlandıktan sonra Batı ABD 2 bölge vm'nizin publicIpAddress değerini kopyalayın.
İki komut satırı kabuğu açın.
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ı kopyalayacaksınız. SDK, her bölgeden cihaz sağlama simülasyonu sağlayan bir örnek içerir.
Her VM için:
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
Her iki VM'de de C için Azure IoT Cihaz SDK'sını kopyalayın. Parametrenin değeri
-b
olarak önceki adımda bulduğunuz etiketi kullanın, örneğin:lts_01_2023
.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.
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
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 ..
Derleme başarılı olduktan sonra, son birkaç çıkış satırı aşağıdaki çıkışa benzer olacaktı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şturacaksınız. 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:
openssl kullanarak benzersiz anahtarınızı oluşturun. Aşağıdaki Bash kabuğu betiğini kullanacaksınız (değerini
{primary-key}
daha önce kopyaladığınız kayıt grubunun Birincil Anahtarı ile değiştirin ve her cihaz için kendi benzersiz kayıt kimliğiniz ile değiştirin{contoso-simdevice}
. 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
Betik aşağıdaki anahtara benzer bir çıkış oluşturur:
p3w2DQr9WqEGBLUSlFi1jPQ7UWQL4siAGy75HFTFbf8=
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ştireceksiniz.
Örnek kod, sağlama isteğini Cihaz Sağlama Hizmeti örneğine gönderen bir cihaz önyükleme sırasının 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.
Azure portalında, Cihaz Sağlama Hizmetiniz için Genel Bakış sekmesini seçin ve Kimlik Kapsamı değerini not edin.
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
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";
her iki VM'de de işlevin
main()
tanımını aynı dosyada bulun. Değişkeninhsm_type
kayıt grubu kanıtlama yöntemiyle eşleşecek şekilde aşağıda gösterildiği gibi olarak ayarlandığındanSECURE_DEVICE_TYPE_SYMMETRIC_KEY
emin olun.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;
her iki VM'de de, açıklama satırı yapılan prov_dev_client_sample.c'de 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ı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ğıda 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=");
Her iki VM'de de dosyayı kaydedin.
Her iki VM'de de aşağıda 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
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:
Azure Portal’ında oturum açın.
Kaynak grupları’nı seçin.
Ada göre filtrele... metin kutusuna, kaynaklarınızı içeren contoso-us-resource-group kaynak grubunun adını yazın.
Sonuç listesinde kaynak grubunuzun sağ tarafında ... ve sonra Kaynak grubunu sil'e tıklayın.
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.