2026 클라우드 Mac: 외주 SSH 키에 강제 명령을 얹어 감사를 통과하는 authorized_keys 패턴
Apple Silicon Mac mini를 클라우드에서 공유하고 외주와 직원이 같은 계정에 올라타면 ~/.ssh/authorized_keys가 곧바로 “모두 풀 셸” 상태로 남습니다. 2026년 실행 가능한 결론은 키마다 command=, restrict, 명시적 no-port-forwarding을 쌓고, 자동화된 부정 테스트로 행동을 고정하며, 지문 수락 로그에 CMDB 리스 ID를 연결하는 것입니다. 여기서는 래퍼와 git-shell 비교, 5열 능력 매트릭스, MacLogin 홍콩·도쿄·서울·싱가포르·미국 리전을 가정한 7단계, SOC2류 증빙에 붙일 FAQ를 정리합니다.
키를 넣기 전에 첫 SSH 호스트 신뢰 체크리스트로 대상 호스트를 고정하고, 여전히 대화형 셸이 필요하면 공유 세션 거버넌스를 함께 읽으세요. 연결 절차는 도움말, 리전 비교는 요금, macOS 동의창이 필요할 때만 VNC를 병행합니다.
클라우드 Mac은 재이미징이 잦아 authorized_keys 리뷰를 월 단위로 돌리지 않으면 작은 따옴표 오류가 대규모 장애로 번집니다. 리전별로 동일한 래퍼 tarball을 배포하되 외주 조직마다 스탠자를 분리하면 폐기 반경이 명확해집니다.
누가 렌탈 환경에서 강제 명령을 필요로 하는가
CI 봇만이 아닙니다. 분기 안에 “외주 1인 1호스트”를 못 줄 때 가장 저렴한 보완 통제입니다.
- 규제 SaaS: 읽기 전용 Git이 VPC 스캔으로 변하지 않음을 증명해야 함.
- 모바일 릴리스: 임시 업로드 권한과 sudo 가능 셸을 분리하고 싶음.
- AI 자동화: 배포 키가 단일 오케스트레이션 외 실행을 막아야 함.
- MSP: 수십 대 MacLogin 리스를 운영하며 주석에 티켓 번호를 남기고 싶음.
일반 셸이 과도하다는 신호
- 동일 키가 세 개 이상 호스트 그룹에 나타나고 로테이션 날짜가 없음.
- 읽기 전용이어야 할 계정에서
ssh -R관측. - 모의 침투에서 로컬 포워딩으로 내부 관리 API 접근에 성공했으나 비밀번호 인증은 꺼져 있음.
- 컴플라이언스 질문이 “명령 허용 목록”을 요구하는데 답이 “키 인증”에서 멈춤.
command="..." 따옴표 실수는 해당 키를 즉시 망가뜨립니다. sudo -e로 편집하고 Git으로 관리한 뒤 일회용 키로 검증하세요.패턴 표: 래퍼 대 서브시스템
| 시나리오 | 권장 | 감사상 이점 | 클라우드 Mac 주의 |
|---|---|---|---|
| 벤더 읽기 전용 Git | git-shell 계열 강제 명령 | argv 형태가 문서화됨 | 정책상 홈 밖 경로에 둘지 결정 |
| 단일 CI 아티팩트 가져오기 | argv 화이트리스트 래퍼 | Git diff로 변경 추적 | 인터프리터 버전 고정 |
| 48시간 브레이크 글래스 | 기한 주석이 있는 별도 키 | 시간 경계 명확 | 만료 후 키 재료 폐기 |
| 바스티온 경유 텔레메트리 | 최소 싱크 + 네트워크 측 횡 이동 차단 | 공격면 최소 | sshd 수준 TCP 포워딩 정책과 병행 |
능력 점수표: 옵션 쌓기
| 번들 | 포트 포워딩 | PTY | scp 유사 | 에이전트 포워딩 | 잔여 위험 |
|---|---|---|---|---|---|
restrict만 | 묶음에서 차단 | 대개 차단 | 명시 허용 필요 | 차단 | 낮음(버전 확인) |
command=+수동 | no-port-forwarding 여부에 따름 | 조정 가능 | 래퍼에 따름 | no-agent-forwarding 권장 | 중간(편집 실수) |
| 무제한 | 허용되기 쉬움 | 허용 | 허용 | 허용되기 쉬움 | 높음 |
ssh -G 기준선을 남기고, 24시간 동안 키에 닿는 소스 IP 수(개인은 보통 5 미만), 대화형 세션 중앙값(45분 초과는 조사)을 추적하세요.프로덕션 authorized_keys 7단계
- 재고: 주석 포함 키보내기, 담당자·만료·티켓 없으면 반려.
- 분류: 사람 대화/기계 읽기/브레이크 글래스.
- 초안: 기계 키는
restrict,command="/usr/local/bin/ci-git-bridge.sh"형태. - 구문 검증: 허용되면
sshd -T와 테스트 사용자. - 부정 테스트:
RequestTTY, 허용되지 않은scp,-R이 실패해야 함. - 카나리아: 도쿄 등 단일 리전에서 72시간.
- 증빙: diff·터미널 발췌·통합 로그 상관을 변경 기록에 첨부.
git-shell 대 커스텀 래퍼 빠른 선택
Git 프로토콜만이면 git-shell이 가장 빠릅니다. defaults나 Xcode API, 다중 리포 ACL이 섞이면 서명된 래퍼로 전환하고 argv·소스 IP·리스 이름을 JSON으로 남깁니다.
로그 구현 팁
파일은 0600, 또는 logger로 unified logging. 리전 코드 HK/JP/KR/SG/US를 넣으면 SIEM 규칙이 단순해집니다.
감사에서 실제로 요구하는 필드
| 산출물 | 최소 보관 | 오너 | 메모 |
|---|---|---|---|
| authorized_keys diff | 365일 | 플랫폼 | 티켓 SSH-FRC-2026 연결 |
| 부정 테스트 로그 | 180일 | AppSec | 포워딩 거부 표시 |
| 공개키 수락 로그 | 90일 | SOC | 명단 갱신과 상관 |
FAQ
Match User가 per-key를 대체하나요? 거칩니다. 한 계정에 사람과 CI가 섞이면 per-key가 확장성에 유리합니다.
FIDO2 키는? 하드웨어 인증도 강제 명령 요구를 없애지 않습니다.
VS Code Remote SSH는? 포워딩과 PTY를 전제로 별 키 클래스로 설계하지 않으면 위험합니다.
Mac mini M4가 실험에 적합한 이유
데스크톱과 동일한 OpenSSH/launchd 스택을 클라우드에서 재현해 도쿄에서 검증한 래퍼가 싱가포르 감사 스크린샷과 일치하기 쉽습니다. M4 통합 메모리는 git pack과 가벼운 검증기를 동시에 처리하고, TCC 창만 VNC로 처리하면 셸 권한을 키우지 않아도 됩니다.
부하가 보이면 요금으로 스테이징과 프로덕션을 분리하고 래퍼 tarball만 공유하세요.