KeyVaultErrorException:작업에서 잘못된 상태 코드 '금지됨'을 반환했습니다.
Azure에서 호스팅되는 웹 앱을 Azure KeyVault에서 설정을 읽도록 설정하려고 합니다.
저는 이 가이드를 따르고 있습니다.https://anthonychu.ca/post/secrets-aspnet-core-key-vault-msi/
다음으로 설정을 사용하여 KeyVault에서 어플리케이션 설정에 액세스하는 예를 나타냅니다.
public static IWebHost BuildWebHost(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.ConfigureAppConfiguration((ctx, builder) =>
{
var keyVaultEndpoint = Environment.GetEnvironmentVariable("KEYVAULT_ENDPOINT");
if (!string.IsNullOrEmpty(keyVaultEndpoint))
{
var azureServiceTokenProvider = new AzureServiceTokenProvider();
var keyVaultClient = new KeyVaultClient(
new KeyVaultClient.AuthenticationCallback(
azureServiceTokenProvider.KeyVaultTokenCallback));
builder.AddAzureKeyVault(
keyVaultEndpoint, keyVaultClient, new DefaultKeyVaultSecretManager());
}
})
.UseApplicationInsights()
.UseStartup<Startup>()
.Build();
애플리케이션 설정에 KEYVOLT_ENDPOINT 환경변수를 추가했습니다.앱 서비스에서 MSI를 활성화하고 Azure 사용자와 응용 프로그램을 Key Vault 액세스 정책에서 인증했습니다.
Get 및 List 조작의 경우:
그리고 열쇠 보관함에 비밀을 추가했어로컬로 이동하면 비밀에 접근할 수 있습니다.
하지만 내 ASP는.시작 시 NET Core 사이트가 실패하고 stdout 로그에 다음과 같이 기록됩니다.
Unhandled Exception: Microsoft.Azure.KeyVault.Models.KeyVaultErrorException: Operation returned an invalid status code 'Forbidden'
at Microsoft.Azure.KeyVault.KeyVaultClient.GetSecretsWithHttpMessagesAsync(String vaultBaseUrl, Nullable`1 maxresults, Dictionary`2 customHeaders, CancellationToken cancellationToken)
at Microsoft.Azure.KeyVault.KeyVaultClientExtensions.GetSecretsAsync(IKeyVaultClient operations, String vaultBaseUrl, Nullable`1 maxresults, CancellationToken cancellationToken)
at Microsoft.Extensions.Configuration.AzureKeyVault.AzureKeyVaultConfigurationProvider.LoadAsync()
at Microsoft.Extensions.Configuration.AzureKeyVault.AzureKeyVaultConfigurationProvider.Load()
at Microsoft.Extensions.Configuration.ConfigurationRoot..ctor(IList`1 providers)
at Microsoft.Extensions.Configuration.ConfigurationBuilder.Build()
at Microsoft.AspNetCore.Hosting.WebHostBuilder.BuildCommonServices(AggregateException& hostingStartupErrors)
at Microsoft.AspNetCore.Hosting.WebHostBuilder.Build()
at Blog.Program.BuildWebHost(String[] args) in D:\a\1\s\[csproj name]\Program.cs:line 22
at [csproj name].Program.Main(String[] args) in D:\a\1\s\[csproj name]\Program.cs:line 16
디버깅 콘솔에서 SET를 호출하여 MSI_ENDPOINT 및 MSI_SECRET 환경변수가 존재하는지 확인했습니다.
KEYVOLT_ENDPOINT 변수도 표시됩니다.
무엇이 잘못되고 있는지 또는 다음에 무엇을 시도해야 하는지 제안해 주실 수 있습니까?로컬에서 동작하기 때문에 인증 문제일 것입니다만, Azure App Service가 아닌, 키 볼트로 허가한 Azure User에 의한 로컬 인증이라고 생각합니다.
의심스러운 설정입니다만, KeyValut 의 액세스 정책을 작성했을 때에, 「인증 애플리케이션」을 유효하게 한 것이 문제입니다.
스크린샷에 "어플리케이션+어플리케이션"이 표시되어 있기 때문에, 이것을 표시할 수 있습니다.웹 앱이 주요 애플리케이션인 동시에 인증 오류가 있는 애플리케이션으로 정책을 작성하셨다고 생각합니다.루프가 생기네요
이 설정을 사용하려면 기존 정책을 삭제하고 새 정책을 생성하십시오. 여기서 주체만 선택합니다.
문제를 해결하려면 웹 앱의 IP 주소를 방화벽에 추가해야 했습니다. 신뢰할 수 있는 Microsoft 서비스 허용을 선택하면 모든 주소가 추가되지 않았기 때문입니다.."
감사: https://azidentity.azurewebsites.net/post/2019/01/03/key-vault-firewall-access-by-azure-app-services
본인만 선택하고 웹 앱 추가, 인증된 응용프로그램 선택 안 함
여기에 같은 증상/오류 메시지와 함께 다른 케이스를 추가합니다.비밀 중 하나가 비활성화되면 Azure keyvault가 Forbidden을 반환했습니다.
필요한 모든 권한이 있습니다. App Service의 Managed Identity에 대해 Get and List for Secrets(비밀 정보만 사용)를 사용하여 keyvault에 액세스하고 있었습니다.
"접근 금지" 오류가 나타나는 것은 혼란스러웠고 문제를 파악하기 위해 몇 가지 실험이 필요했습니다.이것이 같은 문제에 직면한 사람에게 도움이 되기를 바랍니다.
사용하고 있는 서비스 프린서펄이 추가되어 실행하는 조작에 적절한 권한이 있는지 확인합니다(키/초기 등).
KeyVault에 네트워크 액세스가 제한되었는지 여부를 확인하고 문제가 있는지 여부를 테스트합니다.
개발 시스템과 생산 시스템이 환경 변수를 다룰 때 동일한 방식으로 작동하지 않는 것과 같은 문제를 이전에 본 적이 있습니다.
에서 가장 할 앞에 입니다.ASPNETCORE_사용할 수 있습니다.ASP의 입니다.NET Core Web 호스 net
| Key | Value |
|====================================|============================|
| ASPNETCORE_KEYVAULT_ENDPOINT | xxxxxxxxxxxxxxxx |
| ASPNETCORE_MSI_ENDPOINT** | xxxxxxxxxxxxxxxx |
| ASPNETCORE_MSI_SECRET** | xxxxxxxxxxxxxxxx |
** **을(를) 사용하는 경우는
MSI_ENDPOINT★★★★★★★★★★★★★★★★★」MSI_SECRET은, 「」를 사용해 주세요KEYVAULT_ENDPOINT
프레픽스를 명시적으로 다른 것으로 설정하는 경우는, 설정을 개입시켜 Web 호스트를 초기화할 때에, 사용하는 프레픽스를 인수로 건네줄 수 있습니다.
.AddEnvironmentVariables("ASPNETCORE_"); // choose your own prefix here
AZ KV에서 액세스 정책...원장만 선택해서 작동해야 합니다.

또 다른 가능성은 서비스 주체에게 Key Vault에 대한 API 권한이 필요하다는 것입니다.Azure 포털에서 Service Principher로 이동하여 왼쪽 메뉴에서 API 권한을 선택합니다.그런 다음 사용 권한 추가를 누르십시오.여기서 Key Vault를 선택하고 저장할 수 있습니다.그러면 코드가 키 볼트 암호를 검색할 수 있습니다.
Visual Studio를 통해 Azure에 로그인하는 동안 액세스 정책을 추가한 경우 권한을 새로 고치려면 로그아웃했다가 다시 로그인해야 합니다.
언급URL : https://stackoverflow.com/questions/51124843/keyvaulterrorexception-operation-returned-an-invalid-status-code-forbidden
'programing' 카테고리의 다른 글
| UI 스레드의 디스패처를 입수하려면 어떻게 해야 합니까? (0) | 2023.04.20 |
|---|---|
| imageEdgeInsets 및 titleEdgeInsets와의 UIButton 텍스트 및 이미지 정렬 (0) | 2023.04.20 |
| 텍스트 길이를 기준으로 UILabel 너비를 계산하는 방법은 무엇입니까? (0) | 2023.04.20 |
| SQL Server의 모든 테이블을 검색하여 문자열 찾기 (0) | 2023.04.20 |
| Git에서 최신 로컬 커밋을 취소하려면 어떻게 해야 하나요? (0) | 2023.04.15 |






