Практичне використання Azure Key Vault для зберігання та доступу до секретів в локальному середовищі розробника

Ця стаття розгортає занавіс над практичними аспектами використання Azure Key Vault у контексті локального середовища розробника, доповнюючи теоретичні знання, набуті з попередньої статті про Azure Key Vault. Вона стане незамінним гідом у впровадженні заходів забезпечення безпеки для чутливих даних вашого проєкту.

Давайте розглянемо ситуацію, коли ваш застосунок взаємодіє з зовнішнім ресурсом, наприклад, з SendGrid. Для взаємодії з ним нам необхідно десь зберігати Access Token. Ми можемо прописати його прямо в коді, але це небезпечно і не дозволить кінцевому користувачу змінювати його. Ми можемо зберігати його в файлі конфігурації, що дозволить вільно змінювати це значення, але це також небезпечно, оскільки розробник випадково може опублікувати його. Для таких випадків в .NET існує Safe Storage, в якому ви можете безпечно зберігати свої секрети, працюючи з ними так, ніби вони зберігаються в файлі конфігурації. Більш детально про налаштування Safe Storage ви можете прочитати тут.

Для того, щоб прочитати секрет з Azure Key Vault за допомогою Azure CLI, спочатку необхідно аутентифікуватися як користувач, який має права на читання секретів, за допомогою команди:

az login

Потім виконайте наступну команду:

az keyvault secret show -n <secret-name-in-key-vault> --vault-name <key-vault-name> --query value -o tsv

-n <secret-name-in-key-vault>: це параметр, який вказує ім’я секрета, який ви хочете отримати. Замість <secret-name-in-key-vault> вам потрібно вказати реальне ім’я секрета.

--vault-name <key-vault-name>: це параметр, який вказує ім’я Key Vault, в якому знаходиться секрет. Замість <key-vault-name> вам потрібно вказати реальне ім’я вашого Key Vault.

--query value: це параметр, який вказує на використання фільтрації виводу. У даному випадку команда виведе тільки значення секрета.

-o tsv: це параметр, який визначає формат виводу. tsv означає, що дані будуть виведені у вигляді табульованих значень без додаткового форматування.

Ця команда отримує значення секрета з певного Azure Key Vault та виводить його у форматі табульованих значень. Оскільки ми в --query передали лише value, ми отримаємо лише значення секрета.

Тепер давайте напишемо скрипт, який буде зчитувати секрет з Key Vault та зберігати його в Safe Storage:

# Виконуємо вхід в Azure через Azure CLI. Це необхідно для доступу до ресурсів в Azure.
az login

# Задаємо назву Key Vault, з яким ми хочемо працювати, в змінну $keyVaultName.
$keyVaultName = "<key-vault-name>"

# Задаємо ідентифікатор сховища секретів (Safe Storage ID) для локального середовища в змінну $safeStoreId.
$safeStoreId = "<safe-storage-id>"

# Отримуємо значення секрета з ім'ям SendGridKey з Azure Key Vault та зберігаємо його в змінну $sendGridKeyValue.
$sendGridKeyValue = az keyvault secret show -n SendGridKey --vault-name $keyVaultName --query value -o tsv

# Задаємо значення секрета SendGridKey в локальне сховище секретів .NET Core за допомогою dotnet user-secrets. 
# Використовуємо ідентифікатор сховища секретів $safeStoreId та змінну $sendGridKeyValue, яка містить значення секрета.
dotnet user-secrets set "SendGridKey" $sendGridKeyValue --id $safeStoreId

За допомогою Azure Key Vault, ми можемо забезпечити безпечне зберігання та управління секретами, що використовуються нашими застосунками. Це дозволяє нам захистити конфіденційні дані та спростити процес розробки. Використання Azure CLI для отримання секретів з Key Vault, а також використання dotnet user-secrets для зберігання цих секретів у локальному середовищі розробника, є ефективним та гнучким підходом.

Зверніть увагу, що Azure Key Vault і dotnet user-secrets слід використовувати з розумінням особливостей безпеки та відповідними практиками управління доступом. Важливо контролювати, хто має доступ до вашого Key Vault, та регулярно переглядати та оновлювати політики доступу.

Завдяки інтеграції з Azure і можливостям .NET Core, розробники можуть покращити безпеку своїх застосунків, забезпечуючи конфіденційність секретів та зручність їх використання в процесі розробки.

Залишити коментар