Übermäßig permissive authentifizierte Cognito-Rolle - AWS IoT Device Defender

Übermäßig permissive authentifizierte Cognito-Rolle

Eine Richtlinie, die an eine 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

  • 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:

  • Objekt-Verwaltungsdaten lesen

  • MQTT zum Verbinden mit und zum Veröffentlichen und Abonnieren von reservierten Themen (einschließlich Shadow- oder Auftragsausführungsdaten) verwenden

  • API-Befehle zum Lesen und Ändern von Schatten- oder Auftragsausführungsdaten verwenden

Im Allgemeinen sollten Geräte, die eine Verbindung über eine authentifizierte Amazon Cognito-Identitätspool-Rolle herstellen, nur eingeschränkt zum Lesen objektspezfischer Verwaltungsdaten, zum Veröffentlichen und Abonnieren von objektspezifischen MQTT-Themen oder zum Lesen und Ändern objektspezischer Daten bezüglich Schatten- oder Auftragsausführungsdaten mithilfe von API-Befehlen berechtigt sein.

Diese Prüfung wird wie AUTHENTICATED_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, authentifizierte Amazon Cognito-Identitätspool-Rolle findet:

  • ALLOWS_BROAD_ACCESS_TO_IOT_THING_ADMIN_READ_ACTIONS

  • ALLOWS_ACCESS_TO_IOT_NON_THING_ADMIN_ACTIONS

  • ALLOWS_ACCESS_TO_IOT_THING_ADMIN_WRITE_ACTIONS

Warum dies wichtig ist

Wenn eine authentifizierte Identität kompromittiert wird, könnte sie mit administrativen Aktionen Kontoeinstellungen ändern, Ressourcen löschen oder Zugriff auf vertrauliche Daten erlangen.

So lässt es sich beheben

Eine Richtlinie, die an eine 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:

  1. Erstellen Sie eine neue regelkonforme Rolle.

  2. Erstellen Sie einen neuen Amazon Cognito-Identitätspool und ordnen Sie ihm die regelkonforme Rolle zu.

  3. Vergewissern Sie sich, dass Ihre Identitäten über den neuen Pool Zugriff auf AWS IoT zugreifen können.

  4. 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 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.

Verwalten von Nicht-Objekten

Geräte, die sich über einen 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. Wenn Sie Ihr Konto mit einer Anwendung verwalten möchten, die eine Verbindung über einen authentifizierten Amazon Cognito-Identitätspool herstellt, erstellen Sie einen separaten Identitätspool, der nicht von Geräten genutzt wird.

Objekt-Verwaltungsdaten lesen

Die folgenden AWS IoT-API-Aktionen werden zum Lesen von Objektdaten verwendet. Daher sollten Geräte, die eine Verbindung über einen authentifizierten Amazon Cognito-Identitätspool herstellen, zum Ausführen dieser Aktionen für nur eine begrenzte Objektgruppe berechtigt werden:

  • DescribeThing

  • ListJobExecutionsForThing

  • ListThingGroupsForThing

  • ListThingPrincipals

  • 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: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 für nur ein bestimmtes Objekt auszuführen.

  • 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 ist konform, da der Ressource, obwohl sie mit einem Platzhalter (*) angegeben wird, eine bestimmte Zeichenfolge vorangestellt ist. Dies schränkt die aufgerufene Objektgruppe auf Objekte ein, deren Namen das angegebene Präfix enthalten.

  • 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: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 für nur ein bestimmtes Objekt auszuführen.

  • 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 ist konform, da der Ressource, obwohl sie mit einem Platzhalter (*) angegeben wird, eine bestimmte Zeichenfolge vorangestellt ist. Dies schränkt die aufgerufene Objektgruppe auf Objekte ein, deren Namen das angegebene Präfix enthalten.

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 vieler verschiedener Aktionen verwendet, darunter zum Abrufen und Ändern des Schattenstatus und des Auftragsausfü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 der Verbindungsherstellung entspricht. Die Bedingungsanweisung schränkt die Berechtigung noch weiter ein, indem geprüft wird, ob das vom MQTT-Client verwendete Zertifikat mit dem Zertifikat übereinstimmt, das dem Objekt mit dem verwendeten Namen zugeordnet ist.

Veröffentlichen
  • Nicht regelkonform:

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

    Dies 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 jeden beliebigen Geräts zu lesen/aktualisieren/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/update

    Dies 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 konform, da das Gerät nur Nachrichten von Themen empfangen kann, für die es über die Berechtigung zum Abonnieren verfügt.

Lesen oder Ä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

  • StartNextPendingJobExecution

  • UpdateJobExecution

Beispiele

  • 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", "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" ] } ] }

    Dies berechtigt das Gerät dazu, die angegebenen Aktionen für nur zwei bestimmte Objekte auszuführen.