Go 获取InvalidToken“;提供的令牌格式不正确或无效";使用GetObjectInput时
在AWS文档中详细介绍了如何从S3下载对象之后,我得到了Go 获取InvalidToken“;提供的令牌格式不正确或无效";使用GetObjectInput时,go,amazon-s3,aws-sdk,aws-sdk-go,Go,Amazon S3,Aws Sdk,Aws Sdk Go,在AWS文档中详细介绍了如何从S3下载对象之后,我得到了提供的令牌格式不正确或无效的错误 我正在通过AWS SAM CLI运行代码 我的代码是: sess, _ := session.NewSession(&aws.Config{ Region: aws.String(endpoints.UsWest2RegionID), }) svc := s3.New(sess) aak := os.Getenv("AWS_ACCESS_
提供的令牌格式不正确或无效的错误
我正在通过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获取对象--bucket“mybucket dev”--key“mydir/mykey_test.json”result.txt
result.txt中填充了mykey_test.json的内容,因此我知道我的creds可以访问该文件。我假设这个问题与lambda使用的角色没有访问文件的权限有关?但是我找不到足够的信息来验证这种可能性,或者如何在本地测试时解决问题。结果是AWS\u会话\u令牌
以字符串(null)
的形式传递,这绝对不是有效的会话令牌。因此,我的代码如下所示:
os.Setenv("AWS_SESSION_TOKEN", "")
sess, _ := session.NewSession()
// this is STUPID!!! But necessary.
if os.Getenv("AWS_SESSION_TOKEN") == "(null)" {
os.Setenv("AWS_SESSION_TOKEN", "")
}
sess, _ := session.NewSession()
现在我可以成功下载文件了
因为我们还不知道这将如何通过实际的lambda传递,所以我对它进行了如下检查:
os.Setenv("AWS_SESSION_TOKEN", "")
sess, _ := session.NewSession()
// this is STUPID!!! But necessary.
if os.Getenv("AWS_SESSION_TOKEN") == "(null)" {
os.Setenv("AWS_SESSION_TOKEN", "")
}
sess, _ := session.NewSession()
尝试将您的环境变量重命名为AWS\u-ACCESS\u-KEY\u-ID
和AWS\u-SECRET\u-ACCESS\u-KEY\u-KEY
刚刚添加了以下内容:os.Setenv(“AWS\u-ACCESS\u-KEY\u-ID”,aak)
和os.Setenv(“AWS\u-SECRET\u-ACCESS\u-KEY”,ask)
,并对它们进行了Getenv以确保它们已设置。没有任何区别。你是否将Setenv
放在session.NewSession
之前?是的,但是creds已经从SAM那里传递了。这就是为什么我没有任何代码实际传递它们(直到现在)。仅获取和打印代码。我设置了SetEnv,以防SAM错误地传递它们(根据您上面的评论),但这并没有什么区别。我确实在新闻发布会之前确定了他们的位置。我还向配置中添加了Credentials:Credentials.NewEnvCredentials(),
,以查看这是否会有所不同。我还打印了os.Getenv(“AWS_地区”)
,它是us-west-2
。只是好奇看看还有什么其他的经历。花了好几天寻找解决方案。谢谢