从正在运行的 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 结构末尾的空白提供者名称有关。我不确定该放什么。


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


蛊毒传说
浏览 90回答 1
1回答

千万里不及你

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.htmlgo 非常方便:https://docs.aws.amazon.com/sdk-for-go/api/aws/credentials/stscreds/
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go