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
Melindungi koneksi MQTT di AWS IoT
AWS IoT Core
Dampak dan tingkat keparahan terputusnya 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).
-
Kendala sumber daya perangkat.
-
Akar penyebab pemutusan hubungan, agresivitas, dan ketekunannya.
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
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.ThingName
adalah 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
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
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:SourceAccount
global aws:SourceArn
dan 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"
} } } }