2017-05-17 3 views
2

Gibt es eine Möglichkeit, einen benutzerdefinierten Autorizer zu erstellen, der Richtlinien zurückgibt, die Ressourcenpfade und Pfadparameter zulassen?Benutzerdefinierte AWS-API-Autorisierungsrichtlinien mit Pfadparametern

Beispiel: Allow: GET/Stores, GET/Geschäfte/{} storeId Deny: GET/Geschäfte/{storeId}/Produkte

Ich habe Probleme mit Pfadparameter mit, denn wenn ich eine Rückkehr policy like arn: ...: .../stage/GET/speichert/{storeId}, API-Gateway blockiert Aufrufe von GET/stores/123 oder GET/stores/555123

Antwort

0

Eine solche Richtlinie ist möglich. Sie können die folgende Struktur als benutzerdefinierte Authorizer Politik zurückkehren, dies zu erreichen:

{ 
    "principalId": "user", 
    "policyDocument": { 
    "Version": "2012-10-17", 
    "Statement": [{ 
     "Action": "execute-api:Invoke", 
     "Effect": "Allow", 
     "Resource": "arn:aws:execute-api:eu-central-1:1234567890:9f4xsv4jbl/prod/GET/stores" 
     }, 
     { 
     "Action": "execute-api:Invoke", 
     "Effect": "Deny", 
     "Resource": "arn:aws:execute-api:eu-central-1:1234567890:9f4xsv4jbl/*/GET/stores/{id}" 
     }, 
     { 
     "Action": "execute-api:Invoke", 
     "Effect": "Allow", 
     "Resource": "arn:aws:execute-api:eu-central-1:1234567890:9f4xsv4jbl/prod/GET/stores/*/products" 
     } 
    ] 
    } 
} 
+1

Die {id} am Ende des zweiten Beispiels wird nicht wie gewünscht funktionieren, wenn Sie es mit einem bestimmten ID ersetzen oder alle IDs erlauben, mit "Ressource": "arn: aws: execute-api: eu-zentral-1: 1234567890: 9f4xsv4jbl/*/GET/speichert/*" –

+1

Das ist interessant. Ich habe mit diesen Aussagen getestet. curl -H 'Autorisierung: a' https://9f4xsv4jbl.execute-api.eu-central-1.amazonaws.com/prod/stores -> funktioniert. curl -H 'Autorisierung: a' https://9f4xsv4jbl.execute-api.eu-central--1.amazonaws.com/prod/stores/123 -> Benutzer nicht autorisiert. curl -H 'Autorisierung: a' https://9f4xsv4jbl.execute-api.eu-central-1.amazonaws.com/prod/stores/123/products -> funktioniert. Dies würde im Widerspruch dazu stehen, dass ich die konkrete ID in der Richtlinie angeben muss. –

+0

Ich glaube nicht, dass Api Gateway Unterstützung für Pfadvariablen bietet. Ich "löste" dies für jetzt, indem ich keinen Cache und jeden API-Aufruf verwende. Ich rufe meinen benutzerdefinierten Autorisierer an, der ein ALLOW | zurückgibt DENY arn ..: v1..GET/speichert/* –

Verwandte Themen