Использование Azure управляемого удостоверения для службы приложений не авторизация для нового SDK - PullRequest
0 голосов
/ 18 июня 2020

Мы уже некоторое время успешно используем Microsoft.Azure.KeyVault. Использование управляемого удостоверения в наших веб-приложениях и группе AD для предоставления доступа к хранилищу ключей.

Я обновил несколько приложений, чтобы использовать пакет Azure.Identity, и приложение. Net Framework продолжает работать , но приложение. Net Core 3.1 теперь, похоже, не принимает учетные данные.

Если я добавлю явные AZURE_CLIENT_ID, AZURE_CLIENT_SECRET и AZURE_TENENT_ID, которые соответствуют RBA C сгенерирован сервисный принцип, все работает нормально. Я не хочу этого делать и предпочел бы использовать управляемую идентификацию (конфигурация отсутствует).

Это пакеты, на которые я сейчас ссылаюсь:

<PackageReference Include="Azure.Identity" Version="1.1.1" />
<PackageReference Include="Azure.Security.KeyVault.Secrets" Version="4.0.3" />

Это код конструкции:

new SecretClient("name-of-vault", new DefaultAzureCredential());

Так что ничего особенного.

Это трассировка стека:

---> Azure .Identity.AuthenticationFailedException: Ошибка аутентификации DefaultAzureCredential. ---> Azure .Identity.AuthenticationFailedException: недопустимый ответ, ответ аутентификации не был в ожидаемом формате. в Azure .Identity.ManagedIdentityClient.Deserialize (JsonElement json) в Azure .Identity.ManagedIdentityClient.DeserializeAsyn c (содержимое потока, CancellationToken cancellationToken) в Azure .Identity.ManagedIdentityClient ( String [] scopes, CancellationToken cancellationToken) в Azure .Identity.ManagedIdentityCredential.GetTokenImplAsyn c (TokenRequestContext requestContext, CancellationToken cancellationToken) --- Конец трассировки стека внутренних исключений --- в *. c (Boolean isAsyn c, TokenRequestContext requestContext, CancellationToken cancellationToken) в Azure .Identity.DefaultAzureCredential.GetTokenAsyn c (TokenRequestContext requestContext, CancellationToken cancellurity.AnticationToken *. * (Сообщение HttpMessage, логический асинхронный c, вызов AuthenticationChallenge) в Azure .Security.KeyVault.ChallengeBasedAuthenti cationPolicy.ProcessCoreAsyn c (сообщение HttpMessage, конвейер ReadOnlyMemory1, логический асинхронный c) в Azure .Core.Pipeline.RetryPolicy.ProcessAsyn c (сообщение HttpMessage, конвейер ReadOnlyMemory1 c) asyn *1049*) * .Core.Pipeline.RetryPolicy.ProcessAsyn c (сообщение HttpMessage, конвейер ReadOnlyMemory1, логический асинхронный c) в Azure .Core.Pipeline.HttpPipelineSynchronousPolicy.ProcessAsyn c (HttpMessage message * (HttpMessage) сообщение * (HttpMessage) * .Core.Pipeline.HttpPipelineSynchronousPolicy.ProcessAsyn c (сообщение HttpMessage, конвейер ReadOnlyMemory1) в Azure .Core.Pipeline.HttpPipeline.SendRequestAsyn c (запрос запроса, CancellationTokey cancellation * .CancellationToken cancellation *. KeyVaultPipeline.SendRequestAsyn c (запрос запроса, CancellationToken cancellationToken) в Azure .Security.KeyVault.KeyVaultPipeline.SendRequestAsync [TResult] (метод RequestMethod, Func1 resultFactory, * CancellationToken path cancellation [10]). .KeyVault.Secrets.SecretClient.GetSecretAsyn c (имя строки, версия строки, CancellationToken cancellationToken) в Codat.Infrastructure.SecretsProvider.SecretsProvider. <> C__DisplayClass18_0.d.MoveNext ()

Ответы [ 3 ]

1 голос
/ 22 июня 2020

Кажется, что служба MSI в экземпляре службы приложений возвращает недопустимый формат DateTimeOffset.

Запрос:

$response = Invoke-WebRequest -Uri 'http://127.0.0.1:41601/MSI/token/?api-version=2017-09-01&resource=https://vault.azure.net' -Method GET -Headers @{Metadata="true";Secret="REDACTED"} -UseBasicParsing

Ответ:

StatusCode        : 200
StatusDescription : OK
Content           : {123, 34, 97, 99...}
RawContent        : HTTP/1.1 200 OK
                    Content-Length: 1698
                    Date: Mon, 22 Jun 2020 09:26:44 GMT
                    
                    {"access_token":"REDACTED...
Headers           : {[Content-Length, 1698], [Date, Mon, 22 Jun 2020 09:26:44 
                    GMT]}
RawContentLength  : 1698

{
    "access_token": "REDACTED",
    "expires_on": "6/23/2020 9:28:43 AM +00:00",
    "resource": "https://vault.azure.net",
    "token_type": "Bearer",
    "client_id": "E7B39A52-REDACTED"
}

Формат "M/d/yyyy H:m:s tt K" не может быть проанализирован ManagedIdentityClient. Таким образом, похоже, что ошибка находится в базовой службе azure. Я поднял вопрос с командой https://github.com/Azure/azure-sdk-for-net/issues/12869 он был исправлен в 1.2.0-preview-4.

0 голосов
/ 19 июня 2020

Попробуйте использовать ManagedIdentityCredential напрямую:

new SecretClient(new Uri(kvUri), new ManagedIdentityCredential());
0 голосов
/ 18 июня 2020

Разве так не должно быть?

 var sc = new SecretClient(new Uri("https://<YOUR-KEY-VAULT>.vault.azure.net/"), new DefaultAzureCredential());
 Secret1 = sc.GetSecret(nameof("name-of-vault")).Value;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...