Kubernetesバージョン1.21について知っておきたいこと #aqua #コンテナ #セキュリティ #kubernetes #k8s
この記事は1年以上前に投稿されました。情報が古い可能性がありますので、ご注意ください。
本ブログは「Aqua Security」社の技術ブログで2021年4月12日に公開された「 Kubernetes Version 1.21: What You Need to Know 」の日本語翻訳です。
Kubernetesバージョン1.21について知っておきたいこと
今までの Kubernetes のリリースと同じく多数の新機能がありますが、セキュリティに影響を与える可能性のある重要な変更がいくつかあるため、詳細を確認する価値があります。PodSecurityPolicies の廃止に加えて、Kubernetes の脆弱性をブロックするために新たに導入された機能や、クラスターネットワークのセキュリティ制御を設計する際に考慮すべき新しい IPv6 のサポートなどを見ていきます。
PodSecurityPolicyの非推奨化
PodSecurityPolicy(PSP)は、Kubernetes クラスターの重要な制御機能であり、クラスターにデプロイされるワークロードが利用できる権限をクラスター運用者が制限するためのメカニズムを提供します。PSP や同様の機能がなければ、Pod をクラスターにデプロイできるユーザであれば、誰でも基盤となるノードにアクセスし、クラスターを完全に制御できる可能性があります。
機能としての PSP は長い間ベータ版として提供されてきましたが、Kubernetes の機能を卒業または非推奨とする取り組みの一環として、PSP を非推奨とすることが決定されました。
今回の非推奨化でまず注意すべき点は、すぐに PSP が使えなくなるわけではないということです。現在の意図は、少なくとも Kubernetes バージョン1.25 まではこの機能を削除されないとのことですが、現在のリリーススケジュールでは2022年まで予定されていません。
しかし、PSP を置き換えるためには、いくつかの選択肢があります。
まず、PSP をツリー内で置き換える方法があります。要するに、目標は Kubernetes の汎用 Pod Security Standards に対する検証を提供できる、シンプルな代替 AdmissionController を持つことです。これらの詳細については、以前のブログ「Kubernetes Pod Security Policy 非推奨化にあたり知っておくべきこと」で紹介しました。その中で注意すべきことの1つは、ワークロードの中には定義されたポリシーの1つにきちんと適合できないものもあるということです。
そのような場合には、ポリシーを適用するためのより強力なオプションを検討する必要があり、有望な代替手段がいくつかあります。
- Open Policy Agent - これは強力な汎用 AdmissionController で、Rego で定義されたポリシーを Kubernetes クラスターやその他のターゲットに適用できます。OPA プロジェクトでは、PSP で提供されているものと同様の制御を実装した、Rego テンプレートのセットを管理しています。また、OPA 用の良いRegoテンプレートを探しているのであれば、Aqua の AppShield は一見の価値があります。
- Kyverno - これも非常に注目を集めている選択肢です。ポリシーは YAML で記述されており、OPA の Rego ベースのアプローチよりも簡単に習熟することができるかも知れません。OPA と同様に、Kyverno は PSP の制限にマッピングされたポリシーのサンプルを提供しています。
- K-Rail - マルチテナントクラスターの安全性を確保することを目的とした、ワークロードポリシー施行ツールです。K-Rail は、内蔵のポリシーライブラリを提供し、他の2つのオプションと同様に、ユーザが独自のポリシーを作成できるオプションを提供しています。
PSP の廃止についてもっと詳しく知りたい方は、Kubernetes Blog に素晴らしい記事がありますので、そちらをご覧ください。
externalIPsをブロックするAdmissionController
これは、Kubernetes における最近のセキュリティ問題を軽減するために追加された便利な AdmissionController です。CVE-2020-8554 は、クラスター外部の Service に対して MITM 攻撃を可能にするもので、攻撃者は Kubernetes クラスター内のサービスを作成できます(そのため、主にマルチテナントクラスターにおけるリスクとなります)。新しい AdmissionController では、基礎となる機能をクラスターレベルで無効化でき、その機能が不要な場合にはリスクを排除できます。
IPv4/IPv6のデュアルスタックサポート
今回のリリースでは、IPv6 デュアルスタックサポートがベータに移行しました。ベータ版への移行は、Kubernetes の機能にとって重要な節目であり、デフォルトで有効になることを意味します。つまり、すべてのKubernetes 1.21 クラスターで IPv6 が有効になります。
これは、クラスター内のネットワークセキュリティ機能(例えば、接続のブロックまたは許可リスト)が IPv6 アドレスを考慮するようになるという重要な機能です。Kubernetes のネットワークポリシーは通常、ハードコーディングされた IP アドレスを使用すべきではありません。しかしハードコーディングされたフィルタが設置されている可能性があり、追加のIPアドレスを考慮するために、ネットワークポリシーを更新する必要があります。
External client-go credential providers
1.21 の機能強化リストの中でもう1つの興味深い機能は、stable 版に移行した external client-go credential provider です。この機能により、外部のヘルパープログラムをユーザ認証として使用できるようになり、Kubernetes を様々な ID/アクセス管理システムと統合する際に役立ちます。
ただし、この機能を使うとKubeconfig ファイルの作成者がどのユーザのマシンでもコードを実行できるようになるため、使用したい Kubeconfig ファイルを読みこませることが重要になります。
- name: external |
上記は、この機能を使用したユーザブロックの例で、「command」と「args」のパラメータが見えます。上記の例では、このユーザを指定して Kubeconfig ファイルを使用した場合、/tmp に lorem というファイルが作成されます。この例は悪意のあるものではありませんが、攻撃者がこれを利用してクライアントのマシンを危険にさらすことは非常に簡単です。
まとめ
今回の Kubernetes のリリースでは様々な新機能が含まれているため、クラスターについて考慮すべきことがたくさんあり、PSP をどのように置き換えるか計画する時期に来ていることは間違いありません。OPA と Kyverno を試すか、あるいは新しい内蔵型の AdmissionController が作成されるまで待って、それがニーズを満たすかどうかを確認してください。いつものように、1.22 がリリースされる3ヶ月後に、またたくさんの興味深い変化を見ていきましょう。