Contents
AKSでCiliumネットワークポリシーを導入する前に確認すべき前提条件
AKSクラスターにおけるCiliumネットワークポリシーの導入は、セキュリティ強化の一環として重要ですが、実施前にはいくつかの前提条件を明確にすることが必要です。特にLinuxノード専用の要件と最新版ツールとの互換性が挙げられます。
Linuxノード限定の要件確認
CiliumネットワークポリシーはWindowsノードでは非対応であり、AKSクラスターにおいてはLinuxノードを実行している環境でのみ導入可能です。既存クラスターにWindowsノードが含まれる場合は、事前にノードプールの構成を確認してください。
注意: Azure CLIとCiliumバージョンの不一致により、ポリシー適用時にエラーが発生する可能性があります。最新版のAzure CLI(
az --versionで確認)および互換性のあるCiliumバージョンを使用してください。
Azure CLI/Ciliumバージョン互換性確認手順:
- Azure CLIの現在バージョンを確認:
az --version - Ciliumの推奨バージョンを公式ドキュメント(https://docs.cilium.io/)で確認
- Azure Managed Ciliumリリースノート(https://github.com/Azure/azure-cilium/releases)で互換性をチェック
| 項目 | 値 | 補足 |
|---|---|---|
| サポートOS | Linux専用 | Windowsノードでは動作不可 |
| Azure CLI | 2.38.0以降 | 最新版を導入することを推奨 |
| Ciliumバージョン | v1.14以上 | Azure Managed Ciliumの公式リリースに準拠 |
NPMからCiliumへの移行手順
既存のネットワークポリシー(NPM)をCiliumに切り替える際は、段階的な移行が不可欠です。NPMの削除とCiliumのインストールが同時進行するため、クラスター操作時の中断リスクを最小化する必要があります。
既存NPMポリシーの評価
NPMで運用しているネットワークポリシーをyamlファイル形式でエクスポートし、ルール内容(ingress/egress)や適用範囲(namespace)を整理します。以下は例です:
|
1 2 |
kubectl get networkpolicies -o yaml > existing-policies.yaml |
評価のポイントとして以下の2点を確認してください:
- L7レイヤーでの制御が不要な場合、Cilium導入後に不要なポリシーも同時に削除できるか。
- namespace単位の適用範囲が明確で、移行時のエラー回避につながるか。
YAMLベースのNetworkPolicy定義例
CiliumネットワークポリシーはYAMLで定義され、Kubernetes ClusterRoleやClusterRoleBindingを通じてクラスター全体に適用されます。以下に基本構造とnamespace単位での例を示します。
基本構造のサンプル
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
apiVersion: cilium.io/v2 kind: CiliumNetworkPolicy metadata: name: example-policy spec: ingress: - fromEndpoints: - matchLabels: app: frontend toPorts: - ports: - port: "80" protocol: TCP egress: - toEndpoints: - matchLabels: app: backend toPorts: - ports: - port: "3306" protocol: TCP |
Namespaceごとのポリシー適用範囲
namespaceを指定するには、metadataのnamespaceフィールドを使用します。以下は特定のnamespace(example-ns)にのみ適用する例です:
|
1 2 3 4 5 6 7 8 |
apiVersion: cilium.io/v2 kind: CiliumNetworkPolicy metadata: name: example-policy namespace: example-ns spec: ... |
L7フィルタリングの設定方法
CiliumではHTTPパスやクエリパラメータレベルでの細粒度制御が可能で、セキュリティ強化の重要な要素です。
HTTPパスベースの制御例
以下は/api/v1/dataにアクセスするみことを許可し、他のパスを禁止する例です:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
spec: ingress: - fromEndpoints: - matchLabels: app: frontend toPorts: - ports: - port: "80" protocol: TCP rules: - http: paths: - path: "/api/v1/data" method: GET, POST, PUT # 複数メソッドの指定例 |
クエリパラメータの検証
クエリパラメータが指定された値に含まれる場合のみアクセスを許可する設定も可能です。以下はtoken=ABC123を含むリクエストに限定する例です:
|
1 2 3 4 5 6 7 8 9 |
rules: - http: paths: - path: "/secure-endpoint" method: POST, GET headers: - name: "Authorization" value: "Bearer ABC123" |
ポリシー適用後の接続テストプロセス
ポリシーをクラスターに適用した後、通信動作が正常に機能しているか確認する必要があります。kubectlコマンドとcurlによる検証が有効です。
kubectlコマンドによる状態確認
以下のように、CiliumNetworkPolicyのステータスを確認します:
|
1 2 |
kubectl get ciliumnetworkpolicies |
出力結果でSTATUS列がactiveまたはinvalidになっているかを検証し、ポリシーが正しく適用されていることを確認してください。
curlベースの通信検証
実際の通信動作をテストするには、クライアントアプリケーションやcurlコマンドを使用します。以下はHTTPリクエストへの応答例です:
|
1 2 |
curl -v http://<service-ip>/api/v1/data |
L7フィルタリングが正しく設定されている場合、403 Forbiddenまたは200 OKなどの適切なレスポンスが返ってきます。
セキュリティ強化に向けたベストプラクティス
Ciliumネットワークポリシーは単なる制御ツールではなく、運用の継続的な改善を支える要素です。以下に実務で重視すべきポイントを紹介します。
最小権限原則の実装
各サービスに必要な最小限のアクセス権限を与えることで、漏洩や不正アクセスリスクを抑制できます。たとえば、/adminパスは特定の管理者アカウントのみ許可するように設定しましょう。
定期的なポリシーレビュー
運用中は定期的にネットワークポリシーを見直し、不要なルールや誤った設定がないか確認してください。変更履歴を管理できるツール(例:Git)でバージョン管理することも推奨されます。
まとめ
Ciliumネットワークポリシーの導入はLinuxノード専用であり、移行前にはNPM評価とAzure CLI/Ciliumバージョン確認が不可欠です。YAMLでのingress/egress定義に加えて、L7フィルタリングによる細粒度制御がセキュリティ強化の鍵となります。実運用後は定期的なポリシーレビューと最小権限原則を徹底することで、リスク回避につながります。