kubelet の 「--authorization-mode 」 オプションに関して
Kubernetes の各ノードで稼働する kubelet は、Pod やノードリソースの管理を担う重要なコンポーネントです。その中でも、--authorization-mode オプションは、kubelet がリソース操作リクエストを認可(authorization)する際にどのようなルールを適用するかを制御します。
この記事では、--authorization-mode の基本から、本番環境でのベストプラクティスまでわかりやすく解説します。
--authorization-mode とは?
--authorization-mode は、kubelet に対して「リクエストを許可するか拒否するか」をどのように決定するかを設定するオプションです。この設定により、セキュリティポリシーを柔軟にコントロールできます。
利用可能なモード
--authorization-mode で指定できるモードは次の通りです。それぞれの特徴や使用シーンを見ていきましょう。
1. AlwaysAllow
特徴: すべてのリクエストを無条件で許可。
利用シーン: テスト環境やセキュリティを気にしない場合。
注意点: 誰でもリソースを操作可能になるため、本番環境では非推奨です。
2. AlwaysDeny
特徴: すべてのリクエストを拒否。
利用シーン: 特殊なテストや一時的にリソース操作をブロックしたい場合。
注意点: 実運用には適しません。
3. Webhook
特徴: 外部の認可サービス(Webhook サーバー)を利用して、リクエストを許可または拒否。
利用シーン: 高度な認可ポリシーを適用したい場合。
ポイント: Webhook サーバーの設定ファイルでエンドポイントやタイムアウトを指定できます。
4. Node
特徴: ノード固有のリクエストのみ許可(例: 自ノード上の Pod や Secret へのアクセス)。
利用シーン: 本番環境で最も推奨されるモード。
ポイント: Kubernetes が自動的に許可すべきリクエストを判別します。
本番環境でのベストプラクティス
本番環境では、セキュリティと柔軟性を両立するために、以下のようにモードを組み合わせて使用するのが一般的です。
推奨設定例
kubelet --authorization-mode=Node,Webhook
Node: ノードに関連する操作を安全に許可。
Webhook: 外部サービスでカスタム認可ポリシーを適用。
設定の具体例
例えば、Webhook を利用する場合は以下のような設定ファイルを準備します。
webhook-config.yaml
kind: Config
apiVersion: v1
clusters:
- name: example-authz
cluster:
server: https://authz.example.com/authorize
certificate-authority: /path/to/ca.crt
users:
- name: webhook-user
user:
client-certificate: /path/to/client.crt
client-key: /path/to/client.key
contexts:
- context:
cluster: example-authz
user: webhook-user
name: webhook-context
current-context: webhook-context
kubelet 起動時に、この設定を読み込むように指定します。
kubelet --authorization-mode=Webhook --authorization-webhook-config-file=/path/to/webhook-config.yaml
モードを例えで理解しよう
それぞれのモードを「ドアマン」に例えると、以下のように理解できます。
AlwaysAllow: 誰でも自由に通れるフリーパス状態。
AlwaysDeny: 誰も通さない閉鎖状態。
Webhook: 他の管理者(外部サービス)に相談して入室可否を決定。
Node: 自分の部屋(ノード)に関する訪問者だけを通す厳格なセキュリティ。
まとめ
--authorization-mode は、kubelet のセキュリティ設定を左右する重要なオプションです。本番環境では、Node と Webhook の組み合わせを採用することで、安全かつ柔軟な認可を実現できます。
Kubernetes のセキュリティ設定は難しく見えるかもしれませんが、適切なモードを選ぶことで簡単に強化できます。ぜひこの記事を参考に、あなたのクラスタに最適な設定を見つけてください!
これで、kubelet の認可設定もバッチリかな! 😊