Azure App Service에서 Tomcat, JBoss 또는 Java SE 앱에 대한 보안 구성

이 문서에서는 App Service에서 Java 관련 보안 설정을 구성하는 방법을 보여 줍니다. App Service에서 실행되는 Java 애플리케이션의 보안 모범 사례 집합은 다른 애플리케이션과 동일합니다.

Azure App Service는 세 가지 변형으로 완전 관리형 서비스에서 Java 웹 애플리케이션을 실행합니다.

  • Java SE - 임베디드 서버(예: Spring Boot, Dropwizard, Quarkus 또는 임베디드 Tomcat 또는 Jetty 서버가 있는 서버)가 포함된 JAR 패키지로 배포된 앱을 실행할 수 있습니다.
  • Tomcat - 기본 제공된 Tomcat 서버는 WAR 패키지로 배포된 앱을 실행할 수 있습니다.
  • JBoss EAP - Premium v3 및 격리 v2 가격 책정 계층의 Linux 앱에만 지원됩니다. 기본 제공된 JBoss EAP 서버는 WAR 또는 EAR 패키지로 배포된 앱을 실행할 수 있습니다.

참고 항목

Spring 애플리케이션의 경우 Azure Spring Apps를 사용하는 것이 좋습니다. 그러나 Azure App Service를 대상으로 계속 사용할 수 있습니다. 자세한 내용은 Java 워크로드 대상 지침을 참조하세요.

사용자 인증(간편 인증)

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 개체는 각 클레임 형식을 해당 형식에 대한 클레임 컬렉션에 매핑합니다. 다음 코드 예에서 requestHttpServletRequest의 인스턴스입니다.

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()

이 기능을 사용하지 않도록 설정하려면 값이 1WEBSITE_AUTH_SKIP_PRINCIPAL 애플리케이션 설정을 만듭니다. App Service에서 추가한 모든 서블릿 필터를 사용하지 않도록 설정하려면 값이 1WEBSITE_SKIP_FILTERS 설정을 만듭니다.

JBoss EAP의 경우 Tomcat 탭을 참조하세요.

TLS/SSL 구성

기존 TLS/SSL 인증서를 업로드하고 애플리케이션의 도메인 이름에 바인딩하려면 Azure App Service에서 TLS/SSL 바인딩으로 사용자 지정 DNS 이름 보호 지침에 따라 수행합니다. TLS/SSL을 적용하도록 앱을 구성할 수도 있습니다.

KeyVault 참조 사용

Azure KeyVault는 액세스 정책 및 감사 기록을 통해 중앙 집중식 비밀 관리를 제공합니다. 키 자격 증명 모음에 암호 또는 연결 문자열과 같은 비밀을 저장하고 환경 변수를 통해 애플리케이션에서 이러한 비밀에 액세스할 수 있습니다.

먼저 키 자격 증명 모음에 앱 액세스 권한을 부여하고 애플리케이션 설정에서 사용자 비밀을 KeyVault 참조로 만드는 지침을 따릅니다. App Service 터미널에 원격으로 액세스하는 동안 환경 변수를 인쇄하여 참조가 비밀로 해결되는지 확인할 수 있습니다.

Spring 구성 파일의 경우 외부화된 구성에 대한 이 설명서를 참조하세요.

Spring 구성 파일에 이러한 비밀을 주입하려면 환경 변수 주입 구문(${MY_ENV_VAR})을 사용합니다.

Tomcat 구성 파일에 이러한 비밀을 주입하려면 환경 변수 주입 구문(${MY_ENV_VAR})을 사용합니다.

Linux에서 Java 키 저장소 사용

기본적으로 App Service Linux에 업로드된 공용 또는 프라이빗 인증서는 컨테이너가 시작될 때 해당 Java 키 저장소에 로드됩니다. 인증서를 업로드한 후에는 Java 키 저장소에 로드하기 위해 App Service를 다시 시작해야 합니다. 공용 인증서는 $JRE_HOME/lib/security/cacerts에서 키 저장소로 로드되고 프라이빗 인증서는 $JRE_HOME/lib/security/client.jks에 저장됩니다.

Java 키 저장소의 인증서를 사용하여 JDBC 연결을 암호화하려면 추가 구성이 필요할 수 있습니다. 선택한 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가 인증서를 키 저장소에 자동으로 로드하지 못하도록 값이 1인 앱 설정 SKIP_JAVA_KEYSTORE_LOAD를 만듭니다. Azure Portal을 통해 App Service에 업로드된 모든 공용 인증서는 /var/ssl/certs/에 저장됩니다. 프라이빗 인증서는 /var/ssl/private/에 저장됩니다.

App Service에 SSH 연결을 열고 keytool 명령을 실행하여 Java Key Tool을 상호 작용하거나 디버그할 수 있습니다. 명령 목록은 핵심 도구 설명서를 참조하세요. KeyStore API에 대한 자세한 내용은 공식 설명서를 참조하세요.

다음 단계

Java 개발자용 Azure 센터를 방문하여 Azure 빠른 시작, 자습서 및 Java 참조 설명서를 찾아보세요.