Skip to content

정리: LDAP·AD 외부 키도 최초 주인에게 묶는다 - #59

Merged
mack-erel merged 1 commit into
mainfrom
directory-claims
Oct 20, 2026
Merged

mack-erel merged 1 commit into
mainfrom
directory-claims

Conversation

@mack-erel

Copy link
Copy Markdown
Contributor

요약

LDAP·AD 외부 키도 SSO sub처럼 최초 주인에게 영구히 묶습니다. 연결 해제나 계정 탈퇴 뒤 같은 키가 다시 나타나도 다른 계정에 연결할 수 없습니다.

  • 기존 identity_claims에 realm=directory를 씁니다. 외부 키 원문은 저장하지 않고 SHA-256으로 가명화합니다.
  • 연결 승인·묘비·principal·권한 버전을 한 원자 배치로 처리합니다.
  • 이 기능 전 연결은 해제 또는 계정 드레인 직전에 claim합니다.
  • stale 디렉터리 snapshot이 연결 해제나 탈퇴 뒤 account_id·group membership을 되살리지 못하게 구조를 바꿉니다.
  • MySQL 동시 연결 교착은 전체 판정부터 재시도합니다.

검증

  • 독립 코드 리뷰: APPROVE(초기 HIGH 경합 1건과 stale sync MEDIUM 수정 뒤 재검증)
  • npm run verify: 초록(리베이스 뒤 재실행)
  • SQLite·PostgreSQL·MySQL 대상 테스트 73개 통과

배포 범위

  • 새 마이그레이션은 없습니다. #57의 마이그레이션 030을 사용합니다.
  • 2026-10-19 읽기 전용 운영 DB 조회에서 directory_identities는 0건이었습니다.
  • #57과 함께 배포할 수 있습니다. 머지·배포는 별도 승인을 받습니다.

🤖 Generated with Claude Code

왜: 계정 드레인이 directory_identities 행을 지우거나 관리자가 연결을 끊으면, 다음 디렉터리
동기화가 같은 외부 키를 연결 없음으로 다시 만들었다. 운영자가 그 키를 다른 계정에 이으면 예전
사람의 디렉터리 로그인이 새 계정으로 들어온다. SSO sub와 같은 최초 주인 규칙을 LDAP·AD에도 건다.

- 기존 identity_claims에 realm=directory를 쓴다. 범위는 tenant+provider이고 외부 키는 SHA-256으로
  가명화해 DN 원문을 영구 묘비에 남기지 않는다. 원래 계정만 다시 연결할 수 있다.
- 연결 UPDATE 자체가 다른 주인의 claim이 없고 활성 계정일 때만 들어간다. claim·identity 연결·
  principal·permissions_version을 한 배치에 넣어 반쪽 상태가 없다. MySQL 교착은 전체 판정부터 재시도한다.
- 이 기능 전 연결은 unlink가 같은 배치에서 claim하고, 계정 드레인은 900개씩 claim한 뒤 지운다.
  운영 DB에는 10-19 읽기 전용 조회 기준 directory_identities가 0건이라 backfill 마이그레이션은 없다.
- DirectorySyncInput에서 로컬 accountId를 제거한다. sync는 연결을 쓰지 않고 metadata만 갱신하며,
  그룹 membership은 배치 시점 현재 연결에서 INSERT SELECT한다. 오래된 snapshot이 해제·탈퇴를
  되돌리지 못한다.
- 기능 전 identity principal에 남은 account_id는 unlink 때 NULL로 걷는다.

검증: 독립 리뷰 APPROVE. npm run verify 초록(테스트 2,796개, 실패 0), SQLite·PostgreSQL·MySQL
경합/동기화 테스트 73개 통과. submission SCRAM 일시 타임아웃은 단독 7개 재실행으로 통과 확인.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@mack-erel
mack-erel merged commit 59b8de9 into main Oct 20, 2026
9 checks passed
@mack-erel
mack-erel deleted the directory-claims branch October 20, 2026 01:19
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant