WebLogic 감사(Audit) 설정: Auditing Provider와 Configuration Audit로 변경 이력 남기기

WebLogic 감사 대표 이미지: 서버, 장부와 돋보기

“누가 언제 이 사용자를 관리자 그룹에서 뺐는가?” OBIEE 11g의 bifoundation_domain(WebLogic 10.3.6) 환경에서 이런 질문에 답하려고 WebLogic 감사 기능을 켜고 로그를 분석했습니다. WebLogic에는 이 용도로 쓰는 기능이 두 가지 있습니다.

  • Auditing provider(WebLogic Auditing provider, 콘솔 이름 DefaultAuditor): 로그인 성공·실패 같은 보안 이벤트를 DefaultAuditRecorder.log에 기록합니다.
  • Configuration Audit(구성 감사): 도메인 구성 변경과 관리 작업(그룹 멤버 추가·삭제 등)을 AdminServer 로그나 Auditing provider로 보냅니다.

이 글은 2024년 8~9월 Notion에 영어로 정리했던 세 글을 합친 것입니다. 2026년 10월에 Oracle 공식 문서(12.2.1.4, 14.1.2 「Configuring the WebLogic Auditing Provider」와 14.1.2 MBean 레퍼런스)로 하나씩 다시 확인하고 고쳤습니다.

원본에는 WebLogic 10.3.6 관리 콘솔 스크린숏 13장이 있었지만 이번에는 쓰지 않았습니다. 14.1.2부터는 이 관리 콘솔이 제거되고 WebLogic Remote Console로 바뀌었고, 12.2.1.4 콘솔도 화면 모양이 다르기 때문입니다. 대신 버전별 메뉴 경로와, 버전에 상관없이 쓸 수 있는 WLST 명령으로 정리했습니다.

버전별 설정 도구

버전화면 도구스크립트
10.3.6 ~ 12.2.1.4, 14.1.1WebLogic Server Administration Console (/console)WLST
14.1.2 이후WebLogic Remote Console (별도 설치, 관리 콘솔은 제거됨)WLST

1. 현재 설정 확인

기본 보안 영역(myrealm)에는 Auditing provider가 들어 있지 않습니다. 먼저 지금 상태를 봅니다.

  • Auditing provider
    • 관리 콘솔: Security Realms > myrealm > Providers > Auditing. 목록이 비어 있으면 구성되지 않은 것입니다.
    • Remote Console(14.1.2): Edit Tree > Security > Realms > myrealm > Auditors
  • Configuration Audit Type
    • 관리 콘솔: 도메인 이름 > Configuration > General > Advanced > Configuration Audit Type
    • Remote Console(14.1.2): Edit Tree > Environment > Domain > Show Advanced Fields > Configuration Audit Type
    • 기본값은 none(기록 안 함)입니다.

WLST로도 확인할 수 있습니다. 버전에 관계없이 같은 MBean 속성을 읽습니다.

# $ORACLE_HOME/oracle_common/common/bin/wlst.sh
connect('weblogic', '<비밀번호>', 't3://<admin-host>:7001')
realm = cmo.getSecurityConfiguration().getDefaultRealm()
print([a.getName() for a in realm.getAuditors()])   # 비어 있으면 Auditing provider 없음
print(cmo.getConfigurationAuditType())                # none / log / audit / logaudit
disconnect()

원본 글은 “서버 로그 디렉터리에 DefaultAuditRecorder.log가 있으면 감사가 켜진 것”이라고 했지만, 예전에 켰다가 끈 경우에도 파일은 남아 있을 수 있습니다. 판단은 위의 설정값으로 하세요.

2. Auditing provider 추가

관리 콘솔(12.2.1.4 이하)

  1. Change Center에서 Lock & Edit
  2. Security Realms > myrealm > Providers > Auditing > New
  3. Name을 입력하고(예: MyAuditProvider) Type은 DefaultAuditor를 고른 뒤 OK
  4. 만든 provider > Configuration > Provider Specific에서 값을 정하고 Save(아래 “주요 설정” 참고)
  5. Activate Changes

Remote Console(14.1.2): Edit Tree > Security > Realms > myrealm > Auditors > New에서 Name을 입력하고 Type은 DefaultAuditor를 고른 뒤 Create를 누릅니다. 그다음 Default Auditor Parameters 탭에서 값을 정하고 Save합니다.

WLST

connect('weblogic', '<비밀번호>', 't3://<admin-host>:7001')
edit()
startEdit()
realm = cmo.getSecurityConfiguration().getDefaultRealm()
aud = realm.createAuditor('MyAuditProvider', 'weblogic.security.providers.audit.DefaultAuditor')
aud.setSeverity('ERROR')       # 아래 "주요 설정" 참고
aud.setRotationMinutes(1440)   # 하루에 한 번 새 파일
save()
activate()
disconnect()

재시작: 보안 영역의 provider 목록 변경은 동적 변경이 아닙니다(MBean 레퍼런스: “Changes take effect after you redeploy the module or restart the server”). 보안 영역에 자동 재시작(Automatically Restart after Non-Dynamic Changes)이 켜져 있으면 영역이 스스로 다시 시작하고, 꺼져 있으면 서버를 재시작해야 합니다. 10.3.6 콘솔에서는 Activate 후 “2 items must be restarted”라는 안내가 나왔습니다.

주요 설정

Severity: 지정한 등급과 그보다 순위가 높은 이벤트를 모두 기록합니다. 기본값은 ERROR입니다.

Severity순위
INFORMATION1
WARNING2
ERROR3
SUCCESS4
FAILURE5

예를 들어 INFORMATION으로 두면 모든 이벤트가 기록됩니다. 등급을 골라 담으려면 CUSTOM으로 두고 필요한 등급만 켭니다. WLST 속성 이름은 InformationAuditSeverityEnabled, WarningAuditSeverityEnabled, ErrorAuditSeverityEnabled, SuccessAuditSeverityEnabled, FailureAuditSeverityEnabled입니다. 14.1.2 MBean 레퍼런스는 보안 권장값(secure value)으로 CUSTOM을 제시하고, 이때 WARNING·ERROR·FAILURE를 켜도록 안내합니다.

Rotation Minutes: 새 DefaultAuditRecorder.log를 만드는 주기(분)입니다. 기본값 1440(하루)입니다. 이전 파일은 DefaultAuditRecorder.YYYYMMDDHHMM.log 이름으로 같은 디렉터리에 남습니다.

Active ContextHandler Entries: 감사 이벤트에 딸린 ContextHandler 항목 중 무엇을 함께 기록할지 고릅니다. 기본은 아무것도 기록하지 않습니다.

로그 위치: Auditing provider는 보안 영역 단위로 구성하지만, 각 서버가 자기 디렉터리에 따로 씁니다. 기본 위치는 <DOMAIN_HOME>/servers/<SERVER_NAME>/logs/DefaultAuditRecorder.log입니다. 위치를 바꾸려면 시작 옵션 -Dweblogic.security.audit.auditLogDir=/audit을 주며, 이 경우 파일은 /audit/<SERVER_NAME>/logs/DefaultAuditRecorder.log에 생깁니다.

3. Configuration Audit 켜기

값동작
none (기본값)기록하지 않음
logAdminServer 로그 파일에만 기록
audit감사 이벤트만 발생(Auditing provider가 처리)
logauditAdminServer 로그에 기록하고 감사 이벤트도 발생

audit와 logaudit는 감사 이벤트를 Auditing provider가 받아야 하므로, 2단계의 provider가 먼저 있어야 합니다. 14.1.2 MBean 레퍼런스의 보안 권장값은 audit입니다. 저는 사람이 바로 읽을 수 있도록 AdminServer 로그에도 남는 log 또는 logaudit를 썼습니다.

  • 관리 콘솔: 도메인 이름 > Configuration > General > Advanced > Configuration Audit Type에서 값을 고르고 Save, Activate Changes. 콘솔 목록에는 “Change Log”, “Change Log and Audit” 같은 이름으로 표시됩니다.
  • Remote Console(14.1.2): Edit Tree > Environment > Domain > Show Advanced Fields > Configuration Audit Type에서 고르고 Save
  • WLST:
connect('weblogic', '<비밀번호>', 't3://<admin-host>:7001')
edit()
startEdit()
cmo.setConfigurationAuditType('logaudit')
save()
activate()
disconnect()

AdminServer 시작 옵션 -Dweblogic.domain.ConfigurationAuditType="logaudit"로도 켤 수 있습니다. 원본 글에는 “저장 후 서버 재시작”이 있었지만, MBean 레퍼런스에서 이 속성에는 재시작이 필요하다는 표시가 없습니다.

4. 구성 감사 로그 읽기

구성 감사 메시지는 AdminServer의 로그 파일(<DOMAIN_HOME>/servers/AdminServer/logs/AdminServer.log)에 기록됩니다. 기본 설정에서는 도메인 전체 로그(domain log)로 보내지지 않습니다. 메시지 ID는 159900~159910 범위이며, 로그에는 BEA-1599xx 형태로 나옵니다.

ID메시지 형식
159900USER username CREATED MBean-name
159904USER username MODIFIED MBean-name ATTRIBUTE attribute-name FROM old-value TO new-value
159907USER username INVOKED ON MBean-name METHOD operation-name PARAMS specified-parameters

당시 실제로 남은 로그입니다(호스트명과 사용자 ID는 바꿨습니다). weblogic 계정이 user01을 BIAdministrators 그룹에서 뺀 기록입니다.

<Sep 16, 2024 9:54:38 PM EDT> <Info> <Configuration Audit> <host01> <AdminServer> <[ACTIVE] ExecuteThread: '0' for queue: 'weblogic.kernel.Default (self-tuning)'> <weblogic> <> <...> <1726538078198> <BEA-159907> <USER weblogic INVOKED ON Security:Name=myrealmDefaultAuthenticator METHOD removeMemberFromGroup PARAMS BIAdministrators; user01>

로그가 많으면 아래 스크립트로 구성 감사 줄만 뽑아 “시각 | 메시지 ID | 내용”으로 정리할 수 있습니다. 두 번째 인자로 검색어(예: addMemberToGroup)를 주면 그 줄만 남깁니다.

#!/bin/bash
# 사용법: ./config_audit_report.sh <AdminServer 로그 디렉터리> [검색어]
# 예: ./config_audit_report.sh $DOMAIN_HOME/servers/AdminServer/logs MemberFromGroup
LOG_DIR=${1:?로그 디렉터리 필요}
FILTER=${2:-}
ls "$LOG_DIR"/AdminServer.log* >/dev/null 2>&1 || { echo "로그 없음: $LOG_DIR"; exit 1; }
# 로테이션된 AdminServer.log00001... 을 먼저, 현재 AdminServer.log 를 마지막에 읽는다
cat "$LOG_DIR"/AdminServer.log[0-9]* "$LOG_DIR"/AdminServer.log 2>/dev/null \
  | grep -E '<BEA-1599(0[0-9]|10)>' \
  | grep -F -- "$FILTER" \
  | sed -E 's/^(####)?<([^>]*)>.*<(BEA-1599[0-9]{2})> <(.*)>$/\2 | \3 | \4/'
Sep 16, 2024 9:54:38 PM EDT | BEA-159907 | USER weblogic INVOKED ON Security:Name=myrealmDefaultAuthenticator METHOD removeMemberFromGroup PARAMS BIAdministrators; user01

원본 스크립트는 AdminServer*.log 패턴으로 파일을 찾아서 AdminServer.log00001처럼 로테이션된 파일을 놓쳤고, 그룹 멤버십 변경 두 가지만 뽑았습니다. 위 스크립트는 로테이션 파일을 포함하고, 159900~159910 범위의 모든 구성 감사 메시지를 대상으로 합니다.

주의할 점

  • 성능: Oracle 문서는 Auditing provider를 쓰면 기록되는 이벤트가 적어도 성능에 영향이 있다고 안내합니다. 운영에 적용하기 전에 Severity를 정하고 부하를 확인하세요.
  • 외부 LDAP: OID 같은 외부 LDAP를 인증 공급자로 쓸 때, WebLogic을 거치지 않고 LDAP에 직접 한 변경은 WebLogic 구성 감사에 남지 않습니다. 그 변경은 LDAP 쪽 감사로 추적해야 합니다.
  • 로그 보관: DefaultAuditRecorder.*.log와 AdminServer.log*는 계속 쌓이므로 보관 기간과 디스크 정리 계획을 함께 정하세요.
  • WLST 예시: 위 WLST 명령은 Oracle MBean 레퍼런스(RealmMBean.createAuditor, DomainMBean.ConfigurationAuditType)와 12.2.1.4·14.1.2 MBean 메타데이터로 이름과 값을 확인했습니다. 운영 도메인에 쓰기 전에 테스트 도메인에서 먼저 실행해 보세요.

정리

보안 이벤트는 Auditing provider(DefaultAuditor)로 DefaultAuditRecorder.log에, 구성 변경과 관리 작업은 Configuration Audit로 AdminServer 로그에 남깁니다. 14.1.2부터는 관리 콘솔이 없으므로 Remote Console이나 WLST로 설정합니다. 그룹 멤버십 같은 변경 이력은 BEA-1599xx 메시지를 모아 보면 누가 언제 무엇을 바꿨는지 바로 확인할 수 있습니다.

WebLogic 시작 시 비밀번호 입력을 없애는 방법은 WebLogic boot.properties 설정, weblogic 계정만 로그인이 느린 문제는 AD 로그인은 빠른데 weblogic만 느릴 때에서 다뤘습니다.

위로 스크롤