環境変数としての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ポッドに安全に注入する。

試してみる — K8s Pod Spec Builder

フルツールを開く