機密データのためのSecrets
Secretsを使って、パスワードやAPIキーなどの機密情報を安全に保存・管理します。
「機密データのためのSecrets」はCoddyKit上の無料DevOps Bootcampレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはDevOps Bootcamp学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 DevOps Bootcampコースには全4レッスンが含まれています。
機密情報の保護
アプリケーションを構築する際は、データベースのパスワード、APIキー、プライベート証明書などの機密情報を扱うことがよくあります。
これらをアプリケーションのコードや設定ファイルに直接保存するのは、大きなセキュリティリスクです。データ漏洩につながり、システムが危険にさらされる可能性があります。
Kubernetes Secretsの概要
Kubernetes Secretsは、クラスター内で機密データを安全に保存するために設計されたオブジェクトです。
機密情報をPodの定義やアプリケーションコードから分離できるため、デプロイの安全性と管理性が向上します。
- 分離: 機密データをコンテナーイメージやPodのYAMLから除外できます。
- 利用可能: Podは、環境変数またはマウントしたファイルとしてSecretを利用できます。
SecretsとConfigMapsの違い
以前のレッスンで、機密性のない設定データに使うConfigMapsについて学んだかもしれません。
Secretsも似ていますが、機密データ専用です。どちらもキーと値のペアを保存しますが、Secretsはデータが機密であることを考慮して扱います。
- ConfigMaps: 一般的で機密性のない設定(例: ログレベル、APIエンドポイント)に使用します。
- Secrets: 機密データ(例: パスワード、トークン、秘密鍵)に使用します。
Secretsは暗号化されるのではなく、デフォルトではbase64エンコードされるだけであることに注意してください。
リテラルからSecretを作成する
Secretを作成する最も簡単な方法は、リテラル値からkubectl create secret genericを使って作成することです。
単純なパスワードのような、短い機密データを1つだけ扱う場合に便利です。
kubectl create secret generic my-db-secret \
--from-literal=username=admin \
--from-literal=password=SuperSecretP@ssw0rd!ファイルからSecretを作成する
プライベートキーや完全な設定ファイルなど、サイズの大きい機密データや複数行の機密データには、ファイルからSecretを作成する方法が適しています。
まずローカルでファイルを作成し、それらを参照します。Kubernetesがファイルの内容を読み取り、保存します。
# Create local files first
echo "my-api-key-12345" > api-key.txt
echo "my-token-abcde" > auth-token.txt
# Create the Secret
kubectl create secret generic app-credentials \
--from-file=api-key.txt \
--from-file=auth-token.txtSecretを環境変数として使用する
Podでは、Secretのデータを環境変数に直接注入して利用できます。単純なキーと値のペアでよく使われる方法です。
Secretの個々のキーを参照することも、envFromを使ってすべてのキーを参照することもできます。
apiVersion: v1
kind: Pod
metadata:
name: my-app-pod-env
spec:
containers:
- name: my-app
image: nginx:latest
env:
- name: DB_USERNAME
valueFrom:
secretKeyRef:
name: my-db-secret
key: username
- name: DB_PASSWORD
valueFrom:
secretKeyRef:
name: my-db-secret
key: passwordSecretをマウントしたファイルとして使用する
証明書やプライベートキーなどの機密ファイルを扱う場合や、アプリケーションが特定のファイルパスから設定を読み込む場合は、SecretをPod内にファイルとしてマウントできます。
Secret内の各キーがマウント先ディレクトリ内のファイルになり、その値がファイルの内容になります。
apiVersion: v1
kind: Pod
metadata:
name: my-app-pod-vol
spec:
containers:
- name: my-app
image: nginx:latest
volumeMounts:
- name: app-secret-volume
mountPath: "/etc/secrets"
readOnly: true
volumes:
- name: app-secret-volume
secret:
secretName: app-credentialsSecretのセキュリティ
Secretsはデータを不用意に見られることから守りますが、万能ではありません。次の点を覚えておいてください。
- Base64エンコード: Secretsは暗号化されず、base64エンコードされるだけです。Secretにアクセスできる人は誰でもデコードできます。
- RBAC: Role-Based Access Control(RBAC)を使って、Secretsの読み取り、作成、変更ができるユーザーを制限してください。
- 保存時の暗号化: 本格的なセキュリティ対策として、etcd(Kubernetesのバックエンドストア)のデータに対する保存時の暗号化を有効にしてください。多くのクラウドプロバイダーがこの機能を提供しています。
Secretを更新する
機密データが変わった場合は、Secretを更新する必要があります。新しい値を指定してkubectl create secretを再実行するか、更新したYAMLに対してkubectl apply -fを使うだけで更新できます。
ただし、Secretを利用している実行中のPodが変更を自動的に反映することはありません。変更を適用するには、通常、そのSecretを使用するPodを再起動または再デプロイする必要があります。
クイックチェック: Secrets
アプリケーションからアクセスする必要があるプライベートAPIキーがあるとします。このキーをKubernetes Podに保存して提供する方法として、最も安全で適切なのはどれでしょうか。
まとめ: 機密データのためのSecrets
よくできました。Kubernetesで機密データを扱う方法を学びました。
- Secretsは、パスワードやAPIキーなどの機密情報を保存します。
- Secretはbase64エンコードされ、環境変数またはマウントしたファイルとして利用できます。
- 最大限のセキュリティを確保するため、常にRBACを適用し、保存時の暗号化を検討してください。
- Secretの更新を反映するには、Podを再起動する必要があります。
よくある質問
「機密データのためのSecrets」レッスンは無料ですか?
はい。「機密データのためのSecrets」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、DevOps Bootcampコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 DevOps Bootcampコースには全4レッスンが含まれています。
「機密データのためのSecrets」で何を学びますか?
Secretsを使って、パスワードやAPIキーなどの機密情報を安全に保存・管理します。 ブラウザで直接実行するハンズオンコードでDevOps Bootcampを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
DevOps Bootcampを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのDevOps Bootcampは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。
「機密データのためのSecrets」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このDevOps Bootcampレッスンでコードを書いて実行できますか?
はい。すべてのDevOps Bootcampレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- 設定のためのConfigMaps
- 機密データのためのSecrets
- Persistent VolumeとClaim
- StorageClassと動的プロビジョニング