Infrastructure
कॉन्फ़िग में शून्य रहस्य।
लॉग्स में शून्य रहस्य।
हर प्लेटफ़ॉर्म, हर ऑर्केस्ट्रेटर, हर CI रनर। प्रॉक्सी किसी भी चीज़ के साथ काम करता है जो HTTP कॉल करती है। CLI किसी भी चीज़ के साथ काम करता है जो शेल आउट कर सकती है। यदि आपका सिस्टम आपके करियर से भी पुराना है, तो भी यह काम करेगा।
प्रॉक्सी एक सार्वभौमिक एकीकरण है।
यदि आपका वर्कलोड HTTPS कॉल करता है, तो Clavitor प्रॉक्सी नेटवर्क लेयर पर क्रेडेंशियल्स इंजेक्ट करता है। कोई कोड बदलाव नहीं। कोई SDK नहीं। एनवायरनमेंट वेरिएबल्स, कॉन्फ़िग फ़ाइलों या लॉग्स में कोई रहस्य नहीं। HTTPS_PROXY सेट करें और आपका मौजूदा कोड बिना बदले काम करता रहता है — प्रॉक्सी अनुरोध मशीन छोड़ने से पहले अनुरोध हेडर्स में clavitor:// संदर्भों को सुलझाता है।
$ export HTTPS_PROXY=http://localhost:1983 $ curl -H "Authorization: Bearer clavitor://Stripe API/key" \ https://api.stripe.com/v1/charges # एजेंट sk_live_... को कभी नहीं देखता — लॉग्स में केवल clavitor:// दिखाई देता है
कंटेनर्स
Docker और Kubernetes
Docker Compose
होस्ट पर Clavitor प्रॉक्सी चलाएं और अपने कंटेनर्स को इसकी ओर इंगित करें। क्रेडेंशियल्स आउटबाउंड अनुरोधों में पारदर्शी रूप से इंजेक्ट किए जाते हैं — एनवायरनमेंट वेरिएबल्स में कोई रहस्य नहीं, इमेज में बेक्ड कोई रहस्य नहीं।
# Docker होस्ट पर $ clavitor-proxy serve &
# docker-compose.yml — कंटेनर्स होस्ट-मोड प्रॉक्सी के माध्यम से रूट करते हैं
services:
app:
environment:
- HTTPS_PROXY=http://host.docker.internal:1983
extra_hosts:
- "host.docker.internal:host-gateway"या स्टार्टअप पर कॉन्फ़िग टेम्पलेट सुलझाने के लिए render का उपयोग करें:
$ clavitor-cli render app.config.template.yml | docker compose -f - up
Kubernetes
मेनिफेस्ट में मूल्यों को हार्डकोड किए बिना Vault से सीक्रेट्स बनाएं:
$ kubectl create secret generic app-secrets \ --from-literal=db-pass="$(clavitor-cli get 'Production DB' --field password)" \ --from-literal=api-key="$(clavitor-cli get 'Stripe API' --field key)"
रनटाइम क्रेडेंशियल इंजेक्शन के लिए, प्रॉक्सी को अपने पॉड में एक साइडकार कंटेनर के रूप में तैनात करें। एप्लिकेशन कंटेनर्स HTTPS_PROXY को साइडकार की ओर सेट करते हैं। क्रेडेंशियल्स प्रति-अनुरोध सुलझाए जाते हैं, कभी etcd में संग्रहीत नहीं किए जाते।
IaC
Terraform, Ansible, Pulumi
Terraform
terraform apply से पहले प्रोवाइडर एनवायरनमेंट में क्रेडेंशियल्स सुलझाएं। AWS प्रोवाइडर मानक एनवायरनमेंट वेरिएबल्स से अपने क्रेडेंशियल्स पढ़ता है — Clavitor उन्हें इनलाइन भरता है, .tf फ़ाइल में कोई रहस्य का उल्लेख नहीं है।
$ export AWS_ACCESS_KEY_ID=$(clavitor-cli get "AWS Root" --field access_key_id) $ export AWS_SECRET_ACCESS_KEY=$(clavitor-cli get "AWS Root" --field secret_key) $ terraform apply
provider "aws" {} ब्लॉक आपके कोड में खाली रहता है। वही पैटर्न किसी भी Terraform प्रोवाइडर के लिए काम करता है जो env-var क्रेडेंशियल्स का समर्थन करता है (जो अधिकांश हैं)।
Ansible
- name: डेटाबेस पासवर्ड प्राप्त करें
command: clavitor-cli get "Production DB" --field password
register: db_pass
no_log: true
- name: ऐप कॉन्फ़िगर करें
template:
src: app.conf.j2
vars:
db_password: "{{ db_pass.stdout }}"Pulumi
import { execSync } from 'child_process';
const dbPass = execSync('clavitor-cli get "Production DB" --field password').toString().trim();
new aws.rds.Instance("db", { masterPassword: new pulumi.secret(dbPass) });CI/CD
GitHub Actions, GitLab CI, Jenkins
नीचे दिए गए हर उदाहरण में टोकन stdin पर पाइप किया जाता है — इसे argv से बाहर रखता है ताकि यह /proc/<pid>/cmdline या बिल्ड लॉग्स में दिखाई न दे।
GitHub Actions
- name: Deploy
env:
CLAVITOR_TOKEN: ${{ secrets.CLAVITOR_TOKEN }}
run: |
echo "$CLAVITOR_TOKEN" | clavitor-cli init
kubectl create secret generic app-secrets \
--from-literal=api-key="$(clavitor-cli get 'Deploy Token' --field key)" \
--dry-run=client -o yaml | kubectl apply -f -GitLab CI
deploy:
script:
- echo "$CLAVITOR_TOKEN" | clavitor-cli init
- clavitor-cli get "Deploy Key" --field private_key | ssh-add -
- ssh deploy@production "systemctl restart app"Jenkins
pipeline {
stages {
stage('Deploy') {
steps {
sh 'echo "$CLAVITOR_TOKEN" | clavitor-cli init'
sh 'clavitor-cli get "Deploy Key" --field private_key | ssh-add -'
sh 'ssh deploy@production "systemctl restart app"'
}
}
}
}SSH
Vault में संग्रहीत कुंजियाँ
$ clavitor-cli get "Deploy Key" --field private_key | ssh-add - $ ssh deploy@production
प्राइवेट कुन्नी सीधे ssh-add में पाइप की जाती है। यह कभी डिस्क को नहीं छूती, कभी शेल इतिहास में नहीं दिखती, और सत्र समाप्त होने पर एजेंट से साफ हो जाती है।
पुराने सिस्टम्स
यदि यह HTTP कॉल करता है, तो यह काम करता है।
प्रॉक्सी की परवाह नहीं है कि अनुरोध किस भाषा ने किया। COBOL, FORTRAN, Perl, Visual Basic, 30 साल पुरानी बैच जॉब — यदि प्रोसेस HTTPS अनुरोध करता है, तो प्रॉक्सी इसका अवरोध करता है, clavitor:// संदर्भ को सुलझाता है, और वास्तविक क्रेडेंशियल इंजेक्ट करता है। कोई कोड बदलाव आवश्यक नहीं।
उन सिस्टम्स के लिए जो HTTP कॉल नहीं कर सकते, प्रोसेस शुरू होने से पहले कॉन्फ़िग टेम्पलेट सुलझाने के लिए clavitor-cli render का उपयोग करें। टेम्पलेट कहीं भी संग्रहीत करने के लिए सुरक्षित है। सुलझा हुआ आउटपुट stdin या प्रतिबंधित अनुमतियों वाली एक अस्थायी फ़ाइल में जाता है।
# बैच जॉब शुरू होने से पहले क्रेडेंशियल्स सुलझाएं $ clavitor-cli render db-connect.template.cfg > /tmp/db-connect.cfg $ chmod 600 /tmp/db-connect.cfg $ /opt/legacy/batch-job --config /tmp/db-connect.cfg $ rm /tmp/db-connect.cfg
पैटर्न हमेशा एक जैसा होता है।
स्क्रिप्ट और पाइपलाइन के लिए CLI। HTTP वर्कलोड के लिए प्रॉक्सी। कॉन्फ़िग फ़ाइलों के लिए Render। हर रहस्य रनटाइम पर सुलझाया जाता है, कभी संग्रहीत नहीं किया जाता।