Membuat dan memprovisikan perangkat IoT Edge dalam skala besar dengan TPM di Linux
Berlaku untuk: IoT Edge 1.5
Penting
IoT Edge 1.5 LTS adalah rilis yang didukung. IoT Edge 1.4 LTS adalah akhir masa pakai per 12 November 2024. Jika Anda menggunakan rilis sebelumnya, lihat Memperbarui IoT Edge.
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 tidak terbiasa dengan proses provisi otomatis, tinjau ringkasan provisi sebelum melanjutkan.
Artikel ini menguraikan dua metodologi. Pilih preferensi berdasarkan arsitektur solusi Anda:
- Provisikan perangkat Linux secara otomatis dengan perangkat keras TPM fisik.
- 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 menawarkan keamanan yang sama dengan TPM fisik.
Instruksi yang disediakan berbeda sesuai metode Anda, jadi, selanjutnya, pastikan bahwa Anda berada 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.
- Hub IoT yang aktif
- Instans layanan provisi perangkat IoT Hub di Azure, 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 Anda menjalankan layanan provisi perangkat, salin nilai Cakupan ID dari halaman gambaran umum. Anda menggunakan nilai ini saat mengonfigurasi runtime IoT Edge.
Perangkat fisik Linux untuk menjadi perangkat IoT Edge.
Jika Anda adalah produsen perangkat, maka lihat panduan tentang mengintegrasikan TPM ke dalam proses manufaktur.
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.
Jika Anda menggunakan perangkat Linux fisik dengan TPM, tidak ada langkah tambahan untuk menyiapkan perangkat Anda.
Anda siap untuk melanjutkan.
Catatan
Artikel ini sebelumnya menggunakan tpm_device_provision
alat dari IoT C SDK untuk menghasilkan info provisi. Jika Anda mengandalkan alat tersebut sebelumnya, ketahui langkah-langkah di bawah ini menghasilkan ID pendaftaran yang berbeda untuk kunci dukungan publik yang sama. Jika Anda perlu membuat ulang ID pendaftaran seperti sebelumnya, lihat bagaimana alat tpm_device_provision C SDK menghasilkannya. Pastikan ID pendaftaran untuk pendaftaran individu di DPS cocok dengan ID pendaftaran yang dikonfigurasi perangkat IoT Edge untuk digunakan.
Di bagian ini, Anda menggunakan alat perangkat lunak TPM2 untuk mengambil kunci dukungan untuk TPM Anda lalu membuat ID pendaftaran unik. Bagian ini sesuai dengan Langkah 3: Perangkat memiliki firmware dan perangkat lunak yang diinstal dalam proses untuk mengintegrasikan TPM ke dalam proses manufaktur.
Masuk ke perangkat Anda, dan instal tpm2-tools
paket.
sudo apt-get install tpm2-tools
Jalankan skrip berikut untuk membaca kunci dukungan, buat skrip jika belum ada.
#!/bin/sh
if [ "$USER" != "root" ]; then
SUDO="sudo "
fi
$SUDO tpm2_readpublic -Q -c 0x81010001 -o ek.pub 2> /dev/null
if [ $? -gt 0 ]; then
# Create the endorsement key (EK)
$SUDO tpm2_createek -c 0x81010001 -G rsa -u ek.pub
# Create the storage root key (SRK)
$SUDO tpm2_createprimary -Q -C o -c srk.ctx > /dev/null
# make the SRK persistent
$SUDO tpm2_evictcontrol -c srk.ctx 0x81000001 > /dev/null
# open transient handle space for the TPM
$SUDO tpm2_flushcontext -t > /dev/null
fi
printf "Gathering the registration information...\n\nRegistration Id:\n%s\n\nEndorsement Key:\n%s\n" $(sha256sum -b ek.pub | cut -d' ' -f1 | sed -e 's/[^[:alnum:]]//g') $(base64 -w0 ek.pub)
$SUDO rm ek.pub srk.ctx 2> /dev/null
Jendela output menampilkan kunci Dukungan perangkat dan ID Pendaftaran unik. Salin nilai ini untuk digunakan nantinya, yaitu saat Anda membuat pendaftaran individu perangkat Anda pada layanan provisi perangkat.
Setelah Anda memiliki ID pendaftaran dan kunci dukungan, maka Anda siap untuk melanjutkan.
Tip
Jika Anda tidak ingin menggunakan alat perangkat lunak TPM2 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, seperti yang ditunjukkan di atas, Anda dapat membuat hash SHA-256 dari kunci dukungan.
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 memberikan ID perangkat, ID pendaftaran 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 IoT Edge dapat secara otomatis menyediakan perangkat selama instalasi.
Di bagian ini, Anda menyiapkan mesin virtual Linux atau perangkat fisik Anda untuk IoT Edge. Kemudian, Anda menginstal IoT Edge.
Jalankan perintah berikut untuk menambahkan repositori paket lalu tambahkan kunci penandatanganan paket Microsoft ke daftar kunci tepercaya Anda.
Penting
Pada 30 Juni 2022 Raspberry Pi OS Stretch dihentikan dari daftar dukungan OS Tier 1. Untuk menghindari potensi kerentanan keamanan, perbarui OS host Anda ke Bullseye.
Untuk sistem operasi platform tingkat 2 yang didukung, paket penginstalan tersedia di rilis Azure IoT Edge. Lihat langkah-langkah penginstalan di Penginstalan versi Offline atau tertentu.
Penginstalan dapat dilakukan dengan beberapa perintah. Buka terminal dan jalankan perintah berikut:
24.04:
wget https://packages.microsoft.com/config/ubuntu/24.04/packages-microsoft-prod.deb -O packages-microsoft-prod.deb sudo dpkg -i packages-microsoft-prod.deb rm packages-microsoft-prod.deb
22.04:
wget https://packages.microsoft.com/config/ubuntu/22.04/packages-microsoft-prod.deb -O packages-microsoft-prod.deb sudo dpkg -i packages-microsoft-prod.deb rm packages-microsoft-prod.deb
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.deb
Untuk informasi selengkapnya tentang versi sistem operasi, lihat Platform yang didukung Azure IoT Edge.
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.
Azure IoT Edge bergantung pada runtime kontainer yang kompatibel dengan OCI. Untuk skenario produksi, kami menyarankan Anda menggunakan mesin Moby. Mesin Moby adalah mesin kontainer yang secara resmi didukung dengan IoT Edge. Gambar kontainer Docker CE/EE kompatibel dengan runtime Moby. Jika Anda menggunakan snap Ubuntu Core, snap Docker dilayankan oleh Canonical dan didukung untuk skenario produksi.
Pasang mesin Moby.
sudo apt-get update; \
sudo apt-get install moby-engine
Secara default, mesin kontainer tidak mengatur batas ukuran log kontainer. Seiring waktu, hal ini dapat menyebabkan perangkat terisi dengan log dan kehabisan ruang disk. Namun, Anda dapat mengonfigurasi log untuk ditampilkan secara lokal, meskipun bersifat opsional. Untuk mempelajari selengkapnya tentang konfigurasi pengelogan, lihat Daftar Periksa Penyebaran Produksi.
Langkah-langkah berikut menunjukkan kepada Anda cara mengonfigurasi kontainer Anda untuk menggunakan local
driver pengelogan sebagai mekanisme pengelogan.
Membuat atau mengedit file konfigurasi daemon Docker yang ada
sudo nano /etc/docker/daemon.json
Atur driver pengelogan default ke
local
driver pengelogan seperti yang ditunjukkan dalam contoh.{ "log-driver": "local" }
Mulai ulang mesin kontainer agar perubahan diterapkan.
sudo systemctl restart docker
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.
Catatan
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 menginstal versi IoT Edge 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.
Tip
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 diperlukan langkah-langkah khusus untuk ditingkatkan.
Instal versi terbaru IoT Edge dan paket layanan identitas IoT (jika Anda belum diperbarui):
22.04:
sudo apt-get update; \ sudo apt-get install aziot-edge
20.04:
sudo apt-get update; \ sudo apt-get install aziot-edge
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.
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.toml
Buka file konfigurasi pada perangkat IoT Edge.
sudo nano /etc/aziot/config.toml
Temukan 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 = "DPS_ID_SCOPE_HERE" # Uncomment to send a custom payload during DPS registration # payload = { uri = "PATH_TO_JSON_FILE" } [provisioning.attestation] method = "tpm" registration_id = "REGISTRATION_ID_HERE" # auto_reprovisioning_mode = Dynamic
Perbarui nilai
id_scope
danregistration_id
dengan layanan provisi perangkat dan informasi perangkat Anda. Nilaiscope_id
adalah Cakupan ID dari halaman gambaran umum instans layanan provisi perangkat Anda.Untuk informasi selengkapnya tentang pengaturan konfigurasi provisi, lihat Mengonfigurasi pengaturan perangkat IoT Edge.
Secara opsional, temukan bagian mode provisi ulang otomatis dari file.
auto_reprovisioning_mode
Gunakan 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 terhubung ke IoT Hub selama provisi identitas karena kesalahan konektivitas. Untuk informasi selengkapnya, lihat konsep penyediaan ulang perangkat IoT Hub.Secara opsional, batalkan
payload
komentar parameter untuk menentukan jalur ke file JSON lokal. Konten file dikirim ke DPS sebagai data tambahan saat perangkat mendaftar. Ini berguna untuk alokasi kustom. Misalnya, jika Anda ingin mengalokasikan perangkat berdasarkan ID model IoT Plug and Play tanpa intervensi manusia.Simpan dan tutup file.
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 memberikan akses runtime IoT Edge ke
tpm0
dantpmrm0
.sudo touch /etc/udev/rules.d/tpmaccess.rules
Buka file aturan.
sudo nano /etc/udev/rules.d/tpmaccess.rules
Salin informasi akses berikut ke dalam file aturan.
tpmrm0
mungkin tidak tersedia pada perangkat yang menggunakan kernel lebih lama dari 4.12. Perangkat yang tidak memilikitpmrm0
akan 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
udev
untuk mengevaluasi aturan baru./bin/udevadm trigger --subsystem-match=tpm --subsystem-match=tpmrm
Pastikan 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/tpmrm0
Jika Anda tidak melihat bahwa izin yang benar diterapkan, coba boot ulang komputer Anda untuk me-refresh
udev
.Terapkan perubahan konfigurasi yang Anda buat pada perangkat.
sudo iotedge config apply
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.
Proses pendaftaran layanan provisi perangkat memungkinkan Anda mengatur ID perangkat dan tag perangkat kembaran pada saat yang sama 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.