Kubernetes v1.22:知っておきたいセキュリティ機能 #aqua #コンテナ #セキュリティ #k8s
この記事は1年以上前に投稿されました。情報が古い可能性がありますので、ご注意ください。
本ブログは「Aqua Security」社の技術ブログで2021年8月5日に公開された「 Kubernetes Version 1.22: Security Features You Need to Know 」の日本語翻訳です。
Kubernetes v1.22:知っておきたいセキュリティ機能
先日新たに Kubernetes v1.22 がリリースされました。相変わらず、アルファリリースとして成熟プロセスを開始する新機能と、ベータまたは安定版に移行するその他の機能が混在していることは興味深いです。今回のリリースでは、セキュリティの観点からいくつかの注目すべき点があります。
PodSecurity admission controller
PodSecurityPolicy 機能が Kubernetes v1.21 で非推奨となった後、そのツリー内の代替機能が今回のリリースでアルファ機能として登場しました。現時点では本番環境での使用は推奨されていませんが、アルファ版として提供されることで、ユーザはこの機能がセキュリティ Admission Controll のニーズを満たすかどうかを試すことができます。この新機能の現在の設計は、置き換え対象の PSP 機能ほど複雑ではありませんが、同時に柔軟性もそれほど高くないため、複雑なポリシー要件には外部のオプションの方が適していることがあります。
非特権ポートのsysctlが「safe」とマークされる
コンテナを「root」ユーザで実行する主な理由の1つは、1024 以下のポートをバインドできるからです。このバージョンの Kubernetes からは、非特権ユーザがこれらの低いポートをバインドできるような Pod 設定が可能となり、アプリケーション開発者がコンテナに非 root ユーザアカウントを使用することが容易になりました。
v1.22 では、Podマニフェストの securityContext 内の sysctl を変更することで、非特権ユーザとして実行しているコンテナが低いポートをバインドできるようになるはずです。
securityContext:
sysctls:
- name: net.ipv4.ip_unprivileged_port_start
value: "1"
NetworkPolicyEndPortがベータ版へ移行
Kubernetes の NetworkPolicy で、ポート範囲を対象としてポリシー設定を定義できるこの機能は、拡張機能として存在していました。
v1.22 では、この機能はベータ版に移行し、デフォルトで有効になります。ただし、この機能を有効にするには、Container Network Interface(CNI)がこれをサポートしている必要があります。
デフォルトseccompプロファイル
v1.22 では、ノードごとにデフォルトの seccomp プロファイルのサポートを追加する機能がアルファ版として追加されました。これにより、Kubernetes でコンテナを実行する際に Docker のデフォルトの seccomp ポリシーが無効となっていたことが原因で、Kubernetes のデフォルトのセキュリティに長年存在していた弱点を解消できます。
seccomp は、Linux コンテナのセキュリティにおいて重要なレイヤーであり、Mark Manning 氏の keyctl-unmask 研究で示されたように、攻撃者が Linux カーネルのキーリングからシークレットデータにアクセスするような行為を阻止するのに役立ちます。seccomp フィルターを実行した標準的な Docker コンテナは、約 60 の特定のシステムコールをブロックします。
rootlessコンテナのサポート
v1.22 でアルファ版として導入されるもう1つの機能は、kubelet およびその他のノードコンポーネントが、ユーザネームスペースのクラスタノード上で実行されることをサポートすることです。この変更が実装されると、Kubernetes のすべてのノードコンポーネントとコンテナを非 root ユーザとして実行できるようになり、コンテナのブレイクアウト攻撃によって基盤となるクラスターノードが危険にさらされるリスクが大幅に軽減されます。
まとめ
今回のリリースに含まれる主要なセキュリティ機能のほとんどはアルファ版ですが、ユーザや管理者のために Kubernetes のセキュリティを向上させるための継続的な取り組みを見ることができるのは素晴らしいことです。これまでと同様に、本リリースにおける新しい sysctl のサポートのように、小さな変化に注目することも重要です。それらは段階的な改善を提供し、より安全な方法への変更を容易にできるからです。