我在API网关(Auth:AWS_IAM)下设置了GET方法,并拥有一个具有开发者身份的Cognito池 . 我在get方法后面有一个lambda .
当我打电话给Cognito时,我获得了临时凭证,我承担了一个角色 . 我假设的角色具有执行和访问API网关上所有内容的适当权限 .
...
{
"Effect": "Allow",
"Action": [
"execute-api:Invoke"
],
"Resource": [
"*"
]
},
{
"Effect": "Allow",
"Action": [
"apigateway:GET"
],
"Resource": [
"*"
]
}
...
当我使用此设置调用API网关时,我得到500,内部服务器错误 .
如果我从策略中删除上述API网关权限,那么我得到 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
如果我将 AdminAccess
附加到此角色,那么一切正常 . 这是什么交易?我错过了什么吗?
3 回答
这也可能是由于您在API网关资源策略中有条件的情况,该条件仅允许满足要求的客户端进行访问 . 如果您使用Postman访问API网关进行测试,那么您将收到Unauthorized错误 . 例如,
因此,在修改了像这样的认知角色的政策后,它开始正常工作 .
使其发挥作用的重要因素:
仍然不确定为什么我应该调用所有lambdas的权限 .
如果您只是尝试使用Cognito凭据调用API Gateway API,那么您的策略中可能不需要“apigateway:GET” . 由于这用于管理您的API,例如获取有关API资源的信息 .
如果您只是尝试创建角色以便可以调用您的API,则可以尝试从策略中删除"apigateway:GET",看看它是否有效 . 更多information .