【问题标题】:AWS Cognito and API Gateway AuthenticationAWS Cognito 和 API Gateway 身份验证
【发布时间】:2016-08-20 13:42:31
【问题描述】:

我在 API 网关 (Auth: AWS_IAM) 下设置了 GET 方法,并拥有一个具有开发人员身份的 Cognito 池。我在 get 方法后面有一个 lambda。

当我调用 Cognito 时,我会获得临时凭据并担任角色。我担任的角色具有执行和访问 API 网关上所有内容的适当权限。

       ...
       {
            "Effect": "Allow",
            "Action": [
                "execute-api:Invoke"
            ],
            "Resource": [
                "*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "apigateway:GET"
            ],
            "Resource": [
                "*"
            ]
        }
        ...

当我使用此设置调用 API 网关时,我收到 500,内部服务器错误。

如果我从策略中删除上述 API 网关权限,那么我会得到 403 error forbidden (User: arn:aws:sts::xxxxx:assumed-role/Cogn_Auth_Role/xxx is not authorized to perform: execute-api:Invoke on resource: arn:aws:execute-api:us-east-1:xxxx:xxx/xxx/GET/events

如果我将AdminAccess 附加到此角色,那么一切正常。这是怎么回事?我错过了什么吗?

【问题讨论】:

  • 嗨,johnny,你成功了吗?
  • 是的,请参阅下面的第二个答案。我需要的是 Lambada 调用。试试 AWS 策略模拟器,如果您遇到类似情况,看看您缺少哪些权限。
  • 非常感谢@johnny。让我尝试使用 lambda 调用。但我很困惑,我们不能在 cognito 和没有 lambda 的情况下使用 API Gateway?
  • 我认为这取决于您的架构方式,但总的来说您应该能够将它们一起使用。
  • 此文件策略位于何处?

标签: amazon-web-services aws-lambda aws-api-gateway amazon-cognito amazon-iam


【解决方案1】:

所以像这样修改认知角色的策略后,它开始正常工作了。

  {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Effect": "Allow",
                "Action": [
                    "lambda:InvokeFunction"
                ],
                "Resource": [
                    "*"
                ]
            },
            {
                "Effect": "Allow",
                "Action": [
                    "execute-api:Invoke"
                ],
                "Resource": [
                    "*"
                ]
            }
        ]
    }

使它发挥作用的重要部分:

  {
        "Effect": "Allow",
        "Action": [
            "lambda:InvokeFunction"
        ],
        "Resource": [
            "*"
        ]
    }

仍然不确定为什么我应该拥有所有 lambda 的调用权限。

【讨论】:

    【解决方案2】:

    如果您只是尝试使用 Cognito 凭据调用 API Gateway API,那么您的策略中可能不需要“apigateway:GET”。因为它用于管理您的 API,例如获取有关您的 API 资源的信息。

    如果您只是尝试创建一个角色以便可以调用您的 API,您可以尝试从您的策略中删除“apigateway:GET”并查看它是否有效。更多information.

    【讨论】:

    • 谢谢,我想通了,我会把答案贴在这里。
    【解决方案3】:

    这也可能是由于您的 API Gateway 资源策略中有一个条件,它只允许满足要求的客户端访问。如果您正在访问 API 网关以使用 Postman 进行测试,那么您将收到 Unauthorized 错误。例如,

    "Condition": {
            "StringLike": {
                "aws:Referer": [
                    "https://example.com/*",
                    "example.com/*"
                ]
              }
             }
    

    【讨论】:

      猜你喜欢
      • 2020-01-05
      • 2017-11-24
      • 2017-03-12
      • 2019-12-31
      • 2018-05-22
      • 2018-01-29
      • 2016-01-09
      • 2022-01-15
      • 2019-12-14
      相关资源
      最近更新 更多