2 回答

TA贡献1806条经验 获得超8个赞
因此,可以使用 Config 对象来配置会话。
通读该对象的规格,它对凭据说:
// The credentials object to use when signing requests. Defaults to a
// chain of credential providers to search for credentials in environment
// variables, shared credential file, and EC2 Instance Roles.
Credentials *credentials.Credentials
默认值已经是我的代码片段所做的,所以我删除了所有awsCredentials块,现在它在任何地方都可以正常工作。在本地,EC2、Fargate...
更新
为了扩大答案,删除awsCredentials使这项工作的原因是,如果您检查 SDK 的代码,https://github.com/aws/aws-sdk-go/blob/master/aws/defaults/defaults.go #L107,默认凭据同时检查EnvProvider和RemoteCredProvider。
通过覆盖默认链凭据,它无法在 中查找凭据RemoteCredProvider,这是处理环境变量的提供程序AWS_CONTAINER_CREDENTIALS_FULL_URI。

TA贡献1805条经验 获得超9个赞
解决方案是使用会话而不是凭据来初始化客户端,即:
conf := aws.NewConfig().WithRegion("us-east-1")
sess := session.Must(session.NewSession(conf))
svc := s3.New(sess)
// others:
// svc := sqs.New(sess)
// svc := dynamodb.New(sess)
// ...
因为,正如@Ay0 指出的那样,默认凭证链已经包含EnvProvider和RemoteCredProvider。
如果您仍然需要凭据,您可以使用:
creds := stscreds.NewCredentials(sess, "myRoleARN")
正如文档指出的那样。请注意,角色的策略必须sts:AssumeRole启用操作。有关更多信息,这里是stscreds.NewCredentials(...)文档
- 2 回答
- 0 关注
- 181 浏览
添加回答
举报