Mengatur dan memecahkan masalah AWS IoT Greengrass dengan perangkat klien - AWS Prescriptive Guidance

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Mengatur dan memecahkan masalah AWS IoT Greengrass dengan perangkat klien

Marouane Sefiani dan Akalanka De Silva, Amazon Web Services

Ringkasan

AWS IoT Greengrass adalah runtime edge open-source dan layanan cloud untuk membangun, menerapkan, dan mengelola perangkat lunak Internet of Things (IoT) pada perangkat edge. Kasus penggunaan untuk AWS IoT Greengrass meliputi:

  • Rumah pintar tempat gateway AWS IoT Greengrass digunakan sebagai hub untuk otomatisasi rumah

  • Pabrik pintar tempat AWS IoT Greengrass dapat memfasilitasi konsumsi dan pemrosesan data lokal dari lantai toko

AWS IoT Greengrass dapat bertindak sebagai titik akhir koneksi MQTT yang aman dan terautentikasi untuk perangkat edge lainnya (juga dikenal sebagai perangkat klien), yang biasanya akan terhubung langsung ke AWS IoT Core. Kemampuan ini berguna ketika perangkat klien tidak memiliki akses jaringan langsung ke titik akhir AWS IoT Core.

Anda dapat mengatur AWS IoT Greengrass untuk digunakan dengan perangkat klien untuk kasus penggunaan berikut:

  • Untuk perangkat klien untuk mengirim data ke AWS IoT Greengrass

  • Untuk AWS IoT Greengrass untuk meneruskan data ke AWS IoT Core

  • Untuk memanfaatkan fitur engine aturan AWS IoT Core yang canggih

Kemampuan ini memerlukan penginstalan dan konfigurasi komponen berikut pada perangkat AWS IoT Greengrass:

  • Pialang MQTT

  • Jembatan MQTT

  • Otentikasi perangkat klien

  • Detektor IP

Selain itu, pesan yang dipublikasikan dari perangkat klien harus dalam format JSON atau format Protocol Buffers (protobuf).

Pola ini menjelaskan cara menginstal dan mengkonfigurasi komponen yang diperlukan ini, dan memberikan tips pemecahan masalah dan praktik terbaik.

Prasyarat dan batasan

Prasyarat

Batasan

  • Anda harus memilih Wilayah AWS tempat AWS IoT Core tersedia. Untuk daftar Wilayah AWS IoT Core saat ini, lihat AWS Services by Region.

  • Perangkat inti harus memiliki setidaknya 172 MB RAM dan 512 MB ruang disk.

Arsitektur

Diagram berikut menunjukkan arsitektur solusi untuk pola ini.

Arsitektur solusi untuk menyiapkan AWS IoT Greengrass dengan perangkat klien

Arsitekturnya meliputi:

  • Dua perangkat klien. Setiap perangkat berisi kunci pribadi, sertifikat perangkat, dan sertifikat otoritas sertifikat root (CA). AWS IoT Device SDK, yang berisi klien MQTT, juga diinstal pada setiap perangkat klien.

  • Perangkat inti yang memiliki AWS IoT Greengrass yang digunakan dengan komponen berikut:

    • Pialang MQTT

    • Jembatan MQTT

    • Otentikasi perangkat klien

    • Detektor IP

Arsitektur ini mendukung skenario berikut:

  • Perangkat klien dapat menggunakan klien MQTT mereka untuk berkomunikasi satu sama lain melalui broker MQTT perangkat inti.

  • Perangkat klien juga dapat berkomunikasi dengan AWS IoT Core di cloud melalui broker MQTT perangkat inti dan jembatan MQTT.

  • AWS IoT Core di cloud dapat mengirim pesan ke perangkat klien melalui klien pengujian MQTT dan jembatan MQTT perangkat inti dan broker MQTT.

Untuk informasi selengkapnya tentang komunikasi antara perangkat klien dan perangkat inti, lihat bagian Informasi tambahan.

Alat

Layanan AWS

  • AWS IoT Greengrass adalah layanan runtime dan cloud edge Internet of Things (IoT) open source yang membantu Anda membangun, menerapkan, dan mengelola aplikasi IoT di perangkat Anda.

  • AWS IoT Core menyediakan komunikasi dua arah yang aman untuk perangkat yang terhubung ke internet agar tersambung ke AWS Cloud.

  • AWS IoT Device SDK adalah kit pengembangan perangkat lunak yang mencakup pustaka sumber terbuka, panduan pengembang dengan sampel, dan panduan porting sehingga Anda dapat membuat produk atau solusi IoT inovatif pada platform perangkat keras pilihan Anda.

  • AWS Identity and Access Management (IAM) membantu Anda mengelola akses ke sumber daya AWS dengan aman dengan mengontrol siapa yang diautentikasi dan diberi wewenang untuk menggunakannya.

Praktik terbaik

  • Muatan pesan dari perangkat klien harus dalam format JSON atau Protobuf untuk memanfaatkan fitur-fitur canggih dari mesin aturan AWS IoT Core, seperti transformasi dan tindakan bersyarat.

  • Konfigurasikan jembatan MQTT untuk memungkinkan komunikasi dua arah.

  • Konfigurasikan dan terapkan komponen detektor IP di AWS IoT Greengrass untuk memastikan bahwa alamat IP perangkat inti disertakan dalam bidang nama alternatif subjek (SAN) sertifikat broker MQTT.

Epik

TugasDeskripsiKeterampilan yang dibutuhkan

Siapkan AWS IoT Greengrass di perangkat inti Anda.

Instal perangkat lunak AWS IoT Greengrass Core dengan mengikuti petunjuk di panduan pengembang.

AWS IoT Greengrass

Periksa status instalasi Anda.

Gunakan perintah berikut untuk memeriksa status layanan AWS IoT Greengrass di perangkat inti Anda:

sudo systemctl status greengrass.service

Output yang diharapkan dari perintah ini adalah:

Launched Nucleus successfully
AWS Umum

Siapkan kebijakan IAM dan lampirkan ke peran layanan Greengrass.

  1. Buat kebijakan IAM untuk memungkinkan komunikasi ke dan dari jembatan MQTT. Berikut ini contoh kebijakan:

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iot:*" ], "Resource": "*" }, { "Sid": "GreengrassActions", "Effect": "Allow", "Action": [ "greengrass:*" ], "Resource": "*" } ] }
  2. Lampirkan kebijakan ke peran layanan Greengrass. Untuk mendapatkan peran layanan, gunakan perintah:

    aws greengrassv2 get-service-role-for-account --region <region>

    dimana <region> mengacu pada Wilayah AWS Anda.

AWS Umum

Konfigurasikan dan terapkan komponen yang diperlukan di perangkat inti AWS IoT Greengrass.

Konfigurasikan dan terapkan komponen-komponen berikut:

AWS IoT Greengrass

Konfirmasikan bahwa jembatan MQTT memungkinkan komunikasi dua arah.

Untuk menyampaikan pesan MQTT antara perangkat klien dan AWS IoT Core, konfigurasikan dan terapkan komponen jembatan MQTT dan tentukan topik yang akan disampaikan. Berikut ini contohnya:

{ "mqttTopicMapping": { "ClientDevicesToCloud": { "topic": "dt/#", "source": "LocalMqtt", "target": "IotCore" }, "CloudToClientDevices": { "topic": "cmd/#", "source": "IotCore", "target": "LocalMqtt" } } }
AWS IoT Greengrass

Konfirmasikan bahwa komponen autentikasi memungkinkan perangkat klien untuk terhubung dan menerbitkan atau berlangganan topik.

aws.greengrass.clientdevices.AuthKonfigurasi berikut memungkinkan semua perangkat klien untuk terhubung, mempublikasikan pesan, dan berlangganan semua topik.

{ "deviceGroups": { "formatVersion": "2021-03-05", "definitions": { "MyPermissiveDeviceGroup": { "selectionRule": "thingName: *", "policyName": "MyPermissivePolicy" } }, "policies": { "MyPermissivePolicy": { "AllowAll": { "statementDescription": "Allow client devices to perform all actions.", "operations": [ "*" ], "resources": [ "*" ] } } } } }
AWS IoT Greengrass
TugasDeskripsiKeterampilan yang dibutuhkan

Instal AWS IoT Device SDK.

Instal AWS IoT Device SDK pada perangkat klien. Untuk daftar lengkap bahasa yang didukung dan yang terkait SDKs, lihat dokumentasi AWS IoT Core.

Misalnya, AWS IoT Device SDK untuk Python SDK terletak di. GitHub Untuk menginstal SDK ini:

  1. Konfirmasikan bahwa Python 3.7 atau yang lebih baru diinstal, seperti yang diinstruksikan pada halaman Prasyarat repositori. GitHub

  2. Gunakan perintah pip untuk menginstal SDK.

    Untuk macOS dan Linux:

    python3 -m pip install awsiotsdk

    Untuk Windows:

    python -m pip install awsiotsdk

Atau, Anda dapat menginstal SDK dari repositori sumber:

# Create a workspace directory to hold all the SDK files mkdir sdk-workspace cd sdk-workspace # Clone the repository git clone https://github.com/aws/aws-iot-device-sdk-python-v2.git # Install using Pip (use 'python' instead of 'python3' on Windows) python3 -m pip install ./aws-iot-device-sdk-python-v2
AWS IoT Umum

Ciptakan sesuatu.

  1. Di konsol AWS IoT, jika tombol Mulai muncul, pilih tombol tersebut. Jika tidak, di panel navigasi, pilih Keamanan, Kebijakan.

  2. Jika kotak dialog Anda belum memiliki kebijakan apa pun muncul, pilih Buat kebijakan. Jika tidak, pilih Buat.

  3. Masukkan nama untuk kebijakan AWS IoT (misalnya,ClientDevicePolicy).

  4. Di bagian Tambah pernyataan, ganti kebijakan yang ada dengan kode JSON berikut. Ganti <region> dan <account> dengan AWS Region dan nomor akun AWS Anda.

    { "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": "iot:Connect", "Resource": "arn:aws:iot:region:account:client/*" }, { "Effect": "Allow", "Action": "iot:Publish", "Resource": "*" }, { "Effect": "Allow", "Action": "iot:Receive", "Resource": "*" }, { "Effect": "Allow", "Action": "iot:Subscribe", "Resource": "*" }, { "Effect": "Allow", "Action": [ "iot:GetThingShadow", "iot:UpdateThingShadow", "iot:DeleteThingShadow" ], "Resource": "arn:aws:iot:region:account:thing/*" } ] }
  5. Pilih Buat.

  6. Di konsol AWS IoT, di panel navigasi, pilih Kelola, Hal.

  7. Jika kotak dialog Anda belum memiliki hal apa pun ditampilkan, pilih Daftarkan sesuatu. Jika tidak, pilih Buat.

  8. Pada halaman Creating AWS IoT things, pilih Create a single.

  9. Pada halaman Tambahkan perangkat Anda ke registri perangkat, masukkan nama untuk hal IoT Anda (misalnya,ClientDevice1), lalu pilih Berikutnya.

    catatan

    Anda tidak dapat mengubah nama sesuatu setelah Anda membuatnya. Untuk mengubah nama, Anda harus membuat hal baru, memberinya nama baru, dan kemudian menghapus yang lama.

  10. Pada halaman Tambahkan sertifikat untuk hal Anda, pilih Buat sertifikat.

  11. Pilih tautan Unduh untuk mengunduh sertifikat, kunci pribadi, dan sertifikat root CA.

    penting

    Ini adalah satu-satunya kesempatan Anda untuk mengunduh sertifikat dan kunci pribadi Anda.

  12. Untuk mengaktifkan sertifikat, pilih Aktifkan. Sertifikat harus aktif agar perangkat dapat terhubung ke AWS IoT.

  13. Pilih Lampirkan kebijakan.

  14. Untuk Tambahkan kebijakan untuk barang Anda, pilih ClientDevicePolicy, Register Thing.

AWS IoT Core

Unduh sertifikat CA dari perangkat inti Greengrass.

Jika Anda mengharapkan perangkat inti Greengrass berfungsi di lingkungan offline, Anda harus membuat sertifikat CA inti Greengrass tersedia untuk perangkat klien sehingga dapat memverifikasi sertifikat broker MQTT (yang dikeluarkan oleh CA inti Greengrass). Karena itu, penting untuk mendapatkan salinan sertifikat ini. Gunakan salah satu pendekatan berikut untuk mengunduh sertifikat CA:

  • Jika Anda memiliki akses jaringan ke perangkat AWS IoT Greengrass dari https://<device IP>:8883 PC Anda, masukkan di browser web Anda dan lihat sertifikat broker MQTT dan sertifikat CA. Anda juga dapat menyimpan sertifikat CA ke perangkat klien.

  • Atau, Anda dapat menggunakan baris perintah OpenSSL:

    openssl s_client -showcerts -connect <device IP>:8883
AWS Umum

Salin kredensi di perangkat klien.

Salin sertifikat CA inti Greengrass, sertifikat perangkat, dan kunci pribadi di perangkat klien.

AWS Umum

Kaitkan perangkat klien dengan perangkat inti.

Mengaitkan perangkat klien dengan perangkat inti sehingga mereka dapat menemukan perangkat inti. Perangkat klien kemudian dapat menggunakan Greengrass discovery API untuk mengambil informasi konektivitas dan sertifikat untuk perangkat inti terkait mereka. Untuk informasi selengkapnya, lihat Mengaitkan perangkat klien dalam dokumentasi AWS IoT Greengrass.

  1. Di konsol AWS IoT Greengrass, pilih perangkat Core.

  2. Pilih perangkat inti untuk dikelola.

  3. Pada halaman detail perangkat inti, pilih tab Perangkat klien.

  4. Di bagian Perangkat klien terkait, pilih Kaitkan perangkat klien.

  5. Di modal Kaitkan perangkat klien dengan perangkat inti, lakukan hal berikut untuk setiap perangkat klien yang akan dikaitkan:

    1. Masukkan nama hal AWS IoT untuk diasosiasikan sebagai perangkat klien.

    2. Pilih Tambahkan.

  6. Pilih Kaitkan.

Perangkat klien yang telah Anda kaitkan sekarang dapat menggunakan Greengrass penemuan API untuk menemukan perangkat inti ini.

AWS IoT Greengrass
TugasDeskripsiKeterampilan yang dibutuhkan

Kirim data dari satu perangkat klien ke perangkat klien lain.

Gunakan klien MQTT di perangkat Anda untuk mempublikasikan pesan tentang topik tersebut. dt/client1/sensor

AWS Umum

Kirim data dari perangkat klien ke AWS IoT Core.

Gunakan klien MQTT di perangkat Anda untuk mempublikasikan pesan tentang topik tersebut. dt/client1/sensor

Di klien pengujian MQTT, berlangganan topik tempat perangkat mengirim pesan, atau berlangganan # untuk semua topik (lihat detail).

AWS Umum

Kirim pesan dari AWS IoT Core ke perangkat klien.

Pada halaman klien pengujian MQTT, di tab Publikasikan ke topik, di bidang Nama topik, masukkan nama topik pesan Anda. Dalam contoh ini, gunakan cmd/client1 untuk topik.

AWS Umum

Pemecahan Masalah

IsuSolusi

Tidak dapat memverifikasi kesalahan sertifikat server

Kesalahan ini terjadi ketika klien MQTT tidak dapat memverifikasi sertifikat yang disajikan oleh broker MQTT selama jabat tangan TLS. Alasan paling umum adalah bahwa klien MQTT tidak memiliki sertifikat CA. Ikuti langkah-langkah ini untuk memastikan bahwa sertifikat CA diberikan kepada klien MQTT.

  1. Jika Anda memiliki akses jaringan ke perangkat AWS IoT Greengrass dari https://<device IP>:8883 PC Anda, masukkan di jendela browser untuk melihat sertifikat broker MQTT dan sertifikat CA. Anda juga dapat menyimpan sertifikat CA ke perangkat klien.

    Atau gunakan baris perintah OpenSSL:

    openssl s_client -showcerts -connect <device IP>:8883
  2. Simpan konten sertifikat Moquette CA dan Greengrass Core CA ke dalam file, lalu lihat konten yang diterjemahkan dengan menggunakan perintah:

    openssl x509 -in <Name of CA>.pem -text

    Sertifikat Moquette CA harus menunjukkan bidang SAN seperti dalam contoh ini:

    X509v3 Subject Alternative Name: IP Address:XXX.XXX.XXX.XXX, IP Address:127.0.0.1, DNS:localhost

Tidak dapat memverifikasi kesalahan nama server

Kesalahan ini terjadi ketika klien MQTT tidak dapat memverifikasi bahwa itu terhubung ke server yang benar. Alasan paling umum adalah bahwa alamat IP perangkat Greengrass tidak terdaftar di bidang SAN sertifikat.

Ikuti petunjuk di solusi sebelumnya untuk mendapatkan sertifikat broker MQTT dan verifikasi bahwa bidang SAN berisi alamat IP perangkat AWS IoT Greengrass, seperti yang dijelaskan di bagian Informasi tambahan. Jika tidak, konfirmasikan bahwa komponen detektor IP diinstal dengan benar dan restart perangkat inti.

Tidak dapat memverifikasi nama server hanya saat menghubungkan dari perangkat klien yang disematkan

Mbed TLS, yang merupakan pustaka TLS populer yang digunakan dalam perangkat tertanam, saat ini mendukung verifikasi nama DNS hanya di bidang SAN sertifikat, seperti yang ditunjukkan dalam kode perpustakaan Mbed TLS. Karena perangkat inti tidak memiliki nama domain sendiri dan bergantung pada alamat IP, klien TLS yang menggunakan Mbed TLS akan gagal verifikasi nama server selama jabat tangan TLS, menyebabkan kegagalan koneksi. Kami menyarankan Anda menambahkan verifikasi alamat IP SAN ke pustaka Mbed TLS Anda di fungsi x509_crt_check_san.

Sumber daya terkait

Informasi tambahan

Bagian ini memberikan informasi tambahan tentang komunikasi antara perangkat klien dan perangkat inti.

Broker MQTT mendengarkan port 8883 di perangkat inti untuk upaya koneksi klien TLS. Ilustrasi berikut menunjukkan contoh sertifikat server broker MQTT.

Contoh sertifikat server broker MQTT

Sertifikat contoh menampilkan rincian berikut:

  • Sertifikat ini dikeluarkan oleh AWS IoT Greengrass Core CA, yang bersifat lokal dan khusus untuk perangkat inti; artinya, ia bertindak sebagai CA lokal.

  • Sertifikat ini secara otomatis diputar setiap minggu oleh komponen autentikasi klien seperti yang ditunjukkan pada ilustrasi berikut. Anda dapat mengatur interval ini dalam konfigurasi komponen autentikasi klien.

Memutar sertifikat server broker MQTT
  • Nama alternatif subjek (SAN) memainkan peran penting dalam verifikasi nama server di ujung klien TLS. Ini membantu klien TLS memastikan bahwa itu terhubung ke server yang benar dan membantu menghindari man-in-the-middle serangan selama pengaturan sesi TLS. Dalam contoh sertifikat, bidang SAN menunjukkan bahwa server ini mendengarkan di localhost (soket domain Unix lokal), dan antarmuka jaringan memiliki alamat IP 192.168.1.12.

Klien TLS menggunakan bidang SAN dalam sertifikat untuk memverifikasi bahwa itu terhubung ke server yang sah selama verifikasi server. Sebaliknya, selama jabat tangan TLS khas antara server HTTP dan browser, nama domain di bidang common name (CN) atau bidang SAN digunakan untuk memeriksa silang domain yang sebenarnya terhubung ke browser selama proses verifikasi server. Jika perangkat inti tidak memiliki nama domain, alamat IP yang disertakan dalam bidang SAN memiliki tujuan yang sama. Untuk informasi selengkapnya, lihat bagian Nama Alternatif Subjek dari Profil RFC 5280 - Internet X.509 Sertifikat Infrastruktur Kunci Publik dan Daftar Pencabutan Sertifikat (CRL).

Komponen detektor IP di AWS IoT Greengrass memastikan bahwa alamat IP yang benar disertakan dalam bidang SAN sertifikat.

Sertifikat dalam contoh ditandatangani oleh perangkat AWS IoT Greengrass yang bertindak sebagai CA lokal. Klien TLS (klien MQTT) tidak mengetahui CA ini, jadi kami harus memberikan sertifikat CA yang terlihat seperti berikut ini.

Contoh sertifikat CA