Sichern Sie Ihre API mit Autorisierung und Nutzungsplänen in AWS API Gateway

Wenn Sie unseren ersten Artikel über severless computing mit Amazon API Gateway noch nicht gelesen haben, können Sie ihn hier nachlesen.

AWS API Gateway ist ein vollständig verwalteter Service, mit dem Entwickler APIs (Application Programming Interface) für ihre Anwendungen in beliebigem Umfang erstellen, veröffentlichen, pflegen, überwachen und sichern können.

Während die Ersteinrichtung einer API mit Amazon API Gateway schnell und einfach ist, ist es wichtig, den Zugriff auf die bereitgestellten Dienste und Daten zu schützen und zu sichern, damit kein unbefugter Zugriff möglich ist.

Eine der wichtigsten Funktionen von API Gateways ist die Möglichkeit, Ihre API mit Autorisierung und Nutzungsplänen zu schützen, um sicherzustellen, dass nur autorisierte Benutzer auf Ihre API zugreifen können und diese nicht durch übermäßigen Datenverkehr überlastet wird. In diesem Artikel werden die verschiedenen Optionen für Autorisierung und Nutzungspläne in Amazon API Gateway und deren Konfiguration erläutert.

Die Autorisierung ist eine optionale Funktion von API Gateways. Sie können sich dafür entscheiden, die Autorisierung in Ihrer API komplett zu überspringen oder sie in Ihrem Integrations-Backend zu behandeln.

Wenn Sie sich für eine Autorisierung entscheiden, gibt es gute Gründe (sinnvolle), sie in API Gateway zu integrieren:

Wenn die Autorisierung in Ihrer API erwünscht ist, kann es aus mehreren Gründen eine gute Wahl sein, sie in API Gateway zu integrieren:

  • Sie konsolidiert Ihre Authentifizierungslogik an einem einzigen Ort
  • Sie schützt Ihre nachgelagerte Integration vor unbefugten Anfragen, wodurch Sie Kosten sparen und/oder Ihre Ressourcen entlasten
  • Sie kann im Cache gespeichert werden, wodurch die Anzahl der Zugriffe auf Ihren Authentifizierungsdienst reduziert wird

Innerhalb dieses Autorisierungsschritts gibt es zwei Optionen – die Autorisierungsprüfung und die Prüfung anhand des API-Schlüssels.

Autorisierung mit benutzerdefinierten Genehmigern, Cognito oder IAM

Die häufigste Form der Autorisierung ist eine tatsächliche Autorisierungsprüfung. Die Anforderungsinformationen können geprüft werden, um den Aufrufer einer API zu identifizieren – entweder auf der Grundlage eines HTTP-Headers oder eines Querystrings – und die Anforderung entweder zuzulassen oder abzulehnen, je nachdem, ob der Aufrufer die Berechtigung hat, die API aufzurufen. Es gibt drei Hauptmethoden zum Konfigurieren einer Berechtigungsprüfung in API Gateway:

Verwendung von IAM-Berechtigungen über signierte HTTP-Anforderungen:

Mit dieser Methode können Sie AWS IAM-Richtlinien zur Autorisierung von API-Anforderungen verwenden. Hierbei müssen Sie die HTTP-Anforderungen mit Ihrem AWS-Zugangsschlüssel und geheimen Schlüssel signieren. Dies kann mit dem Signierverfahren AWS Signature Version 4 erfolgen.

Verwendung von Token aus einem Cognito-Benutzerpool:

Wenn Sie Cognito-Benutzerpools für Ihre Authentifizierungsanforderungen verwenden, können Sie Token aus dem Benutzerpool verwenden, um API-Anforderungen zu autorisieren. Bei dieser Methode müssen Sie die erforderlichen Bereiche konfigurieren, die für einen bestimmten API-Endpunkt benötigt werden.

Das Erstellen Ihrer eigenen benutzerdefinierten Logik in einem benutzerdefinierten Lambda-Genehmiger:

Wenn Sie eine feiner abgestimmte Autorisierung benötigen, können Sie Ihre eigene benutzerdefinierte Logik in einer Lambda-Funktion schreiben und diese als benutzerdefinierte Autorisierung für Ihr API-Gateway verwenden. Mit benutzerdefinierten Genehmigern haben Sie die vollständige Kontrolle über den Autorisierungsprozess und können jede Logik ausführen, die Sie zur Authentifizierung und Autorisierung des Anwenders benötigen. Sie können auch zusätzlichen Kontext in die Anforderung einfügen, der auf der Identität des Anwenders basiert.

Für eine benutzerseitige API werden die letzten beiden Optionen am häufigsten verwendet.

Wenn Sie bereits Cognito User Pools für Ihre Authentifizierungsanforderungen verwenden, kann die Integration mit API Gateway eine einfache und bequeme Option sein. Sie können die erforderlichen Geltungsbereiche für einen bestimmten API-Endpunkt konfigurieren, ohne dass Sie eine eigene Logik schreiben müssen.

Wenn Sie hingegen keine Cognito-Benutzerpools verwenden oder detailliertere Autorisierungskontrollen benötigen, können Sie benutzerdefinierte Lambda-Genehmiger verwenden. Mit benutzerdefinierten Genehmigern haben Sie die volle Flexibilität, jede gewünschte Authentifizierungs- und Autorisierungslogik zu implementieren. Außerdem können Sie der Anforderung auf der Grundlage der Identität des Aufrufers zusätzlichen Kontext hinzufügen.

Quelle: Beispielarchitekturdiagramm für das Hinzufügen von Authentifizierungs- (AWS Cognito) und Autorisierungsdiensten (AWS Lambda Custom Authorizer) zum AWS API Gateway. Ein ausführliches Beispiel für die Einrichtung eines API Gateway Genehmigers finden Sie in diesem Artikel von AWS: Building fine-grained authorization using Amazon Cognito, API Gateway, and IAM.

API-Schlüssel und Nutzungspläne

Die Überprüfung des API-Schlüssels ist ein Teil des Autorisierungsprozesses in API Gateways. Sie können den Dienst so konfigurieren, dass bei jeder Anforderung API-Schlüssel übermittelt werden müssen. Diese Schlüssel werden im x-api-key-Header übergeben, und Anfragen ohne sie werden zurückgewiesen. Auch wenn API-Schlüssel häufig in den Autorisierungsprozess einbezogen werden, sollten sie nicht als primäre Autorisierungsmethode betrachtet werden. Sie sind keine präzise Methode zur Identifizierung und Autorisierung von Benutzern.

API-Schlüssel werden am häufigsten zur Ratenbegrenzung und Drosselung von Benutzern verwendet. AWS bietet Nutzungspläne an, mit denen Sie API-Schlüssel mit bestimmten Limits verknüpfen können. Diese Pläne können mit Drosselungsgrenzen (die Anzahl der zulässigen Anfragen pro Sekunde) und Quotengrenzen (die maximale Anzahl von Anfragen über einen bestimmten Zeitraum) konfiguriert werden.

Drosselungslimits können verhindern, dass ein Aufrufer Ihre Downstream-Ressourcen überlastet, während Quotenlimits zur Durchsetzung von Limits für kostenpflichtige APIs oder bestimmte Clients verwendet werden können. Mit Quotenbeschränkungen können Sie eine maximale Anzahl von Anfragen über einen bestimmten Zeitraum, z. B. einen Tag, eine Woche oder einen Monat, festlegen. Auf diese Weise können Sie für einen bestimmten Kunden Beschränkungen durchsetzen. Dies ist besonders praktisch, wenn Sie eine kostenpflichtige API anbieten, bei der ein Benutzer eine bestimmte Anzahl von Aufrufen pro Monat erhält.

Standardmäßig sind die Nutzungspläne auf 300 pro Konto und Region begrenzt, aber Sie können bei Bedarf eine Erhöhung beantragen.

Zusammenfassung

Insgesamt bieten API-Gateways eine Reihe von Optionen zum Schutz Ihrer API mit Autorisierung und Nutzungsplänen. Es ist zwar nicht notwendig, Autorisierung in Ihre API einzubinden, aber die Implementierung der Autorisierung in API Gateway kann Schutz bieten und Geld und Ressourcen für Ihre nachgelagerten Integrationen sparen. Es gibt drei Optionen für die Autorisierung von Anfragen: Cognito User Pools, AWS IAM oder ein benutzerdefinierter Lambda-Genehmiger. API-Schlüssel können auch verwendet werden, um Anfragen bestimmter Benutzer zu drosseln. Die Berechtigungsprüfung wird vor der API-Schlüsselprüfung durchgeführt. Sie haben die Möglichkeit, eine, beide oder keine dieser Prüfungen in Ihrer API zu verwenden.