VSTS Build Pipeline: тест не сбои, подключаясь к Vault Azure Key VaultC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 VSTS Build Pipeline: тест не сбои, подключаясь к Vault Azure Key Vault

Сообщение Anonymous »

Я пытаюсь использовать VST (теперь Azure DevOps) для выполнения конвейера CI/CD. Для моего конвейера сборки у меня есть очень базовая настройка, включающая в себя выполнение шагов восстановления, строительства, тестирования и публикации. < /p>

Для моего тестового этапа у меня есть его настройка для запуска двух тестовых проектов - один модульный тестовый проект и один проект тестирования интеграции. У меня есть настройка политики доступа к ключевым хранилищам, чтобы обеспечить доступ как для меня, так и для Azure DevOps. Когда я запускаю свои тесты локально, используя Visual Studio, так как я вошел в ту же учетную запись, которая имеет доступ к Vault Azure, я могу запустить тесты без каких -либо ошибок. < /p>

Мое приложение настроено для доступа к клавишу Vault, используя ниже настройку: < /p>

Код: Выделить всё

 public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.ConfigureAppConfiguration((ctx, builder) =>
{
var keyVaultEndpoint = GetKeyVaultEndpoint();

if (!string.IsNullOrEmpty(keyVaultEndpoint))
{
var azureServiceTokenProvider = new AzureServiceTokenProvider();
var keyVaultClient = new KeyVaultClient(new KeyVaultClient.AuthenticationCallback(azureServiceTokenProvider.KeyVaultTokenCallback));
builder.AddAzureKeyVault(keyVaultEndpoint, keyVaultClient, new DefaultKeyVaultSecretManager());
}
}
)
.UseStartup();
Когда я запускаю конвейер сборки, я использую размещенный экземпляр VS2017 для сборки своего проекта. Все работает, за исключением интеграционных тестов, которые пытаются получить доступ к хранилищу ключей. Я использую следующие пакеты:
  • Microsoft.Azure.Services.AppAuthentication — упрощает получениетокены доступа для сценариев аутентификации между службами Azure.
  • Microsoft.Azure.KeyVault — содержит методы для взаимодействия с Key Vault.
  • Microsoft.Extensions.Configuration.AzureKeyVault — содержит

    расширения IConfiguration для Azure Key Vault
    < /ul>

    Я следовал этому руководству https://learn.microsoft.com/en-us/azure ... n-keyvault, чтобы настроить хранилище ключей. и интегрировать его в мое приложение.

    Я просто пытаюсь заставить свою сборку работать, проверяя прохождение как модульного, так и интеграционного тестов. Я пока не развертываю его в службе приложений. Модульные тесты выполняются без каких-либо проблем, поскольку я издеваюсь над различными сервисами. Мой интеграционный тест завершился неудачно с сообщениями об ошибках ниже. Как получить тестовый доступ к хранилищу ключей? Нужно ли мне добавлять какие-либо специальные политики доступа к моему хранилищу ключей для размещенной сборки VS2017? Не знаю, что делать, поскольку не вижу ничего выдающегося.

    [img]https://i.sstatic.net /slceb.jpg[/img]


    Ниже приведена трассировка стека ошибки:

    Код: Выделить всё

        2018-10-16T00:37:04.6202055Z Test run for D:\a\1\s\SGIntegrationTests\bin\Release\netcoreapp2.1\SGIntegrationTests.dll(.NETCoreApp,Version=v2.1)
    2018-10-16T00:37:05.3640674Z Microsoft (R) Test Execution Command Line Tool Version 15.8.0
    2018-10-16T00:37:05.3641588Z Copyright (c) Microsoft Corporation.  All rights reserved.
    2018-10-16T00:37:05.3641723Z
    2018-10-16T00:37:06.8873531Z Starting test execution, please wait...
    2018-10-16T00:37:51.9955035Z [xUnit.net 00:00:40.80]     SGIntegrationTests.HomeControllerShould.IndexContentTypeIsTextHtml [FAIL]
    2018-10-16T00:37:52.0883568Z Failed   SGIntegrationTests.HomeControllerShould.IndexContentTypeIsTextHtml
    2018-10-16T00:37:52.0884088Z Error Message:
    2018-10-16T00:37:52.0884378Z  Microsoft.Azure.Services.AppAuthentication.AzureServiceTokenProviderException : Parameters: Connection String: [No connection string specified], Resource: https://vault.azure.net, Authority: https://login.windows.net/63cd8468-5bc3-4c0a-a6f8-1e314d696937. Exception Message: Tried the following 3 methods to get an access token, but none of them worked.
    2018-10-16T00:37:52.0884737Z Parameters: Connection String: [No connection string specified], Resource: https://vault.azure.net, Authority: https://login.windows.net/63cd8468-5bc3-4c0a-a6f8-1e314d696937. Exception Message: Tried to get token using Managed Service Identity. Access token could not be acquired.  MSI ResponseCode: BadRequest, Response: {"error":"invalid_request","error_description":"Identity not found"}
    2018-10-16T00:37:52.0884899Z Parameters: Connection String: [No connection string specified], Resource: https://vault.azure.net, Authority: https://login.windows.net/63cd8468-5bc3-4c0a-a6f8-1e314d696937. Exception Message: Tried to get token using Visual Studio. Access token could not be acquired. Visual Studio Token provider file not found at "C:\Users\VssAdministrator\AppData\Local\.IdentityService\AzureServiceAuth\tokenprovider.json"
    2018-10-16T00:37:52.0885142Z Parameters: Connection String: [No connection string specified], Resource: https://vault.azure.net, Authority: https://login.windows.net/63cd8468-5bc3-4c0a-a6f8-1e314d696937. Exception Message: Tried to get token using Azure CLI. Access token could not be acquired. Process took too long to return the token.
    2018-10-16T00:37:52.0885221Z
    2018-10-16T00:37:52.0885284Z Stack Trace:
    2018-10-16T00:37:52.0885349Z    at Microsoft.Azure.Services.AppAuthentication.AzureServiceTokenProvider.GetAccessTokenAsyncImpl(String authority, String resource, String scope)
    2018-10-16T00:37:52.0885428Z    at Microsoft.Azure.KeyVault.KeyVaultCredential.PostAuthenticate(HttpResponseMessage response)
    2018-10-16T00:37:52.0885502Z    at Microsoft.Azure.KeyVault.KeyVaultCredential.ProcessHttpRequestAsync(HttpRequestMessage request, CancellationToken cancellationToken)
    2018-10-16T00:37:52.0886831Z    at Microsoft.Azure.KeyVault.KeyVaultClient.GetSecretsWithHttpMessagesAsync(String vaultBaseUrl, Nullable`1 maxresults, Dictionary`2 customHeaders, CancellationToken cancellationToken)
    2018-10-16T00:37:52.0886887Z    at Microsoft.Azure.KeyVault.KeyVaultClientExtensions.GetSecretsAsync(IKeyVaultClient operations, String vaultBaseUrl, Nullable`1 maxresults, CancellationToken cancellationToken)
    2018-10-16T00:37:52.0886935Z    at Microsoft.Extensions.Configuration.AzureKeyVault.AzureKeyVaultConfigurationProvider.LoadAsync()
    2018-10-16T00:37:52.0887000Z    at Microsoft.Extensions.Configuration.AzureKeyVault.AzureKeyVaultConfigurationProvider.Load()
    2018-10-16T00:37:52.0887045Z    at Microsoft.Extensions.Configuration.ConfigurationRoot..ctor(IList`1 providers)
    2018-10-16T00:37:52.0887090Z    at Microsoft.Extensions.Configuration.ConfigurationBuilder.Build()
    2018-10-16T00:37:52.0887269Z    at Microsoft.AspNetCore.Hosting.WebHostBuilder.BuildCommonServices(AggregateException& hostingStartupErrors)
    2018-10-16T00:37:52.0887324Z    at Microsoft.AspNetCore.Hosting.WebHostBuilder.Build()
    2018-10-16T00:37:52.0887371Z    at Microsoft.AspNetCore.TestHost.TestServer..ctor(IWebHostBuilder builder, IFeatureCollection featureCollection)
    2018-10-16T00:37:52.0887433Z    at Microsoft.AspNetCore.Mvc.Testing.WebApplicationFactory`1.CreateServer(IWebHostBuilder builder)
    2018-10-16T00:37:52.0887477Z    at Microsoft.AspNetCore.Mvc.Testing.WebApplicationFactory`1.EnsureServer()
    2018-10-16T00:37:52.0887525Z    at Microsoft.AspNetCore.Mvc.Testing.WebApplicationFactory`1.CreateDefaultClient(DelegatingHandler[] handlers)
    < /code>
    
    
    
     обновление < /h2>
    
    Я нашел только 1 связанный пост К этому вопросу: https://social.msdn.microsoft.com/forums/en-us/0bac778a-283a-4be1-bc75-605e776adac0/managed-service-identity-issue?forum=windowsazurewebsitespreview. Но пост связан с развертыванием приложения в слот Azure. Я просто пытаюсь построить свое приложение в конвейере. < /p>
    
    Я все еще пытаюсь решить эту проблему и не уверен, что такое лучший способ обеспечить необходимый доступ. < /p>
    
    
    
     обновление 2 < /h2>
    
    Я до сих пор не нашел Решение для этого. Я потерял, как получить свой трубопровод, чтобы провести тест без проблем. Я увидел, что выпускный трубопровод у вас также есть варианты запуска тестов. Но они, кажется, принимают файлы .dll, а в моем файле Drop Pipeline Drop File имеет только веб -приложение (я не вижу никаких тестовых проектов, опубликованных Drop File). Не уверен, что это даже возможно.  Мне удалось заставить его работать, используя последнюю опцию, предоставленную здесь: https://learn.microsoft.com/en-us/azure/key-wault/service-to-service-authentication#connection-string- Поддержка < /p>
    
    Я попробовал другие способы использования сертификата, но в любое время {currentUser} в строке подключения приводится в сборе конвейера сборки. Он работает на моей местной машине, но не в конвейере сборки. < /p>
    
    Чтобы заставить его работать, мне пришлось сделать три вещи: < /p>
    
    
    [*] Войдите в Azure.  Настройка новой регистрации приложения в Azure ad < /li>
     В вашей новой регистрации приложения AD создайте новый секрет клиента
    
    [*]  Предоставьте доступ к новому приложению AD к своему своему своему хранилищу. Зайдите в свои политики доступа к ключам и добавьте приложение, которое вы создали в своем объявлении, с доступом к чтению в ваши секреты. /wzoj2.png "/> 
    [*]  изменил мой призыв к [b]  azureservicetokenprovier ()  [/b] в моем сильном > Program.cs < /strong> файл следующим образом: < /p>
    
     var azureServiceTokenProvider = new AzureServiceTokenProvider("connectionString={your key vault endpoint};RunAs=App;AppId={your app id that you setup in Azure AD};TenantId={your azure subscription};AppKey={your client secret key}")
    
Обратите внимание, что секрет клиента должен быть правильно отформатирован. При регистрации приложения (предварительная версия) генерируется случайный секретный ключ. Иногда этот ключ не работает в строке подключения (выдает ошибку, как неправильно отформатированный). Либо попробуйте сгенерировать собственный ключ в непредварительной версии регистрации приложения, либо сгенерируйте новый ключ и повторите попытку.

После этого я смог запустить интеграционный тест в мой конвейер сборки успешно и создаю выпуск для моего веб-приложения в Azure. Меня не устраивает этот подход, потому что, хотя он и работает, он раскрывает секретное значение в самом коде. В соответствии с описанным выше подходом не требуется включать службу управления удостоверениями. Я считаю, что в этом отношении это крайне плохо.

Должен быть лучший способ. Один из вариантов — не запускать интеграционный тест в конвейере сборки. Не уверен, что это правильный подход. Я все еще надеюсь, что кто-нибудь сможет предложить лучший подход к этому или объяснить, можно ли использовать мой подход.

Подробнее здесь: https://stackoverflow.com/questions/528 ... -key-vault
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Проблема с Azure Key Vault Vault в приложении .NET 6 Container перед Build ()
    Anonymous » » в форуме C#
    0 Ответы
    19 Просмотры
    Последнее сообщение Anonymous
  • Проблема с Azure Key Vault Vault в приложении .NET 6 Container перед Build ()
    Anonymous » » в форуме C#
    0 Ответы
    10 Просмотры
    Последнее сообщение Anonymous
  • Как я могу использовать Secrets.json и Vault Key Vault без изменения переменных?
    Гость » » в форуме C#
    0 Ответы
    9 Просмотры
    Последнее сообщение Гость
  • Подпишите сборки внутри пакета nuget с помощью Azure Key Vault в конвейере Azure Devops.
    Anonymous » » в форуме C#
    0 Ответы
    83 Просмотры
    Последнее сообщение Anonymous
  • .NET Framework — 4.7.2 — Azure Key Vault: не удалось загрузить файл или сборку «Azure.Core, версия = 1.37.0.0».
    Anonymous » » в форуме C#
    0 Ответы
    37 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C#»