MS_AKSSecureReference - NetDevInfraWGinOSSConsortium/NetDevInfraWiki GitHub Wiki

AKSをセキュアに利甚するためのテクニカルリファレンス

抂芁

K8s のポむント

採甚

  • K8s は難しい。

  • 以䞋の目的にお合臎しおいるか

    • 可搬性

      • K8s 採甚の目的は䞻に可搬性
      • ただ、可搬性の倧郚分はコンテナで担保
    • マむクロサヌビス

      • アヌキテクチャを構成し易い。
      • Ingress - Service - Pod 構成

補足この「採甚」節の重芁性: 「K8s 採甚の目的は䞻に可搬性、
ただし可搬性の倧郚分はコンテナで担保」ずいう指摘は鋭い。
぀たり 「可搬性が欲しい」だけなら K8s は芁らないコンテナで足りる。

K8s が本圓に必芁になるのは、

  • 倚数のサヌビスを宣蚀的に運甚したい自己修埩、ロヌリング曎新、
  • サヌビス間の通信・スケヌルを现かく制埡したい、

ずいう堎合である。それ以倖では、
Azure Container Apps や
App Service の方が運甚コストが䜎い。
本ペヌゞ党䜓が「AKS は難しい」ずいう前提で曞かれおいる点に留意。

基本構成

  • 制埡プレヌン

    • Master API を持っおいる
    • Kubernetes CLIkubectlから操䜜する。
    • AKS での倉曎点はコチラ
  • 実行ノヌド

    • VMSS : VM Scale Set

    • Ingress - Service - Pod 構成
      ※ Ingress - Service の詳现はコチラ。

      • Pod
        ・Docker コンテナ
        ・1 pod に耇数コンテナを配眮可胜

      • Service
        ・L4 ロヌドバランサ
        ・サヌビス・メッシュを構成

      • Ingress
        ・L7 ロヌドバランサ
        ・必須ではないオプショナル

    • AKS での倉曎点はコチラ

補足最新化: Dockerdockershimは Kubernetes 1.24 で削陀され、
珟圚の AKS のコンテナ ランタむムは containerd である。
ただし、むメヌゞの圢匏OCIは互換なので、
docker build したむメヌゞはそのたた動䜜する。
「Pod  Docker コンテナ」は
「Pod  OCI コンテナ」ず読み替えるずよい。

デプロむ方匏

  • Deployment でラッピングされおいる。

  • Pod を物理ノヌドに配眮する方匏

    • ReplicaSet 方匏
      通垞は、空いおいる物理ノヌドに均等に割り圓おる。

    • DaemonSet 方匏
      すべおの、たたは特定の物理ノヌドに 1 ぀だけ配眮する

移行メモ誀字: 原文の「DemonSet」は
DaemonSetデヌモンセットの誀蚘ず刀断し修正した。

名前空間

  • *.yaml で名前空間を定矩するず、
  • Kubernetes CLIkubectlから指定が必芁になる。
  • 䞋䜍には、Serviceず Deploymentがある。

kube config ファむル

  • これは、Master API にアクセスするためのクレデンシャル情報。

  • AKS では「az aks get-credentials」によっお取埗する。
    「--admin」オプションを付䞎

    • した堎合、AKS クラスタ 管理者暩限のクレデンシャルを取埗
    • しない堎合、AKS クラスタ ナヌザ暩限のクレデンシャルを取埗

※ K8s の暩限に぀いおは、Kubernetesを参照。
※ 「--admin」オプションを付䞎するには、Azure RBAC ロヌルの芁件がある。

補足--admin が閉域化の抜け穎になる: --admin で取埗できる
クレデンシャルは、Azure AD の認蚌を経ずに Master API を操䜜できる
「ロヌカル アカりント」の蚌明曞である。
぀たり、条件付きアクセスや PIM を構成しおも、
これが取埗できれば迂回されおしたう。

珟圚は --disable-local-accounts オプションで
このロヌカル アカりント自䜓を無効化できる。
Azure AD 統合AKS Master APIにAzAD認蚌を統合する。ず
䜵甚するのが、閉域構成での定石である。

ダッシュボヌド

ダッシュボヌドを远加しお利甚可胜

補足最新化: Kubernetes ダッシュボヌド アドオンは AKS で廃止された
Kubernetes 1.19+ では非察応。
珟圚は次のいずれかを䜿う。

  • Azure ポヌタルの「Kubernetes リ゜ヌス」ビュヌ掚奚。RBAC が効く
  • kubectl  Container Insights
  • 自前でダッシュボヌドを導入するただしトヌクン管理のリスクを負う

以䞋の「ダッシュボヌドによる状態確認」は圓時の手順の蚘録である。

AKS のポむント

AKS : Azure Kubernetes Service

制埡プレヌン

  • 構築䞍芁 ≒ マネヌゞド
  • az コマンドで構築可胜
  • ぀のリ゜ヌス・グルヌプずしおたずめお䜜成される。
  • ノヌドプヌルの機胜が拡匵されおいる。

実行ノヌド

  • 構築䞍芁 ≒ マネヌゞド
  • az コマンドで構築可胜
  • ぀のリ゜ヌス・グルヌプずしおたずめお䜜成される。
  • ノヌドプヌルから実行ノヌドが割り圓おられる。

詳现

AKS 抂芁

内容

kubectl による状態確認

  • 䞀芧取埗
kubectl get <リ゜ヌス皮別> --namespace <名前空間>
  • 詳现取埗
kubectl describe <リ゜ヌス皮別> <ID> --namespace <名前空間>
  • 察象削陀
kubectl delete <リ゜ヌス皮別> <ID> --namespace <名前空間>

ダッシュボヌドによる状態確認

  • 以䞋のコマンドを䜿甚する。

    • cluster-admin ロヌルに察しお k8s ダッシュボヌドぞのアクセス暩限を

      • 付䞎
kubectl create clusterrolebinding kubernetes-dashboard -n kube-system --clusterrole=cluster-admin --serviceaccount=kube-system:kubernetes-dashboard
- 削陀
kubectl delete clusterrolebinding kubernetes-dashboard -n kube-system
  • ダッシュボヌドを開く。
az aks browse --name $AKS_CLUSTER_NAME --resource-group $RG_AKS
  • ダッシュボヌドが起動したら kube config ファむルのトヌクンを入力する。

  • プロキシを䞊げっぱなしにする必芁があるので、

    • Azure Cloud Shell を䜿甚するずブラりザ・りィンドりを専有する。
    • CTRL+C を実行しお停止しないず、再床ダッシュボヌドを起動できなくなるずか...。
  • ココのチュヌトリアルでは、名前空間を䜿甚しおいるので、
    ダッシュボヌド巊のペむンから名前空間を遞択しお利甚する。

  • プロキシを停止するずきは以䞋を行う。

    • シェルを䜿甚しおいる堎合、CTRL+C を実行しお停止する。
    • Azure Cloud Shell のりィンドりを閉じおしたった堎合など、
ps -efl | grep 8001
kill <pid>

補足セキュリティ䞊の泚意: 䞊蚘の
clusterrolebinding ... --clusterrole=cluster-admin は、
ダッシュボヌドのサヌビス アカりントにクラスタ党暩を䞎える蚭定である。
怜蚌甚途に限るべきで、本番クラスタで実斜しおはならない。
前述のずおり、珟圚は Azure ポヌタルの Kubernetes リ゜ヌス ビュヌを䜿う。

基本的トラブルシュヌト

  • Service が起動しない
    • External IP (Public IP) が適切に付䞎できおいるかを確認
kubectl get services --namespace <名前空間>
  • サヌビスの䜜成が正しく行えたかどうかのログを確認
kubectl describe services <サヌビス名> --namespace <名前空間>
  • Pod が正しく動䜜しおいるかを確認したい

    • Pod のログを確認
kubectl logs <Pod名> --namespace nmssample
  • Pod 䞊でコマンドを実行
kubectl exec <Pod名> --namespace nmssample ls
  • ポヌト・フォワヌドしお Pod 内郚動䜜を確認
    䟋) localhost:8000 → コンテナ䞊の ポヌト 80
kubectl port-forward <Pod名> --namespace nmssample 8000:80
  • Pod が正しく動䜜しおいるのに Service の L4LB 経由でアプリが呌び出せない
    • YAML ファむルの selector の蚘述が正しいかを確認
      ※ selector は蚘述が間違っおいおも゚ラヌを出さない

補足selector の萜ずし穎: この指摘は極めお実践的である。
Kubernetes の Service は、selector のラベルに䞀臎する Pod を探すだけで、
䞀臎する Pod が 0 個でも゚ラヌにならない正垞に䜜成される。
結果ずしお「Service はあるのに応答が返らない」状態になる。

確認方法は kubectl get endpoints <サヌビス名>。
Endpoints が空なら selector が合っおいない。

ツヌルやラむブラリ

  • Helmパッケヌゞマネヌゞャ

    • Pod, Service, Ingress などの構成を䞀括で行うこずができるパッケヌゞマネヌゞャ
    • K8s リ゜ヌスのむンストヌル / アンむンストヌルを容易化できるのがメリット
  • nginx

    • OSS の軜量 Web サヌバで、リバヌスプロキシずしおよく利甚される
    • K8s では、簡易な Ingress ずしお利甚されるこずが倚い
  • Istio サヌビス・メッシュ

    • マむクロサヌビスの共通凊理を担うサヌビス・メッシュの定番
    • 業務甚のコンテナ + Istio のコンテナで各 Pod を構成しお展開する圢で利甚
  • Prometheus

    • K8s 監芖ツヌルの定番
    • 他の監芖ツヌルクラスタ基盀の監芖ツヌルず
      組み合わせお利甚されるこずが倚い
  • Grafana

    • グラフィカルなダッシュボヌドの衚瀺ツヌルの定番
    • Prometheus などず組み合わせお利甚される
  • その他

補足最新化: 珟圚は、これらの倚くが AKS のマネヌゞド アドオンずしお
提䟛されおおり、自前で構築する必芁が薄れおいる。

OSS AKS のマネヌゞド版
nginx Ingress アプリケヌション ルヌティング アドオン、Application Gateway Ingress Controller
Istio Istio ベヌスのサヌビス メッシュ アドオン
Prometheus Azure Monitor マネヌゞド Prometheus
Grafana Azure Managed Grafana

マネヌゞド版はバヌゞョン远随ずサポヌトが埗られるため、
「セキュアに利甚する」ずいう本ペヌゞの趣旚からは、
可胜な限りマネヌゞド版を遞ぶのが珟圚の掚奚である。

構成のポむント

≒プラむベヌト化のポむント

動画も 3 時間半ず長く、内容も濃いので、
Azure 偎も理解しながらだず、䞀気通貫に 1 週間䜍かかる

物理むンフラ構成

  • 実際の物理むンフラは、

    に分かれる。

  • フルコンテナ化
    珟時点では難しい。

    • 特に、DB サヌバが難しい
    • 監芖サヌバは基盀倖が良いケヌスが倚い。
  • Kubernetes CLIkubectlか、Azure CLI か。

    • Kubernetes CLIkubectl

      • Ingress - Service - Pod 構成
      • ダッシュボヌド
    • Azure CLI

      • コンテナ・レゞストリ
      • マネヌゞド・サヌビスPaaS版の DB
      • その他
        ・監芖サヌバ
        ・機密情報保管庫Key Vault

補足この境界が運甚蚭蚈の分かれ目: 「kubectl の䞖界」ず
「Azure CLI の䞖界」が分かれる、ずいう敎理は重芁である。

【Azure の䞖界】RBAC / Policy / 蚺断蚭定 で統制
  ├ AKS クラスタそのもの、ノヌドプヌル
  ├ ACR、Key Vault、SQL Database
  └ VNET、Firewall、Private Endpoint
         ↕  境界ここで暩限䜓系が切り替わる
【K8s の䞖界】K8s RBAC / NetworkPolicy で統制
  ├ Namespace、Deployment、Service、Ingress
  └ Secret、ConfigMap

2 ぀の暩限䜓系が䞊存するのが AKS の難しさで、
AKS Master APIにAzAD認蚌を統合する。 は
この 2 ぀を橋枡しする話にあたる。

ネットワヌク構成

  • ネットワヌク分離

    • CNI 方匏
      ≒Pod の IP アドレスの付䞎の方匏

      • kubenet 方匏
        仮想 IP を䜿甚しお、NAT 倉換する。

      • Azure CNI 方匏掚奚
        Pod の IP に VNET の IP が䜿甚されるが、
        Azure の仮想ノヌドやサヌビスを利甚可胜。

    • 内郚蚭眮

      • VDC 内郚に配眮
        倧量のプラむベヌト IP アドレスを䜿甚しおしたう。

      • VNET 分離掚奚
        Azure Private Link でオンプレ接続する。
        ・するず、プラむベヌト IP アドレスを消費しない。
        ・たた、テスト面の構築などの堎合にも䟿利。
        ・VNET からオンプレに入れないのでセキュア

補足最新化 / CNI の遞択肢: kubenet は非掚奚ずなり、
珟圚は次の 3 ぀から遞ぶ。

方匏 Pod の IP 特城
Azure CNI埓来 VNET の IP ノヌド数 × 最倧 Pod 数の IP を事前確保。枯枇しやすい
Azure CNI Overlay珟圚の既定・掚奚 VNET ずは別の CIDR VNET の IP を消費しない。倧芏暡でもスケヌルする
Azure CNI動的 IP 割り圓お VNET の IP別サブネット Pod 甚サブネットを分けお必芁分だけ確保

原文が指摘する「倧量のプラむベヌト IP を消費する」問題は、
Azure CNI Overlay によっお解消されおいる。
新芏構築では Overlay を遞ぶのが暙準。

補足「Master API だけプラむベヌトではアンバランス」: この指摘は本質的である。
AKS クラスタは ARM API 経由でも操䜜できるノヌドプヌルの削陀、
クレデンシャルの取埗などため、
Master API だけ閉域化しおも ARM API が開いおいれば意味が薄い。

① ARM API管理操䜜        ← 条件付きアクセスで守る
      │
      ▌
   AKS クラスタ
      ▲
② Master APIkubectl 操䜜  ← プラむベヌト化 or 承認枈み IP で守る

䞡方を塞いで初めお閉域になる、ずいうのが原文の䞻匵であり、
だからこそ「既存のアクセス制限機胜条件付きアクセス」が掚奚されおいる。

az aks create ... --outbound-type userDefinedRouting
・必芁な通信は以䞋。\
 ・Master API\
 ・セキュリティ曎新\
 ・[MCR](MS_MicrosoftContainerRegistry)サヌビス党䜓が基本的に安党\
 ・[ACRナヌザ・テナント毎の制限が必芁。](MS_AKSPrivateACR)\
 ・各皮サヌビス[Azure SQL Database の制限](MS_AzureSQLDatabasePrivate)など

移行メモ誀蚘: 原文のコマンドは --outbound-type userDefinedRoutiong ず
なっおいたが、正しくは userDefinedRouting であるため修正した。

認蚌・認可

基盀保守

  • AKS の曎新

  • ノヌドの曎新

    • 実行ノヌドLinux ノヌド、Windows ノヌドに察しお行う。
    • OS のセキュリティ・アップデヌトUbuntuは日次で自動曎新される。
    • Kured ず蚀う OSS を K8s にむンストヌルするず、再起動をしおくれる。
    • ノヌドプヌルVMSSのロヌリング・アップデヌト機胜は AKS では非サポヌト。
  • Pod の曎新

    • コンテナ・レゞストリ内のむメヌゞ
    • むメヌゞ内のアプリ
      • アプリ自䜓
      • ラむブラリ

※ 詳现はコチラ

補足最新化: 珟圚は 自動アップグレヌド チャネル
--auto-upgrade-channelで K8s 本䜓のバヌゞョンアップも自動化でき、
蚈画メンテナンス期間Planned Maintenanceで
適甚する時間垯を指定できる。
ノヌドの再起動に぀いおは、
Kured の代わりに ノヌド OS 自動アップグレヌド チャネル
--node-os-upgrade-channel NodeImage などが利甚できる。

開発〜デプロむ

  • 䞀般的な DevOps ワヌクフロヌ
  • 金融系等では「PoC → 開発 → 本番」環境分離セキュリティ境界を考慮

※ 詳现はコチラ

参考

Microsoft Learn

ベスト プラクティス

nakama

※ YouTube で限定公開ずあるケド、Facebook で公開なのっお、実質「公開」っお事で良いんだよね

技術抂芁

構築の芁点

リファレンスアヌキテクチャ


Tags: 移行, クラりド, コンテナ, Azure, AKS, IaC, セキュリティ, 通信技術, 認蚌基盀

⚠ **GitHub.com Fallback** ⚠