我正在尝试移动一组端到端测试,以使它们完全包含在AWS中。我已经通过代码构建完成了这一工作,并使一切运行到了运行测试的地步,在每次测试运行之前,该API都会调用API来重置数据库。首次运行测试时,我一直遇到此错误消息。
StatusCodeError: 403 - "{\"Message\":\"User: anonymous is not authorized to perform: execute-api:Invoke on resource: arn:aws:execute-api:eu-west-2:*:*"}"
起初,我认为该错误是由于对用于构建一切的角色的权限不足引起的。我尝试为正在使用的IAM角色添加正确的权限,最终使它们比我想要的更开放。
"Effect": "Allow",
"Action": [
"execute-api:Invoke",
"execute-api:ManageConnections"
],
"Resource": "arn:aws:execute-api:*:*:*"
显然没有解决问题,但我确实注意到访问顾问表明未访问特定策略。
接下来,我进入API网关中的资源策略,以查看其中是否存在某些内容。我删除了一些IP地址条件,这些条件是为了限制对办公室IP地址的访问而设置的。
我已经查看了WAF和Shield的内部,看不到与调用API相关的任何内容。在这一点上,我不知道应该在哪里进行下一次调查。
编辑
这是我回来的回复。
"requestId": "********-82f8-11e9-a732-0b550cf3fcd6",
"ip": "*.*.*.*",
"caller": "-",
"user": "-",
"requestTime": "30/May/2019:16:32:50 +0000",
"httpMethod": "GET",
"resourcePath": "/*/ref-data/{proxy+}", "status": "403", "protocol": "HTTP/1.1", "responseLength": "185"
答案 0 :(得分:0)
您的角色策略允许execute-api:Invoke
似乎是正确的,但是您提供的错误消息显示User: anonymous is not authorized to perform...
。如果您期望自己的角色尝试执行此操作,则出了点问题,因为您是使用名为anonymous
的用户尝试执行此操作的。
用于构建堆栈的角色不一定是用于在该堆栈上执行功能的角色。我建议您仔细检查整个IAM实体,并清楚地识别和理解每个实体要做什么。确保调用功能的实际上是所需的角色,并附加了正确的策略。
希望这会有所帮助!
答案 1 :(得分:0)
下面是您需要执行的步骤。
对于API资源政策,请确保您允许来自特定IAM角色的特定/所有方法的流量
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::###############:role/###########"
},
"Action": "execute-api:Invoke",
"Resource": "arn:aws:execute-api:ap-southeast-1:###########:/#########/*/POST/####/####/"
}
]
}
确保将相同的IAM角色附加到调用此API的实体(例如EC2-如果您的代码位于EC2上
希望这行得通!
答案 2 :(得分:0)
在这种情况下,发现主要的阻止因素是该策略中设置的API网关IP限制受到阻碍。我没有意识到所做的更改直到(重新)部署才生效。一旦使用更新的IP限制执行此操作,就可以调用API端点。