Как защитить учетные данные или ключи, используемые в текстовом формате в программе? - PullRequest
0 голосов
/ 16 марта 2019

В последнее время я подключался к базе данных, подключенной в облаке (AWS) к ExpressJS.Соединение определяется следующим образом: (Источник: https://expressjs.com/en/guide/database-integration.html)

var connection = mysql.createConnection({
  host     : 'localhost',
  user     : 'dbuser',
  password : 's3kreee7',
  database : 'my_db'
});

В AWS я подключался через переменные среды через процесс AWS:

var connection = mysql.createConnection({
    host: process.env.RDS_HOSTNAME,
    user: process.env.RDS_USERNAME,
    password: process.env.RDS_PASSWORD,
    port: process.env.RDS_PORT
});

Хотя это очень удобно, когдаПри работе в AWS это становится проблемой, если я хочу запускать / устранять неполадки моего кода локально, поэтому я в итоге вставляю фактические значения для подключения к моей базе данных вручную, подобно первому примеру кода, показанному в моем посте.

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

Этолучшая идея, которую я придумалВот и я, ссылаясь на приведенные выше примеры:

host: process.env.RDS_HOSTNAME || hostVariablePulledFromLocalFile

Это будет подключаться к БД, если на AWS, и если не использовать некоторую переменную, хранящуюся в локальном текстовом или json-файле, который содержит учетные данные и другие важныеИнформация.Таким образом, вы можете перейти к управлению версиями и не иметь своих учетных данных (конечно, исключая информационный файл из репозитория).

1 Ответ

1 голос
/ 16 марта 2019

Определенно не помещайте секреты (например, учетные данные базы данных) в ваше дерево исходных текстов.Это не только ставит под угрозу эти учетные данные, но также делает невозможным развертывание одного и того же кода в средах разработки и производства.

Общий стандарт для приложений Javascript - dotenv .Похоже, вы, возможно, уже используете это, но вы, возможно, не поняли, что файл .env должен , а не находиться в системе контроля версий - его следует исключить с помощью .gitignore и установить отдельнокак часть вашего процесса развертывания.Таким образом, вы можете иметь свои учетные данные для разработки на своем компьютере и производственные учетные данные в рабочей среде.

В частности, для Amazon RDS вы можете использовать экземпляр IAM для обработки аутентификации базы данных .Если это не подходит, стоит рассмотреть еще один вариант: AWS Secrets Manager .

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