Мы рады сообщить, что бета-версия провайдера Psono для Terraform теперь доступна в публичном Terraform Registry.
Теперь инфраструктурные команды могут управлять отдельными ключами внутри заранее созданных записей переменных окружения Psono в рамках своего рабочего процесса Terraform. Провайдер может сохранять существующие значения, генерировать новые пароли, вращать управляемые значения, записывать внешне предоставленные значения и читать секреты с помощью эфемерных ресурсов Terraform.
Работа с секретами в подходе "инфраструктура как код" требует особого внимания. Флаг sensitive может скрыть значение из обычного вывода CLI, но это не гарантирует, что значение не попадёт в состояние Terraform. Провайдер Psono использует возможности записи только для чтения и эфемерные возможности Terraform, чтобы избежать этой проблемы, и требует Terraform версии 1.11 или новее.
Провайдер поддерживает три распространённых рабочих процесса:
Это позволяет включать операции управления жизненным циклом секретов в Terraform, храня реальные значения только в Psono.
Провайдер использует ограниченный API-ключ Psono. Вы назначаете только те записи переменных окружения, которые нужны Terraform, и даёте разрешение на чтение для всех операций. Для создания, обновления, ротации или удаления ключей дополнительно требуется разрешение запись. Провайдеру не нужен неограниченный API-ключ, и он не может создавать записи в хранилище, папки или хранилища данных.
Шифрование и дешифрование происходят локально в провайдере. Проверку сертификатов HTTPS отключить невозможно, а собственные центры сертификации могут быть добавлены через PEM CA bundle. В производственных системах всегда используйте HTTPS-URL 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='ЗАМЕНИТЕ_НА_API_KEY_ID'
export PSONO_API_SECRET_KEY='ЗАМЕНИТЕ_НА_API_SECRET_KEY'
Затем инициализируйте рабочую директорию:
terraform init
Terraform скачает подписанный релиз провайдера и проверит подпись его контрольной суммы.
Следующий ресурс управляет DB_PASSWORD в существующей записи переменных окружения Psono:
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, когда Terraform должен сгенерировать новое значение. Это также заменит значения,
которые были изначально импортированы или взяты под управление, поэтому изменения ротации следует тщательно проверять перед их применением.
Эфемерное значение из другого провайдера можно записать в 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,
когда Terraform должен записать новое значение.
При уничтожении управляемого ресурса его ключ в Psono по умолчанию сохраняется. Это защищает значения, которые Terraform взял под управление, но не создавал.
Установите deletion_policy = "Delete" только если Terraform должен явно удалять ключ из Psono при удалении или
замене ресурса.
Провайдер является open source и доступен уже сейчас:
Бета-версия специально сфокусирована на записях переменных окружения и ограниченных API-ключах. Это сужает права, избегает неограниченного доступа к хранилищу и обеспечивает безопасную основу для управления операционными секретами из Terraform.