AWS stscreds SDK 用于刷新跨账户代入角色的凭证

我已经设置了跨账户读取运动流,但是当运动客户端读取记录时我收到安全令牌过期错误。我使用 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


天涯尽头无女友
浏览 175回答 1
1回答

慕莱坞森

您应该能够使用 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) }
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go