Скрипты узла, запускаемые от имени root, не могут получить доступ к учетным данным в Ubuntu в AWS, это так?

#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, если вы используете это. В любом случае, вся ваша машина теперь имеет возможность запускать команды с разрешениями, которые вы предоставили роли. Если вы хотите изменить эти разрешения, вы можете после объединения.

Вы не показали свой код, но в целом он должен стать немного проще. Если вы используете менеджеры безопасности по умолчанию, они воспримут это изменение без каких-либо изменений кода. Если у вас возникла проблема, откройте новый вопрос, чтобы получить настройки менеджеров безопасности.