블로그 이름

[JAVA] JMX 인증 설정 정리 본문

개발/Java

[JAVA] JMX 인증 설정 정리

Hide 2026. 2. 11. 23:12

Spring Boot / 순수 Java 어플리케이션 운영 시 JMX 보안 설정 및 오류 해결 방법을 정리하고자 한다.

 

1. JMX 인증 설정

jmx.id=xxx, jmx.pw=yyy 와 같이 프로퍼티로 설정하는 것이 아님

JMX 인증은 application.properties 에 ID/PW 를 쓰는 게 아닌 연결 시 ID/PW 를 사용하는 것이며, JMX 인증은 JVM 레벨에서 설정하며 ID/PW는 반드시 파일로 관리해야 한다.

 

JMX 기본 설정 (Windows 기준)

com.sun.management.jmxremote=true
com.sun.management.jmxremote.port=1099
com.sun.management.jmxremote.rmi.port=1099
com.sun.management.jmxremote.authenticate=true
com.sun.management.jmxremote.ssl=false

com.sun.management.jmxremote.password.file=C:/app/jmx/jmxremote.password
com.sun.management.jmxremote.access.file=C:/app/jmx/jmxremote.access

 

경로의 경우 절대경로를 권장하나 상대경로로 사용은 가능하다 (./app/jmx/jmxremote.password)

 

jmxremote.password 파일

monitorRole monitor123
controlRole control123
  • 앞: ID (Username)
  • 뒤: 비밀번호 (Password)

계정 권한 설정

jmxremote.access

monitorRole readonly
controlRole readwrite

 

계정 권한의 경우 readonly, readwrite 가 존재하며 readonly를 사용하는 경우 조회만 가능 (내 프로그램의 경우 켜지지 않는 것으 readwrite 사용 필요하다 왜인지 추후 확인 필요)

 

monitorRole 조회만 가능
controlRole GC, HeapDump, 설정 변경 가능

 

 

위와 같이 설정한 다음 프로그램을 실행하면, 아래와 같은 오류 발생

java.lang.SecurityException: 비밀번호 파일 읽기 액세스는 제한되어야 합니다

 

원인은 JMX 비밀번호 파일 권한이 너무 열려있는 것. Linux의 chmod 600을 Windows 보안 권한으로 흉내내야한다. jmxremote.password 우크릭 -> 속성 -> 보안 탭 -> 고급 -> 상속 사용 안 함 -> 상속된 권한 제거 -> 계정 전체 삭제 후, administrators 혹은 Java 실행 계정 1개 추가하여 읽기 권한만 부여

jmxremote.access 파일도 동일하게 설정하여 파일 권한 설정해주어 오류 해결하였다.

 

두 번째 에러

java.lang.SecurityException: Access denied! Invalid access level

 

원인은 readonly 계정으로 write 작업을 시도하여 발생. 권한이 readwrite인 계정으로 접속하면 해결된다.

 

JMX ID/PW 적용 여부 확인 방법은

CMD -> jconsole 입력 시 아래와 같은 화면이 표시된다.

해당 RemoteProcess 선택 후 host에는 localhost:9999 와 같이 접속할 IP:PORT 입력, UserName/Password 입력 후 접속해보면 된다. 맞는 NAME/PW로 입력 시 연결이 된다면 성공이다.