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 關注
- 166 瀏覽
添加回答
舉報