🐙
ドキュメントの落とし穴に嵌った話:Azure App ServiceでのManaged Identity認証
この記事では、クラウド初心者の私がAzureを学び始めたときの体験について書いています。普段は公式ドキュメントを頼りに手探りで進めているのですが、今回は考えずにそのまま信じてしまった私のミスについてお話しします。
背景
そもそもの発端はApp Service上で稼働するコードが他のリソースへアクセスする際の認証としてManaged IDを初めてセットアップすることになったのですが、実際に実装を開始する前に手動で認証が通るか確認しようと思い、公式サイトを参考[1]にこんなコマンドを試しました:
curl 'http://169.254.169.254/metadata/identity/oauth2/token?resource=https://management.core.windows.net&api-version=2018-02-01' -H "Metadata: true"
これがAzure VMでは機能するのですが、App Serviceでは全く動かずに戸惑いました。
恐らく誤記載と思われるドキュメント

環境変数の確認が記載されているのにコマンド上では使われていないし妙だな……と今なら分かるのですがこのコマンドのエラーメッセージを延々と調べたりと時間を使ってしまいました。
なぜこの方法が通用しなかったのか
この169.254.169.254エンドポイントはいわばVM専用のようなもので、App Serviceでは使えません。App Serviceでは、MSI_ENDPOINTとMSI_SECRET環境変数を利用することでManaged Identityを使用します。ただ、これがKuduの範囲内で機能するため、SSH経由で直接確認することはできませんでした。
学んだこと
この経験を通じて、公式ドキュメントも万能ではないことに気付きました。Azureの各サービスはそれぞれ独特の仕様があり、それを理解して使うことが非常に重要です。特に、異なるサービスを組み合わせる場合は、その違いをしっかり把握しておくことが大切だと実感しました。
Discussion