GitHub, 외부 협업자 권한 및 비활성 저장소 자동화 도구 Evergreen 공개
핵심 내용
GitHub가 외부 협업자 권한과 비활성 저장소를 자동 관리하는 Evergreen을 공개했다.
자세히 보기
GitHub가 외부 협업자 접근 권한 관리와 비활성 저장소 아카이빙을 자동화하는 GitHub App Evergreen을 공개했다. 이 도구는 GitHub의 네이티브 기능만으로 구축되어, 외부 파트너와 협업하는 조직에서 권한 추적 및 마감 기한 관리의 수작업 부담을 줄인다.
자동화 워크플로우 및 설계 원칙
Evergreen은 외부 협업자를 대상으로 한 분기별 접근 권한 검토와 비활성 저장소 감지라는 두 가지 주요 워크플로우로 운영된다. 시스템은 두 가지 핵심 원칙을 따른다. 기한 내 응답이 없으면 접근 권한을 회수하는 fail secure 원칙, 그리고 저장소를 삭제하지 않고 복구 가능한 상태로 아카이브만 수행하는 never destroy anything 원칙이다.
자동화는 작은 Go 웹훅 서버와 시스템의 시계 및 메모리 역할을 하는 전용 컨트롤러 저장소에 의해 구동된다. 네 개의 예약된 GitHub Actions 워크플로우가 분기별로 특정 작업을 트리거한다:
- 1일차: 최근 인간 활동이 없는 저장소에 플래그를 지정하고 경고 이슈를 연다.
- 8일차: 외부 협업자 스냅샷을 찍고 접근 권한 검토용 체크리스트 이슈를 연다.
- 16일차: 유예 기간 후에도 비활성 상태인 저장소를 아카이브한다.
- 23일차: 응답이 없는 검토 건에 대해 접근 권한을 자동 회수한다.
상태 관리 및 상호작용 모델
상태는 컨트롤러 저장소에 커밋된 JSON 파일로 추적되며, git log를 통해 감사 추적을 시각화할 수 있다. 이를 통해 별도의 데이터베이스나 맞춤형 감사 파이프라인이 필요 없다. 상호작용 모델은 IssueOps에 의존한다. 사용자는 저장소에서 체크리스트 이슈를 받고, 유지할 협업자 칸을 체크한 후 이슈를 닫는다. Evergreen은 issues.closed 웹훅을 감지하여 체크된 협업자는 유지하고 나머지는 권한을 회수한다.
보안을 위해 권한 있는 사용자(Hubbers)만 접근 권한 검토 이슈를 닫을 수 있으며, 권한 없는 시도는 재오픈 및 알림으로 이어진다. 시스템은 evergreen_repo_owner 커스텀 속성 또는 최근 이슈/커밋 작성자를 확인하는 폴백 체인을 통해 알림을 보내야 할 소유자를 식별한다.
구현 과제 및 교훈
1,400명 이상의 Hubbers가 있는 조직에서 Evergreen을 배포하려면 GitHub API 속도 제한, 특히 콘텐츠 생성을 위한 보조 제한(분당 80 요청, 시간당 500 요청)을 신중하게 처리해야 했다. Evergreen은 호출 사이에 의도적인 휴식을 두고 저장소를 배치로 처리하여 이를 완화한다. 팀은 라이브 운영 전에 실행 없이 의도된 작업을 로깅하기 위해 DRY_RUN 모드를 활용했다.
구현의 주요 교훈으로는 안전한 경로를 기본값으로 설정하고, 맞춤형 UI 구축 대신 이슈와 웹훅 같은 기존 플랫폼 기본 요소를 사용하며, 대규모 환경에서 플랫폼 속도 제한을 주요 설계 제약 조건으로 존중하는 것이 있다.
이 한국어 요약은 AI가 자동으로 만들었습니다. 원문의 주장과 맥락은 원문에서 확인해 주세요. 저작권은 원저작자에게 있습니다.