首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Error [CredentialsError]:配置中缺少凭据,但仅在Fargate上运行时

Error [CredentialsError]:配置中缺少凭据,但仅在Fargate上运行时
EN

Stack Overflow用户
提问于 2020-06-14 22:31:08
回答 1查看 3K关注 0票数 0

我构建了一个dockerfile和docker-come.yml文件来导入环境。环境看起来是这样的:

代码语言:javascript
运行
复制
AWS_ACCESS_KEY_ID=XXX
AWS_SECRET_ACCESS_KEY=XXX
ROLE_ARN=XXX
BUCKET_NAME=BUCKET
AWS_PROFILE=default
AWS_SDK_LOAD_CONFIG=1
AWS_SHARED_CREDENTIALS_FILE=[path]
AWS_CONFIG_FILE=[path]
AWS_REGION=region

当我试图将文件上传到S3时,当我使用docker-compose up在我的PC上运行那个对接器时,它工作得很好,但是每当我在Fargate上运行它时,我就会得到这个错误。

代码语言:javascript
运行
复制
Error [CredentialsError]: Missing credentials in config, if using AWS_CONFIG_FILE, set AWS_SDK_LOAD_CONFIG=1
    at Request.extractError (/home/myuser/node_modules/aws-sdk/lib/protocol/query.js:50:29)
    at Request.callListeners (/home/myuser/node_modules/aws-sdk/lib/sequential_executor.js:106:20)
    at Request.emit (/home/myuser/node_modules/aws-sdk/lib/sequential_executor.js:78:10)
    at Request.emit (/home/myuser/node_modules/aws-sdk/lib/request.js:683:14)
    at Request.transition (/home/myuser/node_modules/aws-sdk/lib/request.js:22:10)
    at AcceptorStateMachine.runTo (/home/myuser/node_modules/aws-sdk/lib/state_machine.js:14:12)
    at /home/myuser/node_modules/aws-sdk/lib/state_machine.js:26:10
    at Request.<anonymous> (/home/myuser/node_modules/aws-sdk/lib/request.js:38:9)
    at Request.<anonymous> (/home/myuser/node_modules/aws-sdk/lib/request.js:685:12)
    at Request.callListeners (/home/myuser/node_modules/aws-sdk/lib/sequential_executor.js:116:18)
    at Request.emit (/home/myuser/node_modules/aws-sdk/lib/sequential_executor.js:78:10)
    at Request.emit (/home/myuser/node_modules/aws-sdk/lib/request.js:683:14)
    at Request.transition (/home/myuser/node_modules/aws-sdk/lib/request.js:22:10)
    at AcceptorStateMachine.runTo (/home/myuser/node_modules/aws-sdk/lib/state_machine.js:14:12)
    at /home/myuser/node_modules/aws-sdk/lib/state_machine.js:26:10
    at Request.<anonymous> (/home/myuser/node_modules/aws-sdk/lib/request.js:38:9)
    at Request.<anonymous> (/home/myuser/node_modules/aws-sdk/lib/request.js:685:12)
    at Request.callListeners (/home/myuser/node_modules/aws-sdk/lib/sequential_executor.js:116:18)
    at callNextListener (/home/myuser/node_modules/aws-sdk/lib/sequential_executor.js:96:12)
    at IncomingMessage.onEnd (/home/myuser/node_modules/aws-sdk/lib/event_listeners.js:307:13)
    at IncomingMessage.emit (events.js:322:22)
    at IncomingMessage.EventEmitter.emit (domain.js:482:12) {
  code: 'CredentialsError',
  time: 2020-06-11T12:47:25.609Z,
  requestId: '0d6fd3d4-df21-4195-a6e4-de470006429d',
  statusCode: 403,
  retryable: false,
  retryDelay: 80.8300420619739,
  originalError: {
    message: 'Could not load credentials from ChainableTemporaryCredentials',
    code: 'CredentialsError',
    time: 2020-06-11T12:47:25.609Z,
    requestId: '0d6fd3d4-df21-4195-a6e4-de470006429d',
    statusCode: 403,
    retryable: false,
    retryDelay: 80.8300420619739,
    originalError: {
      message: 'Missing credentials in config, if using AWS_CONFIG_FILE, set AWS_SDK_LOAD_CONFIG=1',
      code: 'CredentialsError',
      time: 2020-06-11T12:47:25.609Z,
      requestId: '0d6fd3d4-df21-4195-a6e4-de470006429d',
      statusCode: 403,
      retryable: false,
      retryDelay: 80.8300420619739,
      originalError: [Object]
    }
  }
}

以下是我的凭据代码的一部分:

代码语言:javascript
运行
复制
    var envCreds = new AWS.EnvironmentCredentials('AWS');
    s3.config.credentials = envCreds;
    s3.config.credentials = new AWS.ChainableTemporaryCredentials({
        params: {
            RoleArn: process.env.ROLE_ARN,
            region: process.env.AWS_REGION
        }
    });

我需要换个角色。我试过使用SharedIniFileCredentials,但没有运气,我总是使用AccessDenied。

我使用控制台日志来记录凭据,唯一的区别是在Fargate上将region设置为ap-northeast-1,而在本地是undefined。因为桶和Fargate在同一台服务器上。我真的找不出这个地区是从哪里来的,这是怎么回事。

这是个窃听器还是我哪里错了?为什么它在我的电脑上运行得很好,而不是法尔盖特?是因为法尔盖特的环境冲突吗?我在这个问题上已经有几天了,任何帮助都将受到感谢。谢谢。

编辑:我发现了,多亏了@Marcin。不应在Fargate任务中运行的Docker中设置任何凭据或角色。您需要创建一个具有足够AWS权限的任务角色,并将其分配给任务。当我在本地运行时,代码将使用角色arn假设默认配置文件,这样它就能正常工作。

同样,不要向代码提交任何凭据。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-06-15 03:03:01

基于这些评论。

针对身份验证问题提出的解决方案是使用任务的IAM角色,而不是将硬编码访问和秘密密钥作为env变量传递到代码中。

任务角色的使用符合AWS 良好实践的要求,即不要硬编码任何凭据,而是使用临时凭据:

使用用于Amazon任务的IAM角色,您可以指定一个IAM角色,该角色可由任务中的容器使用。应用程序必须用AWS凭据对其API请求进行签名,此特性提供了一种管理应用程序使用的凭据的策略,类似于AmazonEC2实例概要文件向EC2实例提供凭据的方式。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62378967

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档