Peran Cognito yang diautentikasi terlalu permisif - AWSIoT Device Defender

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

Peran Cognito yang diautentikasi terlalu permisif

Kebijakan yang dilampirkan pada peran kumpulan identitas Amazon Cognito yang diautentikasi dianggap terlalu permisif karena memberikan izin untuk melakukan tindakan berikut: AWS IoT

  • Mengelola atau memodifikasi sesuatu.

  • Mengelola data atau sumber daya yang tidak terkait.

Atau, karena memberikan izin untuk melakukan AWS IoT tindakan berikut pada serangkaian perangkat yang luas:

  • Baca hal data administratif.

  • Gunakan MQTT untuk menghubungkan/menerbitkan/berlangganan topik yang dicadangkan (termasuk bayangan atau data eksekusi pekerjaan).

  • Gunakan API perintah untuk membaca atau memodifikasi bayangan atau data eksekusi pekerjaan.

Secara umum, perangkat yang terhubung menggunakan peran kumpulan identitas Amazon Cognito yang diautentikasi seharusnya hanya memiliki izin terbatas untuk membaca data administratif khusus sesuatu, menerbitkan dan berlangganan topik khusus sesuatu, atau menggunakan API perintah untuk membaca dan memodifikasi data MQTT spesifik hal yang terkait dengan bayangan atau data eksekusi pekerjaan.

Pemeriksaan ini muncul seperti AUTHENTICATED_COGNITO_ROLE_OVERLY_PERMISSIVE_CHECK pada CLI danAPI.

Tingkat keparahan: Kritis

Detail

Untuk pemeriksaan ini, AWS IoT Device Defender audit semua kumpulan identitas Amazon Cognito yang telah digunakan untuk terhubung ke AWS IoT broker pesan selama 31 hari sebelum eksekusi audit. Semua kumpulan identitas Amazon Cognito yang terhubung dengan identitas Amazon Cognito yang diautentikasi atau tidak diautentikasi disertakan dalam audit.

Alasan berikut kode dikembalikan saat pemeriksaan ini menemukan peran kumpulan identitas Amazon Cognito terautentikasi yang tidak sesuai:

  • ALLOWS_ BROAD _ ACCESS _ _ _ IOT _ THING _ ADMIN READ ACTIONS

  • ALLOWS_ ACCESS _ _ _ _ IOT _ NON _ THING ADMIN ACTIONS

  • ALLOWS_ ACCESS _ _ _ _ IOT _ THING _ ADMIN WRITE ACTIONS

Mengapa itu penting

Jika identitas yang diautentikasi dikompromikan, ia dapat menggunakan tindakan administratif untuk mengubah pengaturan akun, menghapus sumber daya, atau mendapatkan akses ke data sensitif.

Bagaimana cara memperbaikinya

Kebijakan yang dilampirkan pada peran kumpulan identitas Amazon Cognito yang diautentikasi seharusnya hanya memberikan izin yang diperlukan agar perangkat dapat melakukan tugasnya. Kami merekomendasikan langkah-langkah berikut:

  1. Buat peran baru yang sesuai.

  2. Buat kumpulan identitas Amazon Cognito dan lampirkan peran yang sesuai padanya.

  3. Verifikasi bahwa identitas Anda dapat mengakses AWS IoT menggunakan kumpulan baru.

  4. Setelah verifikasi selesai, lampirkan peran tersebut ke kumpulan identitas Amazon Cognito yang ditandai sebagai tidak sesuai.

Anda juga dapat menggunakan tindakan mitigasi untuk:

  • Terapkan tindakan PUBLISH_FINDINGS_TO_SNS mitigasi untuk menerapkan respons khusus sebagai respons terhadap pesan AmazonSNS.

Untuk informasi selengkapnya, lihat Tindakan mitigasi.

Mengelola atau memodifikasi hal-hal

AWS IoT APITindakan berikut digunakan untuk mengelola atau memodifikasi hal-hal sehingga izin untuk melakukan ini tidak boleh diberikan ke perangkat yang terhubung melalui kumpulan identitas Amazon Cognito yang diautentikasi:

  • AddThingToThingGroup

  • AttachThingPrincipal

  • CreateThing

  • DeleteThing

  • DetachThingPrincipal

  • ListThings

  • ListThingsInThingGroup

  • RegisterThing

  • RemoveThingFromThingGroup

  • UpdateThing

  • UpdateThingGroupsForThing

Peran apa pun yang memberikan izin untuk melakukan tindakan ini bahkan pada satu sumber daya dianggap tidak sesuai.

Kelola non-hal

Perangkat yang terhubung melalui kumpulan identitas Amazon Cognito yang diautentikasi tidak boleh diberi izin untuk AWS IoT API melakukan tindakan selain yang dibahas di bagian ini. Untuk mengelola akun Anda dengan aplikasi yang terhubung melalui kumpulan identitas Amazon Cognito yang diautentikasi, buat kumpulan identitas terpisah yang tidak digunakan oleh perangkat.

Baca hal data administratif

AWS IoT APITindakan berikut digunakan untuk membaca data benda, sehingga perangkat yang terhubung melalui kumpulan identitas Amazon Cognito yang diautentikasi harus diberi izin untuk melakukan ini hanya pada serangkaian hal terbatas:

  • DescribeThing

  • ListJobExecutionsForThing

  • ListThingGroupsForThing

  • ListThingPrincipals

  • tidak patuh:

    arn:aws:iot:region:account-id:thing/*

    Ini memungkinkan perangkat untuk melakukan tindakan yang ditentukan pada hal apa pun.

  • sesuai:

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iot:DescribeThing", "iot:ListJobExecutionsForThing", "iot:ListThingGroupsForThing", "iot:ListThingPrincipals" ], "Resource": [ "arn:aws:iot:region:account-id:/thing/MyThing" ] } ] }

    Ini memungkinkan perangkat untuk melakukan tindakan yang ditentukan hanya pada satu hal.

  • sesuai:

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iot:DescribeThing", "iot:ListJobExecutionsForThing", "iot:ListThingGroupsForThing", "iot:ListThingPrincipals" ], "Resource": [ "arn:aws:iot:region:account-id:/thing/MyThing*" ] } ] }

    Ini sesuai karena, meskipun sumber daya ditentukan dengan wildcard (*), itu didahului oleh string tertentu, dan itu membatasi kumpulan hal yang diakses ke mereka dengan nama yang memiliki awalan yang diberikan.

  • tidak patuh:

    arn:aws:iot:region:account-id:thing/*

    Ini memungkinkan perangkat untuk melakukan tindakan yang ditentukan pada hal apa pun.

  • sesuai:

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iot:DescribeThing", "iot:ListJobExecutionsForThing", "iot:ListThingGroupsForThing", "iot:ListThingPrincipals" ], "Resource": [ "arn:aws:iot:region:account-id:/thing/MyThing" ] } ] }

    Ini memungkinkan perangkat untuk melakukan tindakan yang ditentukan hanya pada satu hal.

  • sesuai:

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iot:DescribeThing", "iot:ListJobExecutionsForThing", "iot:ListThingGroupsForThing", "iot:ListThingPrincipals" ], "Resource": [ "arn:aws:iot:region:account-id:/thing/MyThing*" ] } ] }

    Ini sesuai karena, meskipun sumber daya ditentukan dengan wildcard (*), itu didahului oleh string tertentu, dan itu membatasi kumpulan hal yang diakses ke mereka dengan nama yang memiliki awalan yang diberikan.

Berlangganan/terbitkan ke topik MQTT

MQTTpesan dikirim melalui broker AWS IoT pesan dan digunakan oleh perangkat untuk melakukan banyak tindakan berbeda, termasuk mengakses dan memodifikasi status bayangan dan status eksekusi pekerjaan. Kebijakan yang memberikan izin ke perangkat untuk menghubungkan, menerbitkan, atau berlangganan MQTT pesan harus membatasi tindakan ini ke sumber daya tertentu sebagai berikut:

Hubungkan
  • tidak patuh:

    arn:aws:iot:region:account-id:client/*

    Wildcard * memungkinkan perangkat apa pun untuk AWS IoT terhubung.

    arn:aws:iot:region:account-id:client/${iot:ClientId}

    Kecuali iot:Connection.Thing.IsAttached disetel ke true dalam kunci kondisi, ini setara dengan wildcard * pada contoh sebelumnya.

  • sesuai:

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iot:Connect" ], "Resource": [ "arn:aws:iot:region:account-id:client/${iot:Connection.Thing.ThingName}" ], "Condition": { "Bool": { "iot:Connection.Thing.IsAttached": "true" } } } ] }

    Spesifikasi sumber daya berisi variabel yang cocok dengan nama perangkat yang digunakan untuk menghubungkan, dan pernyataan kondisi selanjutnya membatasi izin dengan memeriksa apakah sertifikat yang digunakan oleh MQTT klien cocok dengan yang dilampirkan pada benda dengan nama yang digunakan.

Publikasikan
  • tidak patuh:

    arn:aws:iot:region:account-id:topic/$aws/things/*/shadow/update

    Ini memungkinkan perangkat untuk memperbarui bayangan perangkat apa pun (* = semua perangkat).

    arn:aws:iot:region:account-id:topic/$aws/things/*

    Ini memungkinkan perangkat untuk membaca/memperbarui/menghapus bayangan perangkat apa pun.

  • sesuai:

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iot:Publish" ], "Resource": [ "arn:aws:iot:region:account-id:topic/$aws/things/${iot:Connection.Thing.ThingName}/shadow/*" ], } ] }

    Spesifikasi sumber daya berisi wildcard, tetapi hanya cocok dengan topik terkait bayangan untuk perangkat yang namanya digunakan untuk terhubung.

Langganan
  • tidak patuh:

    arn:aws:iot:region:account-id:topicfilter/$aws/things/*

    Ini memungkinkan perangkat untuk berlangganan bayangan cadangan atau topik pekerjaan untuk semua perangkat.

    arn:aws:iot:region:account-id:topicfilter/$aws/things/#

    Sama seperti contoh sebelumnya, tetapi menggunakan wildcard #.

    arn:aws:iot:region:account-id:topicfilter/$aws/things/+/shadow/update

    Ini memungkinkan perangkat untuk melihat pembaruan bayangan pada perangkat apa pun (+ = semua perangkat).

  • sesuai:

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iot:Subscribe" ], "Resource": [ "arn:aws:iot:region:account-id:topicfilter/$aws/things/${iot:Connection.Thing.ThingName}/shadow/*" "arn:aws:iot:region:account-id:topicfilter/$aws/things/${iot:Connection.Thing.ThingName}/jobs/*" ], } ] }

    Spesifikasi sumber daya berisi wildcard, tetapi hanya cocok dengan topik terkait bayangan dan topik terkait pekerjaan apa pun untuk perangkat yang namanya digunakan untuk terhubung.

Menerima
  • sesuai:

    arn:aws:iot:region:account-id:topicfilter/$aws/things/*

    Ini sesuai karena perangkat hanya dapat menerima pesan dari topik yang memiliki izin untuk berlangganan.

Membaca atau memodifikasi bayangan atau data pekerjaan

Kebijakan yang memberikan izin kepada perangkat untuk melakukan API tindakan untuk mengakses atau memodifikasi bayangan perangkat atau data eksekusi pekerjaan harus membatasi tindakan ini ke sumber daya tertentu. Berikut ini adalah API tindakannya:

  • DeleteThingShadow

  • GetThingShadow

  • UpdateThingShadow

  • DescribeJobExecution

  • GetPendingJobExecutions

  • StartNextPendingJobExecution

  • UpdateJobExecution

Contoh

  • tidak patuh:

    arn:aws:iot:region:account-id:thing/*

    Ini memungkinkan perangkat untuk melakukan tindakan yang ditentukan pada hal apa pun.

  • sesuai:

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iot:DeleteThingShadow", "iot:GetThingShadow", "iot:UpdateThingShadow", "iot:DescribeJobExecution", "iot:GetPendingJobExecutions", "iot:StartNextPendingJobExecution", "iot:UpdateJobExecution" ], "Resource": [ "arn:aws:iot:region:account-id:/thing/MyThing1", "arn:aws:iot:region:account-id:/thing/MyThing2" ] } ] }

    Ini memungkinkan perangkat untuk melakukan tindakan yang ditentukan hanya pada dua hal.