Невозможно загрузить AWS учетные данные в экземпляре EC2 - PullRequest
1 голос
/ 26 апреля 2020

Приложение

Простой сервис регистрации REST API весной, после отправки правильного запроса POST в базе данных создается новый пользователь, и Amazon SES отправляет электронное письмо со ссылкой для регистрации.

Проблема

Локально после установки локальных переменных (AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY и AWS_DEFAULT_REGION) в моем приложении для ОС (Windows) работает нормально, но проблема начинается после его развертывания. У меня есть экземпляр EC2 с Amazon Linux AMI на AWS:

  • , созданный пользователь на AWS Identity and Access Management (IAM), предоставленный роли AmazonSESFullAccess
  • , входящий в систему CMD с использованием shh с файлом закрытого ключа * .pem
  • Служба Tomcat8 запущена
  • MySQL Служба запущена
  • Приложение * .war развернуто * Создано
  • Переменные окружения, используя команду «export», и я проверил «printenv», просто чтобы убедиться, что все в порядке
  • после отправки запроса POST я получил исключение (ниже), которое означает, что пользователь был создан, но Amazon SES не отправил подтверждение по электронной почте, потому что не удалось аутентифицировать
{
    "timestamp": "2020-04-26T15:44:44.010+0000",
    "message": "Unable to load AWS credentials from any provider in the chain: [EnvironmentVariableCredentialsProvider: Unable to load AWS credentials from environment variables (AWS_ACCESS_KEY_ID (or AWS_ACCESS_KEY) and AWS_SECRET_KEY (or AWS_SECRET_ACCESS_KEY)), SystemPropertiesCredentialsProvider: Unable to load AWS credentials from Java system properties (aws.accessKeyId and aws.secretKey), WebIdentityTokenCredentialsProvider: To use assume role profiles the aws-java-sdk-sts module must be on the class path., com.amazonaws.auth.profile.ProfileCredentialsProvider@23fac1a3: profile file cannot be null, com.amazonaws.auth.EC2ContainerCredentialsProviderWrapper@68aa5a98: The requested metadata is not found at http://169.254.169.254/latest/meta-data/iam/security-credentials/]"
}
  • Я снова проверил локальные переменные окружения на моем экземпляре EC2, и он выглядел нормально, но чтобы убедиться, что я его заново настроил с помощью команды aws configure

  • постоянно появляется исключение, приложение не может получить переменные среды, я борюсь с этим уже более 5 часов так что, надеюсь, кто-то придет сюда, чтобы спасти меня ...

Кусок кода (локально работает отлично):

        AmazonSimpleEmailService client =
                AmazonSimpleEmailServiceClientBuilder
                        .standard()
                        .withCredentials(DefaultAWSCredentialsProviderChain.getInstance())
                        .withRegion(Regions.EU_CENTRAL_1)
                        .build();

Я всего Linux noob, возникли проблемы с простыми командами, поэтому будьте осторожны с решениями, требующими некоторых консольных команд.

Ответы [ 2 ]

1 голос
/ 26 апреля 2020

Если вы используете приложение на EC2, не используйте пользователя IAM.

Вместо этого создайте роль IAM с такими же разрешениями и назначьте эту роль экземпляру. Если приложение использует AWS SDK, оно сможет без проблем получать учетные данные.

В вашем случае, возможно, проблема в том, что среда приложения отличается от вашей, если вы экспортируете учетные данные в сеансе bash, это приведет к не переходить в приложение, если оно загружено под другим пользователем или bash сеанс.

0 голосов
/ 26 апреля 2020

DefaultAWSCredentialsProvider имеет несколько мест, где он будет искать учетные данные. Вместо того, чтобы устанавливать свои учетные данные в качестве переменной среды, вы можете настроить профиль учетных данных. См. Эту документацию: Работа с AWS Учетные данные .

Убедитесь, что у вас установлен CLI AWS, затем вы можете запустить следующую команду, чтобы настроить профиль: aws configure

Нажмите здесь для получения документации по команде aws configure.

Если вы уже настроили * Профиль 1020 *, и он все еще не работает, вы, скорее всего, настроили профиль для неправильного пользователя linux. Например, если пользователь linux с именем tomcat8 является пользователем, который запускает ваш экземпляр tomcat, вам необходимо настроить профиль учетных данных в /home/tomcat8/.aws/credentials/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...