由于配置错误,执行失败:API Gateway 没有权限承担提供的角色 arn:aws:iam::XXXXXXXXXXXX:role/auth

用户2809286

使用 yaml 云形成,我在 AWS::ApiGateway::RestApi 上配置了一个 lambda AWS::ApiGateway::Authorizer。我已经通过控制台成功测试了授权方和网关 API 方法,但是当我使用 curl 访问部署的 api 时,它失败并显示状态码 500:

< HTTP/2 500 
< content-type: application/json
< content-length: 16
< date: Fri, 25 Mar 2022 09:45:06 GMT
< x-amzn-requestid: 07f7793c-406c-44c2-b184-dbbfd3f2a4fc
< x-amzn-errortype: AuthorizerConfigurationException
< x-amz-apigw-id: PiNNVFTTPHcFwyA=
< x-cache: Error from cloudfront

我在 API-Gateway-Execution 日志中看到了这个错误:

Execution failed due to configuration error: API Gateway does not have permission to assume the provided role arn:aws:iam::XXXXXXXXXXXX:role/auth
Execution failed due to configuration error: Authorizer error

据我了解,API Gateway 正在尝试执行 lambda 授权方,但没有信任关系允许它执行 lambda,尽管因此被授予所述信任:

  lambdaAuthorizerFunctionRole:
    Type: AWS::IAM::Role
    Properties:
      Path: /
      RoleName: auth
      AssumeRolePolicyDocument:
        Version: '2012-10-17'
        Statement:
          - Effect: Allow
            Principal:
              # allow lambda and apigateway to assume the policies attached to this role
              Service: [ lambda.amazonaws.com, apigateway.amazonaws.com ]
            Action: sts:AssumeRole
      Policies:
        ...

有人可以向我解释我在这里做错了什么吗?任何帮助将非常感激。

更新:

谢谢马尔辛。这解决了这个问题,让我摆脱了漫长而孤独的努力。

错误 API-Gateway-Execution 日志消息误导了我。它声明“API Gateway 无权承担所提供的角色”,在没有任何有意义的 AWS 文档的情况下,我的意思是它需要 AWS::IAM:: 中的 AssumeRolePolicyDocument 带来的信任关系:角色。

这个问题特别难以解决,因为我无法找到关于丢失权限的确切解释,因为它可能会在“AWS::ApiGateway::Authorizer”中引用丢失的“AuthorizerCredentials”。我试过在那里添加权限没有效果。在我的工作解决方案中,我完全删除了 AuthorizerCredentials。我不清楚这些凭据的实际用途,因为它们不是必需的。添加它们并没有伤害,但没有解决问题。

我认为缺少的权限也可能与授权者 lambda 的 AssumeRolePolicyDocument 未授予对 apigateway.amazonaws.com 的信任有关,如其他地方所述。但不是。通常情况下,只需要 lambda.amazonaws.com 作为委托人。

最后,我注意到 Cloud Formation 更新堆栈操作静默无法更新授权方这一事实加剧了这个问题:调试时,从 AWS::ApiGateway::RestApi 和 AWS::ApiGateway:: 中删除授权方方法的 AuthorizerId 属性默默地让授权者保持完好。也就是说,在更新删除授权人的情况下,我仍然遇到“API Gateway 无权承担提供的角色”错误。删除和重新创建堆栈克服了这种阻塞。

马尔钦

允许 API 调用您的函数的首选方式是通过AWS::Lambda::Permission,而不是 IAM 角色。因此,您可以创建如下内容:

  permission:
    Type: AWS::Lambda::Permission
    Properties:
      FunctionName: !GetAtt function.Arn
      Action: lambda:InvokeFunction
      Principal: apigateway.amazonaws.com
      SourceArn: <arn:aws:execute-api:region>:<accountid>:<api_id>/authorizers/<authorizer_id>

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

服务角色arn:aws:iam :: 20011470201:role / deploy没有执行以下操作的权限:autoscaling:DescribeLifecycleHooks

通过Python使用IAM角色访问AWS API Gateway

AWS IAM ARN和通配符

Terraform aws_flow_log 未添加 IAM 角色 ARN

如何在 AWS 中获取 IAM 角色的 ARN 值

AWS DMS-数据库迁移服务系统错误消息:IAM角色arn:aws:iam :: <account_id>:role / dms-vpc-role配置不正确

AWS API Gateway:由于配置错误,执行失败:响应中的JSON无效

AWS API Gateway:由于配置错误,执行失败:输出映射不匹配,并且未配置默认输出映射

AWS boto3用户:arn:aws:iam :: xxxx:root无权执行:资源的lambda:AddLayerVersionPermission

AWS API Gateway错误:API Gateway无权承担提供的角色作为S3代理

用于访问 DynamoDB 的 API Gateway IAM 角色

spark aws S3a ARN(Amazon资源名称)IAM角色

如何:地形化雪花阶段凭证并使用 AWS IAM 角色 arn

AccessDeniedException:用户:arn:aws:iam::xxxxxxx:root 未被授权执行:lambda:UpdateFunctionCode

特定用户的IP地址限制-AWS / Cognito / IAM / API Gateway

机械手框架-由IAM保护的AWS API Gateway

如何獲取 IAM 角色的 ARN

AWS API网关ARN

使用授权者后,AWS Amplify API Gateway cors错误:aws_iam

AWS API Gateway和静态HTML:“由于配置错误,执行失败:statusCode应该是在请求模板中定义的整数”

AWS IAM角色:仅对实例本身而非所有资源具有权限的策略

AWS IAM角色权限问题

如何从具有执行角色权限的AWS Lambda调用AWS_IAM授权的API网关终端节点?

部署时出现AWS Lambda和IAM错误:Lambda无法承担为该功能定义的角色

AWS IAM角色与组

AWS IAM 角色到期

SQS 的 AWS IAM 角色

AWS APIGateway Lambda代理集成-由于配置错误,执行失败:Lambda函数的权限无效

IAM 角色 ARN Rekognition 创建流处理器