

Cloud Engineer
Die wichtigsten Erkenntnisse
aus der Sicherung von APIs in AWS
Problem
Lösung
Um die Lösung für das oben beschriebene Szenario zu demonstrieren, haben wir eine Beispielplattform für Restaurants und Geschäfte aufgebaut, wobei wir uns auf die Sicherung der APIs konzentriert haben, die die Plattform ihren Nutzern zur Verfügung stellt, z. B. dem Plattformadministrator, dem Geschäftsinhaber und einem Kunden, der eines der Geschäfte besucht, die die Verkaufsplattform nutzen.
- Jeder Kunde kann die Produkte sehen und eine Bestellung in dem Geschäft aufgeben, das er gerade besucht.
- Jeder Kunde kann nur seine eigenen Bestellungen einsehen. Ein Besucher-(Gast-)Kunde sollte seinen Bestellstatus einsehen können, wenn die Anwendung das Session-Cookie zwischenspeichert. Ein registrierter Kunde sollte in der Lage sein, alle seine früheren Bestellungen einzusehen.
- Jeder Shop-Besitzer kann nur auf Informationen zu seinem eigenen Shop zugreifen, einschliesslich Produkte, Bestellungen und Verkäufe.
- Der Administrator der SaaS-Plattform kann nur aggregierte plattformweite Statistiken einsehen.
Finde den Code der Demo, die mit dem CDK entwickelt wurde, im folgenden Repo: amanoxsolutions/api-security-demo
Das obige Diagramm veranschaulicht die High-Level-Architektur der Beispielplattform für Restaurants. Die APIs werden über das API-Gateway bereitgestellt, das mit Lambdas integriert ist, die wiederum eine Schnittstelle zu einer DynamoDB-Tabelle haben. Die APIs wurden durch die folgenden Prozesse gesichert:
- Steuerung des API-Zugriffs mithilfe des Autorisierungstyps AWS_IAM in API Gateway
- Definition von Rollen und Zuordnung zu Cognito-Identitätspools (Kunde, Shopbesitzer, Plattformadministrator), um den API-Zugriff auf der Grundlage von Rollen einzuschränken (z. B. kann ein Kunde nicht auf Shop-Management-APIs zugreifen)
- Validierung von Shop-Tokens und HTTP-Methoden (derzeit nur in resources/lambdas/list_products/main.py sichtbar)
Key learnings
- Befolge immer das Prinzip des geringsten Privilegs - in diesem Zusammenhang wird dies durch die Zuweisung verschiedener IAM-Rollen an Cognito-Benutzer auf der Grundlage ihrer Rolle erreicht. Einem Kunden wird eine IAM-Rolle zugewiesen, die Zugriff auf eine andere Reihe von APIs gewährt als die IAM-Rolle, die einem Shop-Besitzer zugewiesen ist, und wiederum eine andere als die IAM-Rolle, die einem Plattform-Administrator zugewiesen ist.
- Unbefugter Zugriff wird durch eine klare Rollenzuordnung blockiert. Hier ist ein Beispiel dafür, wie unberechtigter Zugriff effektiv blockiert wird, wenn ein Kunde versucht, Bestelldetails ohne die entsprechenden Berechtigungen abzurufen. Ausgabe von postman:
https://gt4n9vo5yk.execute-api.eu-central-1.amazonaws.com/prod/shop/0001/orders
{
"Message": "User: arn:aws:sts::645143808269:assumed-role/api-security-demo-IdentityPool-AuthenticatedDefaultRole/CognitoIdentityCredentials is not authorized to perform: execute-api:Invoke on resource: arn:aws:execute-api:eu-central-1:********8269:gt4n9vo5yk/prod/GET/shop/0001/orders"
}