【发布时间】: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_ID和AWS_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