Ch11. 보안과 코드 거버넌스
CODEOWNERS, 의존성 감사, 정적 분석, 시크릿 관리, 에이전트 보안
CODEOWNERS와 코드 소유권
# .github/CODEOWNERS
# 전체 기본 리뷰어
* @acme/engineering-leads
# 앱별 소유자
/apps/web/ @acme/frontend-team
/apps/admin/ @acme/frontend-team
# 패키지별 소유자
/packages/db/ @acme/backend-team @acme/platform-team
/packages/ui/ @acme/design-system-team
/packages/types/ @acme/backend-team
/packages/utils/ @acme/platform-team
# 인프라/설정 — 플랫폼팀 승인 필수
/turbo.json @acme/platform-team
/.github/ @acme/platform-team
/package.json @acme/platform-teamGitHub의 branch protection rule에서 "Require review from Code Owners"를 활성화하면, CODEOWNERS에 지정된 팀의 승인 없이는 머지가 불가능합니다.
의존성 감사
| 도구 | 방식 | 장점 | 단점 |
|---|---|---|---|
| Dependabot | GitHub 네이티브 | 무료, 설정 최소 | PR이 많이 생성됨 |
| Renovate | 오픈소스 앱 | 그룹 업데이트, 자동 머지 | 설정 복잡 |
| Socket | Supply chain 보안 | 악성 패키지 탐지 | 유료 |
// renovate.json (추천 설정)
{
"$schema": "https://docs.renovatebot.com/renovate-schema.json",
"extends": [
"config:recommended",
"group:monorepos",
":automergeMinor",
":automergePatch"
],
"packageRules": [
{
"groupName": "devDependencies",
"matchDepTypes": ["devDependencies"],
"automerge": true
},
{
"groupName": "major updates",
"matchUpdateTypes": ["major"],
"automerge": false
}
]
}Renovate의 group:monorepos는 @types/*, eslint-* 같은 관련 패키지를 하나의 PR로 묶어 PR 노이즈를 줄입니다.
정적 분석
Trail of Bits의 static-analysis와 differential-review 스킬을 조합하면 PR 리뷰 시 보안 취약점을 자동 탐지합니다:
# 스킬 설치
npx add-skill trailofbits/static-analysis
npx add-skill trailofbits/differential-reviewESLint에도 보안 규칙을 추가합니다:
// packages/eslint-config/base.js
import security from 'eslint-plugin-security';
export default [
security.configs.recommended,
{
rules: {
'security/detect-object-injection': 'warn',
'security/detect-non-literal-regexp': 'warn',
'security/detect-possible-timing-attacks': 'error',
},
},
];시크릿 관리
# .gitignore — 시크릿 파일 차단
.env
.env.local
.env.*.local
*.pem
*.key| 계층 | 저장소 | 접근 범위 |
|---|---|---|
| 로컬 개발 | .env.local (gitignore) | 개인 머신 |
| Preview | Vercel 환경 변수 (Preview 스코프) | PR 배포 |
| Production | Vercel 환경 변수 (Production 스코프) | 프로덕션만 |
| CI | GitHub Secrets | Actions 워크플로우 |
# .github/workflows/ci.yml — 시크릿 사용
env:
DATABASE_URL: ${{ secrets.DATABASE_URL }}
TURBO_TOKEN: ${{ secrets.TURBO_TOKEN }}시크릿 유출 방지
git-secrets나 gitleaks를 pre-commit hook으로 설정하면,
API 키나 비밀번호가 포함된 커밋을 차단할 수 있습니다.
에이전트 보안
Claude Code에서 에이전트가 실행할 수 있는 도구를 제한합니다:
// .claude/settings.json
{
"permissions": {
"allow": [
"Read",
"Write",
"Edit",
"Glob",
"Grep",
"Bash(yarn:*)",
"Bash(turbo:*)",
"Bash(git:*)",
"Bash(npx vitest:*)",
"Bash(npx playwright:*)"
],
"deny": [
"Bash(rm -rf:*)",
"Bash(curl:*)",
"Bash(wget:*)"
]
},
"hooks": {
"PreToolUse": [
{
"matcher": "Bash",
"command": "echo '$CLAUDE_TOOL_INPUT' | jq -r '.command' | grep -qiE '(DROP|DELETE FROM|TRUNCATE|rm -rf /)' && echo 'BLOCK: 파괴적 명령 차단' && exit 1 || exit 0"
}
]
}
}| 보안 레이어 | 설정 | 목적 |
|---|---|---|
allow 목록 | 허용 도구 화이트리스트 | 불필요한 도구 접근 차단 |
deny 목록 | 차단 패턴 블랙리스트 | 위험 명령 명시적 차단 |
PreToolUse Hook | 실행 전 패턴 검사 | 실시간 위험 감지 |
JetBrains Central: 에이전트 거버넌스 플랫폼 (2026-03)
2026년 3월 24일 JetBrains가 발표한 Central은 AI 코딩 에이전트를 위한 통합 거버넌스 플랫폼입니다. Claude Code, Codex 등 여러 에이전트를 조직 차원에서 관리할 수 있습니다.
| 기능 | 설명 | 엔터프라이즈 가치 |
|---|---|---|
| 정책 강제 | 에이전트별 허용 도구·명령 중앙 관리 | 섀도 AI 방지, 컴플라이언스 |
| IAM | 역할 기반 에이전트 접근 권한 | 최소 권한 원칙 적용 |
| 관측성 | 에이전트 활동 로그·감사 추적 | 보안 감사, 사고 추적 |
| 비용 귀속 | 팀/프로젝트별 API 사용량 추적 | 예산 관리, 비용 최적화 |
Central은 기존 .claude/settings.json 기반의 로컬 정책 관리를 조직 수준으로 확장합니다. 에이전트가 2개 이상인 환경에서는 이런 중앙 거버넌스 플랫폼 도입을 검토하세요.
거버넌스 준비도와 Graduated Autonomy (2026-03)
Deloitte의 2026년 3월 조사에 따르면, 엔터프라이즈의 AI 코딩 에이전트 **거버넌스 준비도는 30%**에 불과합니다. 대부분의 조직이 에이전트를 도입했지만, 체계적 관리 체계는 아직 미비합니다.
이에 대한 권장 패턴이 Graduated Autonomy(단계적 자율성)입니다:
| 단계 | 에이전트 권한 | 인간 개입 | 적합한 상황 |
|---|---|---|---|
| Level 1: 승인 | 모든 도구 실행 전 승인 필요 | 높음 | 도입 초기, 민감 프로젝트 |
| Level 2: 알림 | 실행 후 알림, 위험 작업만 승인 | 중간 | 6개월+ 운영, 신뢰 구축 후 |
| Level 3: 자율 | 정책 범위 내 자율 실행 | 낮음 | 성숙한 거버넌스, 완전한 감사 체계 |
// Graduated Autonomy 구현 예시 (.claude/settings.json)
{
// Level 2: 알림 기반
"permissions": {
"allow": [
"Read", "Write", "Edit", "Glob", "Grep",
"Bash(yarn:*)", "Bash(turbo:*)", "Bash(git:*)"
],
"deny": ["Bash(rm -rf:*)", "Bash(curl:*)", "Bash(docker:*)"]
},
"hooks": {
"PostToolUse": [
{
"matcher": "Bash",
"command": "echo '[알림] 에이전트 Bash 실행: $CLAUDE_TOOL_INPUT' | notify-slack"
}
],
"PreToolUse": [
{
"matcher": "Bash",
"command": "echo '$CLAUDE_TOOL_INPUT' | jq -r '.command' | grep -qiE '(DROP|DELETE FROM|TRUNCATE)' && echo 'BLOCK: Level 2 정책 위반' && exit 1 || exit 0"
}
]
}
}30%의 의미
거버넌스 준비도 30%는 에이전트 도입 속도에 비해 관리 체계 구축이 크게 뒤처져 있다는 의미입니다. JetBrains Central 같은 플랫폼 도입과 함께, 조직 내 Graduated Autonomy 로드맵을 수립하세요.
참고 문서
- GitHub: CODEOWNERS (영어)
- Renovate: Configuration (영어)
- Trail of Bits: Agent Skills (영어)
- Claude Code: Permissions (영어)
- JetBrains Central — 에이전트 거버넌스 플랫폼 (영어)
- Deloitte: AI Coding Agent Governance — 거버넌스 준비도 리포트 (영어)