AWS Менеджер секретов Исключение AccessDenied - PullRequest
1 голос
/ 07 января 2020

Кратко объяснена проблема:

Я получаю это AWSSecretsManagerException AccessDenied, когда мое веб-приложение выполняет вызовы API для AWS Secrets Manager для получения секретных ключей / данных.

enter image description here

Проблема более подробно:

У меня есть файл войны веб-приложения, развернутый в AWS ElasticBeanstalk , У меня есть приложение React внешнего интерфейса на AWS Amplify, которое отправляет HTTPS-запрос к файлу WAR.

В рамках обработки этого запроса веб-приложение взаимодействует с API PayPal. Для успешного запроса на использование API PayPal мне нужен токен . Чтобы получить этот токен, мое веб-приложение должно отправить в PayPal запрос на получение токена , отправив мой идентификатор клиента Pay Pal и секретный ключ .

Чтобы не вводить это жестко в приложение или иметь локальный конфигурационный файл с этим идентификатором клиента и ключом в виде простого текста, я решил сохранить их в AWS с помощью AWS Secrets Manager. Для доступа к ключам, хранящимся в моем приложении, мне нужно использовать AWS Secrets Manager SDK. Я сделал это, включив эту зависимость в мой pom-файл веб-приложений.

<dependency>
    <groupId>com.amazonaws</groupId>
    <artifactId>aws-java-sdk-secretsmanager</artifactId>
    <version>1.11.700</version>
</dependency>

Затем я добавил код для получения идентификатора и секретного кода клиента с помощью AWS Secrets Manager SDK API.

Когда я запускаю свое веб-приложение локально на моей машине на сервере Payara, оно работает. Это означает, что на моем компьютере есть локальное приложение React, которое отправляет HTTP-запрос go в мое локальное веб-приложение на Payara (вместо AWS), и веб-приложение успешно извлекает идентификатор клиента и секреты из AWS секретов. Manager.

Однако при развертывании моего веб-приложения в экземпляре Elasti c Beanstalk EC2 я получаю указанное выше исключение из моего приложения React на AWS Amplify.

1 Ответ

1 голос
/ 07 января 2020

Через пару часов я получил решение проблемы.

Сначала вы должны заметить Роль, указанную в Исключении (см. Выделенный текст):

com. amazon aws .services.secretsmanager.model.AWSSecretsManagerException: пользователь: arn: aws: sts :: <......>: предполагаемая роль / aws -elasticbeanstalk-ec2-role / <.....> не разрешено выполнять: secretsmanager: GetSecretValue на ресурсе: arn: aws: secretsmanager: us-east-1: <......>: secret: <.. ...> (Сервис: AWSSecretsManager; Код состояния: 400; Код ошибки: AccessDeniedException; Идентификатор запроса: <.......>)

Когда вы находитесь в AWS Консоль go до AWS -> IAM . Оттуда нажмите на ссылку role слева. Обратите внимание, что там указана роль, выделенная жирным шрифтом (текст, обведенный красным).

enter image description here

Дважды щелкните по нему.

На этом снимке экрана я уже сделал это, но изначально политики SecretsManagerReadWrite (обведено красным) не было.

enter image description here

Чтобы получить эту политику, нажмите «Прикрепить политику». Затем на следующей странице выполните поиск SecretsManagerReadWrite и установите флажок. Нажмите кнопку «Присоединить политику», и теперь эта роль у нее есть!

Теперь мой HTTPS-запрос от моего приложения React на AWS Amplify делает запрос на мое веб-приложение на ElasticBeanstalk, и я больше не получаю его AWSSecretsManagerException AccessDenied сообщение!

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