[英]AuthorizerConfigurationException in AWS API Gateway / Lambda custom authorizer
[英]AWS API Gateway Custom Authorizer AuthorizerConfigurationException
對於Kinesis流,我使用AWS API Gateway創建了一個代理API。 我使用python Lambda為代理添加了一個自定義授權程序。 在發布lambda函數和部署API之后,我能夠使用Gateway Test功能成功測試API。 我可以看到cloudwatch中的日志,其中包含來自自定義auth lambda函數的詳細打印。 身份驗證成功后,API Gateway將記錄推送到我的Kinesis流
但是當我從Chrome Postman客戶端調用相同的API時,我得到500內部服務器錯誤 ,響應頭包括X-Cache→來自cloudfront的錯誤,x-amzn-ErrorType→AuthorizerConfigurationException
Lambda auth函數返回允許對我的API執行請求的策略。 返回的政策文件是:
{ "policyDocument": { "Version": "2012-10-17", "Statement": [ { "Action": "execute-api:Invoke", "Resource": [ "arn:aws:execute-api:us-east-1:1234567:myapiId/staging/POST/*" ], "Effect": "Allow" } ] }, "principalId": "Foo" }
為什么請求會因Chrome或curl而失敗,但相同的API測試可以在API網關中正常運行?
AuthorizerConfigurationException通常表示API Gateway由於權限錯誤而無法調用授權程序。
請確保您已正確配置API網關調用的功能。 通過刪除功能並將其重新添加到授權程序,可以輕松重置此功能。 然后,控制台將提示您添加必要的權限。
找出導致問題的原因。 從python lambda函數,我返回一個json字符串實例。 相反它應該是json對象。 奇怪的是,當我從API網關“測試”功能測試API時,相同的lambda函數沒有錯誤。 但是當從互聯網(curl或chrome)調用API時,它失敗了。
#return policy_string ... this is incorrect.
return json.loads(policy_string)
我遇到了同樣的錯誤,在我的情況下是一個nodejs函數,我正在添加一個上下文密鑰作為數組。
{
policyDocument: {
Version: '2012-10-17',
Statement: [{
Action: 'execute-api:Invoke',
Effect: effect,
Resource: `${arn.split('/').slice(0, 2).join('/')}/*`,
}],
},
context: {
roles: ['admin']
}
正如醫生所說:
您可以通過調用$ context.authorizer.stringKey,$ context.authorizer來訪問映射模板中的上下文映射的stringKey,numberKey或booleanKey值(例如,“value”,“1”或“true”)。 numberKey或$ context.authorizer.booleanKey。 返回的值都是字符串化的。 請注意,您不能將JSON對象或數組設置為上下文映射中任何鍵的有效值。
刪除角色鍵,它正在工作。
在我的情況下,我沒有返回格式正確的IAM策略文檔。 我的Authorizer函數對如何從請求中獲取一些參數做了錯誤的假設,並且默認結果不是正確的策略(這是我的具體情況)。 我設法使用CloudWatch日志服務對其進行調試,傳統的日志記錄指令來自我的功能代碼。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.