You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Goland中AWS SDK无法从~/.aws/credentials加载凭证求助

问题描述

我使用credentials.NewEnvCredentials()时,误以为它能读取~/.aws/credentials文件里的凭证信息,但代码报错找不到AWS_ACCESS_KEY_ID或AWS_SECRET_ACCESS_KEY。手动将这两个变量添加到Goland运行配置的环境变量中后,连接可以成功建立。但出于部署需求,我需要直接读取~/.aws/credentials文件中的值。我曾在Goland终端手动导出这两个变量,但Goland并未识别。目前只有硬编码AWS_ACCESS_KEY_ID、AWS_SECRET_ACCESS_KEY及会话令牌能正常运行,但这并非我的目标,我更希望只需指定AWS配置文件(profile)即可。

相关代码如下:

var DefaultTransport http.RoundTripper = &http.Transport{
    Dial: (&net.Dialer{
        Timeout:   30 * time.Second,
        KeepAlive: 30 * time.Second,
    }).Dial,
    TLSHandshakeTimeout: 10 * time.Second,
}

credentialsEnv := credentials.NewEnvCredentials()
signer := v4.NewSigner(credentialsEnv)

client := &http.Client{Transport: DefaultTransport}

signedClient, signerError := aws_signing_client.New(signer, client, "es", "us-east-1")

if signerError != nil {
    fmt.Errorf("Unable to create aws signed http transport client object: %v", signerError)
}

opensearchConfig := opensearch.Config{
    Addresses: parameters.Addresses,
    //Username:  parameters.Username,
    //Password:  parameters.Password,
    //Username: "mercury",
    //Password: "",
    Transport: signedClient.Transport,
    //Transport: tp,
}

opensearchClient, err := opensearch.NewClient(opensearchConfig)
fmt.Println(opensearchClient.Info())
解决方案
  • 改用文件凭证提供者
    credentials.NewEnvCredentials()仅从环境变量读取凭证,不会解析~/.aws/credentials文件。要读取该文件,改用credentials.NewSharedCredentials():

    // 不传第二个参数默认读取default profile,也可指定自定义profile名称
    creds := credentials.NewSharedCredentials("", "your-profile-name")
    signer := v4.NewSigner(creds)
    

    更推荐使用AWS SDK的默认凭证链(自动依次查找环境变量、~/.aws/credentials、IAM角色等),通过会话对象实现:

    sess := session.Must(session.NewSessionWithOptions(session.Options{
        Profile: "your-profile-name", // 指定profile,留空则用default
    }))
    signer := v4.NewSigner(sess.Config.Credentials)
    
  • 解决Goland终端环境变量不生效问题
    Goland终端继承IDE启动时的环境变量,手动在终端导出变量后,需重启Goland让IDE重新加载环境;也可直接在Goland的运行配置中添加环境变量,或在~/.bashrc/~/.zshrc中配置后重启IDE。

  • 最佳实践
    不要硬编码凭证,始终依赖AWS SDK默认凭证链,让代码在本地、EC2、EKS等环境自动适配;若需指定profile,通过环境变量AWS_PROFILE设置,或在代码中指定,避免硬编码。

内容的提问来源于stack exchange,提问作者wubbalubba

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 08:17:45