Kubernetes Secret リソースのテンプレート化
値を漏えいさせずに Secret オブジェクトをレンダリングします。
「Kubernetes Secret リソースのテンプレート化」はCoddyKit上の無料Helm Academyレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはHelm Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Helm Academyコースには全4レッスンが含まれています。
チャートで Secret を生成できる
チャート自体に Kubernetes Secret オブジェクトを生成させなければならない場合もあります。慎重に扱えば、値を漏えいさせずにテンプレート化できます。
Secret マニフェストの形
Kubernetes の Secret は、data セクションを持つマニフェストにすぎません。data の各値は Base64 でエンコードされたテキストである必要があります。
apiVersion: v1
kind: Secret
metadata:
name: db-credentialsb64enc で data をエンコードする
data の各値をエンコードします。Sprig のヘルパー b64enc が平文の文字列を、Kubernetes が要求する Base64 形式に変換します。
data:
password: {{ .Values.password | b64enc }}stringData でエンコードを省略する
手動で b64enc を使いたくない場合は、stringData を優先します。Kubernetes がサーバー側で値をエンコードしてくれます。
stringData:
password: {{ .Values.password | quote }}エンコードしてもシークレットにはならない
マニフェストに出力された値は、単にエンコードされているだけだということを忘れないでください。読み取れる人なら、すぐにデコードできます。
NOTES に出力しない
よくある漏えいの1つは、値を NOTES.txt に出力することです。代わりに取得方法を表示し、平文がコマンド出力に現れないようにします。
既存の Secret を再利用する
さらによい方法は、ユーザーが別途作成した existingSecret を指定できるようにすることです。これならチャートは値を受け取る必要がありません。
{{- if not .Values.existingSecret }}
kind: Secret
{{- end }}必須の値には require を使う
シークレットが本当に必要な場合は、値が不足しているときに required 関数が明確なメッセージを表示してレンダリングを停止します。
password: {{ required "password is required" .Values.password | b64enc }}インライン化せずにマウントする
Pod には、リテラル値をコンテナの env に埋め込むのではなく、secretKeyRef またはマウントしたボリュームを通じて Secret を読み取らせます。
valueFrom:
secretKeyRef:
name: db-credentials
key: passwordローテーション用にアノテーションを付ける
Secret の変更時に Pod を入れ替えるには、Deployment にチェックサムのアノテーションを追加し、新しい値で再起動が発生するようにします。
checksum/secret: {{ include (print $.Template.BasePath "/secret.yaml") . | sha256sum }}戦略を組み合わせる
優れたチャートでは、複数の考え方を組み合わせます。既存または外部のシークレットを優先し、必要な場合だけエンコードし、値を決して出力しません。
確認問題
Kubernetes に Base64 エンコードを任せるには、どうすればよいですか?
まとめ
Secret を安全にテンプレート化する方法を学びました。b64enc または stringData でエンコードし、既存のシークレットを優先し、値を決して出力しません。🎉
よくある質問
「Kubernetes Secret リソースのテンプレート化」レッスンは無料ですか?
はい。「Kubernetes Secret リソースのテンプレート化」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Helm Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Helm Academyコースには全4レッスンが含まれています。
「Kubernetes Secret リソースのテンプレート化」で何を学びますか?
値を漏えいさせずに Secret オブジェクトをレンダリングします。 ブラウザで直接実行するハンズオンコードでHelm Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Helm Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのHelm Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。
「Kubernetes Secret リソースのテンプレート化」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このHelm Academyレッスンでコードを書いて実行できますか?
はい。すべてのHelm Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- Secrets を values.yaml に置くべきではない理由
- helm-secrets と SOPS による値の暗号化
- External Secrets Operator からシークレットを取得する
- Kubernetes Secret リソースのテンプレート化