【问题标题】:Getting InvalidToken "The provided token is malformed or otherwise invalid" when using GetObjectInput使用 GetObjectInput 时获取 InvalidToken“提供的令牌格式错误或无效”
【发布时间】:2020-11-19 15:57:46
【问题描述】:

按照 AWS 文档中有关如何从 S3 下载对象的信函,我收到了 The provided token is malformed or otherwise invalid 错误。

我正在通过 AWS SAM CLI 运行我的代码。

我的代码是:

    sess, _ := session.NewSession(&aws.Config{
        Region: aws.String(endpoints.UsWest2RegionID),
    })

    svc := s3.New(sess)

    aak := os.Getenv("AWS_ACCESS_KEY")
    ask := os.Getenv("AWS_SECRET_KEY")
    fmt.Println("aak", aak, "ask", ask) // both of these correctly show my keys are being passed in

    resp, err := svc.GetObject(&s3.GetObjectInput{
        Bucket: aws.String(bucket),
        Key:    aws.String(key),
    })

    if err != nil {
        fmt.Println(err)
    }

我正在运行它: sam local invoke LambdaMyFunction --debug -e test/event.json

我验证了 AWS 访问密钥和密钥是正确的。我验证我可以通过 CLI 下载对象: aws s3api get-object --bucket "mybucket-dev" --key "mydir/mykey_test.json" result.txt

result.txt 填充了 mykey_test.json 的内容,所以我知道我的凭据可以访问该文件。我假设问题与 lambda 使用无法访问文件的角色有关?但是我找不到足够的信息来验证这种可能性,或者如何解决本地测试的问题。

【问题讨论】:

  • 尝试将您的环境变量重命名为 AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEY
  • 刚刚添加了这个:os.Setenv("AWS_ACCESS_KEY_ID", aak)os.Setenv("AWS_SECRET_ACCESS_KEY", ask) 并对它们进行了 Getenv 以确保它们已设置。没有任何区别。
  • 你把Setenv放在session.NewSession之前吗?
  • 是的,但是凭据已经从 SAM 传递过来。这就是为什么我没有任何代码实际传递它们(直到现在)。只有代码获取和打印它们。我做了 SetEnv 以防SAM错误地传递它们(根据您上面的评论),但这并没有什么不同。我确实确保它们是在 NewSession 之前设置的。我还在配置中添加了Credentials: credentials.NewEnvCredentials(),,看看这是否会有所作为。
  • 我还打印了os.Getenv("AWS_REGION"),它是us-west-2。只是好奇看看还有什么通过。

标签: go amazon-s3 aws-sdk aws-sdk-go


【解决方案1】:

原来AWS_SESSION_TOKEN 是在字符串(null) 中传递的,这绝对不是有效的会话令牌。所以我的代码如下所示:

os.Setenv("AWS_SESSION_TOKEN", "")
sess, _ := session.NewSession()

现在我可以成功下载文件了。

由于我们还不知道这将如何通过实际的 lambda 传递,所以我对其进行了检查,如下所示:

    // this is STUPID!!! But necessary.
    if os.Getenv("AWS_SESSION_TOKEN") == "(null)" {
        os.Setenv("AWS_SESSION_TOKEN", "")
    }
    sess, _ := session.NewSession()

【讨论】:

  • 花了几天时间寻找解决方案。谢谢!
猜你喜欢
  • 1970-01-01
  • 2022-07-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-13
  • 1970-01-01
  • 2021-09-21
  • 1970-01-01
相关资源
最近更新 更多