누가 실제로 당신의 GitHub 레포에 admin 접근 권한을 가지고 있나요? 대부분의 팀은 전혀 모른다
Source: Dev.to
Your team has been on GitHub for years. Engineers join, get added to repos, move teams, get promoted, sometimes leave. Access piles up quietly.
Here’s a question most engineering leads can’t answer without clicking through a dozen GitHub settings pages:
현재 프로덕션 레포에 대한 관리자 권한을 가진 사람은 누구인가?
Not who should—who does.
접근 드리프트 문제
- 6개월 전에 떠난 엔지니어가 아직도 메인 레포에
write접근 권한을 가지고 있다 - 계약자가
admin“임시로” 부여받았지만 회수되지 않았다 - 스테이징 레포에 11명의 관리자가 있는데, 이는 설정했던 모든 사람이 여전히 접근 권한을 가지고 있기 때문이다
- 외부 협업자—조직에도 속하지 않은 사람—가 프로덕션에 푸시할 수 있다
이러한 내용은 어떤 대시보드에도 표시되지 않는다. 직접 찾아야 하는데, 수십 개의 레포, 팀, 사용자 프로필을 하나씩 클릭해야 하므로 거의 아무도 하지 않는다.
보안 분야에서는 이를 access sprawl이라고 부르며, GitHub을 1년 이상 사용한 팀에서는 거의 보편적이다.
제가 만든 것
I built gh-iga — an open‑source identity governance scanner for GitHub.
One command. 60 seconds. A full picture of who has access to what, and a report you can actually share.
gh-iga scan --org your-org
Sample output
gh-iga — Identity Governance Scanner for GitHub
─────────────────────────────────────────────────
Org: acme-corp
Members: 84 Teams: 12 Repos: 203
RISK FINDINGS
✗ 12 users have admin access to 5+ repos (admin sprawl)
✗ 8 outside collaborators have write or admin access
✗ 19 users inactive 90+ days still hold write/admin
✗ 6 repos have 4+ admins (over‑permissioned)
⚠ 31 users on no team and no direct repo access (orphaned)
⚠ 14 users with direct repo access could move to teams
Report written → gh-iga-acme-corp-20260509.html
감사자를 위한 자체 포함형 HTML 보고서, GitHub 이슈용 Markdown 보고서, 그리고 SIEM이나 Splunk으로 파이프할 수 있는 JSON 출력도 제공합니다. 대시보드를 설정할 필요도 없고, 에이전트를 배포할 필요도 없습니다. 토큰 하나와 명령 하나만 있으면 됩니다.
무엇을 표시합니까
높은 심각도
- 🔴 Admin sprawl – N개(기본 5) 이상의 저장소에 관리자 권한을 가진 사용자
- 🔴 Inactive privileged users – 90일 이상 활동이 없지만 여전히 쓰기 또는 관리자 권한을 보유하고 있는 사용자
- 🔴 Privileged outside collaborators – 어떤 저장소에든 쓰기 또는 관리자 권한을 가진 외부 협업자
중간 심각도
- 🟡 Over‑permissioned repos – 하나의 저장소에 N명 이상의 관리자가 있는 경우
- 🟡 Orphaned members – 조직에 속해 있지만 팀에도 저장소에도 속해 있지 않은 구성원
위생
- 🔵 Direct access candidates – 팀을 통해 이미 권한이 부여되었음에도 불구하고 중복된 직접 권한을 가지고 있는 사용자
모든 임계값은 설정 가능하며, 기본값은 합리적이지만 조직에 맞게 규칙을 더 엄격하게 조정할 수 있습니다.
No org? No problem.
You don’t need a GitHub org to use it. If you’re a solo developer or working with personal repos:
gh-iga scan-user
This scans all your personal repos, shows every collaborator and their permission level, and flags anything worth reviewing—useful before you open‑source something or hand off a project.
시작하기
필수 조건: Python 3.9+, Git
# Clone and install
git clone https://github.com/abhishek20c/gh-iga.git
cd gh-iga
pip install -e .
# Create a token at https://github.com/settings/tokens
# Scopes needed: repo, read:org (for org scan)
# Run
export GITHUB_TOKEN=ghp_your_token_here
gh-iga scan-user # personal repos
gh-iga scan --org myorg # org scan
이 도구는 설계상 읽기 전용입니다. 조직, 저장소, 권한을 절대 수정하지 않습니다. 토큰은 디스크에 기록되거나 출력에 포함되지 않습니다.
CI에서도 실행하기
이 코드를 GitHub Actions 워크플로에 넣어 주간 접근 검토를 수행하세요:
name: Weekly access review
on:
schedule:
- cron: '0 9 * * 1' # 매주 월요일 오전 9시
jobs:
scan:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- run: pip install gh-iga
- run: gh-iga scan --org ${{ github.repository_owner }}
env:
GITHUB_TOKEN: ${{ secrets.GH_IGA_TOKEN }}
- uses: actions/upload-artifact@v4
with:
name: access-report
path: gh-iga-*.html
Apache 2.0 라이선스. 코드베이스는 깔끔한 파이썬으로 구성되어 있습니다 — scanner.py는 GitHub API 호출을 담당하고, rules.py는 플래그 로직을 포함하고 있어(새 규칙을 추가하기 쉬움) 보고서는 Jinja2 템플릿으로 만들어집니다.
유용하다고 생각되면, GitHub에서 ⭐를 눌러 주시면 가시성 향상에 큰 도움이 됩니다.
내가 배운 것
액세스 거버넌스는 모든 팀이 해야 한다는 것을 알고 있지만 실제로는 거의 실행되지 않는 영역입니다—도구가 없거나, 비용이 들거나, 긴 구현 프로젝트가 필요하기 때문입니다.
gh-iga는 이를 실제로 실행할 수 있게 만들고자 합니다: 한 번의 명령으로 60 초 안에 실행되고 공유 가능한 보고서를 제공합니다. 마찰이 충분히 낮아 습관이 될 정도입니다.
실행해 보시고 조직에서 놀라운 점을 발견하시면, 댓글로 알려 주세요.
Python, requests, rich, jinja2 로 빌드되었습니다. Python이 실행되는 어디서든 동작합니다.