Amazon s3 使用aws sdk go从Fargate容器到S3的IAM身份验证失败

Amazon s3 使用aws sdk go从Fargate容器到S3的IAM身份验证失败,amazon-s3,amazon-iam,aws-fargate,aws-sdk-go,Amazon S3,Amazon Iam,Aws Fargate,Aws Sdk Go,我正在go应用程序中使用aws sdk go库 代码大致如下所示: awsSession,err:=session.NewSession(&aws.Config{Region:aws.String(Region)}) 及 当在本地、二进制文件中、容器外部运行时,它可以工作,因为它从~/.aws/credentials读取我的密钥 在Docker容器中本地运行时,这会起作用,因为启动容器时,我通过$HOME/.aws/credentials:/root/.aws/credentials:ro传入~

我正在go应用程序中使用aws sdk go库

代码大致如下所示:
awsSession,err:=session.NewSession(&aws.Config{Region:aws.String(Region)})

当在本地、二进制文件中、容器外部运行时,它可以工作,因为它从~/.aws/credentials读取我的密钥

在Docker容器中本地运行时,这会起作用,因为启动容器时,我通过
$HOME/.aws/credentials:/root/.aws/credentials:ro
传入~/.aws/credentials

但是,当我告诉Fargate从ECR获取容器(可以工作)并运行它时,任务日志中会出现以下错误:

  • 无法将文件上载到S3
  • 有关详细消息,请参见aws.Config.CredentialsChainVerboseErrors
  • 未能上载文件:NoCredentialProviders:链中没有有效的提供程序。已弃用。
我假设Fargate管理的容器/任务应该依赖IAM策略来获得对S3的读/写访问权

我尝试进入IAM->Roles->摇头丸执行角色,添加AmazonS3FullAccess角色,然后停止任务(&让Fargate重新启动)。但我也犯了同样的错误

我假设我需要更改Golang代码,以某种方式从IAM而不是文件中读取creds,或者我在IAM或Fargate/ECS端做了一些错误的事情


任何帮助都将不胜感激。

我也面临同样的问题,这个问题是一个误解,我们在任务定义中将
executionRoleArn
taskRoleArn
作为属性。启动新任务时,需要
executionrollearn
,但要使用aws sdk,需要传递
taskrollearn

您需要在
任务学习
中附加s3策略

        upParams := &s3manager.UploadInput{
            Bucket: aws.String(bucket),
            Key:    aws.String(filename),
            Body:   bytes.NewReader(fileContents),
        }

        uploader := s3manager.NewUploader(awsSession)

        result, err := uploader.Upload(upParams)