etcd の TLS 証明書ファイル設定が不完全

etcd の証明書と対応する秘密キーを用意し、実際の HTTPS 接続を確認してください。

説明

etcd で管理する TLS サーバー証明書を使用するには、--cert-file と --key-file を併せて設定する必要があります。証明書に対応する秘密キーがないと、TLS の構成に失敗する可能性があります。

etcd はクラスターの重要なデータを扱うため、証明書とキーの一致、ファイル権限、更新を管理する必要があります。ファイルの指定だけでなく、実際の接続先が HTTPS を使用することも確認してください。

想定される影響

証明書・キーの設定不備により、サーバーの起動やクライアント接続が失敗する可能性があります。その回避のために暗号化されていない接続を使うと、通信経路でデータが漏えいするおそれがあります。

対処方法

  • --cert-file と --key-file に、対応するサーバー証明書と秘密キーを指定してください。
  • 実際のパスにファイルをマウントし、秘密キーの読み取り権限を制限して、HTTPS の待受・接続アドレスを構成してください。
  • クライアントの CA 検証と必要なクライアント認証を別途設定し、証明書の更新と実際の接続を確認してください。

例

過去の etcd バージョンで証明書とキーの引数を比較する抜粋です。実際のデプロイには、サポート対象バージョンや HTTPS アドレスなどの設定も必要で、例のパスは実際の値に置き換える必要があります。

変更前

yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: app-etcd-deployment
spec:
  template:
    spec:
      containers:
        - name: database
          image: gcr.io/google_containers/etcd:v3.2.18
          command: ["etcd"]
          args: ["--cert-file=/etc/env/file.crt"]

サーバー証明書だけを指定して対応する秘密キーを指定していないため、手動の TLS 設定は不完全です。

変更後

yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: app-etcd-deployment
spec:
  template:
    spec:
      containers:
        - name: database
          image: gcr.io/google_containers/etcd:v3.2.18
          command: ["etcd"]
          args: ["--cert-file=/etc/env/file.crt", "--key-file=/etc/env/file2.key"]

サーバー証明書とキーを併せて指定しています。ファイルの一致、権限、HTTPS アドレスを確認する必要があり、パスの指定だけで通信保護が完了するわけではありません。

参考資料