Files
vpd-permission-poc/docs/design/744-windows-ad-dds-end-user-mapping/cookbook.md

6.5 KiB

Cookbook: OCI AD Bridge로 DDS MCP 사용자 인증 전환

개요로 돌아가기 · 아키텍처 · 트러블슈팅

적용 순서

Keycloak을 삭제하지 않는다. 아래 단계를 순서대로 끝내고 Alice/Bob DDS 결과를 확인한 뒤에만 AIPF의 기본 MCP source를 OCI 경로로 바꾼다.

단계 작업 성공 판정 실패 시
0 AD·네트워크·관리 경로 점검 AD/LDAPS/OCI HTTPS 연결 가능 Windows/LDAPS
1 OCI AD Bridge 생성·Windows client 설치 Bridge Connected Windows/AD Bridge
2 AD OU/그룹 동기화 OCI Domain에 Alice/Bob 표시 동기화
3 delegated authentication 시험·활성화 AD 비밀번호 로그인 성공 동기화
4 AIPF OAuth source 등록 OCI 로그인 → callback 완료 OAuth/AIPF
5 MCP issuer/audience·DB binding 교체 OCI JWT 검증·DDS mapping 성공 MCP/DDS
6 Alice/Bob 비교 및 Keycloak 정리 판단 Alice 1건, Bob 거부 권한

0. 사전 점검

  • AD Domain: dds.test
  • OCI Identity Domain: identityAPAC
  • Bridge 설치 위치: 운영은 domain-joined Windows member server 권장. 이 PoC는 격리된 AD VM에서 설치 가능 여부를 검증한다.
  • 네트워크: Bridge host → OCI Domain HTTPS 443, Bridge host → AD LDAPS 636
  • AD Bridge service account: 동기화 대상 OU 읽기, cn=Deleted Objects 읽기, delegated authentication에 필요한 password/lockout attribute 최소 권한

현재 PoC Windows VM은 WinRM HTTPS(5986) 원격 실행이 확인됐다. OCI Run Command는 여전히 ACCEPTED에 머물 수 있으므로 installer 실행 수단으로 사용하지 않고 WinRM을 사용한다.

1. OCI AD Bridge 생성과 설치

  1. OCI Console에서 Identity & Security → Domains → identityAPAC → Directory integrations → Add → Microsoft Active Directory Bridge를 연다.
  2. 표시되는 Bridge client ID/secret과 Domain URL을 secret store에 보관한다.
  3. OCI Console에서 내려받은 Bridge installer를 domain-joined Windows로 안전하게 전달한다. 현재 확보한 검증 대상 artifact는 ad-id-bridge-23.2.92-2301160723.exe다.
  4. installer에서 OCI Domain URL/client credential 및 AD Bridge service account를 입력한다.
  5. LDAPS를 선택하고 연결 시험을 통과한다.
  6. Directory integrations에서 사용자·그룹 OU를 최소 범위로 선택하고 initial sync를 실행한다.

Bridge client secret은 AIPF OAuth client secret 및 DB service client secret과 다르다. 각 secret을 서로 대체해 입력하지 않는다.

1.1 Installer artifact 관리

항목 이 PoC 값 적용 원칙
파일명 ad-id-bridge-23.2.92-2301160723.exe OCI Directory integrations 화면에서 내려받은 Bridge별 installer를 사용한다.
버전 23.2.92 Console이 제공하는 최신 호환 installer인지 설치 직전에 확인한다.
SHA-256 9388dbec5a76dfd19e6d3d5079e8cdccd00f4227e9aed36483961a8d68cdf19d 전달 전·후 checksum이 일치해야 한다.
원본 위치 로컬 ~/Downloads/ (Git 미포함) 설치 파일·Bridge client secret·AD 비밀번호를 저장소에 commit하지 않는다.

입력값의 출처는 다음과 같다.

installer 입력값 출처 성공 판정
Identity Domain URL, Bridge client ID/secret OCI Console의 해당 Directory integration 설치 화면 Installer의 OCI 연결 시험 성공
AD Bridge account dds.test AD에서 최소 권한으로 만든 전용 service account LDAPS 연결 시험 및 initial sync 성공
AD server/SSL dds.test LDAPS TCP 636 인증서 신뢰 오류 없이 연결 성공

실패하면 Windows/AD Bridge 문제 해결을 먼저 확인한다. installer와 client secret은 Bridge 생성 화면에서 다시 내려받거나 rotation하며, 채팅·문서·명령 이력에 secret 값을 남기지 않는다.

2. delegated authentication 활성화

  1. OCI Domain에서 동기화된 dds-alice, dds-bob을 확인한다.
  2. Security → Delegated authentication → Test Delegated Authentication에서 각 AD 계정/AD 비밀번호를 시험한다.
  3. 두 계정이 성공한 뒤에만 Activate Delegated Authentication을 켠다.

이후 OCI 로그인 화면에 입력한 비밀번호는 Bridge를 거쳐 AD DS에서 검증된다. OCI Domain은 비밀번호 원천이 아니라 OIDC issuer다.

3. AIPF OCI OAuth client

AIPF_DDS_AD_TEST는 AIPF 전용 confidential client다.

설정
Grant authorization_code, refresh_token
Redirect URI https://aipf.cloud-handson.com/agentFactory/v1/tools/mcp/callbackhttps://aipf.cloud-handson.com/v1/tools/mcp/callback
Scope openid profile email offline_access
Authorization URL discovery의 authorization_endpoint
Token / Refresh URL discovery의 token_endpoint

discovery URL은 https://<identity-domain>/.well-known/openid-configuration이다. endpoint를 추측해 입력하지 않는다. local test 환경의 client credential은 git-ignore된 .runtime/aipf-dds-oci-ad-client.env에만 보관한다.

4. AIPF source와 MCP 전환

  1. AIPF에서 기존 Keycloak source를 삭제하지 않고 새 source를 만든다.
  2. Server URL은 https://hmm-backoffice.cloud-handson.com/mcp/dds/sse를 유지한다.
  3. Authentication mode를 OAuth로 선택하고 OCI client ID/secret과 discovery endpoint를 입력한다.
  4. OCI login에서 Alice로 로그인한 뒤 받은 access token의 iss, aud, sub를 안전하게 확인한다.
  5. MCP의 issuer/audience와 CB_EXTERNAL_IDENTITY_BINDING을 OCI claim 기준으로 함께 바꾼다.
  6. Alice/Bob 권한 비교가 끝난 후에만 기존 source를 해제한다.

5. 검증과 rollback

검증 성공
Alice 휴가 검색 휴가 정책 - Alice 전용 테스트 1건
Bob 같은 검색 권한 없는 보호 객체가 default deny
잘못된/만료/미매핑 OCI JWT DB query 이전에 거부

실패 시 MCP issuer/audience와 AIPF source를 Keycloak 값으로 되돌린다. DB service client, DDS_U_1/DDS_U_2, DATA GRANT는 OCI 사용자 OAuth 전환과 별개이므로 rollback 대상이 아니다.