説明
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 アドレスを確認する必要があり、パスの指定だけで通信保護が完了するわけではありません。