# Cookbook: OCI AD Bridge로 DDS MCP 사용자 인증 전환 [개요로 돌아가기](README.md) · [아키텍처](architecture.md) · [트러블슈팅](troubleshooting.md) ## 적용 순서 Keycloak을 삭제하지 않는다. 아래 단계를 순서대로 끝내고 Alice/Bob DDS 결과를 확인한 뒤에만 AIPF의 기본 MCP source를 OCI 경로로 바꾼다. | 단계 | 작업 | 성공 판정 | 실패 시 | |---:|---|---|---| | 0 | AD·네트워크·관리 경로 점검 | AD/LDAPS/OCI HTTPS 연결 가능 | [Windows/LDAPS](troubleshooting.md#windows-ad-bridge) | | 1 | OCI AD Bridge 생성·Windows client 설치 | Bridge `Connected` | [Windows/AD Bridge](troubleshooting.md#windows-ad-bridge) | | 2 | AD OU/그룹 동기화 | OCI Domain에 Alice/Bob 표시 | [동기화](troubleshooting.md#동기화와-delegated-authentication) | | 3 | delegated authentication 시험·활성화 | AD 비밀번호 로그인 성공 | [동기화](troubleshooting.md#동기화와-delegated-authentication) | | 4 | AIPF OAuth source 등록 | OCI 로그인 → callback 완료 | [OAuth/AIPF](troubleshooting.md#oci-oauth와-aipf) | | 5 | MCP issuer/audience·DB binding 교체 | OCI JWT 검증·DDS mapping 성공 | [MCP/DDS](troubleshooting.md#mcp와-dds) | | 6 | Alice/Bob 비교 및 Keycloak 정리 판단 | Alice 1건, Bob 거부 | [권한](troubleshooting.md#mcp와-dds) | ## 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 최소 권한 Windows VM에 RDP 외의 관리 경로가 없으면 installer를 RDP에서 실행한다. WinRM/OCI Run Command 상태가 불완전하면 원격 설치 수단으로 가정하지 않는다. ## 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. Bridge installer를 domain-joined Windows에 설치한다. 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을 서로 대체해 입력하지 않는다. ## 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/callback` 및 `https://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:///.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 대상이 아니다.