如何授权角色执行"execute-api:Invoke"?



我正在尝试移动一套端到端测试,以便它们完全包含在AWS中。我已经通过代码构建完成了此操作,并使所有内容运行到运行测试为止,这些测试会在每次测试运行之前调用 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"

以下是您需要执行的步骤。

  1. 对于 API 方法 - 进行身份验证 = IAM
  2. 对于 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/####/####/"
    }
    ]
    

    }

  3. 确保将相同的 IAM 角色附加到调用此 API 的实体,例如 EC2 - 如果您的代码驻留在 EC2 上

  4. 确保您的 API 调用不是普通的 curl 调用,它们是 AWS sigv4 签名

希望这有效!

在这种情况下,事实证明,主要的障碍是策略中设置的API网关IP限制阻碍了。我没有意识到所做的更改在(重新)部署之前不会生效。一旦我使用更新的 IP 限制执行此操作,就可以调用 API 端点。

您的角色允许execute-api:Invoke的策略似乎是正确的,但您提供的错误消息显示User: anonymous is not authorized to perform...。如果您期望您的角色尝试此操作,则存在问题,因为您尝试使用名为anonymous的用户执行该操作。

您用于构建堆栈的角色不一定是用于在该堆栈上执行函数的角色。我建议您仔细检查所有 IAM 实体,并清楚地识别和了解每个实体试图执行的操作。确保调用函数的任何内容实际上是附加了正确策略的所需角色。

希望这有帮助!

最新更新