Kubernetes TLS 暗号スイート設定の確認

Kubernetes の使用バージョンとクライアントが対応する、安全な TLS 暗号スイートを使用してください。

説明

TLS を有効にしていても、安全でない暗号スイートを許可すると通信の保護が弱まるおそれがあります。サポート対象のバージョンで安全でないと分類される組み合わせを、API サーバーと kubelet の設定から除いてください。

一覧の省略時は実装の既定値が使われるため、省略自体が弱い暗号化を意味するわけではありません。この設定は TLS 1.3 の暗号スイートを制御しません。

想定される影響

  • 安全でない組み合わせが選ばれると、暗号化通信の保護が弱まる可能性があります。
  • 非対応の組み合わせだけを残すと、正常なクライアントが接続できなくなる可能性があります。

対処方法

  • 使用バージョンの推奨一覧に従い、AES-GCM や ChaCha20-Poly1305 など適切な暗号スイートを選んでください。
  • TLS の最低バージョン、証明書の種類、クライアント互換性を合わせて確認してください。
  • 変更後の TLS ネゴシエーションと正常接続を試験し、安全でない組み合わせが許可されないことを確認してください。

例

kubelet と過去の API サーバーの暗号スイート引数をそれぞれ示す抜粋です。同じプロセスの完全な置換例ではないため、実際のバージョン・証明書・実行イメージを適用してください。

変更前

yaml
apiVersion: v1
kind: Pod
metadata:
  name: command-demo
spec:
  containers:
    - name: command-demo-container
      image: foo/bar
      command: ["kubelet"]
      args:
        [
          "--tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256"
        ]

TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 を許可しています。現在の Kubernetes リファレンスは、この組み合わせを安全でない暗号スイートに分類しています。

変更後

yaml
apiVersion: v1
kind: Pod
metadata:
  name: command-demo
spec:
  containers:
    - name: command-demo-container
      image: gcr.io/google_containers/kube-apiserver-amd64:v1.6.0
      command: ["kube-apiserver"]
      args:
        [
          "--tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256"
        ]

AES-GCM の組み合わせを指定しています。使用バージョンとサーバー証明書・クライアントが対応することを確認してください。

参考資料