계약직 개발자의 리포지터리 접근: 공개 진입점인가 VPN 경로인가
제한된 프로젝트를 위해 계약직 개발자에게는 비공개 리포지터리 하나가 필요합니다. 인증된 공개 진입점이나 범위가 좁은 VPN 경로를 고르고, 리포지터리 역할을 접근 권한의 단위로 삼으십시오.
제한된 프로젝트를 위해 계약직 개발자에게는 비공개 리포지터리 하나가 필요합니다. 요청은 «리포지터리를 공개해 달라»거나 «VPN 접근을 주라»는 형태로 옵니다. 두 답변 모두 진짜 질문을 건너뜁니다. 리포지터리 권한 부여와 네트워크 진입점은 서로 다른 계층이고, 중요한 권한은 그 사람이 바로 그 리포지터리를 읽거나 push 할 수 있게 하는 권한입니다. 어느 묶음이든 나머지는 모두 추가 위험입니다. 먼저 권한 부여 계층을 설계하고, 그다음 필요한 네트워크 경로를 최소한으로 정하십시오.
예시 하나가 이를 구체적으로 만듭니다. 외부 개발자 한 명, 리포지터리 하나, 운영 서버 없음, 관리 인터페이스 없음입니다. 진입점을 비교하는 동안 이 범위를 고정하십시오.
두 진입점, 두 가지 경계
공개적으로 도달 가능한 리포지터리 서비스도 HTTPS 또는 SSH 인증과 애플리케이션 권한 부여를 계속 적용합니다. 공개 도달 가능성이 익명 읽기를 뜻하지는 않습니다. 비용은 유지하고 감시하고 패치해야 하는 리스너입니다.
VPN 진입점은 그 리스너를 공개 경로 밖에 둘 수 있지만, 넓은 VPN 계정은 무관한 서비스까지 노출할 수 있습니다. 남겨진 공개 호스트 이름, SSH 리스너, 잊고 있던 주소 체계는 있다고 생각한 VPN 전용 경계를 무너뜨릴 수 있습니다. 그래서 VPN 전용 설계에는 방화벽 규칙만이 아니라 리스너 목록이 필요합니다.
라벨이 아니라 허용된 경로를 비교하십시오. 어느 경우든 애플리케이션 인증과 일반적인 서버 신원 검증은 유지하십시오.
리포지터리 역할이 권한의 단위
계약직 개발자에게는 작업을 완료하는 가장 작은 역할과 개인 신원을 주십시오. 보기, push, 유지 관리, 관리는 서로 다른 역할이며, 모든 내부 프로젝트를 부여하는 그룹은 하나의 리포지터리 접근과 같지 않습니다. 그룹 이름이 한 역할에 대응한다고 가정하지 말고 플랫폼의 실제 역할 이름을 확인하십시오.
작업에 실제로 필요한 모든 작업을 나열하십시오. 브라우저 접근과 Git 전송은 서로 다른 자격 증명이나 리스너를 쓸 수 있습니다. 자동 빌드, 패키지 다운로드, webhook 은 자체 전달 경로를 가진 별도 신원으로 실행될 수 있고, 노트북의 VPN 은 그것들을 연결하지 않습니다.
리포지터리의 내용을 보호하는 것은 별개의 일입니다. 진입 경로를 바꿔도 기록에 이미 있는 비밀은 사라지지 않고, 승인된 복제가 제한되지 않으며, 기여자의 워크스테이션이 안전해지지 않습니다.
사람보다 오래 사는 자격 증명
퇴사 처리는 리포지터리 접근과 네트워크 접근이 다시 갈라지는 지점입니다. 각 소유자를 통해 리포지터리 권한 부여와 VPN 자격을 제거한 뒤 개인 토큰, SSH 키, 자동화 자격 증명, 활성 세션을 확인하십시오. 배포 키는 전형적인 생존자입니다. 사람이 조직을 떠난 뒤에도 설정된 읽기나 쓰기 접근을 유지할 수 있습니다. 구성원 목록에서 빼는 것은 완전한 퇴사 처리가 아닙니다.
작업이 끝난 뒤가 아니라 끝나기 전에 소유자와 목적별로 기계 자격 증명을 목록화하십시오. 일주일짜리 빌드를 위해 만든 토큰은 왜 존재하는지 아무도 적어 두지 않았다면 프로젝트보다 일 년 더 살 수 있습니다.
작업, 거부, 퇴사 처리를 검증하십시오
인계 전에 세 가지를 시험하십시오. 허용된 리포지터리 작업이 성공하고, 무관한 리포지터리는 거부되며, 퇴직한 신원은 실패해야 합니다. 설계가 VPN 전용이라면 예전의 직접 공개 경로로는 더 이상 그 작업을 할 수 없음을 확인하십시오.
코드와 검토 기록은 남기되, 잊힌 접근이 복구 계획이 되게 하지 마십시오. 신원, 역할, 만료 날짜를 적은 목록이 다음 계약직 요청을 반복 가능한 절차로 만듭니다.