説明
etcd のピア通信は、メンバー間のデータ複製と合意形成に使用されます。信頼する証明書と対応する秘密鍵で接続を暗号化し、相手ノードの身元も検証する必要があります。
証明書とキーのパスだけでは相互 TLS の構成は完了しません。HTTPS のピア URL、信頼する CA、ピア証明書の検証を合わせて設定してください。
想定される影響
- 保護されていないピア通信経路を傍受されると、データを読み取られたり改ざんされたりするおそれがあります。
- 証明書・キーの誤りや期限切れによりピア接続が失敗し、クラスターの可用性に影響する可能性があります。
対処方法
- 証明書を手動設定する場合は、対応する証明書とキーを
--peer-cert-fileと--peer-key-fileに指定してください。秘密鍵へのアクセスを制限してください。 - ピアの待ち受け URL と通知する URL に HTTPS を使い、
--peer-trusted-ca-fileと--peer-client-cert-authで信頼するピア証明書を検証してください。 - 証明書の名前、有効期間、更新手順を確認し、変更後にピア接続とクラスターの状態を検証してください。クライアント接続の TLS は別途確認してください。
例
過去の etcd 3.2.18 コンテナー引数の抜粋です。Deployment 全体、ファイルのマウント、ピア URL は省略しています。新規デプロイではサポートされるバージョンを使用してください。
変更前
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:
- "--peer-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:
- "--peer-cert-file=/etc/env/file.crt"
- "--peer-key-file=/etc/env/file2.key"
ピア証明書とキーを両方指定します。相互認証されたピア通信には、HTTPS URL、信頼する CA、相手の証明書検証も必要です。