AKS を Azure AD 統合すると、kubectl 接続に Azure AD 認証させること可能。
Azure AD 認証を サービスプリンシパル で行う場合は、kubelogin を利用する。
Azure Kubernetes Service で Azure AD を使用する - Azure Kubernetes Service | Microsoft Docs
--抜枠--
継続的インテグレーション パイプラインなど、現在 kubectl で使用できない非対話型シナリオがいくつかあります。 kubelogin
を使用して、非対話型サービス プリンシパル サインインでクラスターにアクセスできます。
---------
通常の kubectl コマンドでの認証はブラウザでの device code 認証を利用する。
しかし、メールアドレスを持たないサービスプリンシパルはこの認証に対応していないため、kubelogin が必要だと思われる。


kubelogin での利用で「非対話型」(non interactive)というのがポイントである。
非対話多型と対話型で kubelogin は手順が異なるため。
なお、Azure Cloud Shell から手順を行えることを確認した。
以下の情報の手順についてメモを記載する。
GitHub - Azure/kubelogin: A Kubernetes credential (exec) plugin implementing azure authentication
1.サービスプリンシパル作成
az ad sp create-for-rbac --skip-assignment --name myAKSAutomationServicePrincipal
以下の様に出力される。
appId や password を後ほど利用する。
{
"appId": "<spn client id>",
"displayName": "myAKSAutomationServicePrincipal",
"name": "http://myAKSAutomationServicePrincipal",
"password": "<spn secret>",
"tenant": "<aad tenant id>"
}
2.この SP を AAD セキュリティグループに追加した上で、そのグループのオブジェクト ID を元に AKS クラスターを作成する。
Azure Kubernetes Service で Azure AD を使用する - Azure Kubernetes Service | Microsoft Docs
サービスプリンシパルやグループにはkubectlできるAzure RBAC権限も付与すること。
3.rolebinding 作成とそのための SP のオブジェクト ID 表示は不要。
AAD 統合の AKS クラスターでは自動で作成されるため。
Azure AD と Kubernetes RBAC をクラスターに使用する - Azure Kubernetes Service | Microsoft Docs
--抜枠--
Azure AD でグループとユーザーの例が作成され、リソースを作成および表示するために適切な権限を付与するため AKS クラスター内に Role と RoleBinding が作成されます。
----------
4.kubeconfig による接続と kubectl コマンドの実行
※export で appId と password を環境変数で渡すことで、サービスプリンシパル認証が可能。
※kubeconfig のパスは Azure Cloud Shell の場合
export KUBECONFIG=~/.kube/config
kubelogin convert-kubeconfig -l spn
export AAD_SERVICE_PRINCIPAL_CLIENT_ID=<spn client id>
export AAD_SERVICE_PRINCIPAL_CLIENT_SECRET=<spn secret>
kubectl get no
正常に構成が正しければ、Kubectlコマンドが通る。
以上