이 문서에서는 App Service에서 Java 관련 보안 설정을 구성하는 방법을 보여 줍니다. App Service에서 실행되는 Java 애플리케이션에는 다른 애플리케이션 과 동일한 보안 모범 사례 집합이 있습니다.
Azure App Service는 완전히 관리되는 서비스에서 다음 세 가지 유형으로 Java 웹 애플리케이션을 실행합니다.
- JAVA SE(Standard Edition). Java SE는 Spring Boot, Quarkus, Dropwizard 또는 포함된 Tomcat 또는 Jetty 서버가 포함된 앱과 같은 포함된 서버가 포함된 JAR(Java 보관) 패키지로 배포된 앱을 실행할 수 있습니다.
- 톰캣. 기본 제공 Tomcat 서버는 WAR(웹 애플리케이션 보관) 패키지로 배포된 앱을 실행할 수 있습니다.
- JBoss EAP(엔터프라이즈 애플리케이션 플랫폼): 기본 제공 JBoss EAP 서버는 WAR 또는 EAR(엔터프라이즈 보관) 패키지로 배포된 앱을 실행할 수 있습니다. 이 옵션은 무료, 프리미엄 v3 및 격리된 v2를 포함하는 가격 책정 계층 집합의 Linux 앱에서 지원됩니다.
비고
App Service의 JBoss EAP는 이제 BYOL(Bring Your Own License) 청구를 지원합니다. BYOL을 사용하면 기존 Red Hat 구독이 있는 고객이 해당 라이선스를 Azure App Service의 JBoss EAP 배포에 직접 적용할 수 있습니다. 자세한 내용은 App Service의 JBoss EAP에 대한 BYOL 지원을 참조하세요.
사용자 인증(간편 인증)
Azure Portal에서 인증 및 권한 부여 옵션을 사용하여 앱 인증을 설정합니다. 여기에서 Microsoft Entra ID 또는 Facebook, Google 또는 GitHub와 같은 소셜 로그인을 사용하여 인증을 사용하도록 설정할 수 있습니다. Azure Portal 구성은 단일 인증 공급자를 구성할 때만 작동합니다. 자세한 내용은 Microsoft Entra 로그인을 사용하도록 App Service 앱 구성 및 기타 ID 공급자 관련 문서를 참조하세요. 여러 로그인 공급자를 사용하도록 설정해야 하는 경우 로그인 및 로그아웃 사용자 지정을 참조하세요.
Spring Boot 개발자는 Microsoft Entra Spring Boot starter를 사용하여 친숙한 Spring Security 주석 및 API로 애플리케이션을 보호할 수 있습니다.
application.properties 파일에서 최대 헤더 크기를 늘려야 합니다. 이 값은 16384로 설정하는 것이 좋습니다.
Tomcat 애플리케이션은 주체 개체를 Map 개체로 캐스팅하여 서블릿에서 사용자의 클레임에 직접 액세스할 수 있습니다.
Map 개체는 각 클레임 형식을 해당 형식에 대한 클레임 컬렉션에 매핑합니다. 다음 코드 예에서 request는 HttpServletRequest의 인스턴스입니다.
Map<String, Collection<String>> map = (Map<String, Collection<String>>) request.getUserPrincipal();
이제 특정 클레임에 대한 Map 개체를 검사할 수 있습니다. 예를 들어 다음 코드 조각은 모든 클레임 형식을 반복하고 각 컬렉션의 내용을 인쇄합니다.
for (Object key : map.keySet()) {
Object value = map.get(key);
if (value != null && value instanceof Collection {
Collection claims = (Collection) value;
for (Object claim : claims) {
System.out.println(claims);
}
}
}
사용자를 로그아웃하려면 /.auth/ext/logout 경로를 사용합니다. 다른 작업을 수행하려면 로그인 및 로그아웃 사용자 지정을 참조하세요. Tomcat HttpServletRequest 인터페이스 및 해당 메서드에 대한 공식 설명서도 있습니다. 다음 서블릿 메서드도 App Service 구성에 따라 하이드레이션됩니다.
public boolean isSecure()
public String getRemoteAddr()
public String getRemoteHost()
public String getScheme()
public int getServerPort()
이 기능을 사용하지 않도록 설정하려면 값이 WEBSITE_AUTH_SKIP_PRINCIPAL인 1 애플리케이션 설정을 만듭니다. App Service에서 추가한 모든 서블릿 필터를 사용하지 않도록 설정하려면 값이 WEBSITE_SKIP_FILTERS인 1 설정을 만듭니다.
JBoss EAP의 경우 Tomcat 탭을 참조하세요.
TLS 구성
기존 TLS 인증서를 업로드하고 애플리케이션의 도메인 이름에 바인딩하려면 Azure App Service에서 사용자 지정 도메인에 대해 HTTPS 사용 설정을 참조하세요. TLS를 적용하도록 앱을 구성할 수도 있습니다.
Azure Key Vault 참조 사용
Azure Key Vault 는 액세스 정책 및 감사 기록을 사용하여 중앙 집중식 비밀 관리를 제공합니다. 암호 또는 연결 문자열과 같은 비밀을 키 볼트에 저장할 수 있습니다. 환경 변수를 통해 애플리케이션에서 이러한 비밀에 액세스할 수 있습니다.
먼저, 앱에 Key Vault에 대한 액세스 권한을 부여하고, 애플리케이션 설정에서 비밀 키에 대한 Key Vault 참조를 생성하십시오. App Service 터미널에 원격으로 액세스하는 동안 환경 변수를 출력하여 참조가 비밀을 확인할 수 있는지 검증할 수 있습니다.
Spring 구성 파일은 외부화된 구성을 참조하세요.
Spring 구성 파일에 이러한 비밀을 주입하려면 환경 변수 주입 구문(${MY_ENV_VAR})을 사용합니다.
Tomcat 구성 파일에 이러한 비밀을 주입하려면 환경 변수 주입 구문(${MY_ENV_VAR})을 사용합니다.
Linux에서 Java 키 저장소 사용
기본적으로 App Service Linux에 업로드된 모든 퍼블릭 또는 프라이빗 인증서는 컨테이너가 시작될 때 해당 Java 키 저장소에 로드됩니다. 인증서를 업로드한 후에는 App Service를 다시 시작하여 Java 키 저장소에 로드해야 합니다. 공용 인증서는 .에서 $JRE_HOME/lib/security/cacerts키 저장소에 로드됩니다. 프라이빗 인증서는 .에 $JRE_HOME/lib/security/client.jks저장됩니다.
Java 키 저장소의 인증서를 사용하여 JDBC 연결을 암호화하는 데 더 많은 구성이 필요할 수 있습니다.
Linux에서 Java 키 저장소 초기화
import java.security.KeyStore 개체를 초기화하려면 암호를 사용하여 키 저장소 파일을 로드합니다. 두 키 저장소의 기본 암호는 changeit입니다.
KeyStore keyStore = KeyStore.getInstance("jks");
keyStore.load(
new FileInputStream(System.getenv("JRE_HOME")+"/lib/security/cacerts"),
"changeit".toCharArray());
KeyStore keyStore = KeyStore.getInstance("pkcs12");
keyStore.load(
new FileInputStream(System.getenv("JRE_HOME")+"/lib/security/client.jks"),
"changeit".toCharArray());
Linux에서 키 저장소를 수동으로 로드
키 저장소에 인증서를 수동으로 로드할 수 있습니다. App Service에서 인증서를 키 저장소에 자동으로 로드하지 않도록 설정하려면 값SKIP_JAVA_KEYSTORE_LOAD이 있는 앱 설정을 1만듭니다. Azure Portal을 사용하여 App Service에 업로드된 모든 공용 인증서는 아래에 /var/ssl/certs/저장됩니다. 프라이빗 인증서는 /var/ssl/private/에 저장됩니다.
Java 키 도구를 상호 작용하거나 디버그하려면 App Service 에 대한 SSH 연결을 열고 명령을 keytool실행합니다. 명령 목록은 핵심 도구 설명서를 참조하세요. KeyStore API에 대한 자세한 내용은 클래스 KeyStore를 참조하세요.
관련 콘텐츠
Java 개발자용 Azure 센터를 방문하여 Azure 빠른 시작, 자습서 및 Java 참조 설명서를 찾아보세요.