your programing

Azure KeyVault: Azure.신원.자격 증명을 사용할 경우예외:DefaultAzureCredential이 포함된 자격 증명에서 토큰을 검색하지 못했습니다.

lovepro 2023. 5. 22. 23:09
반응형

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 포털 액세스 권한과 필요한 리소스가 있는지 확인합니다.

  1. Azure CLI 설치
  2. 관리자로 PowerShell 열기
  3. az login 명령을 사용하여 zure에 로그인
  4. 관리자로 비주얼 스튜디오 열기

즉, 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

반응형