【问题标题】:UnrecognizedClientException when creating a client with AWS Go SDK使用 AWS Go 开发工具包创建客户端时出现 UnrecognizedClientException
【发布时间】:2020-08-16 04:46:55
【问题描述】:

我正在尝试将 SSM 与 Go AWS 开发工具包一起使用。我在凭证文件中存储了有效的 IAM 用户 凭证。该文件和凭据都很好,因为它的行为符合预期

aws ssm start-session --target "instanceid"

但问题出在 Go SDK 上。我尝试了 v1 和 v2。

sdk v1

   mySession := session.Must(session.NewSession())
    svc := ssm.New(mySession, aws.NewConfig().WithRegion("ap-southeast-1"))
    out, err := svc.StartSession(&ssm.StartSessionInput{Target: aws.String(instanceId)})
    if err != nil {
        log.Fatalf("error starting ssm  : %v", err)
    }

和 v2

   cfg, err := external.LoadDefaultAWSConfig()
    if err != nil {
        panic("unable to load SDK config, " + err.Error())
    }

    svc := ssm.New(cfg)

    req := svc.StartSessionRequest(&ssm.StartSessionInput{
        Target: aws.String(instanceId),
    })

    resp, _ := req.Send(context.Background())
    if err != nil {
        log.Fatalf("error sending ssm request : %v", err)
    }
    fmt.Println(resp)

给出一个错误说法。

UnrecognizedClientException:请求中包含的安全令牌无效。

凭据也被加载到配置对象中。我想知道是不是因为我使用的是 IAM 用户凭证。

【问题讨论】:

  • 您是否在 env 变量中使用凭据?也使用export AWS_PROFILE="default"
  • 我做了一个假设角色,并像你说的那样使用了那个配置文件。现在,即使没有设置环境变量,它也可以工作。 echo $AWS_PROFILE 什么也不返回。但它有效。很奇怪。
  • 您已经在.aws/credentials 之类的文件中拥有凭据,默认情况下可能是。

标签: amazon-web-services go sdk


【解决方案1】:

默认情况下,开发工具包会检测您环境中设置的 AWS 凭证,并使用它们签署对 AWS 的请求。这样您就无需在应用程序中管理凭据。SDK 在以下环境变量中查找凭据:

$ export AWS_ACCESS_KEY_ID=YOUR_AKID
$ export AWS_SECRET_ACCESS_KEY=YOUR_SECRET_KEY

如果您已经有任何个人资料,您也可以使用它们。

查找详情here

【讨论】:

    猜你喜欢
    • 2017-05-02
    • 2015-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-18
    • 2018-05-20
    相关资源
    最近更新 更多