サクッと作れる AKS環境でマネージドID を学ぼう
Azure の学習において中々ピンとこない概念やサービスに出くわしたときには、実際に体験してみることがおススメです。
そして『 マネージドID 』は Azure の初心者・初学者には中々ピンとこない概念の一つの場合が多いと思います。
少なくとも私はそうでした😅
そこで今回の記事では、そんなマネージドID を見たり触ったりできる AKS の環境を簡単に作成する方法をご紹介します。
マネージドID と AKS は、AZ-500 でも AZ-104 でも学習しておくべき内容です。
これらの試験を受験しようと考えている方にも役立つと思いますのでぜひ最後までお読みいただけますと嬉しいです。
そもそもマネージドID とは?
要はリソースに割り当てる ID ということなんですが、クラウドに馴染みがない場合にはあまりピンとはきませんよね😅
以前に書いた AWS の記事で、EC2 ( 仮想マシン ) インスタンスにロールをアタッチしていますが、ざっくりこれと同じようなことだと考えてください。
二種類存在する
さらにマネージドID は一種類ではないのです。
ここからがややこしさの本領発揮です。
システムに割り当てるか、ユーザーに割り当てるかという概念(選択肢)が存在するのです。
これらの違いについては、しばしば仮想マシン ( Azure VM ) を用いて説明されます。
システム割り当て ➡ 仮想マシンごとに作成し 1対1 で割り当て
ユーザー割り当て ➡ 複数仮想マシンに対して作成し 1対多 で割り当て
ということで、「目で見て触って理解を深めるために環境を用意しよう、しかも簡単に」がこの記事の趣旨なわけです。
環境作成
簡単に作成できることが重要ですので、コマンドをいくつか打つだけです。
必要に応じて若干修正するか、特に気にならなければそのままコピペしてもらえればと思います。
前提
この記事では Azure CLI を使用しています。
ちなみに、ローカル端末に Azure CLI や Azure PowerShell をインストールするのはわずかですが手間ですので、すぐに準備が整う Cloud Shell を使うのが良いと思います。
① 変数を定義する
以下の四つの変数をまず定義します。
値については必要に応じて都合の良いものに変えてください。
NAME_PREFIX=demoenv
AKS_CLUSTER_NAME=${NAME_PREFIX}-aks
RG_AKS=${NAME_PREFIX}-aks-rg
LOCATION=japaneast
その後もし定義した変数の値を念のため参照したければ、以下のように「 $変数名 」を引数として echoコマンドを打ってみてください。
$ echo $NAME_PREFIX
demoenv
② リソースグループを作成する
Azure ではお馴染みの(必須となる)リソースグループを、以下のように事前に定義した変数を使って作成します。
$ az group create --name $RG_AKS --location $LOCATION
③ AKSクラスターを作成する
事前に定義した変数と作成したリソースグループを使って、以下のようにコマンドを打って少し待てば出来上がりです。
$ az aks create --name $AKS_CLUSTER_NAME --resource-group $RG_AKS --ssh-key-value ~/.ssh/id_rsa.pub
今回はホームディレクトリ直下の .ssh の中に既に作成してあった公開鍵を指定しましたが、新規でキーペアを作成しそれを使用したい場合にはオプション『 --generate-ssh-keys 』を追加してコマンドを打ってください。
ちなみに、今回はノード ( VM ) への SSH接続を行わないので適当なキーペアで構いません。
作成された環境(リソース)
何故かリソースグループが二つ作成されていますが、問題ないのでまずは落ち着いてください。
$ az group list --output table | grep -e demoenv-aks-rg -e Name -e ------
Name Location Status
--------------------------------------- ------------- ---------
demoenv-aks-rg japaneast Succeeded 1️⃣
MC_demoenv-aks-rg_demoenv-aks_japaneast japaneast Succeeded 2️⃣
1️⃣ については、変数を使って今回の場合このようになるようにリソースグループを作成したのでそりゃそうですねといったところです。
2️⃣ は作成した覚えがありません。
ですがご安心ください。
勝手に作成されたものであり、名前も指定しなかったので 1️⃣ の Name に従って勝手につけられたのです。
作成されたマネージドID の確認
さてここからが本題です。
これにて二種類のマネージドID がデプロイされているハズなので確認してみましょう!
まず Azure ADテナントの『 エンタープライズ アプリケーション 』を確認すると、何やら明らかに今回作成した二種類のマネージドID に関係しそうなオブジェクトを見つけることができます。
そうこれらは、今回作成されたマネージドIDの『 サービスプリンシパルオブジェクト 』なのです。
AKS クラスター名のものがシステム割り当てマネージドID、AKS クラスター名 - agentpool のものがユーザー割り当てマネージドID なのです。
ユーザー割り当てマネージドID
サービスプリンシパルオブジェクトが確認できたので、今度はそれに対応する Azureリソースを探してみます。
2️⃣ のリソースグループに存在するリソースをすべて表示してみると、同名のものがありましたね⭐
$ az resource list --resource-group MC_demoenv-aks-rg_demoenv-aks_japaneast --output table
Name ResourceGroup Location Type Status
------------------------------------ --------------------------------------- ---------- ------------------------------------------------ --------
5bf64e21-0d78-4f18-85fb-a49bc5128d80 MC_demoenv-aks-rg_demoenv-aks_japaneast japaneast Microsoft.Network/publicIPAddresses
kubernetes MC_demoenv-aks-rg_demoenv-aks_japaneast japaneast Microsoft.Network/loadBalancers
demoenv-aks-agentpool ⭐ MC_demoenv-aks-rg_demoenv-aks_japaneast japaneast Microsoft.ManagedIdentity/userAssignedIdentities
aks-agentpool-28018829-nsg MC_demoenv-aks-rg_demoenv-aks_japaneast japaneast Microsoft.Network/networkSecurityGroups
aks-agentpool-28018829-routetable mc_demoenv-aks-rg_demoenv-aks_japaneast japaneast Microsoft.Network/routeTables
aks-vnet-28018829 MC_demoenv-aks-rg_demoenv-aks_japaneast japaneast Microsoft.Network/virtualNetworks
aks-nodepool1-18947091-vmss MC_demoenv-aks-rg_demoenv-aks_japaneast japaneast Microsoft.Compute/virtualMachineScaleSets
ユーザー割り当てマネージドID は Azure リソースとして作成されるのでこのような形で見えるのです。
Azure portal で確認してみても、アイコン付きでより分かりやすい形で表示されていますね。
ちなみに、このマネージドIDは
に使用します。
なお、今回の環境ではこのマネージドID には何のロールも割り当たっていません。
AKSクラスターの作成時に『 --attach-acr 』オプションを使用すると、ACR のアタッチを行い AcrPull ロールが割り当てられます。
作成後にアタッチを行ってこのロールを割り当てることもできますので、この辺りについても興味がある方は以下の公式ドキュメントにて詳細をご確認ください。
システム割り当てマネージドID
これについても対応する Azureリソースを探してみます。
2️⃣ のリソースグループにはこのサービスプリンシパルオブジェクトと同名のものは存在しなかったので、もう一方の 1️⃣ のリソースグループについて確認してみると、アレ?ありませんね。
$ az resource list --resource-group demoenv-aks-rg --output table
Name ResourceGroup Location Type Status
----------- --------------- ---------- ------------------------------------------ --------
demoenv-aks demoenv-aks-rg japaneast Microsoft.ContainerService/managedClusters
そうなんです。
こちらの場合は Azureリソースの一部として作成されるので、システム割り当てマネージドID は Azureリソースとして存在しないのです。
ちなみに、このマネージドID は
が使用事例です。
お片付け
色々なリソースが二つのリソースグループとともに作成されてしまいましたが、不要になれば以下のコマンドを打つことによって簡単にすべてを削除することができます。
$ az group delete --name demoenv-aks-rg --yes --no-wait
1️⃣ のリソースグループだけを指定してもらえれば、2️⃣ も含めてすべてを消し去ることができます。
ただ、このコマンドはその後の状況を一切教えてくれないので若干不安です。
その場合には以下のコマンドを打ってみてください。
ステータスが削除中となっているのが確認できるので安心です。
もちろん Azure portal から確認することでも問題ありません。
$ az group list -o table | grep -e demoenv-aks-rg -e Name -e ------
Name Location Status
--------------------------------------- ------------- ---------
demoenv-aks-rg japaneast Deleting 👈
MC_demoenv-aks-rg_demoenv-aks_japaneast japaneast Deleting 👈
🟠 さいごに 🔚
いかがだったでしょうか?
実際にオブジェクトを目で見ることによって、マネージドID のイメージができたのではないでしょうか?
また AKS 自体を学習する環境としても使えますし、この環境にアプリケーションをデプロイして実際に使ってみることでマネージドID の理解がさらに深まるかもしれませんので、よろしければご活用ください。
今後も Azure に関する技術情報やその他の資格試験に関する記事を書いていこうと思いますので、よろしければフォローをお願いします🔆
また、この記事が少しでもタメになった、面白かったという方がいらっしゃいましたら、ぜひ 「 スキ 」 ボタンのクリックをお願いします😋
最後までお読みいただきありがとうございました 😊