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 Core
Dampak dan tingkat keparahan penghentian koneksi MQTT pada armada perangkat Anda bergantung pada banyak faktor. Ini termasuk:
-
Kasus penggunaan Anda (misalnya, data yang dikirim perangkat Anda AWS IoT, berapa banyak data, dan frekuensi pengiriman data).
-
Konfigurasi klien MQTT Anda (misalnya, pengaturan sambungkan kembali otomatis, waktu back-off terkait, dan penggunaan sesi persisten MQTT).
-
Kendala sumber daya perangkat.
-
Akar penyebab pemutusan, agresivitasnya, dan kegigihan.
Untuk menghindari konflik ID klien dan potensi dampak negatifnya, pastikan bahwa setiap perangkat atau aplikasi seluler memiliki kebijakan AWS IoT atau IAM yang membatasi ID klien mana yang dapat digunakan untuk koneksi MQTT ke broker pesan. AWS IoT Misalnya, Anda dapat menggunakan kebijakan IAM untuk mencegah perangkat menutup koneksi perangkat lain secara tidak sengaja dengan menggunakan ID klien yang sudah digunakan. Untuk informasi selengkapnya, lihat Otorisasi.
Semua perangkat di armada Anda harus memiliki kredentif dengan hak istimewa yang hanya mengizinkan tindakan yang dimaksudkan, yang mencakup (namun tidak terbatas pada) tindakan AWS IoT MQTT seperti menerbitkan pesan atau berlangganan topik dengan cakupan dan konteks tertentu. Kebijakan izin khusus dapat bervariasi untuk kasus penggunaan Anda. Identifikasi kebijakan izin yang paling sesuai dengan 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. Menggunakan variabel kebijakan, Anda dapat membuat kebijakan tunggal untuk memberikan izin ke beberapa perangkat. Anda dapat mengidentifikasi variabel kebijakan yang relevan untuk kasus penggunaan berdasarkan konfigurasi AWS IoT akun, 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 Anda di AWS IoT registri, Anda dapat menggunakan variabel kebijakan sesuatu 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 IoT. Variabel kebijakan benda diganti ketika sesuatu terhubung melalui MQTT menggunakan otentikasi AWS IoT timbal balik TLS atau MQTT melalui WebSocket protokol menggunakan identitas Amazon Cognito yang diautentikasi. Anda dapat menggunakan AttachThingPrincipal API untuk melampirkan sertifikat dan identitas Amazon Cognito yang diautentikasi ke sesuatu. iot:Connection.Thing.ThingNameadalah variabel kebijakan hal yang berguna untuk menegakkan pembatasan ID klien. AWS IoT Kebijakan contoh berikut mengharuskan nama benda terdaftar digunakan sebagai ID klien untuk koneksi MQTT ke broker AWS IoT pesan:
-
{ "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 di AWS IoT putuskan oleh broker pesan karena konflik ID klien, catatan log yang mirip 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
Anda dapat menggunakan AWS IoT Device Advisor untuk memvalidasi bahwa perangkat Anda dapat terhubung dengan andal ke AWS IoT Core dan mengikuti praktik terbaik keamanan.
Lihat juga
Jaga agar jam perangkat tetap sinkron
Penting untuk memiliki waktu yang akurat di perangkat Anda. X.509 sertifikat memiliki tanggal dan waktu kedaluwarsa. Jam di perangkat Anda digunakan untuk memverifikasi bahwa sertifikat server masih valid. Jika Anda membangun perangkat IoT komersial, ingatlah bahwa produk Anda dapat disimpan untuk waktu yang lama sebelum dijual. Real-time jam dapat melayang selama waktu ini dan baterai bisa habis, jadi 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 sampai disinkronkan dengan server NTP sebelum mencoba terhubung ke. 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, ia 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 dengan AWS IoT adalah membuka koneksi yang aman. Saat Anda menghubungkan perangkat Anda ke AWS IoT, pastikan Anda berbicara dengan AWS IoT dan bukan server lain yang menyamar. AWS IoT Setiap AWS IoT server disediakan dengan sertifikat yang dikeluarkan untuk iot.amazonaws.com domain. Sertifikat ini dikeluarkan AWS IoT oleh otoritas sertifikat tepercaya yang memverifikasi identitas dan kepemilikan domain kami.
Salah satu hal pertama AWS IoT Core yang dilakukan ketika perangkat terhubung adalah mengirim perangkat sertifikat server. Perangkat dapat memverifikasi bahwa mereka mengharapkan untuk terhubung iot.amazonaws.com dan bahwa server di ujung koneksi tersebut memiliki sertifikat dari otoritas tepercaya untuk domain tersebut.
Sertifikat TLS dalam X.509 format 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 berakhir.
Gunakan satu identitas per perangkat
Gunakan satu identitas per klien. Perangkat umumnya menggunakan sertifikat X.509 klien. Aplikasi web dan seluler menggunakan Amazon Cognito Identity. Ini memungkinkan Anda untuk 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 level baterainya, dan termostat mengirimkan pesan yang melaporkan suhu.
AWS IoT mengotentikasi perangkat secara individual dan memperlakukan setiap koneksi secara individual. Anda dapat menerapkan kontrol akses halus menggunakan kebijakan otorisasi. Anda dapat menentukan kebijakan untuk termostat yang memungkinkannya untuk dipublikasikan ke ruang topik. Anda dapat menentukan kebijakan terpisah untuk bola lampu yang memungkinkannya dipublikasikan ke ruang topik yang berbeda. Terakhir, Anda dapat menentukan kebijakan untuk aplikasi seluler yang hanya memungkinkannya untuk terhubung dan berlangganan topik untuk termostat dan bola lampu untuk menerima pesan dari perangkat ini.
Terapkan prinsip hak istimewa paling sedikit dan lingkup izin per perangkat sebanyak mungkin. Semua perangkat atau pengguna harus memiliki AWS IoT kebijakan AWS IoT yang hanya mengizinkannya untuk 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 Dis aster Recovery for AWS IoT
Gunakan penyediaan tepat waktu
Membuat dan menyediakan setiap perangkat secara manual dapat memakan waktu. AWS IoT menyediakan cara untuk menentukan template untuk menyediakan perangkat ketika mereka pertama kali terhubung ke AWS IoT. Untuk informasi selengkapnya, lihat Just-in-time penyediaan.
Izin untuk menjalankan AWS IoT Pengujian Penasihat Perangkat
Template kebijakan berikut menunjukkan izin minimum dan entitas IAM yang diperlukan untuk menjalankan kasus uji AWS IoT Device Advisor. Anda harus mengganti your-device-role-arn dengan peran perangkat Nama Sumber Daya Amazon (ARN) yang Anda buat berdasarkan prasyarat.
-
{ "Version":"2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": "iam:PassRole", "Resource": "arn:aws:iot:us-east-1:123456789012:thinggroup/your-thing-group", "Condition": { "StringEquals": { "iam:PassedToService": "iotdeviceadvisor.amazonaws.com" } } }, { "Sid": "VisualEditor1", "Effect": "Allow", "Action": [ "execute-api:Invoke*", "iam:ListRoles", "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": "*" } ] }
Cross-service pencegahan wakil yang bingung untuk Device Advisor
Masalah "confused deputy" adalah masalah keamanan di mana entitas yang tidak memiliki izin untuk melakukan tindakan dapat memengaruhi entitas yang memiliki hak akses lebih tinggi untuk melakukan tindakan. Pada tahun AWS, peniruan lintas layanan dapat mengakibatkan masalah wakil yang membingungkan. Cross-service peniruan diri dapat terjadi ketika satu layanan (layanan panggilan) memanggil layanan lain (layanan yang disebut). 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 menyediakan alat yang membantu Anda melindungi data untuk semua layanan dengan prinsipal layanan yang telah diberikan akses ke sumber daya di akun Anda.
Sebaiknya gunakan kunci konteks aws:SourceArn dan kondisi aws:SourceAccount global dalam kebijakan sumber daya untuk membatasi izin yang diberikan Device Advisor pada 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 menjadi ARN sumber daya definisi suite Anda. Sumber daya 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 kunci konteks kondisi aws:SourceAccount global di Device Advisor untuk mencegah masalah wakil yang membingungkan. aws:SourceArn
-
{ "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" } } } }