7.3 KiB
7.3 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다. |
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 결과를 남긴다.