我已经设置了跨账户读取运动流,但是当运动客户端读取记录时我收到安全令牌过期错误。我使用 sts assume role 在 accountA 中代入 roleA,然后使用 roleA 凭据代入 roleB,最后返回 kinesis 客户端,因此没有应用刷新功能,客户端默认在 1 小时后过期。我查看了 stscreds AssumeRoleProvider 并且文档说它将刷新凭据。但我不知道如何刷新假定角色 A 的第一个凭据,然后刷新假定角色 B 的第二个凭据。还是调用重新初始化kinesis客户端的方法更好?这是代码块。 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
1 回答
慕莱坞森
TA贡献1810条经验 获得超4个赞
您应该能够使用 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) }
- 1 回答
- 0 关注
- 174 浏览
添加回答
举报
0/150
提交
取消