아직도 Profile로 권한 관리? — SAP Role 설계 제대로 하기 #shorts #SAP

Moderator · 조회 2

📖 개요 및 학습 목표

SAP 시스템에서 권한 관리는 단순히 "누가 무엇을 할 수 있는가"를 넘어, 감사(Audit) 대응과 직무 분리(SoD) 통제의 핵심입니다. 과거 R/2, R/3 초기에는 Profile을 직접 사용자에게 할당하는 방식이 일반적이었지만, 이는 변경 추적과 유지보수 측면에서 한계가 명확합니다. 본 튜토리얼은 PFCG 기반 Role 설계로 전환하는 실전 절차와 운영 노하우를 다룹니다.

학습 체크리스트

  • Authorization Object / Field / Value의 3계층 구조 이해
  • Profile 직접 할당과 Role 기반 할당의 차이 식별
  • PFCG로 Single Role / Composite Role 생성
  • SU24 Proposal 관리와 SU25 업그레이드 절차
  • 최소 권한·SoD 관점에서의 설계 원칙 적용
  • SM19 / SM20 감사 로그 활용

📚 선수 지식

본 가이드는 SAP NetWeaver ABAP 기반 시스템(ECC 6.0 EHP8 또는 S/4HANA 2022 이상)에서 SAP GUI 740 이상을 사용하는 환경을 기준으로 합니다. 다음 개념에 대한 기본 이해가 필요합니다.

🔧 환경 / 버전 / 준비물

실습은 다음 환경에서 검증되었습니다. 버전이 다르면 일부 메뉴 위치나 기본 Profile이 다를 수 있으니 주의하세요.

설치형 시스템이 없다면 SAP CAL(Cloud Appliance Library)에서 S/4HANA Fully-Activated Appliance를 30일 평가판으로 띄워 PFCG/SU24 메뉴 흐름을 따라가 볼 수 있습니다.

💡 핵심 개념

SAP 권한의 3계층: Object → Field → Value

SAP 권한은 마치 건물 출입증과 같습니다. Authorization Object가 건물(예: F_BKPF_BUK — 회계전표 회사코드 권한)이고, 그 안의 Field는 층(BUKRS — 회사코드, ACTVT — 활동), Value는 입실 가능한 호실(BUKRS=1000, ACTVT=03 조회) 입니다.

" ABAP 코드 내부의 권한 체크 예시
AUTHORITY-CHECK OBJECT 'F_BKPF_BUK'
  ID 'BUKRS' FIELD '1000'
  ID 'ACTVT' FIELD '03'.

IF sy-subrc <> 0.
  MESSAGE 'You are not authorized for company code 1000' TYPE 'E'.
ENDIF.

Profile vs Role — 왜 Profile 직접 할당이 문제인가

Profile은 권한 객체와 값들의 묶음을 시스템 내부적으로 표현한 객체입니다. 과거에는 SU02로 Profile을 직접 만들어 SU01에서 사용자에게 매다는 방식이 사용되었습니다. 그러나 이 방식은 다음 문제가 있습니다.

반면 Role(PFCG)은 메뉴 트리 → 트랜잭션 → 권한 객체 → Profile 자동 생성의 흐름을 가지므로, 메뉴를 정의하면 SU24 Proposal을 통해 권한 객체가 자동 채워지고, Profile은 PFCG가 내부적으로 생성·관리합니다.

💻 실전 코드 3단계

1단계: 기본 Single Role 생성

회계 부서의 "전표 조회 전용" Role을 만든다고 가정합니다. T-code PFCG 진입 후 Role 이름을 Z_FI_DOC_DISPLAY로 입력하고 Single Role로 생성합니다.

* PFCG → Role 이름 입력 → Single Role 클릭
* [Description] 탭
Role:        Z_FI_DOC_DISPLAY
Description: FI 회계전표 조회 전용 (개발팀 검증용)

* [Menu] 탭 — Transaction 추가
- FB03 (전표 조회)
- FBL3N (G/L 계정 라인아이템 조회)
- S_ALR_87012287 (전표 저널 리포트)

* [Authorizations] 탭 → "Change Authorization Data" 클릭
* SU24 Proposal에 따라 다음 객체가 자동 채워짐:
- S_TCODE: TCD = FB03, FBL3N, S_ALR_87012287
- F_BKPF_BUK: BUKRS = 1000, ACTVT = 03
- F_BKPF_KOA: KOART = *, ACTVT = 03

각 객체의 노란불(미정)을 채워 초록불(완료)로 만든 뒤, Generate(Shift+F5) 버튼을 눌러 Profile을 자동 생성합니다. Profile 명은 T-A1234567 형태로 자동 부여됩니다.

2단계: 실무 시나리오 — SU24 Proposal 정비와 에러 추적

커스텀 트랜잭션 ZFI001(자체 개발 매출조회)을 PFCG 메뉴에 넣었더니 권한 객체가 비어 있는 경우가 흔합니다. 이는 SU24 Proposal이 등록되지 않았기 때문입니다.

* SU24 등록 절차
1) T-code SU24 실행
2) "Transaction" 라디오 → ZFI001 입력 → Display
3) Change 모드 전환 → "Insert Authorization Object"
   - 추가: F_BKPF_BUK (Check/Maintain = YES)
   - 추가: S_TABU_DIS (Check = YES, Maintain = NO)
4) Default values 설정 (BUKRS = $BUKRS, ACTVT = 03)
5) Save → Transport Request 할당

* 이후 PFCG에서 "Expert Mode → Read again" 선택 시
* SU24 Proposal이 Role에 자동 반영됨

운영 중 사용자가 "권한 없음" 메시지를 받으면 즉시 SU53을 실행해 직전 실패 권한 체크를 확인합니다. 더 정밀한 추적은 ST01(Authorization Trace) 또는 STAUTHTRACE(다중 사용자 트레이스)를 사용합니다.

* SU53 결과 해석 예시
Authorization check failed:
  Object:    F_BKPF_BUK
  Field:     BUKRS  Value: 2000  ← 사용자가 시도한 값
  Field:     ACTVT  Value: 03

  User has:  BUKRS = 1000 (only)
            ACTVT = 03

→ 조치: Role의 BUKRS Value에 2000 추가, Generate, 사용자에게 재할당

3단계: 프로덕션 — Composite Role + 직무 분리 + 감사

실제 업무 사용자는 다수의 Single Role을 한꺼번에 가져야 합니다. 이를 묶는 것이 Composite Role입니다. 다만 Composite Role 자체는 Profile을 생성하지 않고 Single Role의 Profile을 사용자에게 일괄 적용하는 컨테이너 역할만 합니다.

* PFCG → Composite Role 생성
Role:        Z_FI_AP_CLERK_COMP
Description: FI AP 담당자 통합 (출납 + 전표 + 마스터 조회)

* [Roles] 탭에서 Single Role 추가:
- Z_FI_DOC_DISPLAY    (전표 조회)
- Z_FI_AP_INVOICE     (매입 전표 입력)
- Z_FI_VENDOR_DISP    (Vendor 마스터 조회)

* SoD 위반 자동 점검 (GRC AC가 없을 경우 SUIM 활용):
T-code SUIM → User → Cross-System Information
또는 Z_RSUSR_SOD 커스텀 리포트 작성

* SoD 룰 예시 (회계):
- 전표 입력(F_BKPF_BUK ACTVT=01) AND 전표 승인(F_BKPF_BUK ACTVT=77) → 위반
- Vendor 마스터 변경(F_LFA1_BEK ACTVT=02) AND 지급 실행(F_REGU_BUK) → 위반

운영 환경에서는 다음 보안 통제도 함께 적용합니다.

* SM19 — 감사 로그 필터 정의 (Security Audit Log)
Filter 1:
  Client:        100
  User:          *
  Audit Class:   Logon, Transaction Start, RFC Call
  Severity:      All

Filter 2 (특정 SAP_ALL 사용자 모니터링):
  User:          SAP*, FIREFIGHTER_*
  Audit Class:   All

* 활성화 후 SM20에서 일별 분석
* 정기 감사 시 RSAU_READ_LOG 또는 RSAU_SELECT_EVENTS 사용

또한 Derived Role 패턴을 사용하면 회사코드/공장만 다른 다국가 조직 권한을 효율적으로 관리할 수 있습니다. Master Role에 메뉴와 객체를 정의하고, Derived Role은 Organizational Level 값(BUKRS, WERKS 등)만 다르게 채웁니다.

⚠️ 흔한 실수 / 트러블슈팅

FAQ 1. Role을 변경했는데 사용자에게 반영되지 않습니다

Role을 Generate(Profile 재생성)한 뒤 User Comparison(사용자 비교)을 반드시 수행해야 합니다. PFCG의 [User] 탭에서 "User Comparison" 또는 일괄 작업 PFUD 트랜잭션으로 모든 사용자에게 일괄 동기화합니다. 야간 배치 PFCG_TIME_DEPENDENCY 작업을 등록해두는 것이 일반적으로 권장됩니다.

FAQ 2. SAP_ALL을 임시 부여해도 되나요?

운영(PRD) 환경에서는 절대 권장되지 않습니다. 긴급 작업은 Firefighter ID(GRC EAM) 또는 시간제한 임시 Role 부여 + SM19 강화 + SM20 사후 검토 절차를 거치세요. 부득이하게 SAP_ALL을 부여한 경우 작업 종료 즉시 회수하고, SUIM → User by Critical Authorization으로 사후 추적합니다.

FAQ 3. Profile만 직접 할당된 기존 사용자를 어떻게 마이그레이션하나요?

다음 단계로 점진 전환을 권장합니다.

  1. SUIM → Users by Profile로 Profile 직접 할당 사용자 목록 추출
  2. 유사 직무 그룹화 후 PFCG에 Z-Role로 재모델링 (메뉴 + SU24 활용)
  3. 병행 운영(이중 할당) 후 트레이스로 누락 객체 검증
  4. 검증 완료 사용자부터 SU01에서 Profile 제거, Role만 유지
  5. 전체 전환 완료 후 SU02 사용 금지 정책 수립

FAQ 4. S_TCODE만 빼면 트랜잭션을 못 쓰게 막을 수 있나요?

S_TCODE는 진입 차단용일 뿐이며, 다른 권한 객체로도 동일 기능에 접근 가능한 경로(SE16, SQVI, BAPI 등)가 존재합니다. 반드시 데이터 단위 객체(S_TABU_DIS, S_TABU_NAM)와 함수 그룹 단위(S_RFC) 권한도 함께 통제해야 합니다.

🚀 다음 단계 / 관련 주제

본 가이드를 마쳤다면 다음 주제로 확장 학습을 추천합니다.

📚 참고 자료