Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Topik ini membahas masalah umum yang dapat menyebabkan masalah dalam alur kerja otentikasi khusus dan langkah-langkah untuk menyelesaikannya. Untuk memecahkan masalah dengan paling efektif, aktifkan CloudWatch log untuk AWS IoT Core dan atur level log ke DEBUG. Anda dapat mengaktifkan CloudWatch log di AWS IoT Core konsol (https://console.aws.amazon.com/iot/
catatan
Jika Anda meninggalkan tingkat log di DEBUG untuk jangka waktu yang lama, CloudWatch mungkin menyimpan data logging dalam jumlah besar. Hal ini dapat meningkatkan CloudWatch biaya Anda. Pertimbangkan untuk menggunakan logging berbasis sumber daya untuk meningkatkan verbositas hanya untuk perangkat dalam grup hal tertentu. Untuk informasi selengkapnya tentang logging berbasis sumber daya, lihat. Konfigurasikan AWS IoT logging Selain itu, setelah Anda selesai memecahkan masalah, kurangi level log ke level yang kurang bertele-tele.
Sebelum Anda memulai pemecahan masalah, tinjau Memahami alur kerja otentikasi kustom tampilan tingkat tinggi dari proses otentikasi kustom. Ini membantu Anda memahami di mana mencari sumber masalah.
Topik ini membahas dua bidang berikut untuk Anda selidiki.
-
Masalah yang terkait dengan fungsi Lambda otorisasi Anda.
-
Masalah yang terkait dengan perangkat Anda.
Periksa masalah dalam fungsi Lambda otorisasi Anda
Lakukan langkah-langkah berikut untuk memastikan bahwa upaya koneksi perangkat Anda menjalankan fungsi Lambda Anda.
-
Verifikasi fungsi Lambda mana yang terkait dengan otorisasi Anda.
Anda dapat melakukan ini dengan memanggil DescribeAuthorizerAPI atau dengan mengklik otorisasi yang diinginkan di bagian Aman AWS IoT Core konsol.
-
Periksa metrik pemanggilan untuk fungsi Lambda. Lakukan langkah-langkah berikut untuk melakukan ini.
-
Buka AWS Lambda konsol (https://console.aws.amazon.com/lambda/
) dan pilih fungsi yang terkait dengan otorisasi Anda. -
Pilih tab Monitor dan lihat metrik untuk kerangka waktu yang relevan dengan masalah Anda.
-
-
Jika Anda tidak melihat pemanggilan, verifikasi bahwa AWS IoT Core memiliki izin untuk menjalankan fungsi Lambda Anda. Jika Anda melihat pemanggilan, lewati ke langkah berikutnya. Lakukan langkah-langkah berikut untuk memverifikasi bahwa fungsi Lambda Anda memiliki izin yang diperlukan.
-
Pilih tab Izin untuk fungsi Anda di AWS Lambda konsol.
-
Temukan bagian Kebijakan Berbasis Sumber Daya di bagian bawah halaman. Jika fungsi Lambda Anda memiliki izin yang diperlukan, kebijakan akan terlihat seperti contoh berikut.
{ "Version": "2012-10-17", "Id": "default", "Statement": [ { "Sid": "Id123", "Effect": "Allow", "Principal": { "Service": "iot.amazonaws.com" }, "Action": "lambda:InvokeFunction", "Resource": "arn:aws:lambda:us-east-1:111111111111:function:FunctionName", "Condition": { "ArnLike": { "AWS:SourceArn": "arn:aws:iot:us-east-1:111111111111:authorizer/AuthorizerName" }, "StringEquals": { "AWS:SourceAccount": "111111111111" } } } ] }
-
Kebijakan ini memberikan
InvokeFunction
izin atas fungsi Anda kepada AWS IoT Core kepala sekolah. Jika Anda tidak melihatnya, Anda harus menambahkannya dengan menggunakan AddPermissionAPI. Contoh berikut menunjukkan kepada Anda bagaimana melakukan ini dengan menggunakan AWS CLI.aws lambda add-permission --function-name
FunctionName
--principal iot.amazonaws.com --source-arnAuthorizerARn
--statement-id Id-123 --action "lambda:InvokeFunction"
-
-
Jika Anda melihat pemanggilan, verifikasi bahwa tidak ada kesalahan. Kesalahan mungkin menunjukkan bahwa fungsi Lambda tidak menangani peristiwa koneksi yang AWS IoT Core mengirimkannya dengan benar.
Untuk informasi tentang penanganan acara di fungsi Lambda Anda, lihat. Mendefinisikan fungsi Lambda Anda Anda dapat menggunakan fitur pengujian di AWS Lambda console (https://console.aws.amazon.com/lambda/
) ke nilai pengujian kode keras dalam fungsi untuk memastikan bahwa fungsi tersebut menangani peristiwa dengan benar. -
Jika Anda melihat pemanggilan tanpa kesalahan, tetapi perangkat Anda tidak dapat terhubung (atau memublikasikan, berlangganan, dan menerima pesan), masalahnya mungkin kebijakan yang ditampilkan oleh fungsi Lambda Anda tidak memberikan izin untuk tindakan yang coba dilakukan perangkat Anda. Lakukan langkah-langkah berikut untuk menentukan apakah ada yang salah dengan kebijakan yang dikembalikan fungsi.
-
Gunakan kueri Amazon CloudWatch Logs Insights untuk memindai log dalam waktu singkat untuk memeriksa kegagalan. Contoh kueri berikut mengurutkan peristiwa berdasarkan stempel waktu dan mencari kegagalan.
display clientId, eventType, status, @timestamp | sort @timestamp desc | filter status = "Failure"
-
Perbarui fungsi Lambda Anda untuk mencatat data yang dikembalikan AWS IoT Core dan peristiwa yang memicu fungsi tersebut. Anda dapat menggunakan log ini untuk memeriksa kebijakan yang dibuat oleh fungsi tersebut.
-
-
Jika Anda melihat pemanggilan tanpa kesalahan, tetapi perangkat Anda tidak dapat terhubung (atau mempublikasikan, berlangganan, dan menerima pesan), alasan lain adalah fungsi Lambda Anda melebihi batas batas waktu. Batas waktu tunggu fungsi Lambda untuk otorisasi khusus adalah 5 detik. Anda dapat memeriksa durasi fungsi di CloudWatch log atau metrik.
Menyelidiki masalah perangkat
Jika Anda tidak menemukan masalah dengan menjalankan fungsi Lambda Anda atau dengan kebijakan yang ditampilkan fungsi tersebut, cari masalah dengan upaya koneksi perangkat Anda. Permintaan koneksi yang salah dapat menyebabkan AWS IoT Core tidak memicu otorisasi Anda. Masalah koneksi dapat terjadi pada lapisan TLS dan aplikasi.
Kemungkinan masalah lapisan TLS:
-
Pelanggan harus meneruskan header nama host (HTTP, MQTT over WebSockets) atau ekstensi TLS Indikasi Nama Server (HTTP, MQTT over, MQTT) di WebSockets semua permintaan otentikasi kustom. Dalam kedua kasus tersebut, nilai yang diteruskan harus cocok dengan salah satu titik akhir AWS IoT Core data akun Anda. Ini adalah titik akhir yang dikembalikan ketika Anda melakukan perintah CLI berikut.
-
aws iot describe-endpoint --endpoint-type iot:Data-ATS
-
aws iot describe-endpoint --endpoint-type iot:Data
(untuk titik VeriSign akhir warisan)
-
-
Perangkat yang menggunakan otentikasi khusus untuk koneksi MQTT juga harus melewati ekstensi TLS Application Layer Protocol Negotiation (ALPN) dengan nilai.
mqtt
-
Otentikasi khusus saat ini hanya tersedia di port 443.
Kemungkinan masalah lapisan aplikasi:
-
Jika penandatanganan diaktifkan (
signingDisabled
bidangnya salah di otorisasi Anda), cari masalah tanda tangan berikut.-
Pastikan Anda meneruskan tanda tangan token di
x-amz-customauthorizer-signature
header atau dalam parameter string kueri. -
Pastikan layanan tidak menandatangani nilai selain token.
-
Pastikan Anda meneruskan token di header atau parameter kueri yang Anda tentukan di
token-key-name
bidang di otorisasi Anda.
-
-
Pastikan bahwa nama otorisasi yang Anda berikan di parameter
x-amz-customauthorizer-name
header atau string kueri valid atau Anda memiliki otorisasi default yang ditentukan untuk akun Anda.