API-verknüpfte Richtlinienspeicher - Amazon Verified Permissions

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.

API-verknüpfte Richtlinienspeicher

Wenn Sie in der Amazon Verified Permissions-Konsole einen neuen Richtlinienspeicher erstellen, können Sie die Option Mit API Gateway einrichten und eine Identitätsquelle auswählen. Mit dieser Option erstellen Sie einen API-verknüpften Richtlinienspeicher, ein Autorisierungsmodell für Anwendungen, die sich bei Amazon Cognito Cognito-Benutzerpools oder einem OIDC-Identitätsanbieter (IdP) authentifizieren und Daten von Amazon API Gateway Gateway-APIs abrufen. Um zu beginnen, sehen Sie sich Erstellen Sie einen Richtlinienspeicher mit einer verbundenen API und einem Identitätsanbieter an.

Wichtig

Richtlinienspeicher, die Sie mit der Option „Mit API Gateway einrichten“ und einer Identitätsquelle in der Konsole „Verifizierte Berechtigungen“ erstellen, sind nicht für die sofortige Bereitstellung in der Produktion vorgesehen. Stellen Sie mit Ihrem ersten Richtlinienspeicher Ihr Autorisierungsmodell fertig und exportieren Sie die Ressourcen des Richtlinienspeichers in CloudFormation. Stellen Sie verifizierte Berechtigungen programmgesteuert mit dem AWS Cloud Development Kit (CDK) für die Produktion bereit. Weitere Informationen finden Sie unter Übergang zur Produktion mit AWS CloudFormation.

In einem Richtlinienspeicher, der mit einer API und einer Identitätsquelle verknüpft ist, präsentiert Ihre Anwendung ein Benutzerpool-Token in einem Autorisierungsheader, wenn sie eine Anfrage an die API stellt. Die Identitätsquelle Ihres Richtlinienspeichers ermöglicht die Tokenvalidierung für verifizierte Berechtigungen. Das Token bildet die principal Eingangs-Autorisierungsanfragen mit der IsAuthorizedWithTokenAPI. Verified Permissions erstellt Richtlinien rund um die Gruppenzugehörigkeit Ihrer Benutzer, wie sie in einem Gruppenanspruch in Form von Identitäts- (ID) und Zugriffstoken dargestellt werden, beispielsweise cognito:groups für Benutzerpools. Ihre API verarbeitet das Token aus Ihrer Anwendung in einem Lambda-Autorisierer und leitet es zur Autorisierungsentscheidung an Verified Permissions weiter. Wenn Ihre API die Autorisierungsentscheidung vom Lambda-Autorisierer erhält, leitet sie die Anfrage an Ihre Datenquelle weiter oder lehnt die Anfrage ab.

Komponenten der Identitätsquelle und der API-Gateway-Autorisierung mit verifizierten Berechtigungen
  • Ein Amazon Cognito Cognito-Benutzerpool oder OIDC-IdP, der Benutzer authentifiziert und gruppiert. Benutzertoken füllen die Gruppenmitgliedschaft und den Prinzipal oder Kontext, den Verified Permissions in Ihrem Richtlinienspeicher auswertet.

  • Eine API-Gateway-REST-API. Verified Permissions definiert beispielsweise Aktionen anhand von API-Pfaden und API-MethodenMyAPI::Action::get /photo.

  • Eine Lambda-Funktion und ein Lambda-Authorizer für Ihre API. Die Lambda-Funktion nimmt Bearer-Token aus Ihrem Benutzerpool entgegen, fordert die Autorisierung von Verified Permissions an und gibt eine Entscheidung an API Gateway zurück. Der Workflow „Mit Cognito und API Gateway einrichten“ erstellt diesen Lambda-Authorizer automatisch für Sie.

  • Ein Richtlinienspeicher für verifizierte Berechtigungen. Die Identitätsquelle des Richtlinienspeichers ist Ihr Benutzerpool. Das Policy Store-Schema spiegelt die Konfiguration Ihrer API wider, und die Richtlinien verknüpfen Benutzergruppen mit zulässigen API-Aktionen.

  • Eine Anwendung, die Benutzer bei Ihrem IdP authentifiziert und Tokens an API-Anfragen anhängt.

Wie verifizierte Berechtigungen API-Anfragen autorisieren

Wenn Sie einen neuen Richtlinienspeicher erstellen und die Option Mit Cognito und API Gateway einrichten auswählen, erstellt Verified Permissions ein Richtlinienspeicherschema und Richtlinien. Das Schema und die Richtlinien spiegeln die API-Aktionen und die Benutzerpoolgruppen wider, die Sie zur Durchführung der Aktionen autorisieren möchten. Verified Permissions erstellt auch die Lambda-Funktion und den Autorisierer. Sie müssen den neuen Autorisierer für eine Methode in Ihrer API konfigurieren.

Ein Diagramm, das den Ablauf einer Autorisierungsanfrage mit Amazon API Gateway, Amazon Cognito und Amazon Verified Permissions zeigt.
  1. Ihr Benutzer meldet sich mit Ihrer Anwendung über Amazon Cognito oder einen anderen OIDC-IdP an. Der IdP gibt ID- und Zugriffstoken mit den Benutzerinformationen aus.

  2. Ihre Anwendung speichert die JWTs. Weitere Informationen finden Sie unter Verwenden von Token mit Benutzerpools im Amazon Cognito Developer Guide.

  3. Ihr Benutzer fordert Daten an, die Ihre Anwendung von einer externen API abrufen muss.

  4. Ihre Anwendung fordert Daten von einer REST-API in API Gateway an. Sie hängt eine ID oder ein Zugriffstoken als Anforderungsheader an.

  5. Wenn Ihre API über einen Cache für die Autorisierungsentscheidung verfügt, gibt sie die vorherige Antwort zurück. Wenn das Caching deaktiviert ist oder die API keinen aktuellen Cache hat, übergibt API Gateway die Anforderungsparameter an einen tokenbasierten Lambda-Authorizer.

  6. Die Lambda-Funktion sendet mit der IsAuthorizedWithTokenAPI eine Autorisierungsanfrage an einen Richtlinienspeicher für verifizierte Berechtigungen. Die Lambda-Funktion übergibt die Elemente einer Autorisierungsentscheidung:

    1. Das Token des Benutzers als Principal.

    2. Die API-Methode kombiniert mit dem API-PfadGetPhoto, z. B. als Aktion.

    3. Der Begriff Application als Ressource.

  7. Verified Permissions validiert das Token. Weitere Informationen zur Validierung von Amazon Cognito-Token finden Sie unter Authorization with Amazon Verified Permissions im Amazon Cognito Developer Guide.

  8. Verified Permissions bewertet die Autorisierungsanfrage anhand der Richtlinien in Ihrem Richtlinienspeicher und gibt eine Autorisierungsentscheidung zurück.

  9. Der Lambda-Autorisierer gibt eine Allow Deny Oder-Antwort an API Gateway zurück.

  10. Die API gibt Daten oder eine ACCESS_DENIED Antwort an Ihre Anwendung zurück. Ihre Anwendung verarbeitet die Ergebnisse der API-Anfrage und zeigt sie an.

Hinzufügen einer attributebasierten Zugriffskontrolle (ABAC)

Eine typische Authentifizierungssitzung mit einem IdP gibt ID- und Zugriffstoken zurück. Sie können jeden dieser Tokentypen als Bearer-Token in Anwendungsanfragen an Ihre API übergeben. Je nachdem, welche Optionen Sie bei der Erstellung Ihres Richtlinienspeichers ausgewählt haben, erwartet Verified Permissions einen der beiden Token-Typen. Beide Typen enthalten Informationen über die Gruppenmitgliedschaft des Benutzers. Weitere Informationen zu Tokentypen in Amazon Cognito finden Sie unter Verwenden von Token mit Benutzerpools im Amazon Cognito Developer Guide.

Nachdem Sie einen Richtlinienspeicher erstellt haben, können Sie Richtlinien hinzufügen und erweitern. Beispielsweise können Sie Ihren Richtlinien neue Gruppen hinzufügen, wenn Sie sie Ihrem Benutzerpool hinzufügen. Da Ihr Richtlinienspeicher bereits weiß, wie Ihr Benutzerpool Gruppen in Tokens präsentiert, können Sie eine Reihe von Aktionen für jede neue Gruppe mit einer neuen Richtlinie zulassen.

Möglicherweise möchten Sie auch das gruppenbasierte Modell der Richtlinienbewertung um ein genaueres Modell erweitern, das auf Benutzereigenschaften basiert. Benutzerpool-Token enthalten zusätzliche Benutzerinformationen, die zu Autorisierungsentscheidungen beitragen können.

ID-Token

ID-Token stellen die Attribute eines Benutzers dar und bieten ein Höchstmaß an detaillierter Zugriffskontrolle. Um E-Mail-Adressen, Telefonnummern oder benutzerdefinierte Attribute wie Abteilung und Manager auszuwerten, werten Sie das ID-Token aus.

Zugriffstoken

Zugriffstoken stellen die Berechtigungen eines Benutzers mit OAuth 2.0-Bereichen dar. Um eine Autorisierungsebene hinzuzufügen oder Anfragen für zusätzliche Ressourcen einzurichten, bewerten Sie das Zugriffstoken. Sie können beispielsweise überprüfen, ob ein Benutzer zu den entsprechenden Gruppen gehört und über einen solchen Geltungsbereich verfügtPetStore.read, der generell den Zugriff auf die API autorisiert. Benutzerpools können Tokens mit Ressourcenservern und mit Token-Anpassungen zur Laufzeit benutzerdefinierte Bereiche hinzufügen.

Sehen Sie sich Arbeiten mit Identitätsquellen in Schemas und Richtlinien zum Beispiel Richtlinien an, die Ansprüche in ID- und Zugriffstoken verarbeiten.

Überlegungen zu API-verknüpften Policy-Stores

Wenn Sie in der Konsole „Verified Permissions“ einen API-verknüpften Richtlinienspeicher erstellen, erstellen Sie einen Test für eine spätere Produktionsbereitstellung. Bevor Sie zur Produktion übergehen, richten Sie eine feste Konfiguration für Ihre API und Ihren Benutzerpool ein. Berücksichtigen Sie die folgenden Faktoren:

API Gateway speichert Antworten im Cache

In API-verknüpften Richtlinienspeichern erstellt Verified Permissions einen Lambda-Autorisierer mit einer Autorisierungs-Caching-TTL von 120 Sekunden. Sie können diesen Wert anpassen oder das Caching in Ihrem Authorizer deaktivieren. In einem Autorisierer mit aktiviertem Caching gibt Ihr Autorisierer jedes Mal dieselbe Antwort zurück, bis die TTL abläuft. Dadurch kann die tatsächliche Lebensdauer von Benutzerpool-Token um eine Dauer verlängert werden, die der Caching-TTL der angeforderten Phase entspricht.

Amazon Cognito Cognito-Gruppen können wiederverwendet werden

Amazon Verified Permissions bestimmt die Gruppenmitgliedschaft von Benutzern aus dem Benutzerpool anhand des cognito:groups Antrags in der ID oder dem Zugriffstoken eines Benutzers. Der Wert dieses Anspruchs besteht aus einer Reihe von benutzerfreundlichen Namen der Benutzerpoolgruppen, denen der Benutzer angehört. Sie können Benutzerpoolgruppen keinen eindeutigen Bezeichner zuordnen.

Benutzerpoolgruppen, die Sie löschen und mit demselben Namen neu erstellen, werden in Ihrem Richtlinienspeicher als dieselbe Gruppe angezeigt. Wenn Sie eine Gruppe aus einem Benutzerpool löschen, löschen Sie alle Verweise auf die Gruppe aus Ihrem Richtlinienspeicher.

Von der API abgeleiteter Namespace und Schema sind point-in-time

Verified Permissions erfasst Ihre API zu einem bestimmten Zeitpunkt: Ihre API wird nur abgefragt, wenn Sie Ihren Richtlinienspeicher erstellen. Wenn sich das Schema oder der Name Ihrer API ändert, müssen Sie Ihren Richtlinienspeicher und Ihren Lambda-Autorisierer aktualisieren oder einen neuen API-verknüpften Richtlinienspeicher erstellen. Verified Permissions leitet den Namespace für den Richtlinienspeicher vom Namen Ihrer API ab.

Lambda Lambda-Funktion hat keine VPC-Konfiguration

Die Lambda-Funktion, die Verified Permissions für Ihren API-Authorizer erstellt, ist nicht mit einer VPC verbunden. Standardmäßig. APIs, deren Netzwerkzugriff auf private VPCs beschränkt ist, können nicht mit der Lambda-Funktion kommunizieren, die Zugriffsanforderungen mit verifizierten Berechtigungen autorisiert.

Verified Permissions stellt Autorisierungsressourcen bereit in CloudFormation

Um einen API-verknüpften Richtlinienspeicher zu erstellen, müssen Sie sich bei der Verified Permissions-Konsole mit einem AWS Prinzipal mit hohen Rechten anmelden. Dieser Benutzer stellt einen AWS CloudFormation Stapel bereit, der Ressourcen aus mehreren zusammensetzt. AWS-Services Dieser Principal muss über die Berechtigung verfügen, Ressourcen in Verified Permissions IAM, Lambda und API Gateway hinzuzufügen und zu ändern. Es hat sich bewährt, diese Anmeldeinformationen nicht mit anderen Administratoren in Ihrer Organisation zu teilen.

Einen Überblick über die Ressourcen, die Verified Permissions erstellt, finden Übergang zur Produktion mit AWS CloudFormation Sie unter.

Übergang zur Produktion mit AWS CloudFormation

API-verknüpfte Richtlinienspeicher sind eine Möglichkeit, schnell ein Autorisierungsmodell für eine API Gateway zu erstellen. Sie sind so konzipiert, dass sie als Testumgebung für die Autorisierungskomponente Ihrer Anwendung dienen. Nachdem Sie Ihren Testrichtlinienspeicher erstellt haben, sollten Sie Zeit damit verbringen, die Richtlinien, das Schema und den Lambda-Authorizer zu verfeinern.

Möglicherweise passen Sie die Architektur Ihrer API an, sodass entsprechende Anpassungen an Ihrem Richtlinienspeicher-Schema und Ihren Richtlinien erforderlich sind. API-verknüpfte Richtlinienspeicher aktualisieren ihr Schema nicht automatisch über die API-Architektur — Verified Permissions fragt die API nur ab, wenn Sie einen Richtlinienspeicher erstellen. Wenn sich Ihre API ausreichend ändert, müssen Sie den Vorgang möglicherweise mit einem neuen Richtlinienspeicher wiederholen.

Wenn Ihre Anwendung und Ihr Autorisierungsmodell bereit für die Bereitstellung in der Produktion sind, integrieren Sie den API-verknüpften Richtlinienspeicher, den Sie entwickelt haben, in Ihre Automatisierungsprozesse. Als bewährte Methode empfehlen wir, das Richtlinienspeicherschema und die Richtlinien in eine AWS CloudFormation Vorlage zu exportieren, die Sie in anderen AWS-Konten Bereichen bereitstellen können. AWS-Regionen

Die Ergebnisse des API-verknüpften Richtlinienspeicher-Prozesses sind ein erster Richtlinienspeicher und ein Lambda-Autorisierer. Der Lambda-Autorisierer hat mehrere abhängige Ressourcen. Verified Permissions stellt diese Ressourcen in einem automatisch generierten Stack bereit. CloudFormation Für die Bereitstellung in der Produktion müssen Sie den Richtlinienspeicher und die Lambda-Autorisierungsressourcen in einer Vorlage zusammenfassen. Ein API-verknüpfter Richtlinienspeicher besteht aus den folgenden Ressourcen:

  1. AWS::VerifiedPermissions::PolicyStore: Kopieren Sie Ihr Schema in das SchemaDefinition Objekt. "Escape-Zeichen als\".

  2. AWS::VerifiedPermissions::IdentitySource: Kopieren Sie Werte aus der Ausgabe von GetIdentitySource aus Ihrem Testrichtlinienspeicher und ändern Sie sie nach Bedarf.

  3. Eine oder mehrere der folgenden AWS::VerifiedPermissions::PolicyOptionen: Kopieren Sie Ihre Richtlinienerklärung in das Definition Objekt. "Escape-Zeichen als\".

  4. AWS: :Lambda: :Function,: AWS:: :Role,IAM::: :Policy,AWS:IAM:: :Authorizer,AWS ApiGateway AWS::Lambda::Permission: Kopieren Sie die Vorlage aus dem Template-Tab des Stacks, der Verified Permissions bereitgestellt hat, als Sie Ihren Richtlinienspeicher erstellt haben.

Die folgende Vorlage ist ein Beispiel für einen Richtlinienspeicher. Sie können die Lambda-Authorizer-Ressourcen aus Ihrem vorhandenen Stack an diese Vorlage anhängen.

{ "AWSTemplateFormatVersion": "2010-09-09", "Resources": { "MyExamplePolicyStore": { "Type": "AWS::VerifiedPermissions::PolicyStore", "Properties": { "ValidationSettings": { "Mode": "STRICT" }, "Description": "ApiGateway: PetStore/test", "Schema": { "CedarJson": "{\"PetStore\":{\"actions\":{\"get /pets\":{\"appliesTo\":{\"principalTypes\":[\"User\"],\"resourceTypes\":[\"Application\"],\"context\":{\"type\":\"Record\",\"attributes\":{}}}},\"get /\":{\"appliesTo\":{\"principalTypes\":[\"User\"],\"resourceTypes\":[\"Application\"],\"context\":{\"type\":\"Record\",\"attributes\":{}}}},\"get /pets/{petId}\":{\"appliesTo\":{\"context\":{\"type\":\"Record\",\"attributes\":{}},\"resourceTypes\":[\"Application\"],\"principalTypes\":[\"User\"]}},\"post /pets\":{\"appliesTo\":{\"principalTypes\":[\"User\"],\"resourceTypes\":[\"Application\"],\"context\":{\"type\":\"Record\",\"attributes\":{}}}}},\"entityTypes\":{\"Application\":{\"shape\":{\"type\":\"Record\",\"attributes\":{}}},\"User\":{\"memberOfTypes\":[\"UserGroup\"],\"shape\":{\"attributes\":{},\"type\":\"Record\"}},\"UserGroup\":{\"shape\":{\"type\":\"Record\",\"attributes\":{}}}}}}" } } }, "MyExamplePolicy": { "Type": "AWS::VerifiedPermissions::Policy", "Properties": { "Definition": { "Static": { "Description": "Policy defining permissions for testgroup cognito group", "Statement": "permit(\nprincipal in PetStore::UserGroup::\"us-east-1_EXAMPLE|testgroup\",\naction in [\n PetStore::Action::\"get /\",\n PetStore::Action::\"post /pets\",\n PetStore::Action::\"get /pets\",\n PetStore::Action::\"get /pets/{petId}\"\n],\nresource);" } }, "PolicyStoreId": { "Ref": "MyExamplePolicyStore" } }, "DependsOn": [ "MyExamplePolicyStore" ] }, "MyExampleIdentitySource": { "Type": "AWS::VerifiedPermissions::IdentitySource", "Properties": { "Configuration": { "CognitoUserPoolConfiguration": { "ClientIds": [ "1example23456789" ], "GroupConfiguration": { "GroupEntityType": "PetStore::UserGroup" }, "UserPoolArn": "arn:aws:cognito-idp:us-east-1:123456789012:userpool/us-east-1_EXAMPLE" } }, "PolicyStoreId": { "Ref": "MyExamplePolicyStore" }, "PrincipalEntityType": "PetStore::User" }, "DependsOn": [ "MyExamplePolicyStore" ] } } }