View a markdown version of this page

Bewährte Sicherheitsmethoden in AWS IoT Core - AWS IoT Core

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Bewährte Sicherheitsmethoden in AWS IoT Core

Dieser Abschnitt enthält Informationen zu bewährten Sicherheitsmethoden für AWS IoT Core. Informationen zu den Sicherheitsregeln für IoT-Lösungen finden Sie unter Zehn goldene Regeln in Bezug auf die Sicherheit für IoT-Lösungen.

Schutz von MQTT-Verbindungen in AWS IoT

AWS IoT Core ist ein verwalteter Cloud-Dienst, der es verbundenen Geräten ermöglicht, einfach und sicher mit Cloud-Anwendungen und anderen Geräten zu interagieren. AWS IoT Core unterstützt HTTP, WebSocket, und MQTT, ein schlankes Kommunikationsprotokoll, das speziell für die Toleranz von unterbrochenen Verbindungen entwickelt wurde. Wenn Sie eine Verbindung herstellen zu AWS IoT Bei Verwendung von MQTT muss jede Ihrer Verbindungen mit einer Kennung verknüpft werden, die als Client-ID bezeichnet wird. MQTT-Client-IDs identifizieren MQTT-Verbindungen eindeutig. Wenn eine neue Verbindung mit einer Client-ID hergestellt wird, die bereits für eine andere Verbindung beansprucht wurde, AWS IoT Der Message Broker löscht die alte Verbindung, um die neue Verbindung zuzulassen. Die Client-IDs müssen innerhalb der einzelnen Clients eindeutig sein AWS-Konto und jeder AWS-Region. Das bedeutet, dass Sie die globale Eindeutigkeit von Kunden-IDs nicht außerhalb Ihrer AWS-Konto oder regionsübergreifend innerhalb Ihrer AWS-Konto.

Die Auswirkungen und der Schweregrad von getrennten MQTT-Verbindungen auf Ihre Geräteflotte hängt von vielen Faktoren ab. Dazu zählen:

  • Ihr Anwendungsfall (z. B. die Daten, an die Ihre Geräte senden AWS IoT, wie viele Daten und wie oft die Daten gesendet werden).

  • Ihre MQTT-Client-Konfiguration (z. B. Einstellungen zum automatischen Wiederverbinden, zugehörige Backoff-Timings und die Verwendung von persistenten MQTT-Sitzungen).

  • Einschränkungen für Geräteressourcen.

  • Die Grundursache der Verbindungstrennungen, ihre Aggressivität und ihre Persistenz.

Um Konflikte mit Client-IDs und deren mögliche negative Auswirkungen zu vermeiden, stellen Sie sicher, dass jedes Gerät oder jede mobile Anwendung über eine AWS IoT oder eine IAM-Richtlinie, die einschränkt, welche Client-IDs für MQTT-Verbindungen zum verwendet werden können AWS IoT Nachrichtenbroker. Sie können beispielsweise eine IAM-Richtlinie verwenden, um zu verhindern, dass ein Gerät unbeabsichtigt die Verbindung eines anderen Geräts schließt, indem es eine bereits verwendete Client-ID nutzt. Weitere Informationen finden Sie unter Autorisierung.

Alle Geräte in Ihrer Flotte müssen über Anmeldeinformationen mit Rechten verfügen, die nur beabsichtigte Aktionen autorisieren. Dazu gehören (aber nicht beschränkt auf) AWS IoT MQTT-Aktionen wie das Veröffentlichen von Nachrichten oder das Abonnieren von Themen mit einem bestimmten Umfang und Kontext. Die spezifischen Berechtigungsrichtlinien können für Ihre Anwendungsfälle variieren. Ermitteln Sie die Berechtigungsrichtlinien, die Ihren Geschäfts- und Sicherheitsanforderungen am besten entsprechen.

Verwenden Sie AWS IoT Core Richtlinienvariablen und IAM-Richtlinienvariablen, um die Erstellung und Verwaltung von Berechtigungsrichtlinien zu vereinfachen. Richtlinienvariablen können in einer Richtlinie platziert werden. Sie werden zu dem Zeitpunkt, zu dem die Richtlinie ausgewertet wird, durch Werte aus der Anforderung des Geräts ersetzt. Mithilfe von Richtlinienvariablen können Sie eine einzelne Richtlinie für die Erteilung von Berechtigungen für mehrere Geräte erstellen. Sie können die relevanten Richtlinienvariablen für Ihren Anwendungsfall anhand Ihrer AWS IoT Kontokonfiguration, Authentifizierungsmechanismus und Netzwerkprotokoll, das für die Verbindung verwendet wird AWS IoT Nachrichtenbroker. Um jedoch die besten Berechtigungsrichtlinien zu schreiben, müssen Sie die Besonderheiten Ihres Anwendungsfalls und Ihr Bedrohungsmodell berücksichtigen.

Zum Beispiel, wenn Sie Ihre Geräte in der registriert haben AWS IoT Registrierung, die Sie verwenden können Ding, Richtlinienvariablen in AWS IoT Richtlinien zum Erteilen oder Verweigern von Berechtigungen auf der Grundlage von Dingeigenschaften wie Dingnamen, Dingtypen und Dingattributwerten. Der Dingname wird aus der Client-ID in der MQTT-Verbindungsnachricht abgerufen, die gesendet wird, wenn ein Ding eine Verbindung herstellt AWS IoT. Die Richtlinienvariablen für Dinge werden ersetzt, wenn ein Ding eine Verbindung herstellt AWS IoT über MQTT mit gegenseitiger TLS-Authentifizierung oder MQTT über WebSocket Protokoll unter Verwendung von authentifiziert Amazon Cognito-Identitäten. Sie können das verwenden AttachThingPrincipal API zum Anhängen von Zertifikaten und authentifizierten Amazon Cognito-Identitäten an eine Sache. iot:Connection.Thing.ThingName ist eine nützliche Richtlinienvariable, um Client-ID-Einschränkungen durchzusetzen. Das folgende Beispiel AWS IoT Die Richtlinie erfordert, dass der Name einer registrierten Sache als Client-ID für MQTT-Verbindungen zum verwendet wird AWS IoT Nachrichtenbroker:

{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "iot:Connect", "Resource": [ "arn:aws:iot:us-east-1:123456789012:client/${iot:Connection.Thing.ThingName}" ] } ] }

Wenn Sie laufende Client-ID-Konflikte identifizieren möchten, können Sie dies aktivieren und verwenden CloudWatch Protokolle für AWS IoT. Für jede MQTT-Verbindung, die AWS IoT Der Message Broker trennt die Verbindung aufgrund von Client-ID-Konflikten. Es wird ein Protokolldatensatz ähnlich dem folgenden generiert:

{ "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" }

Sie können eine verwenden CloudWatch Filter für Protokolle wie {$.reason= "DUPLICATE_CLIENT_ID" } um nach Fällen von Client-ID-Konflikten zu suchen oder Folgendes einzurichten CloudWatch metrische Filter und entsprechend CloudWatch Alarme für kontinuierliche Überwachung und Berichterstattung.

Sie können verwenden AWS IoT Device Defender um übermäßig freizügige AWS IoT und IAM-Richtlinien. AWS IoT Device Defender bietet auch eine Audit-Überprüfung, die Sie darüber informiert, ob mehrere Geräte in Ihrer Flotte eine Verbindung zum AWS IoT Message Broker, der dieselbe Client-ID verwendet.

Sie können verwenden AWS IoT Device Advisor, um zu überprüfen, ob Ihre Geräte zuverlässig eine Verbindung herstellen können AWS IoT Core und befolgen Sie die bewährten Sicherheitsmethoden.

Weitere Informationen finden Sie auch unter

Synchronisieren der internen Uhr eines Geräts

Es ist wichtig, dass Sie eine genaue Uhrzeit auf Ihrem Gerät haben. X.509 Zertifikate haben ein Ablaufdatum und eine Gültigkeitsdauer. Die Uhr auf Ihrem Gerät wird verwendet, um sicherzustellen, dass ein Serverzertifikat noch gültig ist. Wenn Sie kommerzielle IoT-Geräte bauen, denken Sie daran, dass Ihre Produkte möglicherweise über einen längeren Zeitraum aufbewahrt werden, bevor sie verkauft werden. Real-time Während dieser Zeit können die Uhren schwanken und die Batterien können sich entladen. Daher reicht das Einstellen der Uhrzeit im Werk nicht aus.

Für die meisten Systeme bedeutet dies, dass die Software des Geräts einen NTP-Client (Network Time Protocol) enthalten muss. Das Gerät sollte warten, bis es mit einem NTP-Server synchronisiert wird, bevor es versucht, eine Verbindung zu AWS IoT Core herzustellen. Wenn dies nicht möglich ist, sollte das System dem Benutzer die Möglichkeit geben, die Zeit des Gerätes so einzustellen, dass nachfolgende Verbindungen erfolgreich sind.

Nachdem das Gerät mit einem NTP-Server synchronisiert wurde, kann es eine Verbindung mit AWS IoT Core herstellen. Wie viel Taktversatz zulässig ist, hängt davon ab, was Sie mit der Verbindung tun möchten.

Überprüfen des Serverzertifikats

Das Erste, womit ein Gerät interagiert AWS IoT ist das Öffnen einer sicheren Verbindung. Wenn Sie Ihr Gerät verbinden mit AWS IoT, stellen Sie sicher, dass Sie mit sprechen AWS IoT und kein anderer Server, der sich ausgibt AWS IoT. Jeder der AWS IoT Server ist mit einem Zertifikat ausgestattet, das für den ausgestellt wurde iot.amazonaws.com Domäne. Dieses Zertifikat wurde ausgestellt für AWS IoT von einer vertrauenswürdigen Zertifizierungsstelle, die unsere Identität und unser Eigentum an der Domain bestätigt hat.

Eines der ersten Dinge AWS IoT Core Wenn ein Gerät eine Verbindung herstellt, sendet es dem Gerät ein Serverzertifikat. Geräte können überprüfen, ob sie eine Verbindung zu iot.amazonaws.com erwartet haben und ob der Server am Ende dieser Verbindung ein Zertifikat einer vertrauenswürdigen Autorität für diese Domäne hat.

TLS-Zertifikate sind in X.509 formatieren und enthalten Sie eine Vielzahl von Informationen wie den Namen, den Standort, den Domainnamen und eine Gültigkeitsdauer der Organisation. Der Gültigkeitszeitraum wird als ein Paar von Zeitwerten angegeben, die notBefore und notAfter genannt werden. Dienste wie AWS IoT Core verwenden begrenzte Gültigkeitszeiträume (z. B. ein Jahr) für ihre Serverzertifikate und beginnen mit der Bereitstellung neuer Zertifikate, bevor die alten ablaufen.

Verwenden einer einzigen Identität pro Gerät

Verwenden Sie eine einzige Identität pro Client. Geräte verwenden in der Regel X.509 Client-Zertifikate. Web- und Mobilanwendungen verwenden Amazon Cognito Identity. Auf diese Weise können Sie detaillierte Berechtigungen auf Ihre Geräte anwenden.

Sie könnten beispielsweise eine Anwendung haben, die aus einem Mobiltelefon besteht, das Statusaktualisierungen von zwei verschiedenen Smart-Home-Objekten empfängt einer Glühbirne und einem Thermostat. Die Glühbirne sendet den Status ihres Batteriestands und ein Thermostat sendet Meldungen über die Temperatur.

AWS IoT authentifiziert Geräte einzeln und behandelt jede Verbindung einzeln. Sie können differenzierte Zugriffskontrollen mithilfe von Autorisierungsrichtlinien anwenden. Sie können eine Richtlinie für den Thermostat definieren, die es ihm ermöglicht, in einem Themenbereich zu veröffentlichen. Sie können eine separate Richtlinie für die Glühbirne definieren, die es ihr ermöglicht, in einem anderen Themenbereich zu veröffentlichen. Schließlich können Sie eine Richtlinie für die mobile App definieren, die es ihr nur erlaubt, sich mit den Themen für den Thermostat und die Glühbirne zu verbinden und diese zu abonnieren, um Nachrichten von diesen Geräten zu empfangen.

Wenden Sie das Prinzip der geringsten Privilegien an und beschränken Sie die Berechtigungen pro Gerät so weit wie möglich. Alle Geräte oder Benutzer sollten über eine verfügen AWS IoT Richtlinie in AWS IoT das ermöglicht es nur, eine Verbindung mit einer bekannten Client-ID herzustellen und bestimmte, feste Themen zu veröffentlichen und zu abonnieren.

Benutze eine Sekunde AWS-Region als Backup

Erwägen Sie, in einer Sekunde eine Kopie Ihrer Daten zu speichern AWS-Region als Backup. Beachten Sie, dass der AWS Lösung benannt Disaster Recovery für AWS IoT ist nicht mehr verfügbar. Während der zugehörige GitHub Bibliothek bleibt zugänglich, AWS hat es im Juli 2023 als veraltet eingestuft und bietet keine Wartung oder Unterstützung mehr dafür an. Um Ihre eigenen Lösungen zu implementieren oder zusätzliche Support-Optionen zu erkunden, besuchen Sie Kontakt AWS. Wenn es eine gibt AWS Wenden Sie sich an den technischen Kundenbetreuer, der mit Ihrem Konto verknüpft ist, um Hilfe zu erhalten.

Just-in-Time-Bereitstellung nutzen

Die manuelle Erstellung und Bereitstellung jedes Geräts kann zeitaufwändig sein. AWS IoT bietet die Möglichkeit, eine Vorlage für die Bereitstellung von Geräten zu definieren, wenn sie zum ersten Mal eine Verbindung herstellen AWS IoT. Weitere Informationen finden Sie unter Just-in-time Bereitstellung.

Berechtigungen zum Ausführen AWS IoT Device Advisor-Tests

Die folgende Richtlinienvorlage zeigt die Mindestberechtigungen und die IAM-Entität, die für die Ausführung erforderlich sind AWS IoT Device Advisor-Testfälle. Sie müssen ersetzen your-device-role-arn mit der Geräterolle Amazon Resource Name (ARN), die Sie unter dem Voraussetzungen.

{ "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 verwirrte stellvertretende Prävention für Device Advisor

Das Problem des verwirrten Stellvertreters ist ein Sicherheitsproblem, bei dem eine Entität, die keine Berechtigung zur Durchführung einer Aktion hat, eine privilegiertere Entität zur Durchführung der Aktion zwingen kann. In AWS, dienstübergreifender Identitätswechsel kann zu einem verwirrten Stellvertreterproblem führen. Cross-service Identitätswechsel kann auftreten, wenn ein Dienst (der Dienst anrufen) ruft einen anderen Dienst an (den gerufener Dienst). Der Anruf-Dienst kann so manipuliert werden, dass er seine Berechtigungen verwendet, um auf die Ressourcen eines anderen Kunden zu reagieren, auf die er sonst nicht zugreifen dürfte. Um dies zu verhindern, AWS stellt Tools bereit, mit denen Sie Ihre Daten für alle Dienste schützen können, deren Dienstprinzipale Zugriff auf Ressourcen in Ihrem Konto erhalten haben.

Wir empfehlen die Verwendung der globalen Bedingungskontext-Schlüssel aws:SourceArn und aws:SourceAccount in ressourcenbasierten Richtlinien, um die Berechtigungen, die Device Advisor einem anderen Service erteilt, auf eine bestimmte Ressource zu beschränken. Wenn Sie beide globalen Bedingungskontextschlüssel verwenden, müssen der aws:SourceAccount-Wert und das Konto im aws:SourceArn-Wert dieselbe Konto-ID verwenden, wenn sie in derselben Richtlinienanweisung verwendet werden.

Der Wert aws:SourceArn muss der ARN Ihrer Suite-Definitionsressource sein. Die Suite-Definitionsressource bezieht sich auf die Testsuite, die Sie mit Device Advisor erstellt haben.

Der effektivste Weg, um sich vor dem Confused-Deputy-Problem zu schützen, ist die Verwendung des globalen Bedingungskontext-Schlüssels aws:SourceArn mit dem vollständigen ARN der Ressource. Wenn Sie den vollständigen ARN der Ressource nicht kennen oder wenn Sie mehrere Ressourcen angeben, verwenden Sie den globalen Bedingungskontext-Schlüssel aws:SourceArn mit Platzhaltern (*) für die unbekannten Teile des ARN. Beispiel: arn:aws:iotdeviceadvisor:*:account-id:suitedefinition/*

Das folgende Beispiel zeigt, wie Sie die globalen Bedingungskontext-Schlüssel aws:SourceArn und aws:SourceAccount in Device Advisor verwenden können, um das Confused-Deputy-Problem zu vermeiden.

{ "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" } } } }