У меня есть веб-приложение, использующее AWS Lambda и API Gateway (защищенное IAM) для серверной части, интерфейсная часть построена с использованием React. Я пытаюсь выяснить, как лучше всего не допускать использования секретного ключа AWS в производственном коде Javascript, пока я не могу найти ничего лучше, чем просто запутать ключ, но это ничего не решает.
Пока что в разработке я использую apigClient и жестко кодирую как ключ доступа, так и секретный ключ.
Любая помощь могла бы быть полезна.
Спасибо.
Я надеюсь, вы имеете в виду, что в коде бэкэнд этого точно не должно быть в приложении React. Поскольку вы находитесь на AMS, вы можете заглянуть в KMS, чтобы помочь управлять этими секретами.
У нас была такая же головная боль. В итоге мы использовали Cognito. Если ваше приложение аутентифицируется с помощью Cognito, AWS может предоставить ему федеративный доступ ко всему, что вам нужно. Конечно, тогда у вас есть проблема с получением имени пользователя Cognito и pwd для вашего приложения. Но если это услуга, на которую подписаны пользователи, то об этом, я думаю, можно позаботиться при регистрации, отправив письмо по электронной почте. Когда потребность этого пользователя в доступе исчезнет, удалите его пользователя Cognito. Никаких ключей AWS нигде не требуется. Не знаю, помогает ли это или я ошибаюсь? Привет, Адам.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Все, что вы включаете в свой код javascript, будет доступно для чтения в браузере, если кто-то проверит исходный код вашего окончательного пакета.
Если вы хотите быть на 100% уверенным, что ваш секретный ключ остается скрытым, вам следует выполнить эту аутентификацию в бэкэнде.
Однако вы можете хранить секретные ключи вне репо, настроив их как переменные env.
AWS имеет интерфейс для переменных среды в своих приложениях. Похоже, это документы для Lambda. Вы должны ввести любые учетные данные в этот интерфейс, и тогда вы сможете получить к ним доступ в своей функции Lambda. Локально вы можете использовать npm, например точка-env, и использовать файл .env для доступа к вашим переменным окружения. Или вы можете просто добавить их в свою командную строку. Если вы собираетесь использовать файл .env, ОЧЕНЬ ВАЖНО, чтобы вы проигнорировали этот файл в вашем .gitignore.
Может быть, создать файл json с вашими учетными данными aws? Затем в своем коде вы импортируете файл и получаете то, что хотите.