Membuat dan memprovisikan perangkat IoT Edge dalam skala besar dengan TPM di Linux
Berlaku untuk ikon:
IoT Edge 1.1 Versi lain: IoT Edge 1.2, IoT Edge 1.3
Berlaku untuk:
IoT Edge 1.2
IoT Edge 1.3 Versi lain:IoT Edge 1.1
Artikel ini menyediakan instruksi untuk tindakan provisi otomatis Azure IoT Edge untuk perangkat Linux dengan menggunakan Modul Platform Kepercayaan (TPM). Anda dapat memprovisikan perangkat Azure IoT Edge secara otomatis dengan menggunakan layanan provisi perangkat Azure IoT Hub. Jika Anda belum memahami proses provisi otomatis, tinjau gambaran umum provisi sebelum Anda melanjutkan.
Artikel ini menguraikan dua metodologi. Pilih preferensi berdasarkan arsitektur solusi Anda:
- Provisikan perangkat Linux secara otomatis dengan perangkat keras TPM fisik. Contohnya adalah Infineon OPTIGA™ TPM SLB 9670.
- Provisikan mesin virtual (VM) Linux secara otomatis dengan TPM simulasi yang berjalan pada mesin pengembangan Windows dengan dukungan Hyper-V. Sebaiknya gunakan metode ini hanya sebagai skenario pengujian. TPM simulasi tidak menyediakan keamanan yang sama dengan TPM fisik.
Instruksi yang disediakan berbeda sesuai metode Anda, jadi pastikan bahwa Anda melanjutkan pada tab yang benar.
Tugasnya adalah sebagai berikut:
- Ambil informasi penyediaan untuk TPM Anda.
- Buat pendaftaran individual untuk perangkat Anda dalam instans layanan provisi perangkat IoT Hub.
- Pasang runtime IoT Edge dan sambungkan perangkat ke IoT Hub.
Prasyarat
Sumber daya cloud
- Hub IoT yang aktif
- Instans layanan provisi perangkat IoT Hub di Azure, yang ditautkan ke hub IoT Anda
- Jika Anda tidak memiliki instans layanan provisi perangkat, Anda dapat mengikuti petunjuk di bagian Membuat layanan provisi perangkat IoT Hub baru dan Menautkan IoT hub dan layanan provisi perangkat Anda dari mulai cepat layanan provisi perangkat IoT Hub.
- Setelah menjalankan layanan provisi perangkat, salin nilai Cakupan ID dari halaman gambaran ringkasan. Anda menggunakan nilai ini saat mengonfigurasi runtime IoT Edge.
Persyaratan perangkat
Perangkat fisik Linux untuk menjadi perangkat IoT Edge.
Catatan
TPM 2.0 diperlukan saat Anda menggunakan pengesahan TPM dengan layanan provisi perangkat.
Saat menggunakan TPM, Anda hanya dapat membuat pendaftaran layanan penyediaan perangkat individual, bukan grup.
Menyiapkan perangkat Anda
Jika Anda menggunakan perangkat Linux fisik dengan TPM, tidak ada langkah tambahan untuk menyiapkan perangkat Anda.
Anda siap untuk melanjutkan.
Ambil informasi penyediaan untuk TPM Anda
Di bagian ini, Anda membangun alat yang dapat Anda gunakan untuk mengambil ID pendaftaran dan kunci dukungan untuk TPM Anda.
Masuk ke perangkat Anda, lalu ikuti langkah-langkah dalam Menyiapkan lingkungan pengembangan Linux untuk memasang dan membangun SDK perangkat Azure IoT untuk C.
Jalankan perintah berikut untuk membuat alat SDK yang mengambil informasi penyediaan perangkat untuk TPM Anda.
cd azure-iot-sdk-c/cmake cmake -Duse_prov_client:BOOL=ON .. cd provisioning_client/tools/tpm_device_provision make sudo ./tpm_device_provisionJendela output menampilkan ID Pendaftaran dan Kunci Endorsement perangkat. Salin nilai ini untuk digunakan nantinya, yaitu saat Anda membuat pendaftaran individu perangkat Anda pada layanan provisi perangkat.
Tip
Jika Anda tidak ingin menggunakan alat SDK untuk mengambil informasi, Anda perlu menemukan cara lain untuk mendapatkan informasi provisi. Kunci dukungan bersifat unik untuk setiap chip TPM, dan diperoleh dari produsen chip TPM terkait. Anda dapat memperoleh ID pendaftaran unik untuk perangkat TPM Anda. Misalnya, Anda dapat membuat hash SHA-256 kunci dukungan.
Setelah Anda memiliki ID pendaftaran dan kunci dukungan, Anda siap untuk melanjutkan.
Membuat pendaftaran layanan provisi perangkat
Gunakan informasi provisi TPM Anda untuk membuat pendaftaran individu dalam layanan provisi perangkat.
Saat membuat pendaftaran di layanan provisi perangkat, Anda memiliki kesempatan untuk menyatakan Status Perangkat Kembaran Awal. Di perangkat kembaran, Anda dapat mengatur tag ke perangkat grup dengan metrik apa pun yang digunakan di solusi Anda, seperti wilayah, lingkungan, lokasi, atau jenis perangkat. Tag ini digunakan untuk membuat penyebaran otomatis.
Tip
Langkah-langkah dalam artikel ini adalah untuk portal Microsoft Azure, tetapi Anda juga dapat membuat pendaftaran individu dengan menggunakan Azure CLI. Untuk informasi selengkapnya, lihat az iot dps enrollment. Sebagai bagian dari perintah CLI, gunakan bendera berkemampuan edge untuk menentukan bahwa pendaftaran tersebut adalah untuk perangkat IoT Edge.
Di portal Microsoft Azure, buka instans layanan provisi perangkat IoT Hub Anda.
Di bawah Pengaturan, pilih Kelola pendaftaran.
Pilih Tambahkan pendaftaran individu, lalu selesaikan langkah-langkah berikut untuk mengonfigurasi pendaftaran:
Untuk Mekanisme, pilih TPM.
Berikan Kunci dukungan dan ID Pendaftaran yang Anda salin dari mesin virtual atau perangkat fisik.
Berikan ID untuk perangkat Anda jika Anda menginginkannya. Jika Anda tidak menyediakan ID perangkat, ID registrasi akan digunakan.
Pilih Benar untuk menyatakan bahwa mesin virtual atau perangkat fisik Anda adalah perangkat IoT Edge.
Pilih IoT Hub tertaut yang ingin disambungkan ke perangkat Anda, atau pilih Tautkan ke IoT Hub baru. Anda dapat memilih beberapa hub, dan perangkat akan ditetapkan ke salah satunya sesuai dengan kebijakan alokasi yang dipilih.
Tambahkan nilai tag ke Status Perangkat Kembaran Awal jika Anda menginginkannya. Anda dapat menggunakan tag untuk menargetkan grup perangkat untuk penyebaran modul. Untuk informasi selengkapnya, lihat Sebarkan modul IoT Edge dalam skala besar.
Pilih Simpan.
Sekarang setelah pendaftaran ada untuk perangkat ini, runtime bahasa umum IoT Edge dapat secara otomatis melakukan provisi perangkat selama penginstalan.
Pasang IoT Edge
Di bagian ini, Anda menyiapkan mesin virtual Linux atau perangkat fisik untuk IoT Edge. Kemudian, Anda menginstal IoT Edge.
Pertama, jalankan perintah berikut untuk menambahkan repositori paket lalu tambahkan kunci penandatanganan paket Microsoft ke daftar kunci tepercaya Anda.
Penginstalan dapat dilakukan dengan beberapa perintah. Buka terminal dan jalankan perintah berikut:
20.04:
wget https://packages.microsoft.com/config/ubuntu/20.04/packages-microsoft-prod.deb -O packages-microsoft-prod.deb sudo dpkg -i packages-microsoft-prod.deb rm packages-microsoft-prod.deb18.04:
wget https://packages.microsoft.com/config/ubuntu/18.04/multiarch/packages-microsoft-prod.deb -O packages-microsoft-prod.deb sudo dpkg -i packages-microsoft-prod.deb rm packages-microsoft-prod.deb
Catatan
Paket perangkat lunak Azure IoT Edge tunduk pada ketentuan lisensi yang terletak di setiap paket (direktori usr/share/doc/{package-name} atau LICENSE). Baca syarat lisensi sebelum menggunakan paket. Dengan memasang dan menggunakan paket ini, berarti Anda menyetujui syarat tersebut. Jika Anda tidak setuju dengan syarat lisensi, jangan gunakan paket tersebut.
Memasang mesin kontainer
Azure IoT Edge mengandalkan runtime kontainer yang kompatibel dengan OCI. Untuk skenario produksi, kami menyarankan Anda menggunakan mesin Moby. Mesin Moby adalah satu-satunya mesin kontainer yang secara resmi didukung dengan IoT Edge. Gambar kontainer Docker CE/EE kompatibel dengan runtime Moby.
Pasang mesin Moby.
sudo apt-get update; \
sudo apt-get install moby-engine
Setelah mesin Moby berhasil diinstal, konfigurasikan untuk menggunakan local driver pengelogan sebagai mekanisme pengelogan. Untuk mempelajari selengkapnya tentang konfigurasi pengelogan, lihat Daftar Periksa Penyebaran Produksi.
Buat atau buka file konfigurasi daemon Docker di
/etc/docker/daemon.json.Atur driver pengelogan default ke
localdriver pengelogan seperti yang ditunjukkan pada contoh di bawah ini.{ "log-driver": "local" }Mulai ulang mesin kontainer agar perubahan diterapkan.
Tip
Jika Anda mendapatkan kesalahan saat menginstal mesin kontainer Moby, verifikasi kernel Linux Anda untuk kompatibilitas Moby. Beberapa produsen perangkat tertanam mengirimkan gambar perangkat yang berisi kernel Linux kustom tanpa fitur yang diperlukan untuk kompatibilitas mesin kontainer. Jalankan perintah berikut, yang menggunakan skrip check-config yang disediakan oleh Moby, untuk memeriksa konfigurasi kernel Anda:
curl -ssl https://raw.githubusercontent.com/moby/moby/master/contrib/check-config.sh -o check-config.sh chmod +x check-config.sh ./check-config.shDalam output skrip, periksa apakah semua item pada
Generally NecessarydanNetwork Driversdiaktifkan. Jika kehilangan fitur, aktifkan dengan membangun kembali kernel Anda dari sumber dan memilih modul terkait untuk dimasukkan dalam .config kernel yang sesuai. Demikian pula, jika Anda menggunakan generator konfigurasi kernel sepertidefconfigataumenuconfig, temukan dan aktifkan fitur masing-masing dan bangun kembali kernel Anda sesuai dengan sesuai. Setelah Anda menyebarkan kernel yang baru diubah, jalankan skrip check-config lagi untuk memverifikasi bahwa semua fitur yang diperlukan berhasil diaktifkan.
Mengonfigurasi runtime IoT Edge
Daemon keamanan IoT Edge menyediakan dan mempertahankan standar keamanan di perangkat IoT Edge. Daemon dimulai pada setiap boot dan bootstrap perangkat dengan memulai sisa runtime IoT Edge.
Langkah-langkah di bagian ini mewakili proses umum untuk memasang versi terbaru pada perangkat yang memiliki koneksi internet. Jika Anda perlu menginstal versi tertentu, seperti versi pra-rilis, atau perlu menginstal saat offline, ikuti langkah-langkah penginstalan versi Offline atau versi tertentu nanti di artikel ini.
Pasang IoT Edge versi 1.1.* bersama dengan paket libiothsm-std:
sudo apt-get update; \
sudo apt-get install iotedge
Catatan
IoT Edge versi 1.1 merupakan cabang dukungan jangka panjang dari IoT Edge. Jika Anda menjalankan versi yang lebih lama, kami sarankan memasang atau memperbarui ke patch terbaru karena versi yang lebih lama tidak lagi didukung.
Layanan IoT Edge menyediakan dan mempertahankan standar keamanan di perangkat IoT Edge. Layanan dimulai pada setiap boot dan bootstrap perangkat dengan memulai sisa runtime IoT Edge.
Dimulai dengan versi 1.2, layanan identitas IoT menangani provisi dan manajemen identitas untuk IoT Edge dan untuk komponen perangkat lain yang perlu berkomunikasi dengan IoT Hub.
Langkah-langkah di bagian ini mewakili proses umum untuk memasang versi terbaru pada perangkat yang memiliki koneksi internet. Jika Anda perlu menginstal versi tertentu, seperti versi pra-rilis, atau perlu menginstal saat offline, ikuti langkah-langkah penginstalan versi Offline atau versi tertentu nanti di artikel ini.
Catatan
Langkah-langkah di bagian ini menunjukkan cara menginstal versi IoT Edge terbaru.
Jika Anda sudah memiliki perangkat IoT Edge yang menjalankan versi yang lebih lama dan ingin meningkatkan ke rilis terbaru, gunakan langkah-langkah dalam Memperbarui daemon dan runtime keamanan IoT Edge. Versi yang lebih baru cukup berbeda dari versi IoT Edge sebelumnya yang perlu ditingkatkan oleh langkah-langkah tertentu.
Instal versi terbaru IoT Edge dan paket layanan identitas IoT:
sudo apt-get update; \
sudo apt-get install aziot-edge defender-iot-micro-agent-edge
Paket defender-iot-micro-agent-edge mencakup agen mikro keamanan Pertahanan Microsoft untuk IoT yang menyediakan visibilitas titik akhir ke dalam manajemen postur keamanan, kerentanan, deteksi ancaman, manajemen armada, dan banyak lagi untuk membantu Anda mengamankan perangkat IoT Edge Anda. Disarankan untuk menginstal agen mikro dengan agen Edge untuk mengaktifkan pemantauan dan pengerasan keamanan perangkat Edge Anda. Untuk mempelajari selengkapnya tentang Pertahanan Microsoft untuk IoT, lihat Apa itu Pertahanan Microsoft untuk IoT untuk penyusun perangkat.
Menentukan perangkat dengan identitas cloud-nya
Setelah runtime berhasil diinstal pada perangkat Anda, konfigurasikan perangkat dengan informasi yang digunakannya untuk menyambungkan ke layanan provisi perangkat dan IoT Hub.
Perhatikan Cakupan ID layanan provisi perangkat Anda serta ID Pendaftaran perangkat yang telah dikumpulkan sebelumnya.
Buka file konfigurasi pada perangkat IoT Edge Anda.
sudo nano /etc/iotedge/config.yamlTemukan bagian konfigurasi penyediaan file. Hapus komentar baris provisi TPM, dan pastikan baris provisi lainnya dikomentari.
Baris
provisioning:seharusnya tidak memiliki spasi sebelumnya, dan item bertumpuk harus diindentasi oleh dua spasi.# DPS TPM provisioning configuration provisioning: source: "dps" global_endpoint: "https://global.azure-devices-provisioning.net" scope_id: "SCOPE_ID_HERE" attestation: method: "tpm" registration_id: "REGISTRATION_ID_HERE" # always_reprovision_on_startup: true # dynamic_reprovisioning: falsePerbarui nilai
scope_iddanregistration_iddengan layanan provisi perangkat dan informasi perangkat Anda. Nilaiscope_idadalah Cakupan ID dari halaman gambaran umum instans layanan provisi perangkat Anda.Secara opsional, gunakan baris
always_reprovision_on_startupataudynamic_reprovisioninguntuk mengonfigurasi perilaku provisi ulang perangkat Anda. Jika perangkat diatur untuk diprovisi ulang pada saat memulai, perangkat akan selalu berusaha untuk menyediakan DPS terlebih dahulu dan kemudian jatuh kembali ke cadangan provisi jika gagal. Jika perangkat diatur ke provisi ulang secara dinamis, IoT Edge (dan semua modul) akan memulai ulang dan menyediakan ulang jika peristiwa provisi ulang terdeteksi, seperti jika perangkat dipindahkan dari satu IoT Hub ke IoT Hub lainnya. Secara khusus, IoT Edge memeriksabad_credentialataudevice_disabledkesalahan dari SDK untuk mendeteksi peristiwa provisi ulang. Untuk memicu peristiwa ini secara manual, nonaktifkan perangkat di IoT Hub. Untuk informasi selengkapnya, lihat konsep provisi ulang perangkat IoT Hub.Simpan dan tutup file.
Perhatikan Cakupan ID layanan provisi perangkat Anda serta ID Pendaftaran perangkat yang telah dikumpulkan sebelumnya.
Buat file konfigurasi untuk perangkat Anda berdasarkan file templat yang disediakan sebagai bagian dari penginstalan IoT Edge.
sudo cp /etc/aziot/config.toml.edge.template /etc/aziot/config.tomlBuka file konfigurasi pada perangkat IoT Edge.
sudo nano /etc/aziot/config.tomlTemukan bagian konfigurasi provisi file. Hapus komentar baris provisi TPM, dan pastikan baris provisi lainnya dikomentari.
# DPS provisioning with TPM [provisioning] source = "dps" global_endpoint = "https://global.azure-devices-provisioning.net" id_scope = "SCOPE_ID_HERE" [provisioning.attestation] method = "tpm" registration_id = "REGISTRATION_ID_HERE" # auto_reprovisioning_mode = DynamicPerbarui nilai
id_scopedanregistration_iddengan layanan provisi perangkat dan informasi perangkat Anda. Nilaiscope_idadalah Cakupan ID dari halaman gambaran umum instans layanan provisi perangkat Anda.Secara opsional, temukan bagian mode provisi ulang otomatis dari file.
auto_reprovisioning_modeGunakan parameter untuk mengonfigurasi perilaku provisi ulang perangkat Anda. Dinamis - Provisi ulang ketika perangkat mendeteksi bahwa perangkat mungkin telah dipindahkan dari satu IoT Hub ke IoT Hub lainnya. Ini adalah default. AlwaysOnStartup - Provisi ulang saat perangkat di-boot ulang atau crash menyebabkan daemon dimulai ulang. OnErrorOnly - Jangan pernah memicu provisi ulang perangkat secara otomatis. Setiap mode memiliki fallback provisi ulang perangkat implisit jika perangkat tidak dapat tersambung ke IoT Hub selama penyediaan identitas karena kesalahan konektivitas. Untuk informasi selengkapnya, lihat konsep provisi ulang perangkat IoT Hub.Simpan dan tutup file.
Berikan akses IoT Edge ke TPM
Runtime IoT Edge perlu mengakses TPM untuk menyediakan perangkat Anda secara otomatis.
Anda dapat memberikan akses TPM ke runtime IoT Edge dengan mengesampingkan pengaturan systemd sehingga iotedge layanan memiliki hak root. Jika Anda tidak ingin meningkatkan hak istimewa layanan, Anda juga dapat menggunakan langkah-langkah berikut untuk menyediakan akses TPM secara manual.
Buat aturan baru yang akan memberikan runtime IoT Edge akses ke
tpm0dantpmrm0.sudo touch /etc/udev/rules.d/tpmaccess.rulesBuka file aturan.
sudo nano /etc/udev/rules.d/tpmaccess.rulesSalin informasi akses berikut ke dalam file aturan.
tpmrm0mungkin tidak tersedia pada perangkat yang menggunakan kernel lebih lama dari 4.12. Perangkat yang tidak memilikitpmrm0akan dengan aman mengabaikan aturan tersebut.# allow iotedge access to tpm0 KERNEL=="tpm0", SUBSYSTEM=="tpm", OWNER="iotedge", MODE="0600" KERNEL=="tpmrm0", SUBSYSTEM=="tpmrm", OWNER="iotedge", MODE="0600"Simpan dan keluar dari file.
Picu sistem
udevuntuk mengevaluasi aturan baru./bin/udevadm trigger --subsystem-match=tpm --subsystem-match=tpmrmPastikan bahwa aturan berhasil diterapkan.
ls -l /dev/tpm*Apabila berhasil, Anda akan melihat output sebagai berikut:
crw------- 1 iotedge root 10, 224 Jul 20 16:27 /dev/tpm0 crw------- 1 iotedge root 10, 224 Jul 20 16:27 /dev/tpmrm0Jika Anda tidak melihat bahwa izin yang benar telah diterapkan, coba boot ulang mesin Anda untuk me-refresh
udev.Mulai ulang runtime IoT Edge sehingga mengambil semua perubahan konfigurasi yang Anda buat pada perangkat.
sudo systemctl restart iotedge
Runtime bahasa umum IoT Edge bergantung pada layanan TPM yang diakses broker ke TPM perangkat. Layanan ini perlu mengakses TPM untuk melakukan provisi pada perangkat Anda secara otomatis.
Anda dapat memberikan akses TPM ke runtime IoT Edge dengan mengesampingkan pengaturan systemd sehingga layanan aziottpm memiliki hak root. Jika Anda tidak ingin meningkatkan hak istimewa layanan, Anda juga dapat menggunakan langkah-langkah berikut untuk menyediakan akses TPM secara manual.
Buat aturan baru yang akan memberikan runtime IoT Edge akses ke
tpm0dantpmrm0.sudo touch /etc/udev/rules.d/tpmaccess.rulesBuka file aturan.
sudo nano /etc/udev/rules.d/tpmaccess.rulesSalin informasi akses berikut ke dalam file aturan.
tpmrm0mungkin tidak tersedia pada perangkat yang menggunakan kernel lebih lama dari 4.12. Perangkat yang tidak memilikitpmrm0akan dengan aman mengabaikan aturan tersebut.# allow aziottpm access to tpm0 and tpmrm0 KERNEL=="tpm0", SUBSYSTEM=="tpm", OWNER="aziottpm", MODE="0660" KERNEL=="tpmrm0", SUBSYSTEM=="tpmrm", OWNER="aziottpm", MODE="0660"Simpan dan keluar dari file.
Picu sistem
udevuntuk mengevaluasi aturan baru./bin/udevadm trigger --subsystem-match=tpm --subsystem-match=tpmrmPastikan bahwa aturan berhasil diterapkan.
ls -l /dev/tpm*Apabila berhasil, Anda akan melihat output sebagai berikut:
crw-rw---- 1 root aziottpm 10, 224 Jul 20 16:27 /dev/tpm0 crw-rw---- 1 root aziottpm 10, 224 Jul 20 16:27 /dev/tpmrm0Jika Anda tidak melihat bahwa izin yang benar telah diterapkan, coba boot ulang mesin Anda untuk me-refresh
udev.Terapkan perubahan konfigurasi yang Anda buat pada perangkat.
sudo iotedge config apply
Verifikasi keberhasilan penginstalan
Jika belum, mulai ulang runtime IoT Edge agar mengambil semua perubahan konfigurasi yang Anda buat pada perangkat.
sudo systemctl restart iotedge
Periksa untuk melihat bahwa IoT Edge runtime sedang berjalan.
sudo systemctl status iotedge
Periksa log daemon.
journalctl -u iotedge --no-pager --no-full
Jika Anda menemukan kesalahan provisi, mungkin itu disebabkan perubahan konfigurasi belum berlaku. Coba mulai ulang IoT Edge daemon lagi.
sudo systemctl daemon-reload
Atau coba mulai ulang mesin virtual Anda untuk melihat apakah perubahan berlaku setelah perangkat dimulai ulang.
Jika belum, terapkan perubahan konfigurasi yang Anda buat pada perangkat.
sudo iotedge config apply
Periksa untuk melihat bahwa IoT Edge runtime sedang berjalan.
sudo iotedge system status
Periksa log daemon.
sudo iotedge system logs
Jika Anda menemukan kesalahan provisi, mungkin itu disebabkan perubahan konfigurasi belum berlaku. Coba mulai ulang IoT Edge daemon lagi.
sudo systemctl daemon-reload
Atau coba mulai ulang mesin virtual Anda untuk melihat apakah perubahan berlaku setelah perangkat dimulai ulang.
Jika runtime berhasil berjalan, Anda dapat masuk ke IoT Hub Anda dan melihat bahwa perangkat baru Anda telah diprovisikan secara otomatis. Sekarang perangkat Anda siap untuk menjalankan modul IoT Edge.
Daftarkan modul yang sedang berjalan.
iotedge list
Anda dapat memverifikasi bahwa pendaftaran individual yang Anda buat di layanan provisi perangkat telah digunakan. Buka instans layanan provisi perangkat Anda di portal Microsoft Azure. Buka detail pendaftaran untuk pendaftaran individual yang Anda buat. Perhatikan bahwa status pendaftaran telah ditetapkan dan ID perangkat telah dicantumkan.
Langkah berikutnya
Proses pendaftaran layanan provisi perangkat memungkinkan Anda menyetel ID perangkat dan tag kembar perangkat bersamaan saat Anda memprovisikan perangkat baru. Anda dapat menggunakan nilai tersebut untuk menargetkan perangkat individu atau sekumpulan perangkat dengan menggunakan manajemen perangkat otomatis.
Pelajari cara menyebarkan dan memantau modul IoT Edge dalam skala besar dengan menggunakan portal Microsoft Azure atau menggunakan Azure CLI.