Japan Container Days v18.04 で表題のセッションを聞いたので、まとめました。
スライド資料
Kubernetesのセキュリティのベストプラクティス(SpeakerDeck)
APIサーバへの攻撃を防ぐ
RBACでPodに付与される権限を絞る
Podにはシークレットが自動でマウントされるため、不正アクセスにより読み込まれてしまうと危ない
FirewallでAPIサーバへのアクセスについてIP制限を付与する
いざ、シークレットが漏れた場合でも、APIサーバにアクセスされてしまわないように、ファイアウォールでIP制限をかけておくと良い
NetworkPolicyでDBへの接続が許可されるPodを制限する
大体の場合、重要なデータはDBに有るため、DBへのアクセスを絞ることで安全性を上げる
example:
|
|
ホストへの攻撃を防ぐ
次の三つを併用すると良い
non-rootユーザでPodを実行する
example:
|
|
読み込み専用ファイルシステムを使用する
example:
|
|
no_new_privs
forkしたプロセスが強い権限を持てないようにする
example:
|
|
seccomp/AppArmor/SELinux
コンテナ自体若干のセキュリティ性能はあるが、ほぼないので、seccompとAppArmor/SELinuxを使用することで、壁を増やす
seccomp
seccomp: Linuxでプロセスのシステムコールの発行を制限する機能
dockerではseccompはデフォルトになってが、kubernetesではまだデフォルトになっていないため、dockerのポリシーを流用する
まだアルファだが、使った方が良い
example:
|
|
AppArmor
AppArmor: Linux Security Modulesの一つで、ネットワークアクセス、Raw socket アクセス、ファイルへの読み書き実行などの機能を制限する機能
example:
|
|
SELinux
example:
|
|
kubeletの権限を制限する
- RBACを設定する
--authorization-mode=RBAC,Node
--admission-control=...,NodeRestriction
- kubeletの証明書をローテートする
--rotate-certificates
トラフィックの傍受を防ぐ
- Istioを導入する
- サービス間のプロキシ
- 暗号化
- 証明書の自動更新
- ポリシーの中央管理