AppServiceでマネージドサービスIDを有効にしました。しかし、私のWebJobsはキーにアクセスできないようです。
彼らは報告します:
Tried the following 3 methods to get an access token, but none of them worked. Parameters: Connectionstring: [No connection string specified], Resource: https://vault.Azure.net, Authority: . Exception Message: Tried to get token using Managed Service Identity. Unable to connect to the Managed Service Identity (MSI) endpoint. Please check that you are running on an Azure resource that has MSI setup. Parameters: Connectionstring: [No connection string specified], Resource: https://vault.Azure.net, Authority: https://login.microsoftonline.com/common. Exception Message: Tried to get token using Active Directory Integrated Authentication. Access token could not be acquired. password_required_for_managed_user: Password is required for managed user Parameters: Connectionstring: [No connection string specified], Resource: https://vault.Azure.net, Authority: . Exception Message: Tried to get token using Azure CLI. Access token could not be acquired. 'az' is not recognized as an internal or external command,
工藤はMSI_環境変数を表示しません。
これはどのように機能するはずですか?これは既存のアプリサービスプランです。
すでに環境変数を設定していましたが、関数アプリでMSIを使用しようとしたときに、この問題を解決しました。何度も再起動してみましたが、うまくいきませんでした。私がやったことは、関数のMSIを手動でオフにしてから、再度有効にすることでした。これは理想的ではありませんでしたが、うまくいきました。
それが役に立てば幸い!
MSIを有効にしてからスロットを交換すると、スロットの変更によって機能が終了することがわかりました。オフにしてから再度オンにすることで再度有効にすることができますが、ADに新しいIDが作成され、機能するにはキーボールトのアクセス許可をリセットする必要があります。
AppAuthenticationライブラリは、サイトに代わってトークンを受信するAppServiceの内部エンドポイントを利用します。このエンドポイントは非静的であるため、環境変数に設定されます。 ARMを介してサイトのMSIをアクティブ化した後、2つの新しい環境変数を設定するために、サイトを再起動する必要があります。
MSI_ENDPOINTおよびMSI_SECRET
これらの変数の存在は、AppAuthenticationライブラリがそれらを使用して認証トークンを取得するため、実行時にMSI機能が正しく機能するために不可欠です。エラーメッセージはこれを反映しています:
例外メッセージ:マネージドサービスIDを使用してトークンを取得しようとしました。 マネージドサービスID(MSI)エンドポイントに接続できません。 MSIが設定されているAzureリソースで実行していることを確認してください。
これらの変数がない場合は、サイトを再起動する必要があるかもしれません。
https://docs.Microsoft.com/en-us/Azure/app-service/app-service-managed-service-identity
環境変数が設定されていても同じエラーが表示される場合は、上記の記事に、そのエンドポイントに手動でリクエストを送信する方法を示すコードサンプルがあります。
public static async Task<HttpResponseMessage> GetToken(string resource, string apiversion) {
HttpClient client = new HttpClient();
client.DefaultRequestHeaders.Add("Secret", Environment.GetEnvironmentVariable("MSI_SECRET"));
return await client.GetAsync(String.Format("{0}/?resource={1}&api-version={2}", Environment.GetEnvironmentVariable("MSI_ENDPOINT"), resource, apiversion));
}
私はそれを試して、どのような応答が返ってくるかを確認します。
私の場合、KeyVaultにアプリケーションのアクセスポリシーを追加するのを忘れていました
IDを有効にし、アクセスポリシーを介してkeyvaultでAzure関数アプリへのアクセスを許可します。あなたはプラットフォーム機能タブでアイデンティティを見つけることができますこれらの2つのステップは私のために働きます
私のように、MSI
を有効にする方法を考えている人のために。
私のシナリオ:私はApp Service
すでに展開され、長期間実行されています。さらに、Azure DevOps
パイプラインを自動スワップに構成しました展開スロット (ステージング/プロダクション)。突然、通常のプッシュの後、説明されている問題のために本番環境が失敗し始めます。
したがって、MSIを再度有効にするために(なぜ再度有効にする必要があるのかわかりませんが、これは回避策にすぎず、そもそもまだ有効になっているはずなので、解決策)
AppServiceに移動します。次に、設定-> IDの下にあります。ステータスを確認してください:私の場合はoff:(
わかりやすくするために下の画像を添付しました。