Azure KeyVault: Azure.신원.자격 증명을 사용할 경우예외:DefaultAzureCredential이 포함된 자격 증명에서 토큰을 검색하지 못했습니다.
.net 프레임워크를 대상으로 하는 내 aspnet 코어 애플리케이션을 Azure Keyvault와 연결하려고 합니다.ID를 지원하는 새 zure VM에서는 모든 것이 정상적으로 작동하지만 이 애플리케이션은 ID를 지원하지 않는 기존 zure VM에서 호스팅됩니다.시스템 환경 변수 AzureService를 만들었습니다.Azure keyvault를 사용하는 분리 가능한 다른 .net 프레임워크 응용 프로그램인 AuthConnectionString은 이미 사용 중이며 완벽하게 작동합니다.
내 stdout 로그를 보면 매번 다음과 같은 예외가 발생합니다.
애저, 아이덴티티자격 증명을 사용할 경우예외:기본 AzureCredential이 포함된 자격 증명에서 토큰을 검색하지 못했습니다. 환경 자격 증명 인증을 사용할 수 없습니다.환경 변수가 완전히 구성되지 않았습니다. 관리됨IdentityCredential 인증을 사용할 수 없습니다. 요청한 ID가 이 리소스에 할당되지 않았습니다.
시작 시 다음 코드를 사용합니다.
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseApplicationInsights(ConfigurationManager.AppSettings["applicationInsightsInstrumentationKey"])
.ConfigureKestrel(options => options.AddServerHeader = false)
.UseIISIntegration()
.ConfigureAppConfiguration((context, config) =>
{
var vaultName = ConfigurationManager.AppSettings["VaultName"];
if (!string.IsNullOrEmpty(vaultName))
{
var azureServiceTokenProvider = new AzureServiceTokenProvider();
var keyVaultClient = new KeyVaultClient(
new KeyVaultClient.AuthenticationCallback(
azureServiceTokenProvider.KeyVaultTokenCallback));
config.AddAzureKeyVault(
$"https://{vaultName}.vault.azure.net/",
keyVaultClient,
new DefaultKeyVaultSecretManager());
}
})
.UseStartup<Startup>();
web.config에서 다음 항목을 선택합니다.
<configSections>
<section name="configBuilders" type="System.Configuration.ConfigurationBuildersSection, System.Configuration, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" restartOnExternalChanges="false" requirePermission="false"/>
</configSections>
<configBuilders>
<builders>
<add name="AzureKeyVault" vaultName="<#= this.VaultName #>" type="Microsoft.Configuration.ConfigurationBuilders.AzureKeyVaultConfigBuilder, Microsoft.Configuration.ConfigurationBuilders.Azure, Version=2.0.0.0, Culture=neutral" vaultUri="https://<#= this.VaultName #>.vault.azure.net" />
</builders>
</configBuilders>
<connectionStrings configBuilders="AzureKeyVault">
<add name="ConnectionString" connectionString="" providerName="System.Data.SqlClient"/>
</connectionStrings>
이 오류는 Visual Studio가 어떤 이유로 Azure Service Authentication 연결을 잃었거나 실제 AD 자격 증명이 변경된 경우(예: 암호 변경)에도 발생할 수 있습니다.
이 경우 다시 로그인하기만 하면 문제가 해결됩니다.
Visual Studio에서 Tools > Options로 이동합니다."Azure 서비스 인증" > "계정 선택"을 확장합니다.자격 증명 다시 입력 링크가 표시되면 이 링크를 클릭하고 다시 로그인합니다.그렇지 않으면 오른쪽 상단의 Visual Studio 프로필을 통해 정기적으로 로그아웃 + 로그인해 보십시오.
다음과 같은 시스템 환경 변수를 설정하고 있는지 확인해 주시겠습니까?
AZURE_CLIENT_ID
의 앱 ID 비스책앱의자 아이디
AZURE_TENANT_ID
Directory Azure Active Directory 파일
AZURE_CLIENT_SECRET
비밀 중 입니다.
VS 2019 앱에서는 zure 리소스 그룹에 액세스할 수 있는 VS 로그인 사용자의 자격 증명을 다시 입력할 수 있습니다.
IIS Express가 아닌 IIS를 사용하여 사이트를 로컬로 실행하는 경우 Azure 계정 자격 증명으로 사이트의 응용 프로그램 풀 ID를 실행해야 할 수도 있습니다. 따라서 브라우저에서 portal.azure.com 또는 dev.azure.com 에 로그인하는 데 사용하는 자격 증명과 정확한 자격 증명이 필요할 수 있습니다.PAT가 작동하지 않습니다.
설정이 완료되면 앱 풀을 재활용합니다.
그럼 다음으로 이동%windir%\System32\inetsrv\config\applicationHost.config
검색:setProfileEnvironment
로 설정된 경우false
로 변경합니다.true
.
없으면 applicationPoolDefaults 태그 아래에 추가합니다.
<applicationPoolDefaults managedRuntimeVersion="v4.0">
<processModel identityType="ApplicationPoolIdentity" loadUserProfile="true" setProfileEnvironment="true" />
</applicationPoolDefaults>
저에게 있어 이것은 단지 첫 번째 예외일 뿐입니다. 더 깊이 파고드는 것입니다(계속 => 계속 => 계속).저는 결국 진짜 예외에 도달했습니다.
''az''는 내부 또는 외부 명령으로 인식되지 않습니다.
알고 보니 컴퓨터에 Azure CLI를 설치하는 것을 잊었습니다!
한 번 그렇게 하면 원본 'Credential Unavailable'이 남아 있습니다.'예외'지만 처리되었고(내 디버거가 왜 그것을 부수는지는 확실하지 않지만, 그것은 다른 이야기입니다) 모든 것이 작동했습니다.
이 StackOverflow 링크가 도움이 되었습니다.
저는 이 문제를 해결하기 위해 다음 단계를 수행했습니다.Zure 포털 액세스 권한과 필요한 리소스가 있는지 확인합니다.
- Azure CLI 설치
- 관리자로 PowerShell 열기
- az login 명령을 사용하여 zure에 로그인
- 관리자로 비주얼 스튜디오 열기
즉, IDE가 빌드 환경/컨테이너에서 Azure 자격 증명을 찾을 수 없습니다.로그아웃/로그인 방법이 작동하지 않으면 터미널에서 다음을 수행합니다.
az login
자격 증명으로 로그인하고 프로그램을 다시 실행합니다.
IIS에서 호스팅되는 웹 서비스를 디버깅할 때 응용 프로그램 풀 ID를 사용자 계정으로 설정해야 합니다.
저는 몇 시간 동안 시도한 끝에 우연히 이것에 부딪혔고, 다음 코드는 저를 올바른 방향으로 밀어냈습니다.
var credential = new DefaultAzureCredential(
new DefaultAzureCredentialOptions
{
VisualStudioTenantId = "xxx",
ExcludeVisualStudioCodeCredential = true,
ExcludeEnvironmentCredential = true,
ExcludeManagedIdentityCredential = true,
ExcludeVisualStudioCredential = false,
ExcludeAzureCliCredential = true,
ExcludeAzurePowerShellCredential = true,
ExcludeSharedTokenCacheCredential = true
});
var token = credential.GetToken(new Azure.Core.TokenRequestContext(new[] { "https://database.windows.net/.default" }));
Visual Studio 토큰 공급자는 c:\windows\system32\inetsrv에서 액세스할 수 없습니다.ID 서비스\애저 서비스Auth\tokenprovider.json
물론 그것은 시스템인 기본 ApplicationPool ID입니다.
언급URL : https://stackoverflow.com/questions/62817337/azure-keyvault-azure-identity-credentialunavailableexception-defaultazurecrede
'your programing' 카테고리의 다른 글
찾기 방법에서 Mongoose 결과를 반환하는 방법은 무엇입니까? (0) | 2023.05.22 |
---|---|
글꼴 파일에 특정 유니코드 글리프가 있는지 프로그래밍 방식으로 확인할 수 있는 방법이 있습니까? (0) | 2023.05.22 |
Spring Data MongoDB의 List 매개 변수를 사용한 리포지토리 쿼리 (0) | 2023.05.22 |
각 열에 대해 varchar(MAX)가 사용되고 있음에도 불구하고 CSV 파일을 가져오는 동안 SQL Server에서 오류가 발생 (0) | 2023.05.22 |
C# WPF의 콤보 상자에서 선택한 값 가져오기 (0) | 2023.05.22 |