node.js - 节点脚本以 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]:
解决方案
您处理 AWS 凭证的方式是基于每个用户的。此信息存储在~/.aws/credentials
和中~/.aws/config
。您的 ubuntu 用户必须已经设置了这些值,可能使用aws configure
命令。
有两种方法可以解决这个问题。第一种是简单地从可能的文件中复制文件(您可能必须创建/home/ubuntu/.aws
)。这使得两个用户的凭据相同。但是,虽然如果您启动一个新实例,这将起作用,但您将不得不再次执行此操作。/root/.aws
/root/.aws
更好的方法是将 IAM 配置文件关联到整个 EC2 实例。这意味着机器上的任何用户都可以访问凭据,并且您可以根据需要在每台机器上更改它们。该文档介绍了更多详细信息,但基本思想是为您的一个或多个实例创建一个 IAM 角色。当您在控制台中创建 EC2 时,您可以关联一个角色,然后:
或者,在创建之后,您可以关联它:
如果您使用的话,还有一些方法可以将角色与 AWS cli 相关联。无论哪种方式,您的整个机器现在都可以使用您授予该角色的权限运行命令。如果您想更改这些权限,您可以在关联之后。
您没有显示您的代码,但总的来说它应该变得更简单一些。如果您使用默认的安全管理器,他们将在不更改任何代码的情况下接受此更改。如果您遇到问题,请打开一个新问题以设置安全管理器。
推荐阅读
- animation - 这是什么类型的图表,我们如何创建它?这是我们可以在 Python 中做的事情吗?
- gremlin - 已经遍历的过滤器路径
- c++ - 如果两个线程调用同一个函数,但是函数中的所有变量都是局部变量,我还需要担心线程之间共享数据吗?
- java - Spring JPA Criteria Builder 特定列
- php - DataTables 警告:table id=table-timsheet - Ajax 错误。有关此错误的更多信息,请参阅 http://datatables.net/tn/7
- python-3.x - 将 attr 与 src 布局一起使用时出现 ModuleNotFoundError
- c - Makefile 编译多个文件
- java - 我想要两个在一个按钮中创建两个功能
- java - 这个类中使用的模式是什么?
- python - 全局变量和模块导入