見出し画像

サクッと作れる AKS環境でマネージドID を学ぼう

Azure の学習において中々ピンとこない概念やサービスに出くわしたときには、実際に体験してみることがおススメです。

そして『 マネージドID 』は Azure の初心者・初学者には中々ピンとこない概念の一つの場合が多いと思います。
少なくとも私はそうでした😅

そこで今回の記事では、そんなマネージドID を見たり触ったりできる AKS の環境を簡単に作成する方法をご紹介します。
マネージドID と AKS は、AZ-500 でも AZ-104 でも学習しておくべき内容です。
これらの試験を受験しようと考えている方にも役立つと思いますのでぜひ最後までお読みいただけますと嬉しいです。


そもそもマネージドID とは?

マネージド ID により、Azure Active Directory (Azure AD) 認証をサポートするリソースに接続するときに使用される Azure Active Directory のマネージド ID がアプリケーションに提供されます。 アプリケーションは、マネージド ID を使用して、資格情報を管理することなく Azure AD トークンを取得できます。

Azure リソースのマネージド ID とは

要はリソースに割り当てる ID ということなんですが、クラウドに馴染みがない場合にはあまりピンとはきませんよね😅

以前に書いた AWS の記事で、EC2 ( 仮想マシン ) インスタンスにロールをアタッチしていますが、ざっくりこれと同じようなことだと考えてください。

二種類存在する

さらにマネージドID は一種類ではないのです。
ここからがややこしさの本領発揮です。

システムに割り当てるか、ユーザーに割り当てるかという概念(選択肢)が存在するのです。

マネージド ID には、次の 2 種類があります。
システム割り当て。 Azure サービスによっては、サービス インスタンスに対して直接マネージド ID を有効にすることができます。 システム割り当てマネージド ID を有効にすると、Azure AD で ID が作成されます。 この ID は、そのサービス インスタンスのライフサイクルに関連付けられています。 リソースが削除されると、その ID も Azure によって自動的に削除されます。 その ID を使用して Azure AD にトークンを要求できるのは、必然的に、その Azure リソースのみとなります。
ユーザー割り当て。 スタンドアロンの Azure リソースとしてマネージド ID を自分で作成することもできます。 ユーザー割り当てマネージド ID を作成して、それを Azure サービスの 1 つまたは複数のインスタンスに割り当てることができます。 ユーザー割り当てマネージド ID の場合、ID は、それを使用するリソースとは別に管理されます。

マネージド 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 に従って勝手につけられたのです。

1. 最初のリソース グループを作成します。 このグループには、Kubernetes サービスのリソースのみが含まれます。 AKS リソース プロバイダーにより、デプロイの間に 2 番目のリソース グループが自動的に作成されます。 2 番目のリソース グループの例は、MC_myResourceGroup_myAKSCluster_eastus です。 この 2 つ目のリソース グループの名前を指定する方法については、次のセクションをご覧ください。
2. ノード リソース グループと呼ばれる 2 つ目のリソース グループには、クラスターに関連付けられたインフラストラクチャ リソースがすべて含まれます。 これらのリソースには、Kubernetes ノードの VM、仮想ネットワー キング、およびストレージが含まれます。 既定では、ノード リソース グループには MC_myResourceGroup_myAKSCluster_eastus のような名前が付いています。 AKS では、クラスターが削除されるたびにノード リソース グループが自動的に削除されるため、クラスターのライフサイクルを共有するリソースにのみ使用するようにします。

AKS と一緒にリソース グループが 2 つ作成されるのはなぜでしょうか?

作成されたマネージド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は

Azure Container Registry (ACR) を使用した認証

マネージド 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 は

イングレス ロード バランサーと AKS マネージド パブリック IP、クラスター オートスケーラー、Azure ディスクおよびファイル CSI ドライバーなど、クラスター リソースを管理する目的で AKS コントロール プレーン コンポーネントによって使用されます

マネージド 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 に関する技術情報やその他の資格試験に関する記事を書いていこうと思いますので、よろしければフォローをお願いします🔆

また、この記事が少しでもタメになった、面白かったという方がいらっしゃいましたら、ぜひ 「 スキ 」 ボタンのクリックをお願いします😋

最後までお読みいただきありがとうございました 😊

▶ おススメ関連学習書籍


この記事が参加している募集

スキしてみて

もしこの記事が何かの参考になったもしくは面白かったという方は、応援していただけると大変嬉しいです😊 これからもよろしくお願いします。