다음을 통해 공유


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

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

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

  • SE(Java Standard Edition): 포함된 서버(예: Spring Boot, Quarkus, Dropwizard 또는 포함된 Tomcat 또는 Jetty 서버가 있는 앱)가 포함된 JAR(Java Archive) 패키지로 배포된 앱을 실행할 수 있습니다.
  • Tomcat: 기본 제공 Tomcat 서버는 WAR(웹 애플리케이션 보관) 패키지로 배포된 앱을 실행할 수 있습니다.
  • JBoss EAP(엔터프라이즈 애플리케이션 플랫폼): 기본 제공 JBoss EAP 서버는 WAR 또는 EAR(엔터프라이즈 보관) 패키지로 배포된 앱을 실행할 수 있습니다. 무료, Premium v3 및 Isolated v2.gti를 포함하는 가격 책정 계층 집합에서 Linux 앱에 대해 지원됩니다.

비고

App Service의 JBoss EAP는 이제 BYOL("Bring Your Own License") 청구를 지원합니다. 이렇게 하면 기존 Red Hat 구독을 사용하는 고객이 Azure App Service의 JBoss EAP 배포에 직접 해당 라이선스를 적용할 수 있습니다. 자세히알아보세요.

사용자 인증(간편 인증)

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

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

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가 인증서를 키 저장소에 자동으로 로드하지 못하도록 값이 SKIP_JAVA_KEYSTORE_LOAD인 앱 설정 1를 만듭니다. Azure Portal을 통해 App Service에 업로드된 모든 공용 인증서는 /var/ssl/certs/에 저장됩니다. 프라이빗 인증서는 /var/ssl/private/에 저장됩니다.

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

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