Übermäßig permissive nicht-authentifizierte Amazon Cognito-Rolle
Eine Richtlinie, die an eine nicht authentifizierte Amazon-Cognito-Identitätspool-Rolle angefügt ist, wird als übermäßig permissiv angesehen, da sie zum Ausführen folgender AWS IoT-Aktionen berechtigt:
-
Objekte verwalten oder ändern
-
Objekt-Verwaltungsdaten lesen
-
Nicht auf das Objekt bezogene Daten oder Ressourcen verwalten
Oder da sie zum Ausführen der folgenden AWS IoT-Aktionen für eine breite Palette von Geräten berechtigt:
-
MQTT zum Verbinden mit sowie zum Veröffentlichen und Abonnieren von reservierten Themen (einschließlich Schatten- oder Aufgabenausführungsdaten) verwenden
-
API-Befehle zum Lesen und Ändern von Schatten- oder Auftragsausführungsdaten verwenden
Im Allgemeinen sollten Geräte, die eine Verbindung über eine nicht authentifizierte Amazon Cognito-Identitätspool-Rolle herstellen, nur eingeschränkt zum Veröffentlichen und Abonnieren von objektspezifischen MQTT-Themen oder zum Lesen und Ändern objektspezifischer Daten bezüglich Shadow- oder Auftragsausführungsdaten mithilfe von API-Befehlen berechtigt sein.
Diese Prüfung wird wie UNAUTHENTICATED_COGNITO_ROLE_OVERLY_PERMISSIVE_CHECK
in der CLI und API angezeigt.
Schweregrad: Kritisch
Details
Für diese Prüfung überprüft AWS IoT Device Defender alle Amazon-Cognito-Identitätspools, die verwendet wurden, um innerhalb der letzten 31 Tage vor Ausführung der Prüfung eine Verbindung mit dem AWS IoT-Nachrichten-Broker aufzubauen. Alle Amazon Cognito-Identitätspools, über die eine authentifizierte oder eine nicht authentifizierte Amazon Cognito-Identität eine Verbindung hergestellt hat, werden in den Audit eingeschlossen.
Die folgenden Ursachencodes werden zurückgegeben, wenn diese Prüfung eine nicht-konforme, nicht authentifizierte Amazon Cognito-Identitätspoolrolle findet:
-
ALLOWS_ACCESS_TO_IOT_ADMIN_ACTIONS
-
ALLOWS_BROAD_ACCESS_TO_IOT_DATA_PLANE_ACTIONS
Warum dies wichtig ist
Da nicht authentifizierte Identitäten niemals vom Benutzer authentifiziert werden, stellen sie ein viel größer Risiko als authentifizierte Amazon Cognito-Identitäten dar. Wenn eine nicht authentifizierte Identität kompromittiert wird, könnte sie mit administrativen Aktionen Kontoeinstellungen ändern, Ressourcen löschen oder Zugriff auf vertrauliche Daten erhalten. Oder mit umfassendem Zugriff auf Geräte-Einstellungen kann sie Schatten und Aufträge für alle Geräte in Ihrem Konto aufrufen oder ändern. Eine Gastbenutzer könnte die Berechtigungen verwenden, um Ihre gesamte Flotte zu kompromittieren oder einen DDoS-Angriff mit Nachrichten zu starten.
So lässt es sich beheben
Eine Richtlinie, die an eine nicht authentifizierte Amazon Cognito-Identitätspool-Rolle angefügt ist, sollte einem Gerät nur die Berechtigungen gewähren, die es benötigt, um seine Arbeit erledigen zu können. Wir empfehlen die folgenden Schritte:
-
Erstellen Sie eine neue regelkonforme Rolle.
-
Erstellen Sie einen neuen Amazon Cognito-Identitätspool und ordnen Sie ihm die regelkonforme Rolle zu.
-
Vergewissern Sie sich, dass Ihre Identitäten über den neuen Pool Zugriff auf AWS IoT zugreifen können.
-
Sobald die Verifizierung abgeschlossen ist, fügen Sie die konforme Rolle an den Amazon Cognito-Identitätspool an, der als nicht konform markiert wurde.
Sie können Abhilfemaßnahmen auch für Folgendes verwenden:
-
Wenden Sie die Abhilfemaßnahme
PUBLISH_FINDINGS_TO_SNS
an, um eine benutzerdefinierte Antwort als Reaktion auf die Amazon SNS-Nachricht zu implementieren.
Weitere Informationen finden Sie unter Abschwächungsaktionen.
Objekte verwalten oder ändern
Die folgenden AWS IoT-API-Aktionen werden verwendet, um Objekte zu verwalten oder zu ändern. Daher sollte die Berechtigung zum Ausführen dieser Aktionen keinen Geräten gewährt werden, die eine Verbindung über einen nicht authentifizierten Amazon Cognito-Identitätspool herstellen.
-
AddThingToThingGroup
-
AttachThingPrincipal
-
CreateThing
-
DeleteThing
-
DetachThingPrincipal
-
ListThings
-
ListThingsInThingGroup
-
RegisterThing
-
RemoveThingFromThingGroup
-
UpdateThing
-
UpdateThingGroupsForThing
Jede Rolle, die Berechtigungen zum Ausführen dieser Aktionen auf sogar nur einer einzigen Ressource erteilt, gilt als nicht konform.
Objekt-Verwaltungsdaten lesen
Die folgenden AWS IoT-API-Aktionen werden zum Lesen oder Ändern von Objektdaten verwendet. Geräte, die eine Verbindung über einen nicht authentifizierten Amazon Cognito-Identitätspool herstellen, sollten nicht zum Ausführen dieser Aktionen berechtigt werden.
-
DescribeThing
-
ListJobExecutionsForThing
-
ListThingGroupsForThing
-
ListThingPrincipals
Beispiel
-
Nicht regelkonform:
{ "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" ] } ] }Dies berechtigt das Gerät dazu, die angegebenen Aktionen auszuführen, auch wenn es nur für ein Objekt berechtigt ist.
Verwalten von Nicht-Objekten
Geräte, die sich über einen nicht authentifizierten Amazon Cognito-Identitätspool verbinden, sollten nicht zum Ausführen von anderen AWS IoT-API-Aktionen als denen, die in diesen Abschnitten angesprochen werden, berechtigt werden. Um Ihr Konto mit einer Anwendung zu verwalten, die eine Verbindung über einen nicht authentifizierten Amazon Cognito-Identitätspool herstellt, erstellen Sie einen separaten Identitätspool, der nicht von Geräten genutzt wird.
Abonnieren von/Veröffentlichen in MQTT-Themen
MQTT-Nachrichten werden über den AWS IoT Message Broker gesendet und von Geräten für die Ausführung zahlreicher Aktionen verwendet, darunter zum Abrufen und Ändern des Schattenstatus und des Aufgabenausführungsstatus. Eine Richtlinie, die ein Gerät zum Verbinden mit und Veröffentlichen oder Abonnieren von MQTT-Nachrichten berechtigt, sollte diese Aktionen wie folgt auf bestimmte Ressourcen einschränken:
- Verbinden
-
-
Nicht regelkonform:
arn:aws:iot:
region
:account-id
:client/*Das Platzhalterzeichen „*“ erlaubt jedem Gerät, eine Verbindung mit AWS IoT herzustellen.
arn:aws:iot:
region
:account-id
:client/${iot:ClientId}Außer wenn
iot:Connection.Thing.IsAttached
in den Bedingungsschlüsseln auf „true“ gesetzt wurde, ist dies gleichbedeutend mit dem Platzhalter „*“ im vorherigen Beispiel. -
Regelkonform:
{ "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" } } } ] }Die Ressourcenspezifikation enthält eine Variable, die dem Gerätenamen entspricht, der zum Herstellen der Verbindung verwendet wurde. Die Bedingungsanweisung schränkt die Berechtigung weiter ein, indem überprüft wird, ob das vom MQTT-Client verwendete Zertifikat mit dem übereinstimmt, das dem Objekt mit dem verwendeten Namen zugewiesen ist.
-
- Veröffentlichen
-
-
Nicht regelkonform:
arn:aws:iot:
region
:account-id
:topic/$aws/things/*/shadow/updateDies berechtigt das Gerät dazu, den Shadow eines jeden beliebigen Geräts zu aktualisieren (* = alle Geräte).
arn:aws:iot:
region
:account-id
:topic/$aws/things/*Dies berechtigt das Gerät dazu, den Schatten eines beliebigen Geräts zu lesen, aktualisieren oder löschen.
-
Regelkonform:
{ "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/*" ], } ] }Die Ressourcenspezifikation enthält einen Platzhalter, dieser findet als Übereinstimmung aber nur schattenbezogene Themen für das Gerät, dessen Objektname zum Herstellen der Verbindung verwendet wird.
-
- Abonnieren
-
-
Nicht regelkonform:
arn:aws:iot:
region
:account-id
:topicfilter/$aws/things/*Dies berechtigt das Gerät dazu, reservierte Shadow- oder Auftragsthemen für alle Geräte zu abonnieren.
arn:aws:iot:
region
:account-id
:topicfilter/$aws/things/*Vergleichbar mit dem vorherigen Beispiel, aber mit dem #-Platzhalter.
arn:aws:iot:
region
:account-id
:topicfilter/$aws/things/+/shadow/updateDies berechtigt das Gerät dazu, Schattenaktualisierungen auf jedem beliebigen Gerät (+ = alle Geräte) anzuzeigen.
-
Regelkonform:
{ "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/*" ], } ] }Die Ressourcenspezifikationen enthalten Platzhalter, diese finden als Übereinstimmung aber nur schattenbezogene Themen und auftragsbezogene Themen für das Gerät, dessen Objektname zum Herstellen der Verbindung verwendet wird.
-
- Empfangen
-
-
Regelkonform:
arn:aws:iot:
region
:account-id
:topicfilter/$aws/things/*Dies ist zulässig, da das Gerät nur Nachrichten von Themen empfangen kann, für die es über die Berechtigung zum Abonnieren verfügt.
-
Lesen/Ändern von Schatten- oder Auftragsdaten
Eine Richtlinie, die ein Gerät dazu berechtigt, eine API-Aktion zum Aufrufen oder Ändern von Device Shadows oder Auftragsausführungsdaten auszuführen, sollte diese Aktionen auf bestimmte Ressourcen einschränken. Im Folgenden sind die API-Aktionen aufgeführt:
-
DeleteThingShadow
-
GetThingShadow
-
UpdateThingShadow
-
DescribeJobExecution
-
GetPendingJobExecutions
-
StartNextPendingJobExecutio
n -
UpdateJobExecution
Beispiel
-
Nicht regelkonform:
arn:aws:iot:
region
:account-id
:thing/*Dies berechtigt das Gerät dazu, die angegebene Aktion für ein beliebiges Objekt auszuführen.
-
Regelkonform:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iot:DeleteThingShadow", "iot:GetThingShadow", "iot:UpdateThingShadow", "iotjobsdata:DescribeJobExecution", "iotjobsdata:GetPendingJobExecutions", "iotjobsdata:StartNextPendingJobExecution", "iotjobsdata:UpdateJobExecution" ], "Resource": [ "arn:aws:iot:
region
:account-id
:/thing/MyThing1", "arn:aws:iot:region
:account-id
:/thing/MyThing2" ] } ] }Auf diese Weise kann das Gerät die angegebenen Aktionen nur für zwei Objekte ausführen.