为什么 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
类型的缓存静态值。
我正在尝试从账户 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
类型的缓存静态值。