Доступ к AzureKeyVaults с помощью ManagedIdentity вызывает исключение sporadi c - PullRequest
0 голосов
/ 05 августа 2020

Я пытаюсь получить доступ к AzureKeyVaults из моего. NET Framework приложения, развернутого в AppService. Обычно это работает, но когда я сбрасываю журналы AppService, следующее исключение возникает один раз в несколько часов:

<Data>TargetInvocationException</Data><Data>Exception has been thrown by the target of an invocation.
   at System.RuntimeMethodHandle.InvokeMethod(Object target, Object[] arguments, Signature sig, Boolean constructor)
   at System.Reflection.RuntimeMethodInfo.UnsafeInvokeInternal(Object obj, Object[] parameters, Object[] arguments)
   at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
   at Owin.Loader.DefaultLoader.&lt;&gt;c__DisplayClass19_1.&lt;MakeDelegate&gt;b__0(IAppBuilder builder)
   at Owin.Loader.DefaultLoader.&lt;&gt;c__DisplayClass9_0.&lt;LoadImplementation&gt;b__0(IAppBuilder builder)
   at Microsoft.Owin.Host.SystemWeb.OwinAppContext.Initialize(Action`1 startup)
   at Microsoft.Owin.Host.SystemWeb.OwinBuilder.Build(Action`1 startup)
   at Microsoft.Owin.Host.SystemWeb.OwinHttpModule.InitializeBlueprint()
   at System.Threading.LazyInitializer.EnsureInitializedCore[T](T&amp; target, Boolean&amp; initialized, Object&amp; syncLock, Func`1 valueFactory)
   at Microsoft.Owin.Host.SystemWeb.OwinHttpModule.Init(HttpApplication context)
   at System.Web.HttpApplication.RegisterEventSubscriptionsWithIIS(IntPtr appContext, HttpContext context, MethodInfo[] handlers)
   at System.Web.HttpApplication.InitSpecial(HttpApplicationState state, MethodInfo[] handlers, IntPtr appContext, HttpContext context)
   at System.Web.HttpApplicationFactory.GetSpecialApplicationInstance(IntPtr appContext, HttpContext context)
   at System.Web.Hosting.PipelineRuntime.InitializeApplication(IntPtr appContext)

Parameters: Connection String: RunAs=App;, Resource: https://vault.azure.net, Authority: https://login.windows.net/###obfuscated_guid###. Exception Message: Tried to get token using Managed Service Identity. Access token could not be acquired. An error occurred while sending the request.

Вот мой код, который вызывает это:

 var azureServiceTokenProvider = new AzureServiceTokenProvider("RunAs=App;");
 var keyVaultClient = new KeyVaultClient(new KeyVaultClient.AuthenticationCallback(azureServiceTokenProvider.KeyVaultTokenCallback));

 keyVaults.ForEach(keyVault => configurationBuilder.AddAzureKeyVault(
     $"https://{keyVault}.vault.azure.net/",
     keyVaultClient,
     new DefaultKeyVaultSecretManager()));

Там это два ключевых хранилища, которые я пытаюсь загрузить таким образом. У обоих настроены политики доступа, которые позволяют моему AppService вызывать их (разрешения на получение и список для секретов). Я также включил «Системную идентификацию» для моего AppService.

У вас есть какие-нибудь рекомендации, как решить эту проблему? Заранее спасибо!

1 Ответ

0 голосов
/ 05 сентября 2020

Спасибо всем за ваши комментарии,

Ответ был намного тривиальнее, чем я ожидал. Я добавил предварительные слоты в AppService и предположил, что конфигурация вместе с конфигурацией управляемой идентификации копируется автоматически. К сожалению, это не так.

Добавление управляемого идентификатора в слот препрода и добавление слота препрода в политики в KeyVault решило проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...