Memecahkan masalah otorisasi Anda - AWS IoT Core

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

Memecahkan masalah otorisasi Anda

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 log untuk CloudWatch 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/). Untuk informasi lebih lanjut tentang mengaktifkan dan mengonfigurasi log untuk AWS IoT Core, lihat Konfigurasi AWS IoT pencatatan log.

catatan

Jika Anda meninggalkan tingkat log DEBUGuntuk jangka waktu yang lama, CloudWatch mungkin menyimpan sejumlah besar data logging. 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. Konfigurasi AWS IoT pencatatan log 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 harus 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.

  1. Verifikasi fungsi Lambda mana yang terkait dengan otorisasi Anda.

    Anda dapat melakukan ini dengan memanggil DescribeAuthorizerAPIatau dengan mengklik otorisasi yang diinginkan di bagian Aman AWS IoT Core konsol.

  2. Periksa metrik pemanggilan untuk fungsi Lambda. Lakukan langkah-langkah berikut untuk melakukan ini.

    1. Buka AWS Lambda console (https://console.aws.amazon.com/lambda/) dan pilih fungsi yang terkait dengan authorizer Anda.

    2. Pilih tab Monitor dan lihat metrik untuk kerangka waktu yang relevan dengan masalah Anda.

  3. Jika Anda tidak melihat pemanggilan, verifikasi itu 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.

    1. Pilih tab Izin untuk fungsi Anda di AWS Lambda konsol.

    2. 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" } } } ] }
    3. Kebijakan ini memberikan InvokeFunction izin pada fungsi Anda ke 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-arn AuthorizerARn --statement-id Id-123 --action "lambda:InvokeFunction"
  4. Jika Anda melihat pemanggilan, verifikasi bahwa tidak ada kesalahan. Kesalahan mungkin menunjukkan bahwa fungsi Lambda tidak menangani peristiwa koneksi dengan benar AWS IoT Core mengirim ke sana.

    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 uji hard-code dalam fungsi untuk memastikan bahwa fungsi tersebut menangani peristiwa dengan benar.

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

    1. 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"
    2. Perbarui fungsi Lambda Anda untuk mencatat data yang dikembalikan AWS IoT Core dan peristiwa yang memicu fungsi. Anda dapat menggunakan log ini untuk memeriksa kebijakan yang dibuat oleh fungsi tersebut.

  6. 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 kedua lapisan TLS dan aplikasi.

Kemungkinan masalah TLS lapisan:

  • Pelanggan harus melewati header nama host (HTTP, MQTT over WebSockets) atau TLS ekstensi Indikasi Nama Server (HTTP, MQTT over WebSockets,MQTT) di semua permintaan otentikasi kustom. Dalam kedua kasus tersebut, nilai yang dilewatkan harus sesuai dengan salah satu akun Anda AWS IoT Core titik akhir data. Ini adalah titik akhir yang dikembalikan ketika Anda melakukan CLI perintah 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 kustom untuk MQTT koneksi juga harus melewati TLS ekstensi Application Layer Protocol Negotiation (ALPN) dengan nilai. mqtt

  • Otentikasi khusus saat ini hanya tersedia di port 443.

Kemungkinan masalah lapisan aplikasi:

  • Jika penandatanganan diaktifkan (signingDisabledbidangnya 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.