0Pricing
DevOps Bootcamp · レッスン

Kubernetes Secret リソースのテンプレート化

値を漏えいさせずに Secret オブジェクトをレンダリングします。

「Kubernetes Secret リソースのテンプレート化」はCoddyKit上の無料DevOps Bootcampレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはDevOps Bootcamp学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 DevOps Bootcampコースには全4レッスンが含まれています。

チャートで Secret を生成できる

チャート自体に Kubernetes Secret オブジェクトを生成させなければならない場合もあります。慎重に扱えば、値を漏えいさせずにテンプレート化できます。

Secret マニフェストの形

Kubernetes の Secret は、data セクションを持つマニフェストにすぎません。data の各値は Base64 でエンコードされたテキストである必要があります。

apiVersion: v1
kind: Secret
metadata:
  name: db-credentials

b64enc で 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チューター)、DevOps Bootcampコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 DevOps Bootcampコースには全4レッスンが含まれています。

「Kubernetes Secret リソースのテンプレート化」で何を学びますか?

値を漏えいさせずに Secret オブジェクトをレンダリングします。 ブラウザで直接実行するハンズオンコードでDevOps Bootcampを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

DevOps Bootcampを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのDevOps Bootcampは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。

「Kubernetes Secret リソースのテンプレート化」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このDevOps Bootcampレッスンでコードを書いて実行できますか?

はい。すべてのDevOps Bootcampレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. Secrets を values.yaml に置くべきではない理由
  2. helm-secrets と SOPS による値の暗号化
  3. External Secrets Operator からシークレットを取得する
  4. Kubernetes Secret リソースのテンプレート化
← DevOps Bootcampに戻る