#node.js #amazon-web-services #amazon-s3 #amazon-iam
#node.js #amazon-веб-сервисы #amazon-s3 #amazon-iam
Вопрос:
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]:
Ответ №1:
Способ, которым вы обрабатываете учетные данные AWS, зависит от каждого пользователя. Эта информация хранится в ~/.aws/credentials
и ~/.aws/config
. У вашего пользователя Ubuntu, должно быть, эти значения уже настроены, возможно, с помощью aws configure
команды.
Есть два способа исправить это. Первый — просто скопировать файлы из того, что, скорее всего, /home/ubuntu/.aws
будет /root/.aws
(скорее всего, вам придется создавать /root/.aws
). Это делает учетные данные одинаковыми для обоих пользователей. Однако, хотя это сработает, если вы запустите новый экземпляр, вам придется пройти через это снова.
Лучший способ — связать профиль IAM со всем экземпляром EC2. Это означает, что любой пользователь на компьютере может получить доступ к учетным данным и что вы можете изменять их для каждой машины, если хотите. В документации содержится более подробная информация, но основная идея заключается в создании роли IAM для вашего экземпляра или экземпляров. Когда вы создаете EC2 в консоли, вы можете связать роль, затем:
или, после создания, вы можете связать его:
Есть также способы связать роль с AWS cli, если вы используете это. В любом случае, вся ваша машина теперь имеет возможность запускать команды с разрешениями, которые вы предоставили роли. Если вы хотите изменить эти разрешения, вы можете после объединения.
Вы не показали свой код, но в целом он должен стать немного проще. Если вы используете менеджеры безопасности по умолчанию, они воспримут это изменение без каких-либо изменений кода. Если у вас возникла проблема, откройте новый вопрос, чтобы получить настройки менеджеров безопасности.