我已经设置了交叉帐户读取动态流,但当移动客户端正在读取记录时,我会得到安全令牌过期错误。在roleA中,我使用了sts假设角色来承担accountA,然后使用roleA凭据来承担roleB,最后返回动态客户端,因此没有应用于它的刷新特性,客户端在默认情况下将在1小时内过期。我查了一下stscreds,医生说它会刷新凭证。但是,我不知道如何为假设的roleA刷新第一个凭据,然后为假设的roleB刷新第二个凭据。还是调用该方法重新初始化移动客户端更好?
这是代码块。
cfg, err := config.LoadDefaultConfig(
context.TODO(),
config.WithRegion("us-west-2"),
)
if err != nil {
return nil, err
}
stsclient := sts.NewFromConfig(cfg)
assumingcnf, err := config.LoadDefaultConfig(
context.TODO(),
config.WithRegion("us-west-2"),
config.WithCredentialsProvider(aws.NewCredentialsCache(
stscreds.NewAssumeRoleProvider(
stsclient,
roleToAssumeArn1,
)),
),
)
if err != nil {
return nil, err
}
stsclient = sts.NewFromConfig(assumingcnf)
cnf, err := config.LoadDefaultConfig(
context.TODO(),
config.WithRegion("us-west-2"),
config.WithCredentialsProvider(aws.NewCredentialsCache(
stscreds.NewAssumeRoleProvider(
stsclient,
roleToAssumeArn2,
)),
),
)
if err != nil {
return nil, err
}
kClient := kinesis.NewFromConfig(cnf)
return kClient
发布于 2022-10-05 04:03:40
您应该能够使用AWS提供的提供程序来完成这一任务。我假设您使用的是aws-sdk-go-v2。
这将使得到的CredentialsProvider返回缓存的凭据,直到它们过期为止;然后调用provider2
,它使用sts2
为roleB
获取新凭据,而sts2
总是首先调用provider1
以获得roleA
的新凭据。
func createProvider(cfg aws.Config) aws.CredentialsProvider {
sts1 := sts.NewFromConfig(cfg)
provider1 := stscreds.NewAssumeRoleProvider(sts1, "roleA")
sts2 := sts.NewFromConfig(cfg, func (o *sts.Options) { o.Credentials = provider1 })
provider2 := stscreds.NewAssumeRoleProvider(sts2, "roleB")
return aws.NewCredentialsCache(provider2)
}
https://stackoverflow.com/questions/73954581
复制相似问题