如何使用变量的凭据运行AWS SDK?

Ser*_*rov 11 go amazon-web-services 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(&aws.Config{Credentials: creds})
Run Code Online (Sandbox Code Playgroud)

这是错误

InvalidClientTokenId:请求中包含的安全令牌无效.

如何正确地将我的密钥注入aws sdk调用?

Dav*_*ple 20

尝试重新排序你的args,以便ACCESS_KEY是第一个参数,SECRET_KEY是第二个:

creds := credentials.NewStaticCredentials(conf.AWS_ACCESS_KEY_ID, conf.AWS_SECRET_ACCESS_KEY, "")
Run Code Online (Sandbox Code Playgroud)

尝试添加该区域:

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, ""),
})
Run Code Online (Sandbox Code Playgroud)

  • 它适用于空字符串`""` (5认同)
  • 没有意识到 NewStaticCredentials 第三个参数可能是空字符串!或者,如果我确实需要提供“令牌”,那么它在该方法的上下文中实际意味着什么或如何获取令牌。这些文档还有很多不足之处。 (3认同)
  • 我收到 `InvalidToken: The provided token is malformed or invalid.` 我认为我们应该先生成令牌,是否正确?@戴夫枫 (2认同)

gre*_*nif 5

或者您可以临时设置环境变量。

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)
    }
}
Run Code Online (Sandbox Code Playgroud)