首页 > 解决方案 > 节点脚本以 root 身份运行,无法在 AWS 中的 Ubuntu 上获得凭证访问权限,是这样吗?

问题描述

AWS EC2,操作系统:Ubuntu:18+ 运行节点脚本以列出/上传到 S3 可以工作,只要我以ubuntu用户身份运行它 但是,当使用 CodeDeploy 时,我最终以root身份运行它们(这可能是一个有问题的做法)这抛出:

root@ip-172-31-58-175:~/nodetest# node s3.js
Error { InvalidAccessKeyId: The AWS Access Key Id you provided does not exist in our records.
    at Request.extractError (/root/nodetest/node_modules/aws-sdk/lib/services/s3.js:837:35)
    at Request.callListeners (/root/nodetest/node_modules/aws-sdk/lib/sequential_executor.js:106:20)
    at Request.emit (/root/nodetest/node_modules/aws-sdk/lib/sequential_executor.js:78:10)
    at Request.emit (/root/nodetest/node_modules/aws-sdk/lib/request.js:688:14)
    at Request.transition (/root/nodetest/node_modules/aws-sdk/lib/request.js:22:10)
    at AcceptorStateMachine.runTo (/root/nodetest/node_modules/aws-sdk/lib/state_machine.js:14:12)
    at /root/nodetest/node_modules/aws-sdk/lib/state_machine.js:26:10
    at Request.<anonymous> (/root/nodetest/node_modules/aws-sdk/lib/request.js:38:9)
    at Request.<anonymous> (/root/nodetest/node_modules/aws-sdk/lib/request.js:690:12)
    at Request.callListeners (/root/nodetest/node_modules/aws-sdk/lib/sequential_executor.js:116:18)
  message: 'The AWS Access Key Id you provided does not exist in our records.',
  code: 'InvalidAccessKeyId',
  region: null,
  time: 2020-08-24T14:27:47.253Z,
  requestId: '*********D762',
  extendedRequestId: ''*********/1SbU2uA6*******V8FwOOgcX+6qdVQ=',
  cfId: undefined,
  statusCode: 403,
  retryable: false,
  retryDelay: 38.407343636830134 }
root@ip-172-31-58-175:~/nodetest# aws sts get-caller-identity

An error occurred (InvalidClientTokenId) when calling the GetCallerIdentity operation: The security token included in the request is invalid.
root@ip-172-31-58-175:~/nodetest# aws configure
AWS Access Key ID [****************ILFL]:
AWS Secret Access Key [****************tBil]:
Default region name [us-west-2]:
Default output format [json]:

标签: node.jsamazon-web-servicesamazon-s3amazon-iam

解决方案


您处理 AWS 凭证的方式是基于每个用户的。此信息存储在~/.aws/credentials和中~/.aws/config。您的 ubuntu 用户必须已经设置了这些值,可能使用aws configure命令。

有两种方法可以解决这个问题。第一种是简单地从可能的文件中复制文件(您可能必须创建/home/ubuntu/.aws)。这使得两个用户的凭据相同。但是,虽然如果您启动一个新实例,这将起作用,但您将不得不再次执行此操作。/root/.aws/root/.aws

更好的方法是将 IAM 配置文件关联到整个 EC2 实例。这意味着机器上的任何用户都可以访问凭据,并且您可以根据需要在每台机器上更改它们。该文档介绍了更多详细信息,但基本思想是为您的一个或多个实例创建一个 IAM 角色。当您在控制台中创建 EC2 时,您可以关联一个角色,然后:

在此处输入图像描述

或者,在创建之后,您可以关联它:

在此处输入图像描述

如果您使用的话,还有一些方法可以将角色与 AWS cli 相关联。无论哪种方式,您的整个机器现在都可以使用您授予该角色的权限运行命令。如果您想更改这些权限,您可以在关联之后。

您没有显示您的代码,但总的来说它应该变得更简单一些。如果您使用默认的安全管理器,他们将在不更改任何代码的情况下接受此更改。如果您遇到问题,请打开一个新问题以设置安全管理器。


推荐阅读