環境変数としてのSecretを持つPod
マニフェストにハードコードする代わりに、Kubernetes Secretsから機密値(データベースパスワード、APIキー)を環境変数として注入するようにKubernetesポッドを設定します。
Security
詳細な説明
Kubernetes Secretsの使用
DeploymentマニフェストにパスワードやAPIキーをハードコーディングすることはセキュリティリスクです。Kubernetes Secretsは機密データを別々に保存し、環境変数またはマウントファイルとしてポッドに注入する方法を提供します。
主要な設定
apiVersion: apps/v1
kind: Deployment
metadata:
name: api-server
labels:
app: "api-server"
spec:
replicas: 2
template:
spec:
containers:
- name: api
image: my-api:latest
ports:
- name: http
containerPort: 8080
volumeMounts:
- name: secrets
mountPath: /etc/secrets
readOnly: true
volumes:
- name: secrets
secret:
secretName: api-credentials
環境変数 vs ボリュームマウント
| 方法 | 利点 | 欠点 |
|---|---|---|
| 環境変数 | シンプル、フレームワークネイティブ | pod describeで表示可能、自動更新なし |
| ボリュームマウント | 自動更新、複数ファイル | アプリでファイル読み取りが必要 |
セキュリティベストプラクティス
- RBAC:Role/ClusterRoleバインディングでSecretsの読み取りを制限
- 保存時暗号化:クラスタでetcd暗号化を有効化
- 外部シークレット:本番環境ではExternal Secrets Operator、Vault、Sealed Secretsなどのツールを検討
- ログにシークレットを含めない:起動時にアプリケーションが環境変数をログに記録しないことを確認
- ローテーション:ボリュームマウントされたシークレットはSecret更新時に自動更新。環境変数はポッドの再起動が必要
ユースケース
デプロイメントマニフェストやコンテナイメージにハードコードせず、データベース資格情報、APIキー、その他の機密設定をKubernetesポッドに安全に注入する。