Membuat dan memprovisikan perangkat IoT Edge dalam skala besar dengan TPM di Linux

Berlaku untuk:Tanda centang IoT Edge 1.5 IoT Edge 1.5 Tanda centang IoT Edge 1.4 IoT Edge 1.4

Penting

IoT Edge 1.5 LTS dan IoT Edge 1.4 LTS adalah rilis yang didukung. IoT Edge 1.4 LTS adalah akhir masa pakai pada 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:

  1. Ambil informasi penyediaan untuk TPM Anda.
  2. Buat pendaftaran individual untuk perangkat Anda dalam instans layanan provisi perangkat IoT Hub.
  3. 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, ditautkan ke hub IoT Anda

Persyaratan perangkat

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.

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

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 regisrasi 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.

Menginstal Alat TPM2

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.

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.

  1. Di portal Microsoft Azure, buka instans layanan provisi perangkat IoT Hub Anda.

  2. Di bawah Pengaturan, pilih Kelola pendaftaran.

  3. Pilih Tambahkan pendaftaran individu, lalu selesaikan langkah-langkah berikut untuk mengonfigurasi pendaftaran:

    1. Untuk Mekanisme, pilih TPM.

    2. Berikan Kunci dukungan dan ID Pendaftaran yang Anda salin dari mesin virtual atau perangkat fisik.

    3. Berikan ID untuk perangkat Anda jika Anda menginginkannya. Jika Anda tidak memberikan ID perangkat, ID pendaftaran akan digunakan.

    4. Pilih Benar untuk menyatakan bahwa mesin virtual atau perangkat fisik Anda adalah perangkat IoT Edge.

    5. 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.

    6. 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.

    7. Pilih Simpan.

Sekarang setelah pendaftaran ada untuk perangkat ini, runtime IoT Edge dapat secara otomatis menyediakan perangkat selama instalasi.

Pasang IoT Edge

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.

Penginstalan dapat dilakukan dengan beberapa perintah. Buka terminal dan jalankan perintah berikut:

  • 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.

Memasang komputer kontainer

Azure IoT Edge bergantung pada 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

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.

  1. Membuat atau mengedit file konfigurasi daemon Docker yang ada

    sudo nano /etc/docker/daemon.json
    
  2. Atur driver pengelogan default ke local driver pengelogan seperti yang ditunjukkan dalam contoh.

       {
          "log-driver": "local"
       }
    
  3. Mulai ulang mesin kontainer agar perubahan diterapkan.

    sudo systemctl restart docker
    

Mengonfigurasi runtime IoT Edge

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 defender-iot-micro-agent-edge
    

Paket opsional defender-iot-micro-agent-edge mencakup pertahanan Microsoft untuk agen mikro keamanan IoT yang memberikan 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.

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
  1. 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
    
  2. Perbarui nilai id_scope dan registration_id dengan layanan provisi perangkat dan informasi perangkat Anda. Nilai scope_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.

  3. 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.

  4. 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.

  5. Simpan dan tutup file.

Berikan akses IoT Edge ke TPM

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.

  1. Buat aturan baru yang memberikan akses runtime IoT Edge ke tpm0 dan tpmrm0.

    sudo touch /etc/udev/rules.d/tpmaccess.rules
    
  2. Buka file aturan.

    sudo nano /etc/udev/rules.d/tpmaccess.rules
    
  3. 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 memiliki tpmrm0 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"
    
  4. Simpan dan keluar dari file.

  5. Picu sistem udev untuk mengevaluasi aturan baru.

    /bin/udevadm trigger --subsystem-match=tpm --subsystem-match=tpmrm
    
  6. 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.

  7. Terapkan perubahan konfigurasi yang Anda buat pada perangkat.

    sudo iotedge config apply
    

Verifikasi keberhasilan penginstalan

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 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.