我正在尝试从账户 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()
返回一个空的凭证对象。