为什么 NewStaticCredentials return 是一个空白的 Credentials 对象?

Why does NewStaticCredentials return a blank Credentials object?

我正在尝试从账户 B 读取账户 A 中的 S3 对象。
我能够在帐户 B 中担任角色并检索 sts.Credentials 对象。

stsClient := sts.New(session.Must(session.NewSession()))
params := &sts.AssumeRoleInput{
    RoleArn:         aws.String(roleArn),
    RoleSessionName: aws.String("role-session-name"),
}
stsResp, err := stsClient.AssumeRole(params)
checkErr(err)
// stsResp.Credentials.AccessKeyId     = ASIA...
// stsResp.Credentials.SecretAccessKey = abc...
// stsResp.Credentials.SessionToken    = xyz...

然后我必须将 sts.Credentials 对象转换为 credentials.Credentials 对象以便在

中使用它
s3Client := s3.New(session.Must(session.NewSession()), &aws.Config{Credentials: creds})

然而,当我这样做时:

creds := credentials.NewStaticCredentials(*stsResp.Credentials.AccessKeyId, *stsResp.Credentials.SecretAccessKey, *stsResp.Credentials.SessionToken)

creds 由于某种原因是指向空 credentials.Credentials 对象的指针:

&{creds:{AccessKeyID: SecretAccessKey: SessionToken: ProviderName:} forceRefresh:true m:{state:0 sema:0} provider:0xc4201a2840}

我也试过:

values, err := creds.Get()
checkErr(err)
fmt.Println(values) // prints out credentials values as expected

所以,我不太清楚为什么 credentials.NewStaticCredentials() returns 一个空的凭据对象。

当打印出 credentials.NewStaticCredentials() 返回的 credentials.Credentials 值时,您看到打印的 creds 值是存储在 Credentials 类型中的缓存 AWS 凭证人口还没有。调用 Credentials.Get 时会填充此字段。在调用 Get 之前该值无效。

NewStaticCredentials will create a StaticProvider value which satisfies the Provider interface. The Credentials type will use the Provider.Retrieve() method to retrieve the latest credential Values from the Provider. The Credentials type will cache the creds response from Retrieve() until the Provider flags the credentials as expired。在 StaticProvider 的情况下,凭据永不过期。

这就是为什么 creds.Get() returns 的值没有错误。如果在调用 Get 之后打印 creds,您会看到 Credentials 类型的缓存静态值。