다음 방법 중 하나를 사용하여 Azure App Service에서 실행되는 ASP.NET Core 앱을 Azure App Configuration에 연결하는 방법을 알아봅니다.
- SMI(시스템 할당 관리 ID)
- UMI(사용자 할당 관리 ID)
- 서비스 사용자
- Connection string
이 자습서에서는 Azure CLI를 사용하여 다음 작업을 완료합니다.
- Azure 리소스 설정
- 웹앱과 App Configuration 간의 연결 만들기
- 앱을 빌드하고 Azure App Service에 배포합니다.
필수 조건
Azure에 로그인
Azure CLI에서 az login
을 실행하여 Azure에 로그인합니다.
Azure 리소스 설정
Azure 리소스를 만드는 것부터 시작합니다.
다음 샘플 리포지토리를 복제합니다.
git clone https://github.com/Azure-Samples/serviceconnector-webapp-appconfig-dotnet.git
Azure에 웹앱 배포
다음 단계에 따라 App Service를 만들고 샘플 앱을 배포합니다. 구독 기여자 또는 소유자 역할이 있는지 확인합니다.
앱 서비스를 만들고 시스템 할당 관리 ID를 사용하여 App Config와 상호 작용하는 샘플 앱을 배포합니다.
# Change directory to the SMI sample
cd serviceconnector-webapp-appconfig-dotnet\system-managed-identity
# Create a web app
LOCATION='eastus'
RESOURCE_GROUP_NAME='service-connector-tutorial-rg'
APP_SERVICE_NAME='webapp-appconfig-smi'
az webapp up --location $LOCATION --resource-group $RESOURCE_GROUP_NAME --name $APP_SERVICE_NAME
매개 변수 |
설명 |
예시 |
위치 |
사용자에게 가까운 위치를 선택합니다. az account list-locations --output table 을 사용하여 위치를 나열합니다. |
eastus |
리소스 그룹 이름 |
이 리소스 그룹을 사용하여 이 자습서를 완료하는 데 필요한 모든 Azure 리소스를 구성합니다. |
service-connector-tutorial-rg |
앱 서비스 이름 |
앱 서비스 이름은 Azure에서 리소스의 이름으로 사용되며 서버 엔드포인트 https://<app-service-name>.azurewebsites.com 형식으로 앱의 정규화된 도메인 이름을 형성합니다. 이 이름은 모든 Azure에서 고유해야 하며 허용되는 문자는 A -Z , 0 -9 및 - 입니다. |
webapp-appconfig-smi |
앱 서비스를 만들고 사용자 할당 관리 ID를 사용하여 App Config와 상호 작용하는 샘플 앱을 배포합니다.
# Change directory to the UMI sample
cd serviceconnector-webapp-appconfig-dotnet\user-assigned-managed-identity
# Create a web app
LOCATION='eastus'
RESOURCE_GROUP_NAME='service-connector-tutorial-rg'
APP_SERVICE_NAME='webapp-appconfig-umi'
az webapp up --location $LOCATION --resource-group $RESOURCE_GROUP_NAME --name $APP_SERVICE_NAME
매개 변수 |
설명 |
예시 |
위치 |
사용자에게 가까운 위치를 선택합니다. az account list-locations --output table 을 사용하여 위치를 나열합니다. |
eastus |
리소스 그룹 이름 |
이 리소스 그룹을 사용하여 이 자습서를 완료하는 데 필요한 모든 Azure 리소스를 구성합니다. |
service-connector-tutorial-rg |
앱 서비스 이름 |
앱 서비스 이름은 Azure에서 리소스의 이름으로 사용되며 서버 엔드포인트 https://<app-service-name>.azurewebsites.com 형식으로 앱의 정규화된 도메인 이름을 형성합니다. 이 이름은 모든 Azure에서 고유해야 하며 허용되는 문자는 A -Z , 0 -9 및 - 입니다. |
webapp-appconfig-umi |
사용자가 할당한 관리 ID 만들기 출력을 임시 메모장에 저장합니다.
az identity create --resource-group $RESOURCE_GROUP_NAME -n "myIdentity"
앱 서비스를 만들고 서비스 주체를 사용하여 App Config와 상호 작용하는 샘플 앱을 배포합니다.
# Change directory to the service principal sample
cd serviceconnector-webapp-appconfig-dotnet\service-principal
# Create a web app
LOCATION='eastus'
RESOURCE_GROUP_NAME='service-connector-tutorial-rg'
APP_SERVICE_NAME='webapp-appconfig-sp'
az webapp up --location $LOCATION --resource-group $RESOURCE_GROUP_NAME --name $APP_SERVICE_NAME
매개 변수 |
설명 |
예시 |
위치 |
사용자에게 가까운 위치를 선택합니다. az account list-locations --output table 을 사용하여 위치를 나열합니다. |
eastus |
리소스 그룹 이름 |
이 리소스 그룹을 사용하여 이 자습서를 완료하는 데 필요한 모든 Azure 리소스를 구성합니다. |
service-connector-tutorial-rg |
앱 서비스 이름 |
앱 서비스 이름은 Azure에서 리소스의 이름으로 사용되며 서버 엔드포인트 https://<app-service-name>.azurewebsites.com 형식으로 앱의 정규화된 도메인 이름을 형성합니다. 이 이름은 모든 Azure에서 고유해야 하며 허용되는 문자는 A -Z , 0 -9 및 - 입니다. |
webapp-appconfig-sp |
서비스 주체를 만들고 yourSubscriptionID
를 실제 구독 ID로 바꿉니다. 출력을 임시 메모장에 저장합니다.
az ad sp create-for-rbac --name myServicePrincipal --role Contributor --scopes /subscriptions/{yourSubscriptionID}/resourceGroups/$RESOURCE_GROUP_NAME
Warning
사용 가능한 가장 안전한 인증 흐름을 사용하는 것이 권장됩니다. 이 절차에서 설명된 인증 흐름은 다른 흐름에는 없는 위험을 전달하며, 애플리케이션에서 매우 높은 신뢰 수준을 요구합니다. 이 흐름은 관리 ID와 같은 보다 안전한 다른 흐름을 실행할 수 없는 경우에만 사용되어야 합니다.
앱 서비스를 만들고 연결 문자열을 사용하여 App Config와 상호 작용하는 샘플 앱을 배포합니다.
# Change directory to the service principal sample
cd serviceconnector-webapp-appconfig-dotnet\connection-string
# Create a web app
LOCATION='eastus'
RESOURCE_GROUP_NAME='service-connector-tutorial-rg'
APP_SERVICE_NAME='webapp-appconfig-cs'
az webapp up --location $LOCATION --resource-group $RESOURCE_GROUP_NAME --name $APP_SERVICE_NAME
매개 변수 |
설명 |
예시 |
위치 |
사용자에게 가까운 위치를 선택합니다. az account list-locations --output table 을 사용하여 위치를 나열합니다. |
eastus |
리소스 그룹 이름 |
이 리소스 그룹을 사용하여 이 자습서를 완료하는 데 필요한 모든 Azure 리소스를 구성합니다. |
service-connector-tutorial-rg |
앱 서비스 이름 |
앱 서비스 이름은 Azure에서 리소스의 이름으로 사용되며 서버 엔드포인트 https://<app-service-name>.azurewebsites.com 형식으로 앱의 정규화된 도메인 이름을 형성합니다. 이 이름은 모든 Azure에서 고유해야 하며 허용되는 문자는 A -Z , 0 -9 및 - 입니다. |
webapp-appconfig-cs |
Azure App Configuration 저장소 만들기
APP_CONFIG_NAME='my-app-config'
az appconfig create -g $RESOURCE_GROUP_NAME -n $APP_CONFIG_NAME --sku Free -l eastus
테스트 구성 파일을 Azure App Configuration으로 가져옵니다.
시스템 할당 관리 ID를 사용하여 테스트 구성 파일을 Azure App Configuration으로 가져옵니다.
ServiceConnectorSample
폴더로 cd
./sampleconfigs.json 테스트 구성 파일을 App Configuration 저장소로 가져옵니다. Cloud Shell을 사용하는 경우 명령을 실행하기 전에 sampleconfigs.json을 업로드합니다.
az appconfig kv import -n $APP_CONFIG_NAME --source file --format json --path ./sampleconfigs.json --separator : --yes
사용자 할당 관리 ID를 사용하여 테스트 구성 파일을 Azure App Configuration으로 가져옵니다.
ServiceConnectorSample
폴더로 cd
./sampleconfigs.json 테스트 구성 파일을 App Configuration 저장소로 가져옵니다. Cloud Shell을 사용하는 경우 명령을 실행하기 전에 sampleconfigs.json을 업로드합니다.
az appconfig kv import -n $APP_CONFIG_NAME --source file --format json --path ./sampleconfigs.json --separator : --yes
서비스 주체를 사용하여 테스트 구성 파일을 Azure App Configuration으로 가져옵니다.
ServiceConnectorSample
폴더로 cd
./sampleconfigs.json 테스트 구성 파일을 App Configuration 저장소로 가져옵니다. Cloud Shell을 사용하는 경우 명령을 실행하기 전에 sampleconfigs.json을 업로드합니다.
az appconfig kv import -n $APP_CONFIG_NAME --source file --format json --path ./sampleconfigs.json --separator : --yes
Warning
사용 가능한 가장 안전한 인증 흐름을 사용하는 것이 권장됩니다. 이 절차에서 설명된 인증 흐름은 다른 흐름에는 없는 위험을 전달하며, 애플리케이션에서 매우 높은 신뢰 수준을 요구합니다. 이 흐름은 관리 ID와 같은 보다 안전한 다른 흐름을 실행할 수 없는 경우에만 사용되어야 합니다.
연결 문자열을 사용하여 테스트 구성 파일을 Azure App Configuration으로 가져옵니다.
ServiceConnectorSample
폴더로 cd
./sampleconfigs.json 테스트 구성 파일을 App Configuration 저장소로 가져옵니다. Cloud Shell을 사용하는 경우 명령을 실행하기 전에 sampleconfigs.json을 업로드합니다.
az appconfig kv import -n $APP_CONFIG_NAME --source file --format json --path ./sampleconfigs.json --separator : --yes
웹앱을 App Configuration에 연결
웹 애플리케이션과 App Configuration 저장소 간에 연결을 만듭니다.
시스템 할당 관리 ID 인증을 사용하여 웹 애플리케이션과 App Configuration 저장소 간에 연결을 만듭니다. 이 연결은 서비스 커넥터를 통해 이루어집니다.
az webapp connection create appconfig -g $RESOURCE_GROUP_NAME -n $APP_SERVICE_NAME --app-config $APP_CONFIG_NAME --tg $RESOURCE_GROUP_NAME --connection "app_config_smi" --system-identity
system-identity
는 SMI(시스템 할당 관리 ID) 인증 형식을 나타냅니다. 또한 서비스 커넥터는 사용자 할당 관리 ID(UMI), 연결 문자열(비밀) 및 서비스 주체와 같은 인증을 지원합니다.
사용자 할당 관리 ID 인증을 사용하여 웹 애플리케이션과 App Configuration 저장소 간에 연결을 만듭니다. 이 연결은 서비스 커넥터를 통해 이루어집니다.
az webapp connection create appconfig -g $RESOURCE_GROUP_NAME -n $APP_SERVICE_NAME --app-config $APP_CONFIG_NAME --tg $RESOURCE_GROUP_NAME --connection "app_config_umi" --user-identity client-id=<myIdentityClientId> subs-id=<myTestSubsId>
user-identity
는 사용자가 할당한 관리 ID 인증 형식을 나타냅니다. 서비스 커넥터는 시스템 할당 관리 ID, 연결 문자열(비밀) 및 서비스 주체와 같은 인증도 지원합니다.
client-id
를 찾을 수 있는 두 가지 방법이 있습니다.
- Azure CLI에서
az identity show -n "myIdentity" -g $RESOURCE_GROUP_NAME --query 'clientId'
를 입력합니다.
- Azure Portal에서 이전에 만들어진 관리 ID를 열고 개요에서 클라이언트 ID 아래의 값을 가져옵니다.
서비스 주체를 사용하여 웹 애플리케이션과 App Configuration 저장소 간에 연결을 만듭니다. 이는 서비스 커넥터를 통해 수행됩니다.
az webapp connection create appconfig -g $RESOURCE_GROUP_NAME -n $APP_SERVICE_NAME --app-config $APP_CONFIG_NAME --tg $RESOURCE_GROUP_NAME --connection "app_config_sp" --service-principal client-id=<mySPClientId> secret=<mySPSecret>
service-principal
은 서비스 주체 인증 형식을 나타냅니다. 서비스 커넥터는 시스템 할당 관리 ID(UMI), 사용자 할당 관리 ID(UMI) 및 연결 문자열(비밀)과 같은 인증도 지원합니다.
연결 문자열을 사용하여 웹 애플리케이션과 App Configuration 저장소 간에 연결을 만듭니다. 이 연결은 서비스 커넥터를 통해 이루어집니다.
az webapp connection create appconfig -g $RESOURCE_GROUP_NAME -n $APP_SERVICE_NAME --app-config $APP_CONFIG_NAME --tg $RESOURCE_GROUP_NAME --connection "app_config_cs" --secret
secret
은 연결 문자열 인증 형식을 나타냅니다. 서비스 커넥터는 시스템 할당 관리 ID, 사용자 할당 관리 ID 및 서비스 주체와 같은 인증도 지원합니다.
연결 유효성 검사
- 연결이 작동하는지 확인하려면 브라우저에서
https://<myWebAppName>.azurewebsites.net/
의 웹앱으로 이동합니다. 웹 사이트가 시작되면 "안녕하세요. 이제 Azure WebApp이 ServiceConnector를 통해 App Configuration에 연결되었습니다."
작동 방식
아래에서 각 인증 형식에 대해 뒤에서 관리하는 서비스 커넥터를 찾습니다.
서비스 커넥터는 다음과 같이 연결 구성을 관리합니다.
- 애플리케이션이 웹앱에 액세스하고 App Configuration 엔드포인트를 가져올 수 있도록 웹앱의
AZURE_APPCONFIGURATION_ENDPOINT
를 설정합니다. 샘플 코드에 액세스합니다.
- 웹앱의 시스템 할당 관리 인증을 활성화하고 애플리케이션이 Azure.Identity의 DefaultAzureCredential을 사용하여 App Configuration에 인증할 수 있도록 App Configuration에 데이터 읽기 권한자 역할을 부여합니다. 샘플 코드에 액세스합니다.
서비스 커넥터는 다음과 같이 연결 구성을 관리합니다.
- 애플리케이션이 액세스할 수 있도록 웹앱의
AZURE_APPCONFIGURATION_ENDPOINT
, AZURE_APPCONFIGURATION_CLIENTID
를 설정하고 코드에서 앱 구성 엔드포인트를 가져옵니다.
- 웹앱의 사용자 할당 관리 인증을 활성화하고 애플리케이션이 Azure.Identity의 DefaultAzureCredential을 사용하여 App Configuration에 인증할 수 있도록 App Configuration에 데이터 읽기 권한자 역할을 부여합니다. 샘플 코드에 액세스합니다.
서비스 커넥터는 다음과 같이 연결 구성을 관리합니다.
- 애플리케이션이 웹앱에 액세스하고 App Configuration 엔드포인트를 가져올 수 있도록 웹앱의
AZURE_APPCONFIGURATION_ENDPOINT
를 설정합니다. 샘플 코드에 액세스합니다.
- 서비스 주체 자격 증명을 WebApp AppSettings
AZURE_APPCONFIGURATION_CLIENTID
에 저장합니다. AZURE_APPCONFIGURATION_TENANTID
, AZURE_APPCONFIGURATION_CLIENTSECRET
및 Azure.Identity의 ClientSecretCredential
을 사용하여 애플리케이션이 코드의 App Configuration에 인증될 수 있도록 App Configuration 데이터 읽기 권한자 역할을 서비스 주체에게 부여합니다.
서비스 커넥터는 다음과 같이 연결 구성을 관리합니다.
- 애플리케이션이 웹앱에 액세스하고 App Configuration 연결 문자열을 가져올 수 있도록 웹앱의
AZURE_APPCONFIGURATION_CONNECTIONSTRING
을 설정합니다. 샘플 코드에 액세스합니다.
- 웹앱의 시스템 할당 관리 인증을 활성화하고 애플리케이션이 Azure.Identity의 DefaultAzureCredential을 사용하여 App Configuration에 인증할 수 있도록 App Configuration에 데이터 읽기 권한자 역할을 부여합니다. 샘플 코드에 액세스합니다.
자세한 내용은 서비스 커넥터 내부를 참조하세요.
테스트(선택 사항)
선택적으로 다음 테스트를 수행합니다.
App Configuration Store에서 키 SampleApplication:Settings:Messages
의 값을 업데이트합니다.
az appconfig kv set -n <myAppConfigStoreName> --key SampleApplication:Settings:Messages --value hello --yes
https://<myWebAppName>.azurewebsites.net/
으로 이동하여 Azure 웹앱으로 이동하고 페이지를 새로 고칩니다. 메시지가 "hello"로 업데이트된 것을 볼 수 있습니다.
리소스 정리
완료되면 이러한 Azure 리소스를 더 이상 사용하지 않으려면 az group delete
명령을 실행하여 삭제합니다. 이 명령은 리소스 그룹과 그 속에 포함된 모든 리소스를 삭제합니다.
az group delete -n <myResourceGroupName> --yes
다음 단계
서비스 커넥터에 대해 자세히 알아보려면 아래 나열된 자습서를 따르세요.