Praktik terbaik keamanan di AWS IoT Core - AWS IoT Core

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

Praktik terbaik keamanan di AWS IoT Core

Bagian ini berisi informasi tentang praktik terbaik keamanan untuk AWS IoT Core. Untuk informasi tentang aturan keamanan untuk solusi IoT Industri, lihat Sepuluh aturan emas keamanan untuk solusi IoT Industri.

Melindungi koneksi MQTT di AWS IoT

AWS IoT Coreadalah layanan cloud terkelola yang memungkinkan perangkat yang terhubung berinteraksi dengan aplikasi cloud dan perangkat lain dengan mudah dan aman. AWS IoT Core mendukung HTTP, WebSocket, dan MQTT, protokol komunikasi ringan yang dirancang khusus untuk mentolerir koneksi intermiten. Jika Anda terhubung AWS IoT menggunakan MQTT, setiap koneksi Anda harus dikaitkan dengan pengenal yang dikenal sebagai ID klien. Klien MQTT secara IDs unik mengidentifikasi koneksi MQTT. Jika koneksi baru dibuat menggunakan ID klien yang sudah diklaim untuk koneksi lain, broker AWS IoT pesan menjatuhkan koneksi lama untuk memungkinkan koneksi baru. Klien IDs harus unik dalam masing-masing Akun AWS dan masing-masing Wilayah AWS. Ini berarti bahwa Anda tidak perlu menegakkan keunikan global klien IDs di luar Anda Akun AWS atau di seluruh Wilayah di dalam Anda. Akun AWS

Dampak dan tingkat keparahan terputusnya koneksi MQTT pada armada perangkat Anda bergantung pada banyak faktor. Ini termasuk:

Untuk menghindari konflik ID klien dan potensi dampak negatifnya, pastikan bahwa setiap perangkat atau aplikasi seluler memiliki kebijakan AWS IoT atau IAM yang membatasi klien mana yang IDs dapat digunakan untuk koneksi MQTT ke broker pesan. AWS IoT Misalnya, Anda dapat menggunakan kebijakan IAM untuk mencegah perangkat menutup sambungan perangkat lain secara tidak sengaja dengan menggunakan ID klien yang sudah digunakan. Untuk informasi selengkapnya, lihat Otorisasi.

Semua perangkat di armada Anda harus memiliki kredensyal dengan hak istimewa yang hanya mengizinkan tindakan yang dimaksudkan, yang mencakup (namun tidak terbatas pada) tindakan AWS IoT MQTT seperti memublikasikan pesan atau berlangganan topik dengan cakupan dan konteks tertentu. Kebijakan izin khusus dapat bervariasi untuk kasus penggunaan Anda. Identifikasi kebijakan izin yang paling memenuhi persyaratan bisnis dan keamanan Anda.

Untuk menyederhanakan pembuatan dan pengelolaan kebijakan izin, Anda dapat menggunakan AWS IoT Core variabel kebijakan dan variabel kebijakan IAM. Variabel kebijakan dapat ditempatkan dalam kebijakan dan ketika kebijakan dievaluasi, variabel diganti dengan nilai yang berasal dari permintaan perangkat. Dengan menggunakan variabel kebijakan, Anda dapat membuat satu kebijakan untuk memberikan izin ke beberapa perangkat. Anda dapat mengidentifikasi variabel kebijakan yang relevan untuk kasus penggunaan Anda berdasarkan konfigurasi AWS IoT akun Anda, mekanisme otentikasi, dan protokol jaringan yang digunakan dalam menghubungkan ke broker AWS IoT pesan. Namun, untuk menulis kebijakan izin terbaik, pertimbangkan secara spesifik kasus penggunaan dan model ancaman Anda.

Misalnya, jika Anda mendaftarkan perangkat di AWS IoT registri, Anda dapat menggunakan variabel kebijakan hal dalam AWS IoT kebijakan untuk memberikan atau menolak izin berdasarkan properti benda seperti nama benda, tipe benda, dan nilai atribut benda. Nama benda diperoleh dari ID klien dalam pesan koneksi MQTT yang dikirim ketika sesuatu terhubung ke. AWS IoTVariabel kebijakan hal diganti ketika sesuatu terhubung ke AWS IoT lebih dari MQTT menggunakan otentikasi timbal balik TLS atau MQTT melalui protokol menggunakan identitas Amazon Cognito yang diautentikasi. WebSocket Anda dapat menggunakan AttachThingPrincipalAPI untuk melampirkan sertifikat dan identitas Amazon Cognito yang diautentikasi ke suatu hal. iot:Connection.Thing.ThingNameadalah variabel kebijakan hal yang berguna untuk menegakkan pembatasan ID klien. Contoh AWS IoT kebijakan berikut memerlukan nama benda terdaftar untuk digunakan sebagai ID klien untuk koneksi MQTT ke broker pesan: AWS IoT

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "iot:Connect", "Resource": [ "arn:aws:iot:us-east-1:123456789012:client/${iot:Connection.Thing.ThingName}" ] } ] }

Jika Anda ingin mengidentifikasi konflik ID klien yang sedang berlangsung, Anda dapat mengaktifkan dan menggunakan CloudWatch Log untuk AWS IoT. Untuk setiap koneksi MQTT yang terputus oleh broker AWS IoT pesan karena konflik ID klien, catatan log yang serupa dengan berikut ini dihasilkan:

{ "timestamp": "2019-04-28 22:05:30.105", "logLevel": "ERROR", "traceId": "02a04a93-0b3a-b608-a27c-1ae8ebdb032a", "accountId": "123456789012", "status": "Failure", "eventType": "Disconnect", "protocol": "MQTT", "clientId": "clientId01", "principalId": "1670fcf6de55adc1930169142405c4a2493d9eb5487127cd0091ca0193a3d3f6", "sourceIp": "203.0.113.1", "sourcePort": 21335, "reason": "DUPLICATE_CLIENT_ID", "details": "A new connection was established with the same client ID" }

Anda dapat menggunakan filter CloudWatch Log seperti {$.reason= "DUPLICATE_CLIENT_ID" } untuk mencari contoh konflik ID klien atau untuk mengatur filter CloudWatch metrik dan CloudWatch alarm terkait untuk pemantauan dan pelaporan berkelanjutan.

Anda dapat menggunakan AWS IoT Device Defender untuk mengidentifikasi kebijakan yang terlalu permisif AWS IoT dan IAM. AWS IoT Device Defender juga menyediakan pemeriksaan audit yang memberi tahu Anda jika beberapa perangkat dalam armada Anda terhubung ke broker AWS IoT pesan menggunakan ID klien yang sama.

Anda dapat menggunakan AWS IoT Device Advisor untuk memvalidasi bahwa perangkat Anda dapat terhubung dengan andal AWS IoT Core dan mengikuti praktik terbaik keamanan.

Lihat juga

Jaga agar jam perangkat Anda tetap sinkron

Penting untuk memiliki waktu yang akurat di perangkat Anda. Sertifikat X.509 memiliki tanggal dan waktu kedaluwarsa. Jam di perangkat Anda digunakan untuk memverifikasi bahwa sertifikat server masih valid. Jika Anda sedang membangun perangkat IoT komersial, ingatlah bahwa produk Anda mungkin disimpan untuk waktu yang lama sebelum dijual. Jam waktu nyata dapat melayang selama waktu ini dan baterai dapat habis, sehingga pengaturan waktu di pabrik tidak cukup.

Untuk sebagian besar sistem, ini berarti bahwa perangkat lunak perangkat harus menyertakan klien protokol waktu jaringan (NTP). Perangkat harus menunggu hingga disinkronkan dengan server NTP sebelum mencoba terhubung. AWS IoT Core Jika ini tidak memungkinkan, sistem harus menyediakan cara bagi pengguna untuk mengatur waktu perangkat sehingga koneksi berikutnya berhasil.

Setelah perangkat disinkronkan dengan server NTP, perangkat dapat membuka koneksi dengan. AWS IoT Core Berapa banyak kemiringan jam yang diizinkan tergantung pada apa yang Anda coba lakukan dengan koneksi.

Validasi sertifikat server

Hal pertama yang dilakukan perangkat untuk berinteraksi AWS IoT adalah membuka koneksi yang aman. Saat Anda menghubungkan perangkat Anda AWS IoT, pastikan bahwa Anda sedang berbicara AWS IoT dan bukan server lain yang meniru identitas AWS IoT. Setiap AWS IoT server disediakan dengan sertifikat yang dikeluarkan untuk domain. iot.amazonaws.com Sertifikat ini dikeluarkan AWS IoT oleh otoritas sertifikat tepercaya yang memverifikasi identitas dan kepemilikan domain kami.

Salah satu hal pertama yang AWS IoT Core dilakukan ketika perangkat terhubung adalah mengirim perangkat sertifikat server. Perangkat dapat memverifikasi bahwa mereka mengharapkan untuk terhubung iot.amazonaws.com dan bahwa server pada akhir koneksi tersebut memiliki sertifikat dari otoritas tepercaya untuk domain itu.

Sertifikat TLS dalam format X.509 dan mencakup berbagai informasi seperti nama organisasi, lokasi, nama domain, dan masa berlaku. Periode validitas ditentukan sebagai sepasang nilai waktu yang disebut notBefore dannotAfter. Layanan seperti AWS IoT Core menggunakan periode validitas terbatas (misalnya, satu tahun) untuk sertifikat server mereka dan mulai melayani yang baru sebelum yang lama kedaluwarsa.

Gunakan satu identitas per perangkat

Gunakan satu identitas per klien. Perangkat umumnya menggunakan sertifikat klien X.509. Aplikasi web dan seluler menggunakan Identitas Amazon Cognito. Ini memungkinkan Anda menerapkan izin berbutir halus ke perangkat Anda.

Misalnya, Anda memiliki aplikasi yang terdiri dari perangkat ponsel yang menerima pembaruan status dari dua objek rumah pintar yang berbeda - bola lampu dan termostat. Bola lampu mengirimkan status tingkat baterainya, dan termostat mengirimkan pesan yang melaporkan suhu.

AWS IoT mengautentikasi perangkat secara individual dan memperlakukan setiap koneksi secara individual. Anda dapat menerapkan kontrol akses berbutir halus menggunakan kebijakan otorisasi. Anda dapat menentukan kebijakan untuk termostat yang memungkinkannya mempublikasikan ke ruang topik. Anda dapat menentukan kebijakan terpisah untuk bola lampu yang memungkinkannya mempublikasikan ke ruang topik yang berbeda. Terakhir, Anda dapat menentukan kebijakan untuk aplikasi seluler yang hanya memungkinkannya untuk terhubung dan berlangganan topik termostat dan bola lampu untuk menerima pesan dari perangkat ini.

Terapkan prinsip hak istimewa terkecil dan cakupan izin per perangkat sebanyak mungkin. Semua perangkat atau pengguna harus memiliki AWS IoT kebijakan AWS IoT yang hanya memungkinkannya terhubung dengan ID klien yang dikenal, dan untuk mempublikasikan dan berlangganan serangkaian topik yang diidentifikasi dan tetap.

Gunakan detik Wilayah AWS sebagai cadangan

Pertimbangkan untuk menyimpan salinan data Anda dalam sedetik Wilayah AWS sebagai cadangan. Perhatikan bahwa AWS solusi bernama Disaster Recovery untuk AWS IoT tidak lagi tersedia. Meskipun GitHubperpustakaan terkait tetap dapat diakses, AWS tidak digunakan lagi pada Juli 2023 dan tidak lagi menyediakan pemeliharaan atau dukungan untuknya. Untuk menerapkan solusi Anda sendiri atau untuk menjelajahi opsi dukungan tambahan, kunjungi Kontak AWS. Jika ada Manajer Akun AWS Teknis yang terkait dengan akun Anda, hubungi mereka untuk meminta bantuan.

Gunakan hanya dalam penyediaan waktu

Membuat dan menyediakan setiap perangkat secara manual dapat memakan waktu. AWS IoT menyediakan cara untuk mendefinisikan template ke perangkat penyediaan saat mereka pertama kali terhubung AWS IoT. Untuk informasi selengkapnya, lihat ust-in-time Penyediaan J.

Izin untuk menjalankan pengujian AWS IoT Device Advisor

Templat kebijakan berikut menunjukkan izin minimum dan entitas IAM yang diperlukan untuk menjalankan kasus pengujian AWS IoT Device Advisor. Anda harus mengganti your-device-role-arn dengan peran perangkat Amazon Resource Name (ARN) yang Anda buat di bawah prasyarat.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": "iam:PassRole", "Resource": "your-device-role-arn", "Condition": { "StringEquals": { "iam:PassedToService": "iotdeviceadvisor.amazonaws.com" } } }, { "Sid": "VisualEditor1", "Effect": "Allow", "Action": [ "execute-api:Invoke*", "iam:ListRoles", // Required to list device roles in the Device Advisor console "iot:Connect", "iot:CreateJob", "iot:DeleteJob", "iot:DescribeCertificate", "iot:DescribeEndpoint", "iotjobsdata:DescribeJobExecution", "iot:DescribeJob", "iot:DescribeThing", "iotjobsdata:GetPendingJobExecutions", "iot:GetPolicy", "iot:ListAttachedPolicies", "iot:ListCertificates", "iot:ListPrincipalPolicies", "iot:ListThingPrincipals", "iot:ListThings", "iot:Publish", "iotjobsdata:StartNextPendingJobExecution", "iotjobsdata:UpdateJobExecution", "iot:UpdateThingShadow", "logs:CreateLogGroup", "logs:CreateLogStream", "logs:DescribeLogGroups", "logs:DescribeLogStreams", "logs:PutLogEvents", "logs:PutRetentionPolicy" ], "Resource": "*" }, { "Sid": "VisualEditor2", "Effect": "Allow", "Action": "iotdeviceadvisor:*", "Resource": "*" } ] }

Pencegahan deputi kebingungan lintas layanan untuk Device Advisor

Masalah "confused deputy" adalah masalah keamanan saat entitas yang tidak memiliki izin untuk melakukan suatu tindakan dapat memaksa entitas yang memilik hak akses lebih tinggi untuk melakukan tindakan tersebut. Pada tahun AWS, peniruan lintas layanan dapat mengakibatkan masalah wakil yang membingungkan. Peniruan identitas lintas layanan dapat terjadi ketika satu layanan (layanan yang dipanggil) memanggil layanan lain (layanan yang dipanggil). Layanan pemanggilan dapat dimanipulasi menggunakan izinnya untuk bertindak pada sumber daya pelanggan lain dengan cara yang seharusnya tidak dilakukannya kecuali bila memiliki izin untuk mengakses. Untuk mencegah hal ini, AWS sediakan alat yang membantu Anda melindungi data Anda untuk semua layanan dengan prinsip layanan yang telah diberikan akses ke sumber daya di akun Anda.

Sebaiknya gunakan kunci konteks kondisi aws:SourceAccountglobal aws:SourceArndan global dalam kebijakan sumber daya untuk membatasi izin yang diberikan Device Advisor kepada layanan lain ke sumber daya. Jika Anda menggunakan kedua kunci konteks kondisi global, aws:SourceAccount nilai dan akun dalam aws:SourceArn nilai harus menggunakan ID akun yang sama saat digunakan dalam pernyataan kebijakan yang sama.

Nilai aws:SourceArn harus ARN dari sumber definisi suite Anda. Sumber definisi suite mengacu pada rangkaian pengujian yang Anda buat dengan Device Advisor.

Cara paling efektif untuk melindungi dari masalah "confused deputy" adalah dengan menggunakan kunci konteks kondisi global aws:SourceArn dengan ARN lengkap sumber daya. Jika Anda tidak mengetahui ARN lengkap sumber daya atau jika Anda menentukan beberapa sumber daya, gunakan kunci kondisi konteks aws:SourceArn global dengan wildcard (*) untuk bagian ARN yang tidak diketahui. Sebagai contoh, arn:aws:iotdeviceadvisor:*:account-id:suitedefinition/*.

Contoh berikut menunjukkan bagaimana Anda dapat menggunakan aws:SourceArn dan kunci konteks kondisi aws:SourceAccount global di Device Advisor untuk mencegah masalah wakil yang membingungkan.

{ "Version": "2012-10-17", "Statement": { "Sid": "ConfusedDeputyPreventionExamplePolicy", "Effect": "Allow", "Principal": { "Service": "iotdeviceadvisor.amazonaws.com" }, "Action": "sts:AssumeRole", "Condition": { "ArnLike": { "aws:SourceArn": "arn:aws:iotdeviceadvisor:us-east-1:123456789012:suitedefinition/ygp6rxa3tzvn" }, "StringEquals": { "aws:SourceAccount": "123456789012" } } } }