हमें यह घोषणा करते हुए खुशी हो रही है कि Psono Terraform Provider का बीटा रिलीज अब सार्वजनिक Terraform रजिस्ट्री में उपलब्ध है।
अब इंफ्रास्ट्रक्चर टीमें अपने Terraform वर्कफ़्लो के हिस्से के रूप में, पहले से बनाए गए Psono Environment Variables इंट्रीज़ के भीतर व्यक्तिगत कीज़ का प्रबंधन कर सकती हैं। यह provider मौजूदा मानों को संरक्षित कर सकता है, नए पासवर्ड जेनरेट कर सकता है, मैनेज्ड मानों को रोटेट कर सकता है, बाहरी स्रोत से प्राप्त मान लिख सकता है, और Terraform के ephemeral संसाधनों के माध्यम से secrets पढ़ सकता है।
इन्फ्रास्ट्रक्चर ऐज़ कोड में सीक्रेट्स का प्रबंधन विशेष सावधानी की मांग करता है। sensitive फ्लैग किसी मान को सामान्य CLI आउटपुट से छुपा सकता है, लेकिन यह उसे Terraform की state से बाहर नहीं रखता। Psono provider, Terraform की write-only और ephemeral क्षमताओं का उपयोग करता है और इस समस्या से बचने के लिए Terraform 1.11 या नए वर्शन की आवश्यकता होती है।
यह provider तीन सामान्य वर्कफ़्लो सपोर्ट करता है:
इससे यह संभव हो जाता है कि आप Terraform के भीतर सीक्रेट्स का जीवनचक्र संचालित करें, जबकि असली मान Psono में ही बने रहें।
यह provider एक प्रतिबंधित Psono API की का उपयोग करता है। आप केवल वे Environment Variables इंट्रीज़ असाइन करते हैं जिनकी Terraform को आवश्यकता है और सभी ऑपरेशनों के लिए read अनुमति प्रदान करते हैं। कीज़ बनाना, अपडेट/रोटेट या डिलीट करने के लिए अतिरिक्त रूप से write अधिकार चाहिए। Provider को unrestricted API की की आवश्यकता नहीं है और यह वॉल्ट इंट्रीज़, फोल्डर्स, या डाटा स्टोर्स नहीं बना सकता।
एन्क्रिप्शन और डीक्रिप्शन provider के भीतर लोकली होते हैं। HTTPS सर्टिफिकेट सत्यापन को अक्षम नहीं किया जा सकता, और निजी सर्टिफिकेट अथॉरिटीज को PEM सीए बंडल के माध्यम से जोड़ा जा सकता है। प्रोडक्शन सिस्टम्स को हमेशा HTTPS Psono यूआरएल का ही उपयोग करना चाहिए।
Terraform 1.11 या नया संस्करण आवश्यक है। अपनी Terraform कॉन्फ़िगरेशन में provider जोड़ें:
terraform {
required_version = ">= 1.11.0"
required_providers {
psono = {
source = "psono/psono"
version = "~> 1.0"
}
}
}
provider "psono" {}
Terraform फ़ाइलों में क्रेडेंशियल्स रखने के बजाय environment variables के माध्यम से credentials कॉन्फ़िगर करें:
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, signed provider release डाउनलोड करता है और उसकी checksum signature सत्यापित करता है।
निम्नलिखित resource किसी मौजूदा Psono Environment Variables entry में DB_PASSWORD को मैनेज करता है:
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
}
अगर key पहले से उपस्थित है, तो provider बिना उसका मान बदले उसे अपना लेता है। अगर वह मौजूद नहीं है, provider Psono में एक नया मान जेनरेट और स्टोर करता है। यह generated value मैनेज्ड रिसोर्स द्वारा वापस नहीं दी जाती और न ही Terraform state में आती है।
जब आपको Terraform से कोई नया रिप्लेसमेंट जनरेट कराना हो, तो rotation_version बढ़ाएं।
यह उन मानों को भी बदल देता है जो प्रारंभ में अपनाए गए या इंपोर्ट किए गए थे, अतः रोटेशन करते समय बदलाव लागू करने से पहले समीक्षा जरुरी है।
किसी अन्य provider से प्राप्त ephemeral मान को आप value_wo के जरिए Psono में लिख सकते हैं:
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 ऑपरेशन के दौरान उपलब्ध रहता है, लेकिन न तो plan में और न ही state में सहेजा जाता है।
जैसे ही आपको कोई नया मान लिखना हो, value_wo_version बढ़ाएं।
किसी मैनेज्ड रिसोर्स को नष्ट करने पर उसका Psono key डिफ़ॉल्ट रूप से बना रहता है।
यह उनकी सुरक्षा करता है जिन्हें Terraform ने adopt किया था, मगर बनाया नहीं था। सिर्फ तभी deletion_policy = "Delete" सेट करें
जब आप चाहें कि Terraform destroy या resource replacement के दौरान key को Psono से हटाए।
यह provider ओपन सोर्स है और अभी डाउनलोड के लिए उपलब्ध है:
बीटा रिलीज़ ने जानबूझकर Environment Variables entries और restricted API कीज़ पर ध्यान केंद्रित किया है। इससे अनुमति सीमित रहती है, unrestricted vault एक्सेस से बचाव होता है, और Terraform से ऑपरेशनल secrets को सुरक्षित तरीके से प्रबंधित करने की एक ठोस आधारशिला मिलती है।