为了账号安全,请及时绑定邮箱和手机立即绑定

从正在运行的 CLI Go 程序更新 AWS 凭证以访问不同的账户

从正在运行的 CLI Go 程序更新 AWS 凭证以访问不同的账户

Go
蛊毒传说 2023-03-21 14:43:02
抱歉,如果这是一个非常基本的问题,但我是 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 结构末尾的空白提供者名称有关。我不确定该放什么。有关如何解决此问题的任何指导都将非常有帮助。该程序没有抛出任何错误,而只是没有实际更新凭据。
查看完整描述

1 回答

?
千万里不及你

TA贡献1784条经验 获得超9个赞

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/


查看完整回答
反对 回复 2023-03-21
  • 1 回答
  • 0 关注
  • 89 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信