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

时间:2019-07-19 22:12:58

标签: amazon-web-services aws-lambda amazon-iam aws-sts

我正在研究基于API网关/ Lambda的项目。请求流程如下:

  • API网关将请求传递给授权者lambda
  • 授权者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会拒绝新生成的一对凭据,并报告此错误消息?

1 个答案:

答案 0 :(得分:1)

根据the AssumeRole documentation,返回的import discord from discord.ext import commands client = discord.Client() class utility(commands.Cog): def __init__(self, client): self.client = client @commands.Cog.listener() async def on_ready(self): print("Cog utility pronto!") @commands.command() async def ping(self, ctx): await ctx.send(f"Pong! {round(client.latency * 1000)}ms") @commands.command() async def clear(ctx, amount=5): await ctx.channel.purge(limit=amount) await ctx.send(f"{amount}Messaggi eliminati") def setup(client): client.add_cog(utility(client)) 也必须使用生成的凭据包含在任何请求中。

  

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

我假设生成的凭据与用户访问密钥完全一样,并且希望仅使用这两条信息才能成功进行呼叫。