STS AssumeRole 错误:AWS 访问密钥“我们的记录中不存在”

Rya*_*edy 0 amazon-web-services amazon-iam aws-lambda aws-sts

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

  • API 网关将请求传递给授权者 lambda
  • 授权者 lambda 调用sts.assumeRole()并成功生成accessKeyIdandsecretAccessKey
  • 密钥/秘密通过授权者上下文传递给请求处理程序 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
    }
Run Code Online (Sandbox Code Playgroud)

我知道这强烈暗示 STS 有一些我不明白的东西,但我一直无法弄清楚是什么。(例如,当授权者 lambda 完成运行时,AWS 是否会取消分配生成的角色?)

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

Rya*_*edy 5

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

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

我假设生成的凭据与用户访问密钥完全相同,并期望仅使用这两条信息即可成功调用。