[AKS] クラスターのローカルアカウントの無効化と、過去の資格情報の無効化
AKS (Azure Kubernetes Service) のドキュメントを読んでいたところ、「クラスターのローカルアカウントの無効化」にて気になるフレーズがあったので、動作を見てみました。
試してみる
クラスターの作成
普通にポータルから作成します。既定のバージョンは 1.20.9 でした。
ローカルアカウントでの資格情報の取得
いつもお世話になっている、下記のコマンドにて資格情報を取得してきます。
az aks get-credentials --resource-group <resource-group> --name <cluster-name> --admin
kubectl の実行も問題なくできます。
kubectl get nodes
NAME STATUS ROLES AGE VERSION
aks-agentpool-40731062-vmss000000 Ready agent 4m38s v1.20.9
aks-agentpool-40731062-vmss000001 Ready agent 4m43s v1.20.9
aks-agentpool-40731062-vmss000002 Ready agent 4m41s v1.20.9
クラスターでローカルアカウントを無効にする
冒頭のドキュメントに記載の通り、下記のコマンドで無効化します。
az aks update -g <resource-group> -n <cluster-name> --disable-local-accounts
出力で properties.disableLocalAccounts
フィールドが true
に設定されていれば OK です。
"properties": {
...
"disableLocalAccounts": true,
...
}
ローカルクレデンシャルの取得 (再)
管理者資格情報を取得しようとすると、機能によってアクセスを妨げられていることを示すエラーメッセージが表示され、失敗します。OK ですね。
az aks get-credentials --resource-group <resource-group> --name <cluster-name> --admin
(BadRequest) Getting static credential is not allowed because this cluster is set to disable local accounts.
Code: BadRequest
Message: Getting static credential is not allowed because this cluster is set to disable local accounts.
一方で、既に取得している資格情報を用いた kubectl の実行はできます。これは NG にしたいですね。
kubectl get nodes
NAME STATUS ROLES AGE VERSION
aks-agentpool-40731062-vmss000000 Ready agent 10m v1.20.9
aks-agentpool-40731062-vmss000001 Ready agent 11m v1.20.9
aks-agentpool-40731062-vmss000002 Ready agent 10m v1.20.9
これが、ドキュメントの注意事項に記載の下記の箇所です。
つまり、既に資格情報を取得している場合は kubectl を実行できてしまうので、資格情報 (証明書) を取り消さなければならない、と。
クラスター証明書のローテーション
上記の通り、az aks rotate-certs
コマンドだけで OK です。
クラスターの作成と同じくらい時間がかかるので、気長に待ちましょう☕
動作確認
同じシェルの kubectl コマンドは通らなくなりました。
kubectl get nodes
Unable to connect to the server: x509: certificate signed by unknown authority (possibly because of "crypto/rsa: verification error" while trying to verify candidate authority certificate "ca")
再度、資格情報の取得を試みますが、ローカルアカウントが無効化されているので取得することはできません。
az aks get-credentials --resource-group <resource-group> --name <cluster-name> --admin
(BadRequest) Getting static credential is not allowed because this cluster is set to disable local accounts.
Code: BadRequest
Message: Getting static credential is not allowed because this cluster is set to disable local accounts.
おわりに
ということで、無事、過去に保存された資格情報の接続も含めてローカルアカウントを無効化することができました。既存のクラスターにおいては、本記事のような形で追加作業 (クラスター証明書のローテーション) が必要ということでした。
また、『AKS クラスターに最大 30 分間のダウンタイムが生じる可能性があります。』という点は影響が大きいので、既存のクラスターに反映する際には十分に注意しないとですね。
Discussion