View a markdown version of this page

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 kustom 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/). Untuk informasi selengkapnya tentang mengaktifkan dan mengonfigurasi log untuk AWS IoT Core, lihatKonfigurasi AWS IoT pencatatan log.

catatan

Jika Anda meninggalkan level log di DEBUG untuk jangka waktu yang lama, CloudWatch mungkin menyimpan data logging dalam jumlah besar. Ini dapat meningkatkan CloudWatch biaya Anda. Pertimbangkan untuk menggunakan logging berbasis sumber daya untuk meningkatkan verbositas hanya untuk perangkat dalam grup benda tertentu. Untuk informasi selengkapnya tentang logging berbasis sumber daya, lihat. Konfigurasi AWS IoT pencatatan log Juga, ketika Anda selesai memecahkan masalah, kurangi level log ke tingkat yang kurang bertele-tele.

Sebelum memulai pemecahan masalah, tin Memahami alur kerja otentikasi kustom jau untuk tampilan tingkat tinggi dari proses otentikasi khusus. 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 memanggil fungsi Lambda Anda.

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

    Anda dapat melakukan ini dengan memanggil DescribeAuthorizer API atau 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 konsol (https://console.aws.amazon.com/lambda/) dan pilih fungsi yang terkait dengan otorizer Anda.

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

  3. Jika Anda tidak melihat pemanggilan, verifikasi bahwa AWS IoT Core memiliki izin untuk memanggil 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 Resource-based Kebijakan di bagian bawah halaman. Jika fungsi Lambda Anda memiliki izin yang diperlukan, kebijakan 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 atas fungsi Anda kepada kepala AWS IoT Core sekolah. Jika Anda tidak melihatnya, Anda harus menambahkannya dengan menggunakan AddPermission API. 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 yang dikirim AWS IoT Core dengan benar.

    Untuk informasi tentang penanganan peristiwa dalam fungsi Lambda Anda, lihatMendefinisikan fungsi Lambda Anda. Anda dapat menggunakan fitur pengujian di AWS Lambda console (https://console.aws.amazon.com/lambda/) untuk membuat kode nilai pengujian 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 mempublikasikan, berlangganan, dan menerima pesan), masalahnya mungkin kebijakan yang dikembalikan 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.

    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 tersebut. 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 waktu tunggu. Batas batas waktu fungsi Lambda untuk otorizer kustom adalah 5 detik. Anda dapat memeriksa durasi fungsi di CloudWatch log atau metrik.

Menyelidiki masalah perangkat

Jika Anda tidak menemukan masalah dengan memanggil fungsi Lambda Anda atau dengan kebijakan yang dikembalikan fungsi tersebut, cari masalah dengan upaya koneksi perangkat Anda. Permintaan koneksi yang salah format dapat menyebabkan AWS IoT Core otorisasi Anda tidak memicu. Masalah koneksi dapat terjadi di TLS dan lapisan aplikasi.

Kemungkinan masalah lapisan TLS:

  • Pelanggan harus meneruskan header nama host (HTTP, MQTT over WebSockets) atau ekstensi TLS Indikasi Nama Server (HTTP, MQTT over WebSockets, MQTT) di semua permintaan otentikasi khusus. Dalam kedua kasus tersebut, nilai yang diteruskan harus sesuai dengan salah satu titik akhir AWS IoT Core data akun Anda. Ini adalah titik akhir yang dikembalikan saat Anda melakukan perintah CLI berikut.

    • aws iot describe-endpoint --endpoint-type iot:Data-ATS

    • aws iot describe-endpoint --endpoint-type iot:Data(untuk VeriSign titik akhir lama)

  • 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 (signingDisabledbidang palsu di otorizer Anda), cari masalah tanda tangan berikut.

    • Pastikan Anda meneruskan tanda tangan token di x-amz-customauthorizer-signature header atau parameter string kueri.

    • Pastikan layanan tidak menandatangani nilai selain token.

    • Pastikan Anda meneruskan token di parameter header atau query yang Anda tentukan di token-key-name bidang di otorizer Anda.

  • Pastikan nama otorisasi yang Anda berikan dalam parameter string x-amz-customauthorizer-name header atau query valid atau bahwa Anda memiliki otorizer default yang ditentukan untuk akun Anda.