【问题标题】:How to authorise a role to perform "execute-api:Invoke"?如何授权角色执行“execute-api:Invoke”?
【发布时间】:2019-10-16 07:53:34
【问题描述】:

我正在尝试移动一套端到端测试,以便它们完全包含在 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"

【问题讨论】:

标签: amazon-web-services aws-api-gateway amazon-iam aws-codebuild amazon-waf


【解决方案1】:

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

  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 签名的

希望这行得通!

【讨论】:

  • 这是一个安全的解决方案!
【解决方案2】:

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

【讨论】:

    【解决方案3】:

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

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

    希望这会有所帮助!

    【讨论】:

      猜你喜欢
      • 2021-05-16
      • 1970-01-01
      • 2019-06-21
      • 2020-09-13
      • 2014-05-08
      • 1970-01-01
      • 1970-01-01
      • 2010-10-21
      • 2019-05-16
      相关资源
      最近更新 更多