登录
首页 >  Golang >  Go问答

切换正在运行的 CLI Go 程序的 AWS 凭证以访问另一个账户

来源:stackoverflow

时间:2024-03-08 08:00:26 484浏览 收藏

小伙伴们有没有觉得学习Golang很有意思?有意思就对了!今天就给大家带来《切换正在运行的 CLI Go 程序的 AWS 凭证以访问另一个账户》,以下内容将会涉及到,若是在学习中对其中部分知识点有疑问,或许看了本文就能帮到你!

问题内容

很抱歉,这是一个非常基本的问题,但我是 aws 新手,在网上研究中尚未找到答案。我正在 go 中创建一个 cli 工具,它将从本地 s3 存储桶中提取所有内容,然后允许您输入新凭据,然后将这些内容推送到新环境中的存储桶。

我遇到了需要输入新凭据的问题。这是代码:

type MyProvider struct{
    creds        credentials.Value
}

func getNewCredentials() {
    reader := bufio.NewReader(os.Stdin)
    fmt.Print("Copy new AWS Access Key: ")
    AK, _ := reader.ReadString('\n')
    fmt.Print("Copy new AWS Secret Access Key: ")
    SAK, _ := reader.ReadString('\n')
    fmt.Print("Copy new AWS session token: ")
    ST, _ := reader.ReadString('\n')
    fmt.Print("New stage name(poc, dev, qa, prod): ")
    lib.Stage, _ = reader.ReadString('\n')

    provider := MyProvider{
        creds: credentials.Value{AK, SAK, ST, ""},
    }

    creds := credentials.NewCredentials(&provider)

}

我正在使用自定义提供程序,并且我已经覆盖了提供程序函数 retrieve() 和 isexpired()(未在代码片段中显示)。

当我尝试访问新存储桶时,它说该存储桶不存在,让我相信凭据未正确更新。我的猜测是这与 value 结构末尾的空白提供者名称有关。我不知道该放什么。

任何有关如何解决此问题的指导都会非常有帮助。该程序不会抛出任何错误,而只是没有实际更新凭据。


解决方案


https://docs.aws.amazon.com/sdk-for-go/v1/developer-guide/configuring-sdk.html#specifying-credentials 建议您像这样实例化:

sess, err := session.NewSession(&aws.Config{
    Region:      aws.String("us-west-2"),
    Credentials: credentials.NewStaticCredentials("AKID", "SECRET_KEY", "TOKEN"),
})

如果我尝试这样做,我会让帐户共享信任关系,允许一个帐户在另一个帐户中担任角色,而不是传递凭据。

https://docs.aws.amazon.com/IAM/latest/UserGuide/tutorial_cross-account-with-roles.html

在 go 中非常方便:

https://docs.aws.amazon.com/sdk-for-go/api/aws/credentials/stscreds/

今天关于《切换正在运行的 CLI Go 程序的 AWS 凭证以访问另一个账户》的内容就介绍到这里了,是不是学起来一目了然!想要了解更多关于的内容请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>