아… 제가 말씀드린 건 KV 앱을 호출할 때 필요한 계정을 얘기한 거 였어요.
개념적으로는
요기를 참고하시면 어느 정도 이해가 될 거예요.
그래서 간단히 얘기하자묜…
결국 KV 를 이용한다는 건
string keyVaultName = Environment.GetEnvironmentVariable("KEY_VAULT_NAME");
var kvUri = "https://" + keyVaultName + ".vault.azure.net";
var client = new SecretClient(new Uri(kvUri), new DefaultAzureCredential());
var secret = await client.GetSecretAsync(secretName);
요렇게 client 를 생성하고 요 client 를 이용해 KV 의 api 를 호출하여
내가 보관해놓은 민감정보를 가져오겠다… 라는 거예요.
(당연히 get 뿐만 아니라 set api 도 있어요.)
그리고 IConfiguration 에 KV client 를 할당하는 구문은 (AddAzureKeyVault())
내부적으로 전용 SecretClient 를 생성해
IConfiguration 에 KV 호출을 위한 전용 provider 를 등록시키는 과정이에요.
이후 IConfiguration 에 접근해 인덱서로 키를 호출하면 KV provider 를 통해 앞에서 생성해 붙여뒀던 SecretClient 를 호출하는 거죠.
(정확히 얘기하자면 provider 등록 시점에 해당 KV 의 모든 값을 다 읽어와 내부 캐쉬로 들고 있다가 이후 IConfiguration 의 인덱서로 키 접근을 하면 값을 반환하는 방식이에요.)
어쨌뚠 그렇다면,
이렇게 Azure 에 접근해서 KV 를 이용하기 위해서는
client 호출 시 이용 가능한(접근 가능한) 인증정보를 client 호출에 함께 실어 보내야겠죠?
그 인증 정보를 client 에 할당하는 객체가 DefaultAzureCredential 입니다.
요 DefaultAzureCredential 는 로컬 머신에 할당된 정보를 읽어서
client 에 포함시키는 역할을 해요.
요걸 사용하려면 로컬 머신(KV를 호출하는 앱 위치)에 DefaultCredential 을 로딩할 수 있는 정보가 할당되어 있어야 합니다.
대략 ms 공식문서보다 잘 정리되어 있다는 건 안 비밀
가령, az cli (Azure Cloud shell)를 이용해 권한이 있는 계정으로 logon 한 상태이거나
azure KV 앱에 할당된 Tenant Id, App Id, App Secret 을 환경변수에 할당해둔 상태 이거나
VS 로그인이 되어있어서 인식할 수 있는 상태 등등
요런 account 정보가 머신에 할당되어 있을 때 DefaultAzureCredential 에서 그 값을 읽어서
KV 에 request 를 보낼 때 인증 정보로 활용합니다.
인증 정보 로딩에도 우선순위가 있었는데 아마 환경변수에 관련 정보 할당하는 게 가장 높았던 걸로 기억이 나네요.
(저는 업무에서 docker 로 말아서 aks 에 올려서 사용하고 있는데요. 배포할 때 container 환경변수에 인증정보 할당해서 사용하고 있어요.)
그게 아니면 @BigSquare 님이 남겨주신 링크에 표시된 대로
수동으로 코드에(정확히는 appsettings 에 기록된) 인증 정보를 넣어서 사용해야합니다.
var crednetial = new ClientCertificateCredential(
builder.Configuration["AzureADDirectoryId"],
builder.Configuration["AzureADApplicationId"],
x509Certificate)
요런 식으루 말이죠.
사실 요거 작년 .NET L!VE SPRING 에서 제가 발표한 내용이긴한데
쌉소리를 너무 길게해서 실제 사용법을 디테일하게 전달하지 못한 부분이긴해요…
=ㅁ=;;;