Amazon web services 如何使用来自变量的凭据运行AWS SDK?
我以前使用过环境变量,效果很好 现在我正在将配置变量迁移到一个文件中,我有AWS_SECRET_ACCESS_KEY和AWS_ACCESS_KEY_ID变量,其中包含从该文件加载的相应值 我尝试了此代码,但收到一个错误:Amazon web services 如何使用来自变量的凭据运行AWS SDK?,amazon-web-services,go,aws-sdk,aws-sdk-go,Amazon Web Services,Go,Aws Sdk,Aws Sdk Go,我以前使用过环境变量,效果很好 现在我正在将配置变量迁移到一个文件中,我有AWS_SECRET_ACCESS_KEY和AWS_ACCESS_KEY_ID变量,其中包含从该文件加载的相应值 我尝试了此代码,但收到一个错误: creds := credentials.NewStaticCredentials("123", conf.AWS_SECRET_ACCESS_KEY, conf.AWS_ACCESS_KEY_ID) sess, err := session.NewSession(&a
creds := credentials.NewStaticCredentials("123", conf.AWS_SECRET_ACCESS_KEY, conf.AWS_ACCESS_KEY_ID)
sess, err := session.NewSession(&aws.Config{Credentials: creds})
这里是错误
InvalidClientTokenId:请求中包含的安全令牌无效
如何正确地将密钥插入aws sdk调用?尝试重新排序参数,以便ACCESS_KEY是第一个参数,SECRET_KEY是第二个参数:
creds := credentials.NewStaticCredentials(conf.AWS_ACCESS_KEY_ID, conf.AWS_SECRET_ACCESS_KEY, "")
同时尝试添加区域:
sess, err := session.NewSession(&aws.Config{
Region: aws.String("us-west-2"),
Credentials: credentials.NewStaticCredentials(conf.AWS_ACCESS_KEY_ID, conf.AWS_SECRET_ACCESS_KEY, ""),
})
此外,如果您不知道,SDK允许使用
.aws/config
下的共享配置。您可以将值放入其中,然后将环境变量AWS\u SDK\u LOAD\u CONFIG
设置为真实值以加载共享配置。示例共享配置如下所示:
[default]
aws_access_key_id = AKID
aws_secret_access_key = SECRET
然后运行:
AWS_SDK_LOAD_CONFIG=true go run main.go
或者您可以临时设置环境变量
package main
import (
"fmt"
"os"
"github.com/aws/aws-sdk-go/aws"
"github.com/aws/aws-sdk-go/aws/session"
"github.com/aws/aws-sdk-go/service/s3/s3manager"
)
const (
AccessKeyId = "XXXXXXXXXXXXXXXXXX"
SecretAccessKey = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
Region = "eu-west-1"
Bucket = "XXXXX-XXXX-XXX"
)
func main() {
os.Setenv("AWS_ACCESS_KEY_ID", AccessKeyId)
os.Setenv("AWS_SECRET_ACCESS_KEY", SecretAccessKey)
filename := os.Args[1]
file, err := os.Open(filename)
if err != nil {
fmt.Println("Failed to open file", filename, err)
os.Exit(1)
}
defer file.Close()
conf := aws.Config{Region: aws.String(Region)}
sess := session.New(&conf)
svc := s3manager.NewUploader(sess)
fmt.Println("Uploading file to S3...")
result, err := svc.Upload(&s3manager.UploadInput{
Bucket: aws.String(Bucket),
Key: aws.String(filepath.Base(filename)),
Body: file,
})
if err != nil {
fmt.Println("error", err)
os.Exit(1)
}
}
使用此通用服务连接sdk客户端
var awsSession *session.Session
func init() {
initializeAwsSession()
}
func initializeAwsSession() {
awsSession = session.Must(session.NewSession(&aws.Config{
Region: aws.String("ap-southeast-1"),
Credentials: credentials.NewStaticCredentials("YOUR_ACCESS_KEY","YOUR SECRET_KEY", ""),
}))
}
我得到了InvalidToken:提供的令牌格式不正确或无效。我认为我们应该先生成令牌,是否正确@dave Maple没有意识到NewStaticCredentials的第三个参数可能是空字符串!如果我确实需要提供一个“令牌”,那么在该方法的上下文中,这实际上意味着什么,或者如何获取令牌。这些文件还有很多需要改进的地方。