Azure 앱 Service에 Java Tomcat 앱 배포
이 문서에서는 Microsoft Entra 계정에서 로그인한 Tomcat 앱을 Azure 앱 Service에 배포하는 방법을 보여 있습니다.
이 문서에서는 로컬로 실행 탭만 사용하여 다음 문서 중 하나를 완료했으며 이제 Azure에 배포하려고 합니다. 이러한 지침은 다음 문서의 Azure에 배포 탭에 있는 지침과 동일합니다.
- Microsoft Entra ID를 사용하여 Java Tomcat 앱에 로그인 사용
- Azure Active Directory B2C에서 MSAL4J를 사용하여 Java Tomcat 앱에 로그인 사용
- Java Tomcat 앱이 사용자를 로그인하고 Microsoft Graph에 액세스할 수 있도록 설정
- 역할 및 역할 클레임을 사용하여 Java Tomcat 앱 보호
- 그룹 및 그룹 클레임을 사용하여 Java Tomcat 앱 보호
필수 조건
Azure 앱 Service 앱용 Maven 플러그 인
Maven이 선호하는 개발 도구가 아닌 경우 다른 도구를 사용하는 다음과 같은 유사한 자습서를 참조하세요.
Maven 플러그 인 구성
Azure 앱 Service에 배포하는 경우 배포는 Azure CLI에서 Azure 자격 증명을 자동으로 사용합니다. Azure CLI가 로컬로 설치되어 있지 않으면 Maven 플러그 인은 OAuth 또는 디바이스 로그인으로 인증됩니다. 자세한 내용은 Maven 플러그 인으로 인증을 참조하세요.
다음 단계를 사용하여 플러그 인을 구성합니다.
다음 명령을 실행하여 배포를 구성합니다. 이 명령을 사용하면 Azure 앱 Service 운영 체제, Java 버전 및 Tomcat 버전을 설정할 수 있습니다.
mvn com.microsoft.azure:azure-webapp-maven-plugin:2.13.0:config
새 실행 구성 만들기의 경우 Y 키를 누른 다음 Enter 키를 누릅니다.
OS 값 정의의 경우 Windows의 경우 1, Linux의 경우 2를 누른 다음 Enter 키를 누릅니다.
javaVersion 값 정의의 경우 Java 11에 대해 2 키를 누른 다음 Enter 키를 누릅니다.
webContainer 값 정의의 경우 Tomcat 9.0에 대해 4 키를 누른 다음 Enter 키를 누릅니다.
pricingTier에 대한 값 정의의 경우 Enter 키를 눌러 기본 P1v2 계층을 선택합니다.
확인을 위해 Y 키를 누른 다음 Enter 키를 누릅니다.
다음 예제에서는 배포 프로세스의 출력을 보여줍니다.
Please confirm webapp properties
AppName : msal4j-servlet-auth-1707209552268
ResourceGroup : msal4j-servlet-auth-1707209552268-rg
Region : centralus
PricingTier : P1v2
OS : Linux
Java Version: Java 11
Web server stack: Tomcat 9.0
Deploy to slot : false
Confirm (Y/N) [Y]: [INFO] Saving configuration to pom.
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 37.112 s
[INFO] Finished at: 2024-02-06T08:53:02Z
[INFO] ------------------------------------------------------------------------
선택 사항을 확인한 후 플러그 인은 필요한 플러그 인 요소와 설정을 프로젝트의 pom.xml 파일에 추가하여 Azure 앱 Service에서 앱을 실행하도록 구성합니다.
pom.xml 파일의 관련 부분은 다음 예제와 유사해야 합니다.
<build>
<plugins>
<plugin>
<groupId>com.microsoft.azure</groupId>
<artifactId>>azure-webapp-maven-plugin</artifactId>
<version>x.xx.x</version>
<configuration>
<schemaVersion>v2</schemaVersion>
<resourceGroup>your-resourcegroup-name</resourceGroup>
<appName>your-app-name</appName>
...
</configuration>
</plugin>
</plugins>
</build>
pom.xml App Service에 대한 구성을 직접 수정할 수 있습니다. 몇 가지 일반적인 구성은 다음 표에 나열되어 있습니다.
속성 | 필수 | 설명 |
---|---|---|
subscriptionId |
false | 구독 ID입니다. |
resourceGroup |
true | 앱에 대한 Azure 리소스 그룹입니다. |
appName |
true | 앱의 이름입니다. |
region |
false | 앱을 호스트할 지역입니다. 기본값은 centralus 입니다. 유효한 지역은 지원되는 지역을 참조 하세요. |
pricingTier |
false | 앱의 가격 책정 계층입니다. 기본값은 P1v2 프로덕션 워크로드에 대한 것입니다. Java 개발 및 테스트에 권장되는 최소값은 .입니다 B2 . 자세한 내용은 App Service 가격 책정을 참조 하세요. |
runtime |
false | 런타임 환경 구성입니다. 자세한 내용은 구성 세부 정보를 참조하세요. |
deployment |
false | 배포 구성입니다. 자세한 내용은 구성 세부 정보를 참조하세요. |
전체 구성 목록은 플러그 인 참조 설명서를 참조하세요. 모든 Azure Maven 플러그 인은 공통 구성 집합을 공유합니다. 이러한 구성은 일반 구성을 참조 하세요. Azure 앱 Service와 관련된 구성은 Azure 앱: 구성 세부 정보를 참조하세요.
나중에 사용할 수 있도록 값과 resourceGroup
값을 따로 appName
저장해야 합니다.
배포를 위한 앱 준비
App Service에 애플리케이션을 배포하면 리디렉션 URL이 배포된 앱 인스턴스의 리디렉션 URL로 변경됩니다. 속성 파일에서 이러한 설정을 변경하려면 다음 단계를 사용합니다.
다음 예제와 같이 앱의 authentication.properties 파일로 이동하고 배포된 앱의 do기본 이름으로 값을
app.homePage
변경합니다. 예를 들어 이전 단계에서 앱 이름을 선택한example-domain
경우 이제 값에app.homePage
사용해야https://example-domain.azurewebsites.net
합니다. 또한 프로토콜을 .로http
변경했는지 확인합니다https
.# app.homePage is by default set to dev server address and app context path on the server # for apps deployed to azure, use https://your-sub-domain.azurewebsites.net app.homePage=https://<your-app-name>.azurewebsites.net
이 파일을 저장한 후 다음 명령을 사용하여 앱을 다시 빌드합니다.
mvn clean package
Microsoft Entra ID 앱 등록 업데이트
리디렉션 URI가 배포된 앱에서 Azure 앱 서비스로 변경되므로 Microsoft Entra ID 앱 등록에서도 리디렉션 URI를 변경해야 합니다. 다음 단계에 따라 이 변경을 수행합니다.
개발자용 Microsoft ID 플랫폼의 앱 등록 페이지로 이동합니다.
검색 상자를 사용하여 앱 등록을 검색합니다(예: .)
java-servlet-webapp-authentication
.이름을 선택하여 앱 등록을 엽니다.
메뉴에서 인증을 선택합니다.
웹 - 리디렉션 URI 섹션에서 URI 추가를 선택합니다.
앱의 URI를 입력하고
/auth/redirect
추가합니다(예https://<your-app-name>.azurewebsites.net/auth/redirect
: .).저장을 선택합니다.
앱 배포하기
이제 Azure 앱 Service에 앱을 배포할 준비가 되었습니다. 다음 명령을 사용하여 배포를 실행하기 위해 Azure 환경에 로그인했는지 확인합니다.
az login
pom.xml 파일에 모든 구성이 준비되면 이제 다음 명령을 사용하여 Java 앱을 Azure에 배포할 수 있습니다.
mvn package azure-webapp:deploy
배포가 완료되면 애플리케이션이 준비됩니다 http://<your-app-name>.azurewebsites.net/
. 로컬 웹 브라우저를 사용하여 URL을 엽니다. 여기서 애플리케이션의 시작 페이지가 msal4j-servlet-auth
표시됩니다.
비밀 값 제거
애플리케이션의 authentication.properties 파일은 현재 매개 변수에 클라이언트 암호 aad.secret
의 값을 보유합니다. 이 파일에 이 값을 유지하는 것은 좋지 않습니다. Git 리포지토리에 커밋하는 경우에도 위험을 감수할 수 있습니다.
보안 추가 단계로 이 값을 Azure Key Vault에 저장하고 Key Vault 참조를 사용하여 애플리케이션에서 사용할 수 있도록 할 수 있습니다.
다음 단계를 사용하여 Key Vault로 값을 aad.secret
이동하고 코드에서 사용합니다.
다음 명령을 사용하여 Azure Key Vault 인스턴스를 만듭니다.
export RESOURCE_GROUP=<your-resource-group-name> export KEY_VAULT=<your-key-vault-name> az keyvault create \ --resource-group $RESOURCE_GROUP \ --name $KEY_VAULT
다음 명령을 사용하여 키 자격 증명 모음의
aad.secret
비밀 값을 새 비밀로 추가합니다.az keyvault secret set \ --vault-name $KEY_VAULT \ --name "AADSECRET" \ --value "<the-value-of-your-client-secret>"
이제 앱에 키 자격 증명 모음에 대한 액세스 권한을 부여해야 합니다. 이 작업을 수행하려면 먼저 다음 명령을 사용하여 앱에 대한 새 ID를 만듭니다.
export WEB_APP_NAME=<your-web-app-name> az webapp identity assign \ --resource-group $RESOURCE_GROUP \ --name $WEB_APP_NAME
다음 명령을 사용하여 Key Vault의 비밀에 대해 이 ID
get
와list
권한을 부여합니다.export IDENTITY=$(az webapp identity show \ --resource-group $RESOURCE_GROUP \ --name $WEB_APP_NAME \ --query principalId \ --output tsv) az keyvault set-policy \ --resource-group $RESOURCE_GROUP \ --name $KEY_VAULT \ --secret-permissions get list \ --object-id $IDENTITY
다음 명령을 사용하여 키 자격 증명 모음의 비밀에 대한 키 자격 증명 모음 참조를 사용하는 애플리케이션 설정을 앱에 만듭니다. 이 설정을 사용하면 앱에서 비밀 값을 환경 변수로 사용할 수 있습니다.
az webapp config appsettings set \ --resource-group $RESOURCE_GROUP \ --name $WEB_APP_NAME \ --settings AADSECRET='@Microsoft.KeyVault(VaultName=$KEY_VAULT;SecretName=AADSECRET)'
다음 코드를 사용하여 환경 변수에서 이 값을 로드합니다. \src\기본\java\com\microsoft\azuresamples\msal4j\helpers\Config.java 파일의 41줄에서 현재 문을 다음 줄로 변경합니다.
public static final String SECRET = System.getenv("AADSECRET");
이제 authentication.properties 파일에서 키와 값을 삭제
aad.secret
할 수 있습니다.다음 명령을 사용하여 코드를 다시 빌드합니다.
mvn clean package
다음 명령을 사용하여 애플리케이션을 다시 배포합니다.
mvn package azure-webapp:deploy
이제 배포가 완료되었습니다.