자습서: 관리 ID를 사용하여 Azure Spring Apps 앱에서 Azure Functions 호출
참고 항목
기본, 표준 및 엔터프라이즈 계획은 2025년 3월 중순부터 사용되지 않으며 3년의 은퇴 기간이 있습니다. Azure Container Apps로 전환하는 것이 좋습니다. 자세한 내용은 Azure Spring Apps 사용 중지 공지 사항을 참조하세요.
표준 소비 및 전용 계획은 2024년 9월 30일부터 사용되지 않으며 6개월 후에 완전히 종료됩니다. Azure Container Apps로 전환하는 것이 좋습니다. 자세한 내용은 Azure Spring Apps 표준 사용량 및 전용 계획을 Azure Container Apps로 마이그레이션을 참조 하세요.
이 문서는 기본/표준 ✅ 엔터프라이즈에✅ 적용됩니다.
이 문서에서는 Azure Spring Apps에서 호스트되는 앱에 대한 관리 ID를 만들고, 이를 사용하여 HTTP 트리거 함수를 호출하는 방법을 보여줍니다.
Azure Functions와 App Services는 모두 Microsoft Entra 인증을 기본적으로 지원합니다. Azure Spring Apps용 관리 ID와 함께 이 기본 제공 인증 기능을 사용하면 최신 OAuth 의미 체계를 사용하여 RESTful 서비스를 호출할 수 있습니다. 이 방법을 사용하면 비밀을 코드에 저장할 필요가 없으며 외부 리소스에 대한 액세스를 더 세부적으로 제어할 수 있습니다.
필수 구성 요소
- Azure 구독 구독이 없는 경우 시작하기 전에 체험 계정을 만드세요.
- Azure CLI: 버전 2.45.0 이상
- Git
- Apache Maven 버전 3.0 이상
- Azure Functions Core Tools 버전 4.x 설치
리소스 그룹 만들기
리소스 그룹은 Azure 리소스가 배포 및 관리되는 논리적 컨테이너입니다. 다음 명령을 사용하여 함수 앱을 포함할 리소스 그룹을 만듭니다.
az group create --name <resource-group-name> --location <location>
자세한 내용은 az group create 명령을 참조하세요.
함수 앱 만들기
함수 앱을 만들려면 먼저 백업 스토리지 계정을 만들어야 합니다. az storage account create 명령을 사용할 수 있습니다.
Important
각 함수 앱 및 스토리지 계정에는 고유한 이름이 있어야 합니다.
다음 명령을 사용하여 스토리지 계정을 만듭니다. <function-app-name>을 함수 앱의 이름으로 바꾸고 <storage-account-name>을 스토리지 계정의 이름으로 바꿉니다.
az storage account create \
--resource-group <resource-group-name> \
--name <storage-account-name> \
--location <location> \
--sku Standard_LRS
스토리지 계정을 만든 후 다음 명령을 사용하여 함수 앱을 만듭니다.
az functionapp create \
--resource-group <resource-group-name> \
--name <function-app-name> \
--consumption-plan-location <location> \
--os-type windows \
--runtime node \
--storage-account <storage-account-name> \
--functions-version 4
반환된 hostNames
값(https://<your-functionapp-name>.azurewebsites.net
형식)을 기록해 둡니다. 함수 앱의 루트 URL에서 이 값을 사용하여 함수 앱을 테스트합니다.
Microsoft Entra 인증 사용
다음 단계를 사용하여 Microsoft Entra 인증이 함수 앱에 액세스할 수 있도록 설정합니다.
- Azure Portal에서 리소스 그룹으로 이동한 다음, 만든 함수 앱을 엽니다.
- 탐색 창에서 인증을 선택한 다음, 기본 창에서 ID 공급자 추가를 선택합니다.
- ID 공급자 추가 페이지의 ID 공급자 드롭다운 메뉴에서 Microsoft를 선택합니다.
- 추가를 선택합니다.
- ID 공급자 추가 페이지의 기본 사항 설정에서 지원되는 계정 유형을 Microsoft Entra 디렉터리 - 다중 테넌트로 설정합니다.
- 인증되지 않은 요청을 HTTP 401 권한 없음: API에 권장됨으로 설정합니다. 이 설정을 사용하면 인증되지 않은 모든 요청이 거부됩니다(401 응답).
- 추가를 선택합니다.
설정을 추가하면 함수 앱이 다시 시작되고 모든 후속 요청에서 Microsoft Entra ID를 통해 로그인하라는 메시지가 표시됩니다. 인증되지 않은 요청이 현재 함수 앱의 루트 URL(az functionapp create
명령의 hostNames
출력에서 반환됨)을 사용하여 거부되고 있는지 테스트할 수 있습니다. 그러면 조직의 Microsoft Entra 로그인 화면으로 리디렉션되어야 합니다.
나중에 사용하기 위해 애플리케이션 ID와 애플리케이션 ID URI가 필요합니다. Azure Portal에서 앞서 만든 함수 앱으로 이동합니다.
애플리케이션 ID를 가져오려면 탐색 창에서 인증을 선택한 다음, 함수 앱의 이름이 포함된 ID 공급자에 대한 앱(클라이언트) ID 값을 복사합니다.
애플리케이션 ID URI를 가져오려면 탐색 창에서 API 노출을 선택한 다음, 애플리케이션 ID URI 값을 복사합니다.
HTTP 트리거 함수 만들기
빈 로컬 디렉터리에서 다음 명령을 사용하여 새 함수 앱을 만들고 HTTP 트리거 함수를 추가합니다.
func init --worker-runtime node
func new --template HttpTrigger --name HttpTrigger
기본적으로 함수는 키 기반 인증을 사용하여 HTTP 엔드포인트를 보호합니다. Microsoft Entra 인증을 사용하여 함수에 대한 액세스를 보호하려면 다음 예제와 같이 function.json 파일에서 authLevel
키를 anonymous
로 설정합니다.
{
"bindings": [
{
"authLevel": "anonymous",
"type": "httpTrigger",
...
}
]
}
자세한 내용은 Azure Functions 보호의 보안 HTTP 엔드포인트 섹션을 참조하세요.
다음 명령을 사용하여 이전 단계에서 만든 인스턴스에 앱을 게시합니다.
func azure functionapp publish <function-app-name>
게시 명령의 출력은 다음 출력과 같이 새로 만든 함수에 대한 URL을 나열합니다.
Deployment completed successfully.
Syncing triggers...
Functions in <your-functionapp-name>:
HttpTrigger - [httpTrigger]
Invoke url: https://<function-app-name>.azurewebsites.net/api/httptrigger
Azure Spring Apps 서비스 인스턴스 및 애플리케이션 만들기
다음 명령을 사용하여 Spring 확장을 추가하고 Azure Spring Apps의 새 인스턴스를 만듭니다.
az extension add --upgrade --name spring
az spring create \
--resource-group <resource-group-name> \
--name <Azure-Spring-Apps-instance-name> \
--location <location>
다음 명령을 사용하여 --assign-identity
매개 변수에서 요청한 대로 시스템 할당 관리 ID를 사용하여 msiapp
이라는 애플리케이션을 만듭니다.
az spring app create \
--resource-group <resource-group-name> \
--service <Azure-Spring-Apps-instance-name> \
--name "msiapp" \
--assign-endpoint true \
--assign-identity
함수를 호출하는 Spring Boot 앱 샘플 빌드
이 샘플은 먼저 MSI 엔드포인트에 액세스 토큰을 요청하고 해당 토큰을 사용하여 함수 HTTP 요청을 인증함으로써 HTTP 트리거 함수를 호출합니다. 자세한 내용은 Azure VM에서 Azure 리소스에 대한 관리 ID를 사용하여 액세스 토큰을 획득하는 방법의 HTTP를 사용하여 토큰 가져오기 섹션을 참조하세요.
다음 명령을 사용하여 샘플 프로젝트를 복제합니다.
git clone https://github.com/Azure-Samples/azure-spring-apps-samples.git
다음 명령을 사용하여 앱 속성에 함수 URI 및 트리거 이름을 지정합니다.
cd azure-spring-apps-samples/managed-identity-function vim src/main/resources/application.properties
Azure Spring Apps 앱에 관리 ID를 사용하려면 이러한 값과 함께 다음 속성을 src/main/resources/application.properties에 추가합니다.
azure.function.uri=https://<function-app-name>.azurewebsites.net azure.function.triggerPath=httptrigger azure.function.application-id.uri=<function-app-application-ID-uri>
다음 명령을 사용하여 샘플 앱을 패키지합니다.
mvn clean package
다음 명령을 사용하여 Azure Spring Apps에 앱을 배포합니다.
az spring app deploy \ --resource-group <resource-group-name> \ --service <Azure-Spring-Apps-instance-name> \ --name "msiapp" \ --artifact-path target/asc-managed-identity-function-sample-0.1.0.jar
다음 명령을 사용하여 공용 엔드포인트 또는 테스트 엔드포인트에 액세스하여 앱을 테스트합니다.
curl https://<Azure-Spring-Apps-instance-name>-msiapp.azuremicroservices.io/func/springcloud
응답 본문에 다음 메시지가 반환됩니다.
Function Response: Hello, springcloud. This HTTP triggered function executed successfully.