3

我正在尝试移动一套端到端测试,以便它们完全包含在 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 Gateway 中的资源策略,看看那里有没有什么东西。我删除了一些设置为限制访问办公室 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"
4

3 回答 3

3

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

  1. 对于 API 方法 - Make Auth = 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 签名的

希望这有效!

于 2019-05-31T11:04:43.583 回答
2

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

于 2019-05-31T13:05:00.813 回答
0

您的角色允许的政策execute-api:Invoke似乎是正确的,但您提供的错误消息显示User: anonymous is not authorized to perform...。如果您希望您的角色尝试执行此操作,则说明您尝试使用名为anonymous.

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

希望这可以帮助!

于 2019-05-30T18:04:48.323 回答