Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/api/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon web services 如何授权角色执行;执行api:Invoke";?_Amazon Web Services_Aws Api Gateway_Amazon Iam_Aws Codebuild_Amazon Waf - Fatal编程技术网

Amazon web services 如何授权角色执行;执行api:Invoke";?

Amazon web services 如何授权角色执行;执行api:Invoke";?,amazon-web-services,aws-api-gateway,amazon-iam,aws-codebuild,amazon-waf,Amazon Web Services,Aws Api Gateway,Amazon Iam,Aws Codebuild,Amazon Waf,我正在尝试移动一套端到端测试,以便它们完全包含在AWS中。我已经通过代码构建完成了这项工作,并在运行测试之前完成了所有工作,这些测试在每次测试运行之前都会调用API重置数据库。当第一个测试尝试运行时,我一直遇到此错误消息 StatusCodeError:403-“{\”消息\“:\”用户:匿名未被授权在资源上执行:执行api:Invoke:arn:aws:execute api:eu-west-2::**”} 起初,我认为该错误是由于缺少对用于构建所有内容的角色的权限造成的。我尝试为正在使用的

我正在尝试移动一套端到端测试,以便它们完全包含在AWS中。我已经通过代码构建完成了这项工作,并在运行测试之前完成了所有工作,这些测试在每次测试运行之前都会调用API重置数据库。当第一个测试尝试运行时,我一直遇到此错误消息

StatusCodeError:403-“{\”消息\“:\”用户:匿名未被授权在资源上执行:执行api:Invoke:arn:aws:execute api:eu-west-2::**”}
起初,我认为该错误是由于缺少对用于构建所有内容的角色的权限造成的。我尝试为正在使用的IAM角色添加正确的权限,最终使它们比我希望的更开放

"Effect": "Allow",
"Action": [
    "execute-api:Invoke",
    "execute-api:ManageConnections"
],
"Resource": "arn:aws:execute-api:*:*:*"
显然没有解决问题,但我注意到access advisor显示特定的策略没有被访问

接下来,我研究了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"

您的角色允许执行api:Invoke的策略似乎是正确的,但您提供的错误消息显示,
User:anonymous无权执行…
。如果您希望您的角色尝试此操作,则会出现问题,因为您尝试与名为
anonymous
的用户一起执行此操作

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


希望这有帮助

以下是您需要执行的步骤

  • 对于API方法-使Auth=IAM
  • 对于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上

  • 确保您的API调用不是普通的curl调用,它们是aws sigv4签名的

  • 希望这能奏效

    在这种情况下,主要的阻止因素是策略中设置的API网关IP限制。我不知道所做的更改直到(重新)部署才生效。一旦我使用更新的IP限制进行了此操作,就可以调用API端点。

    您是否配置了授权人?这里似乎给出了答案: