0

我正在开发一个基于 API Gateway/Lambda 的项目。请求流程如下:

  • API Gateway 将请求传递给 Authorizer lambda
  • Authorizer lambda 调用sts.assumeRole()并成功生成一个accessKeyIdsecretAccessKey
  • 密钥/秘密通过授权上下文传递给请求处理程序 lambda
  • 请求处理程序 lambda 使用给定accessKeyId/secretAccessKey来尝试访问 S3 存储桶中的项目

除最后一步外,该过程的每一步都在工作(通过控制台日志确认)。当我尝试使用生成的凭据时,我收到以下错误消息:

   {
      "message": "The AWS Access Key Id you provided does not exist in our records.",
      "code": "InvalidAccessKeyId",
      "region": null,
      "time": "2019-07-19T22:05:05.817Z",
      "requestId": "...",
      "extendedRequestId": "...",
      "statusCode": 403,
      "retryable": false,
      "retryDelay": 68.28400384749038
    }

我知道这强烈暗示我不了解 STS 的某些内容,但我无法弄清楚是什么。(例如,当授权方 lambda 完成运行时,AWS 是否会取消分配生成的角色?)

为什么 AWS 会拒绝新生成的一对凭证并报告此错误消息?

4

1 回答 1

5

根据AssumeRole 文档,返回的SessionToken还必须包含在使用生成的凭证的任何请求中。

当您使用临时安全凭证进行呼叫时,呼叫必须包含一个会话令牌,该令牌与这些临时凭证一起返回。AWS 使用会话令牌来验证临时安全凭证。

我假设生成的凭据与用户访问密钥完全一样,并希望仅使用这两条信息就可以成功调用。

于 2019-07-19T23:02:37.787 回答