Ми раді оголосити, що бета-версія Terraform-провайдера Psono вже доступна у відкритому Terraform Registry.
Тепер інфраструктурні команди можуть керувати окремими ключами у вже створених записах Psono Environment Variables у рамках свого робочого процесу Terraform. Провайдер дозволяє зберігати існуючі значення, генерувати нові паролі, змінювати (ротувати) керовані значення, зберігати зовнішньо надані значення та читати секрети через ефемерні ресурси Terraform.
Обробка секретів у інфраструктурному коді потребує особливої уваги. Позначка sensitive приховує значення у стандартному CLI-виводі, але це не обов'язково захищає значення від потрапляння у стан Terraform. Провайдер Psono використовує можливості Terraform для роботи у режимах «тільки запис» і ефемерності, щоб уникнути цієї проблеми, і вимагає Terraform 1.11 або новішої версії.
Провайдер підтримує три основні сценарії роботи:
Це дозволяє включати операції з життєвим циклом секретів у Terraform, зберігаючи самі значення безпосередньо в Psono.
Провайдер використовує обмежений API-ключ Psono. Ви обираєте лише ті записи Environment Variables, до яких потрібен доступ Terraform, і надаєте дозвіл на читання для всіх операцій. Для створення, оновлення, ротації або видалення ключів потрібен також дозвіл на запис. Провайдер не потребує безмежного API-ключа і не може створювати записи сховища, папки чи сховища даних.
Шифрування та розшифрування виконуються локально у провайдері. Вимкнути перевірку SSL-сертифікатів неможливо, а приватні центри сертифікації можна додавати через PEM CA bundle. Для продуктивних систем слід завжди використовувати HTTPS-адресу Psono.
Потрібна версія Terraform 1.11 або новіша. Додайте провайдер у файл конфігурації Terraform:
terraform {
required_version = ">= 1.11.0"
required_providers {
psono = {
source = "psono/psono"
version = "~> 1.0"
}
}
}
provider "psono" {}
Налаштуйте доступ через змінні середовища, а не зберігайте їх у файлах Terraform:
export PSONO_SERVER_URL='https://psono.example.com/server'
export PSONO_API_KEY_ID='REPLACE_WITH_API_KEY_ID'
export PSONO_API_SECRET_KEY='REPLACE_WITH_API_SECRET_KEY'
Далі ініціалізуйте робочий каталог:
terraform init
Terraform завантажить підписаний реліз провайдера і перевірить контрольну суму підпису.
Наступний ресурс керує DB_PASSWORD у вже існуючому записі Psono Environment Variables:
resource "psono_environment_variable" "database_password" {
secret_id = var.psono_environment_variables_secret_id
name = "DB_PASSWORD"
length = 32
min_lower = 4
min_upper = 4
min_numeric = 4
min_special = 4
rotation_version = 1
}
Якщо ключ вже існує, провайдер підхоплює його без зміни значення. Якщо не існує — генерує і зберігає нове значення в Psono. Згенероване значення не повертається керованим ресурсом і не потрапляє у стан Terraform.
Змінюйте rotation_version, якщо потрібно згенерувати нове значення. Це також замінює значення, які були імпортовані або підхоплені, тож такі ротації слід переглядати перед застосуванням.
Ефемерне значення з іншого провайдера можна записати у Psono за допомогою value_wo:
ephemeral "random_password" "database" {
length = 32
}
resource "psono_environment_variable" "database_password" {
secret_id = var.psono_environment_variables_secret_id
name = "DB_PASSWORD"
value_wo = ephemeral.random_password.database.result
value_wo_version = 1
}
Значення доступне тільки під час виконання Terraform, але не зберігається у плані або стані. Збільшуйте value_wo_version, якщо потрібно записати нове значення.
При знищенні керованого ресурсу ключ у Psono за замовчуванням зберігається. Це захищає значення, які були підхоплені Terraform, але не створені ним. Встановіть deletion_policy = "Delete" тільки якщо дійсно потрібно видаляти ключ із Psono під час знищення чи заміни ресурсу.
Провайдер є відкритим ПЗ та вже доступний:
Бета-версія спеціально зосереджена на entries типу Environment Variables та обмежених API-ключах. Це обмежує рівень дозволів, уникає безконтрольного доступу до сховища і забезпечує надійну та практичну основу для безпечного управління операційними секретами з Terraform.