第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

使用 AWS SDK Go 從 Fargate 任務(wù)中的角色加載 AWS 憑證的正確方法是什么?

使用 AWS SDK Go 從 Fargate 任務(wù)中的角色加載 AWS 憑證的正確方法是什么?

Go
慕妹3146593 2022-07-04 10:39:21
我有以下片段:awsCredentials := credentials.NewChainCredentials(    []credentials.Provider{        &ec2rolecreds.EC2RoleProvider{            Client: ec2metadata.New(newSession, aws.NewConfig()),        },        &credentials.SharedCredentialsProvider{},        &credentials.EnvProvider{},    })只要代碼在 EC2 實(shí)例上運(yùn)行或訪問/密鑰通過變量傳遞(用于本地測試),它就可以正常工作。但是,此代碼在 ECS+Fargate 上運(yùn)行時(shí)會(huì)失敗,因?yàn)镹oCredentialProviders: no valid providers in chain. 檢查正在運(yùn)行的容器的環(huán)境變量,它有預(yù)期的AWS_CONTAINER_CREDENTIALS_RELATIVE_URI,所以credentials.EnvProvider應(yīng)該閱讀它。所以,我的問題是,閱讀這些憑證的正確方法是什么?因?yàn)槲颐媾R的問題不是缺少權(quán)限(這將表明策略/角色中的錯(cuò)誤),而是該代碼無法獲取憑據(jù)。更新我已將其范圍縮小到使用ec2rolescreds.使用這個(gè)簡單的例子:package mainimport (    "fmt"    "log"    "github.com/aws/aws-sdk-go/aws"    "github.com/aws/aws-sdk-go/aws/credentials"    "github.com/aws/aws-sdk-go/aws/credentials/ec2rolecreds"    "github.com/aws/aws-sdk-go/aws/ec2metadata"    "github.com/aws/aws-sdk-go/aws/session"    "github.com/aws/aws-sdk-go/service/s3")func main() {    newSession, err := session.NewSession()    if err != nil {        log.Fatal(err)    }    awsCredentials := credentials.NewChainCredentials(        []credentials.Provider{            &ec2rolecreds.EC2RoleProvider{                Client: ec2metadata.New(newSession, aws.NewConfig()),            },            &credentials.SharedCredentialsProvider{},            &credentials.EnvProvider{},        })    sess, err := session.NewSession(&aws.Config{        Region:      aws.String("us-east-1"),        Credentials: awsCredentials},    )    if err != nil {        log.Fatal(err)    }    // Create S3 service client    svc := s3.New(sess)    result, err := svc.ListBuckets(nil)    if err != nil {        log.Fatal(err)    }    fmt.Println("Buckets:")    for _, b := range result.Buckets {        fmt.Printf("* %s created on %s\n",            aws.StringValue(b.Name), aws.TimeValue(b.CreationDate))    }}如果我刪除ec2rolescreds,則本地和 ECS+Fargate 中的一切都正常。但是,如果我按原樣運(yùn)行此代碼,我會(huì)得到相同的錯(cuò)誤NoCredentialProviders: no valid providers in chain
查看完整描述

2 回答

?
慕森卡

TA貢獻(xiàn)1806條經(jīng)驗(yàn) 獲得超8個(gè)贊

因此,可以使用 Config 對(duì)象來配置會(huì)話。


通讀該對(duì)象的規(guī)格,它對(duì)憑據(jù)說:


// 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

默認(rèn)值已經(jīng)是我的代碼片段所做的,所以我刪除了所有awsCredentials塊,現(xiàn)在它在任何地方都可以正常工作。在本地,EC2、Fargate...


更新


為了擴(kuò)大答案,刪除awsCredentials使這項(xiàng)工作的原因是,如果您檢查 SDK 的代碼,https://github.com/aws/aws-sdk-go/blob/master/aws/defaults/defaults.go #L107,默認(rèn)憑據(jù)同時(shí)檢查EnvProvider和RemoteCredProvider。


通過覆蓋默認(rèn)鏈憑據(jù),它無法在 中查找憑據(jù)RemoteCredProvider,這是處理環(huán)境變量的提供程序AWS_CONTAINER_CREDENTIALS_FULL_URI。


查看完整回答
反對(duì) 回復(fù) 2022-07-04
?
Cats萌萌

TA貢獻(xiàn)1805條經(jīng)驗(yàn) 獲得超9個(gè)贊

解決方案是使用會(huì)話而不是憑據(jù)來初始化客戶端,即:


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)

//   ... 

因?yàn)椋鏎Ay0 指出的那樣,默認(rèn)憑證鏈已經(jīng)包含EnvProvider和RemoteCredProvider。


如果您仍然需要憑據(jù),您可以使用:


creds := stscreds.NewCredentials(sess, "myRoleARN")

正如文檔指出的那樣。請(qǐng)注意,角色的策略必須sts:AssumeRole啟用操作。有關(guān)更多信息,這里是stscreds.NewCredentials(...)文檔


查看完整回答
反對(duì) 回復(fù) 2022-07-04
  • 2 回答
  • 0 關(guān)注
  • 178 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)