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

8.2 KiB

트러블슈팅: OCI AD Bridge · OAuth · DDS MCP

개요로 돌아가기 · 적용 Cookbook · 아키텍처

Windows AD Bridge

증상 원인 확인 해결
WinRM HTTPS TCP/5986 Connection timed out OCI NSG에 관리 workstation /32의 TCP 5986 인바운드가 있는지 먼저 확인한다. 규칙을 추가한 뒤에도 timeout이면 Windows 내부 listener/firewall 문제다. RDP에서 winrm enumerate winrm/config/listener, Get-NetFirewallRule -DisplayGroup 'Windows Remote Management'로 확인하고 HTTPS listener와 방화벽 rule을 구성한다. Bridge 자체 오류가 아니다.
OCI Run Command plugin은 RUNNING인데 command가 ACCEPTED/VISIBLE 단순 echo도 실행되지 않으면 script 문제가 아님 Windows Oracle Cloud Agent/Run Command service, outbound OCI 연결, plugin log를 RDP에서 점검한다.
AD Bridge installer가 /quiet에서 No response file specified for silent install으로 종료 이 WiX 기반 버전은 silent 설치에 response file이 필수다. 임의의 response file을 만들지 말고 RDP의 관리자 설치 UI로 진행한다. 검증된 response file을 확보한 경우에만 secret 보관/삭제 정책을 적용해 자동화한다.
installer에서 LDAP server is unavailable TCP 636 open만 확인하지 말고 AD DS FQDN으로 TLS handshake를 시험한다. handshake가 즉시 종료되면 AD DS LDAPS certificate 문제다. AD DS FQDN CN/SAN, Server Authentication EKU, private key를 갖춘 certificate를 Local Machine My에 설치하고 issuer를 Bridge host Trusted Root에 신뢰시킨 뒤 AD DS 재시작/VM 재부팅한다.
LDAPS certificate 오류 Bridge host가 AD DS server/CA certificate를 신뢰하는지 확인 CA chain을 Windows trust store에 배포한다. OIDC 공개 hostname이 아니라 실제 AD DS FQDN을 certificate와 LDAP endpoint에 사용한다.
Bridge Connected가 되지 않음 OCI 443, AD 636, Bridge service account credential/권한 확인 NSG/proxy/firewall 및 최소 AD 권한을 순서대로 점검한다.

Windows 원격 관리 경로가 막힌 경우

이 PoC VM에서는 OCI NSG의 TCP 5986 누락을 보완했어도 Windows가 HTTPS WinRM 요청에 응답하지 않았다. 따라서 NSG rule 추가만으로 WinRM이 활성화되는 것은 아니다.

RDP로 DDS\\opc로 로그인한 뒤 Administrator PowerShell에서 다음 순서로 점검한다. 운영에서는 management source를 반드시 고정 IP 또는 private subnet으로 제한한다.

winrm quickconfig
winrm enumerate winrm/config/listener
Get-NetFirewallRule -DisplayGroup 'Windows Remote Management' |
  Select-Object DisplayName, Enabled, Direction, Action

HTTPS listener가 없다면 서버 인증서의 thumbprint를 지정해 생성하고, TCP 5986 firewall rule을 enable한 뒤 외부에서 /wsman endpoint를 재확인한다. OCI Run Command가 ACCEPTED/VISIBLE에 머물면 그 기능으로 installer를 실행하지 말고, Windows Oracle Cloud Agent와 outbound OCI 연결을 RDP에서 복구한 후 다시 시도한다.

동기화와 delegated authentication

증상 원인 확인 해결
Alice/Bob이 OCI Domain에 보이지 않음 선택한 사용자 OU/하위 OU와 initial sync 상태 OU 범위와 filter를 수정하고 sync를 재실행한다.
OU 선택 화면에 CN=Users 또는 테스트 계정이 보이지 않음 화면은 AD object가 아니라 OU만 나열한다. 기본 Users는 container다. 전용 Users/Groups OU를 만들고 test user/group을 이동한 뒤 browser를 새로고침한다. OU 이름만 선택하면 되며 그 화면에서 계정 내용은 표시되지 않는다.
상위 dds.test 선택 시 child OU가 자동 선택됨 Include hierarchy가 선택된 parent OU에 적용됨 parent selection을 해제하고 Users pane은 Users, Groups pane은 Groups만 직접 선택한다.
Missing required attribute(s): name AD Given Name 또는 Surname이 비어 있어 OCI name complex attribute를 만들 수 없음 AD test user의 Given Name, Surname, Display Name을 채운 뒤 full sync한다.
primaryEmailNotSpecified AD mail 속성이 비어 있음 유효한 Primary Email 형식의 mail 값을 설정한다.
invalidEmailFormat .test 같은 내부 TLD가 OCI email validator에서 거부됨 PoC라도 RFC 5322 형식으로 OCI가 허용하는 domain의 email을 사용한다. 실제 notification이 필요 없으면 welcome notification을 끈다.
속성을 고쳤는데 Users synced = 0 Bridge가 이전 실패 user를 재시도 제외하거나 incremental sync만 수행 Users/Groups OU 선택을 모두 해제해 Save/OK한 뒤 다시 선택해 Save/OK하여 full sync를 강제하고 Import 결과를 재확인한다.
OCI 로그인 비밀번호가 실패 delegated authentication test에서 동일 AD 계정으로 재현 AD 비밀번호, Bridge AD 연결, service account delegated-auth 권한을 확인한다.
AD 비밀번호를 OCI local password로 입력하려 함 delegated authentication 활성화 여부 성공 시험 후 활성화한다. 활성화 뒤 실제 비밀번호 원천은 AD다.
Security → Delegated authentication 메뉴가 보이지 않음 Identity Domain의 delegated authentication capability가 테넌트에서 활성화되지 않았을 수 있다. OCI Console UI를 찾는 문제로 가정하지 말고 domain capability/서비스 등급을 확인한다. OCI tenancy administrator 또는 Oracle Support에 delegated authentication enablement를 요청한다.
Identity Source PATCH가 Delegated Authentication is not yet enabled. This feature is currently in beta phase.로 400 반환 해당 Identity Domain에서 delegated authentication feature가 enable되지 않았다. Bridge 설치·동기화·LDAPS 상태와는 별개인 OCI control-plane 제한이다. 기능 enablement 전에는 OCI OAuth 로그인에 AD 비밀번호를 사용할 수 없다. Keycloak 경로를 유지하거나 OCI local/federated 인증을 임시로 사용하고, enablement 완료 후 delegated auth test/activate를 재개한다.

OCI OAuth와 AIPF

증상/오류 원인 해결
/admin/v1/admin/v1/Apps 및 401 oci identity-domains --endpoint/admin/v1까지 넣음 CLI에는 Domain base URL만 사용한다. raw request target에만 /admin/v1을 넣는다.
No such option: --header oci raw-request 옵션명 오류 --request-headers '{"Content-Type":"application/json"}'를 사용한다.
Missing required attribute(s): basedOnTemplate confidential client app template 누락 basedOnTemplate.value=CustomWebAppTemplateId를 지정한다.
authorize URL이 302 대신 200 OCI Domain이 sign-in HTML과 session cookie를 반환 정상이다. browser에서 OCI login UI가 표시되는지 확인한다.
AIPF callback 오류 redirect URI가 두 AIPF 경로 중 실제 요청 경로와 다름 /agentFactory/.../callback/v1/.../callback 둘 다 등록한다.
이전 사용자로 자동 로그인 OCI Domain browser SSO session 유지 OCI logout 후 새 MCP source를 연결한다.

MCP와 DDS

증상 원인 해결
MCP 401 / tools discovery 실패 OCI issuer/audience가 runtime에 반영되지 않았거나 token 만료 discovery/JWT claim을 기준으로 issuer·audience를 설정한다.
token 검증은 되지만 AUTHORIZATION_DENIED OCI iss + sub binding 미등록/비활성 CB_EXTERNAL_IDENTITY_BINDING과 DDS END USER mapping을 함께 확인한다.
DDS_CONTEXT_UNAVAILABLE DB service client/scope/domain URL 설정 문제 DDS_MCP_SERVICE_TEST, DDS_ORACLE_DB_TEST, DB_ACCESS_SCOPE, DB application identity를 확인한다.
ORA-52602 database-access token issuer/resource/scope 불일치 DB의 OCI Domain URL 정규형(:443 포함), resource app ID/scope를 맞춘다.
Alice 성공, Bob “DDS 보호 객체” Bob DATA GRANT 없음 의도된 default deny다. 정책상 필요할 때만 최소 grant를 추가한다.

외부 오류 메시지에는 SQL, table명, secret을 노출하지 않는다. 내부 감사에는 correlation ID, 내부 user ID, 선택 DDS END USER, allow/deny 결과를 남긴다.