使用 GetObjectInput 时获取无效令牌"The provided token is malformed or otherwise invalid"



根据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 Access和Secret密钥是否正确。我已验证可以通过CLI下载该对象:aws s3api get-object --bucket "mybucket-dev" --key "mydir/mykey_test.json" result.txt

result.txt中填充了mykey_test.json的内容,所以我知道我的cred可以访问该文件。我假设这个问题与lambda使用的角色没有访问文件的权限有关?但我找不到足够的信息来验证这种可能性,也找不到如何在本地测试解决问题。

发现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()

如果您的SSO、、for windows在命令提示符中。。aws-sso-login-配置文件然后使用sam本地调用"HelloWorldFunction"-配置文件,它可以工作(没有无效令牌错误…

相关内容

最新更新