Advanced Container Network Securityを理解するための前提
AKS networkingは変化が速いため、旧方式とcurrent recommendationを区別して記載しています。実装直前には下記Microsoft Learnのcurrent constraints / region / version supportを再確認してください。
Kubernetes NetworkPolicyはpod traffic segmentationの基本controlであり、namespace/pod selectorとport/protocolでeast-westを最小化する。 current AKS guidanceではCiliumがmanaged NetworkPolicyの中心で、eBPF data planeでpolicy enforcementを行う。
Advanced Container Networking ServicesのContainer Network SecurityはAzure CNI Powered by Cilium clusterで利用するsecurity feature set。 ACNS securityはFQDN-based filteringやLayer 7 policyなど、IP/portだけでは表現しにくいegress/application intentを扱える。
hostNetwork pod、DNS、health probe、control-plane/registry/monitoring dependenciesはdefault-deny導入時に明示的なexception設計が必要。 Azure NSG/FirewallとKubernetes policyを二重に置く場合、どちらがblockしたかをflow logs/metricsとpacket walkで特定できるobservabilityを同時に用意する。
通信経路と責任境界
アドレスと識別情報の考え方
| Address / identity | Where it lives | 運用上の意味 |
|---|---|---|
| Workload selector | namespace/pod labels | policy対象を明示。label driftはsecurity drift。 |
| Destination identity | pod selector / CIDR / FQDN | dynamic SaaS等ではIP allowlistだけでなくFQDN policyを評価。 |
| Azure identity | subnet/service tag/public IP等 | NSG/Firewall guardrailのscope。Kubernetes policyとは別layer。 |
| Egress source | node/NAT/Firewall public IP | external allowlistとpolicyのsource identityを整合させる。 |
設計判断
| 判断軸 | 確認する問い | 設計として固定すること |
|---|---|---|
| Default posture | namespaceごとdefault-denyにするか | 段階導入しDNS/telemetry/health dependenciesをexplicit allow。 |
| Egress identity | IP allowlistで足りるか | SaaS等dynamic destinationはFQDN filteringを検討。 |
| L7 | method/path/protocol-aware policyが必要か | 必要なserviceだけACNS L7を使いcomplexityを限定。 |
| Encryption | in-cluster traffic encryption requirement | supported Cilium/ACNS capabilityとperformance/operational impactを評価。 |
| Azure control | NSG/Firewallとpod policyの責任者 | platform guardrailとworkload policyのownershipを分離。 |
実装・移行の順序
- traffic inventoryからnamespace/service単位のrequired flowを作る。
- audit/observe期間でactual DNS/flowを取得し、implicit dependencyを洗い出す。
- non-prod namespaceにdefault-deny + explicit DNS/required flowを適用する。
- FQDN/L7等advanced policyは必要なegress/applicationだけに限定して追加する。
- negative test(禁止通信が失敗)とpositive business testを同じrelease gateにする。
- Azure NSG/FirewallとCilium policyのblock evidenceを一つのincident runbookへ統合する。
運用で残しておく情報
| 観点 | 残すべき運用証拠 |
|---|---|
| Policy inventory | namespaceごとのNetworkPolicy有無とpod selector coverageを確認。 |
| DNS dependency | policy適用podがcluster DNSへUDP/TCP 53を到達できるか確認。 |
| Flow evidence | allowed/dropped flowをACNS logs/Hubble metricsで確認。 |
| Ownership | platform denyとapplication denyをchange record上で区別。 |
変更前に確認する
Control state
AKS networkProfile、Kubernetes object、Azure associationをread-onlyで採取し、desired configurationを固定する。
Data plane
同じ5-tupleで実通信し、forward path・return path・source translation・policy decisionを証明する。
Observability
DNS/TCP/flow/drop/backend health等、障害点に対応するsignalを同一時刻で収集する。
Negative test
allowだけでなく、禁止すべき通信が明示的に失敗することもsecurity acceptanceへ含める。
kubectl get networkpolicy -A
kubectl get pods -A --show-labels
kubectl get svc,endpointslices -A
az aks show -g <rg> -n <cluster> --query networkProfile.networkDataplane -o tsv
Common failure modes
| 症状 | 疑うboundary | 確認・是正 |
|---|---|---|
| default-deny後DNS不可 | DNS egress allow不足 | CoreDNS/NodeLocal DNS selector/IPとUDP/TCP 53を確認。 |
| policyが効かないpod | selector mismatch/hostNetwork | labelsとhostNetworkを確認。 |
| FQDN allowが不安定 | DNS path/TTL/policy semantics | DNS observationとresolved endpoint flowを時系列で比較。 |
| Azure側denyと誤認 | Cilium policy drop | ACNS/Hubble flowとNSG/Firewall logを同時刻で照合。 |