🎼

[AKS] クラスターのローカルアカウントの無効化と、過去の資格情報の無効化

2021/12/16に公開

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