0

Ich habe eine GET-Methode unter API-Gateway (Auth: AWS_IAM) eingerichtet und verfügen über einen Cognito-Pool mit Entwickleridentität. Ich habe ein Lambda hinter Methode bekommen.AWS Cognito und API-Gateway-Authentifizierung

Wenn ich Cognito anrufe bekomme ich die temporären Zugangsdaten und ich nehme eine Rolle an. Meine angenommene Rolle hat die entsprechende Berechtigung, um alles auf dem API-Gateway auszuführen und darauf zuzugreifen.

 ... 
     { 
      "Effect": "Allow", 
      "Action": [ 
       "execute-api:Invoke" 
      ], 
      "Resource": [ 
       "*" 
      ] 
     }, 
     { 
      "Effect": "Allow", 
      "Action": [ 
       "apigateway:GET" 
      ], 
      "Resource": [ 
       "*" 
      ] 
     } 
     ... 

Wenn ich den API-Gateway mit dieser Einrichtung aufrufen, bekomme ich einen 500, Interner Server Fehler.

Wenn ich die oben genannten API-Gateway Berechtigungen aus der Richtlinie entferne dann bekomme ich 403 error forbidden (User: arn:aws:sts::xxxxx:assumed-role/Cogn_Auth_Role/xxx is not authorized to perform: execute-api:Invoke on resource: arn:aws:execute-api:us-east-1:xxxx:xxx/xxx/GET/events

Wenn ich gehe und an die AdminAccess diese Rolle dann fein alles funktioniert. Was ist der Deal hier? Fehle ich etwas?

+0

Hallo Johnny hast du Erfolg gehabt? – Krishna

+0

ja, siehe die zweite Antwort unten. Was ich brauchte, war Lambada-Anrufung. Testen Sie den AWS-Richtliniensimulator und sehen Sie, welche Berechtigungen Ihnen fehlen, wenn Sie so etwas erleben. – johnny

+0

Vielen Dank @Johnny. Lassen Sie mich mit Lambda-Aufruf versuchen. Aber ich verwechsle, wir können API-Gateway nicht mit Cognito und ohne Lambda verwenden? – Krishna

Antwort

2

Wenn Sie nur versuchen, Ihre API-Gateway-API mit Cognito-Anmeldeinformationen aufzurufen, benötigen Sie möglicherweise nicht "apigateway: GET" in Ihrer Richtlinie. Da das zum Verwalten Ihrer API verwendet wird, z. um Informationen über Ihre API-Ressourcen zu erhalten.

Wenn Sie nur versuchen, eine Rolle zu erstellen, damit Ihre API aufgerufen werden kann, können Sie versuchen, "apigateway: GET" aus Ihrer Richtlinie zu entfernen und prüfen, ob es funktioniert. Mehr information.

+0

danke, ich habe es herausgefunden und werde meine Antwort hier posten. – johnny

3

Also nach der Änderung der Politik der Cognito-Rolle wie folgt, es beginnt gut zu funktionieren.

{ 
     "Version": "2012-10-17", 
     "Statement": [ 
      { 
       "Effect": "Allow", 
       "Action": [ 
        "lambda:InvokeFunction" 
       ], 
       "Resource": [ 
        "*" 
       ] 
      }, 
      { 
       "Effect": "Allow", 
       "Action": [ 
        "execute-api:Invoke" 
       ], 
       "Resource": [ 
        "*" 
       ] 
      } 
     ] 
    } 

das wichtige Stück, das es funktioniert:

{ 
     "Effect": "Allow", 
     "Action": [ 
      "lambda:InvokeFunction" 
     ], 
     "Resource": [ 
      "*" 
     ] 
    } 

ich für alle Lambdas invoke Erlaubnis haben sollte, immer noch nicht sicher, warum.