mirror of
https://github.com/goldbergyoni/nodebestpractices.git
synced 2025-10-29 00:19:14 +08:00
secretmanagement
Signed-off-by: Alexander Ivanov <oshli.a.er@gmail.com>
This commit is contained in:
@ -765,7 +765,7 @@ null == undefined // true
|
||||
|
||||
**Иначе:** Контроль источников, даже для частных репозиториев, может быть ошибочно обнародован, после чего все секреты будут раскрыты. Доступ к управлению исходным кодом для внешней стороны непреднамеренно предоставит доступ к связанным системам (базам данных, API, службам и т.д.).
|
||||
|
||||
🔗 [**Подробнее: Secret management**](/sections/security/secretmanagement.md)
|
||||
🔗 [**Подробнее: Извлекайте секреты из конфигурационных файлов или используйте пакет npm, который их шифрует**](/sections/security/secretmanagement.russian.md)
|
||||
|
||||
<br/><br/>
|
||||
|
||||
|
||||
36
sections/security/secretmanagement.russian.md
Normal file
36
sections/security/secretmanagement.russian.md
Normal file
@ -0,0 +1,36 @@
|
||||
# Извлекайте секреты из конфигурационных файлов или используйте пакет npm, который их шифрует
|
||||
|
||||
### Объяснение в один абзац
|
||||
|
||||
Наиболее распространенным и безопасным способом предоставления приложению Node.js доступа к ключам и секретам является их хранение с использованием переменных среды в системе, в которой оно выполняется. После установки к ним можно получить доступ из глобального объекта `process.env`.
|
||||
Лакмусовая проверка того, правильно ли все приложения сконфигурированы из кода, заключается в том, можно ли сделать кодовую базу открытым исходным кодом в любой момент без ущерба для каких-либо учетных данных.
|
||||
|
||||
В редких случаях, когда секреты нужно хранить внутри системы контроля версий, использование пакета, такого как [cryptr](https://www.npmjs.com/package/cryptr), позволяет хранить их в зашифрованном виде, а не в простой текст.
|
||||
|
||||
Существует множество инструментов, которые используют git commit для аудита коммитов и коммитов сообщений для случайного добавления секретов, таких как [git-secrets](https://github.com/awslabs/git-secrets).
|
||||
|
||||
### Пример кода
|
||||
|
||||
Доступ к ключу API, хранящемуся в переменной среды:
|
||||
|
||||
```javascript
|
||||
const azure = require('azure');
|
||||
|
||||
const apiKey = process.env.AZURE_STORAGE_KEY;
|
||||
const blobService = azure.createBlobService(apiKey);
|
||||
```
|
||||
|
||||
Использование `cryptr` для хранения зашифрованного секрета:
|
||||
|
||||
```javascript
|
||||
const Cryptr = require('cryptr');
|
||||
const cryptr = new Cryptr(process.env.SECRET);
|
||||
|
||||
let accessToken = cryptr.decrypt('e74d7c0de21e72aaffc8f2eef2bdb7c1');
|
||||
|
||||
console.log(accessToken); // outputs decrypted string which was not stored in source control
|
||||
```
|
||||
|
||||
### Что говорят другие блогеры
|
||||
|
||||
> Переменные среды легко переключать между развертываниями без изменения кода; в отличие от конфигурационных файлов, существует небольшая вероятность того, что они случайно попадут в репозиторий; и в отличие от пользовательских файлов конфигурации или других механизмов конфигурации, таких как Java System Properties, они являются независимым от языка и ОС стандартом. [От: The 12 factor app](https://12factor.net/config)
|
||||
Reference in New Issue
Block a user