보안 2026년 4월 13일

2026 클라우드 Mac: 외주 SSH 키에 강제 명령을 얹어 감사를 통과하는 authorized_keys 패턴

MacLogin 보안팀 2026년 4월 13일 약 13분

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 리스를 운영하며 주석에 티켓 번호를 남기고 싶음.

일반 셸이 과도하다는 신호

  1. 동일 키가 세 개 이상 호스트 그룹에 나타나고 로테이션 날짜가 없음.
  2. 읽기 전용이어야 할 계정에서 ssh -R 관측.
  3. 모의 침투에서 로컬 포워딩으로 내부 관리 API 접근에 성공했으나 비밀번호 인증은 꺼져 있음.
  4. 컴플라이언스 질문이 “명령 허용 목록”을 요구하는데 답이 “키 인증”에서 멈춤.
경고: command="..." 따옴표 실수는 해당 키를 즉시 망가뜨립니다. sudo -e로 편집하고 Git으로 관리한 뒤 일회용 키로 검증하세요.

패턴 표: 래퍼 대 서브시스템

시나리오권장감사상 이점클라우드 Mac 주의
벤더 읽기 전용 Gitgit-shell 계열 강제 명령argv 형태가 문서화됨정책상 홈 밖 경로에 둘지 결정
단일 CI 아티팩트 가져오기argv 화이트리스트 래퍼Git diff로 변경 추적인터프리터 버전 고정
48시간 브레이크 글래스기한 주석이 있는 별도 키시간 경계 명확만료 후 키 재료 폐기
바스티온 경유 텔레메트리최소 싱크 + 네트워크 측 횡 이동 차단공격면 최소sshd 수준 TCP 포워딩 정책과 병행

능력 점수표: 옵션 쌓기

번들포트 포워딩PTYscp 유사에이전트 포워딩잔여 위험
restrict묶음에서 차단대개 차단명시 허용 필요차단낮음(버전 확인)
command=+수동no-port-forwarding 여부에 따름조정 가능래퍼에 따름no-agent-forwarding 권장중간(편집 실수)
무제한허용되기 쉬움허용허용허용되기 쉬움높음
측정 팁: 외주 노트북에서 ssh -G 기준선을 남기고, 24시간 동안 키에 닿는 소스 IP 수(개인은 보통 5 미만), 대화형 세션 중앙값(45분 초과는 조사)을 추적하세요.

프로덕션 authorized_keys 7단계

  1. 재고: 주석 포함 키보내기, 담당자·만료·티켓 없으면 반려.
  2. 분류: 사람 대화/기계 읽기/브레이크 글래스.
  3. 초안: 기계 키는 restrict,command="/usr/local/bin/ci-git-bridge.sh" 형태.
  4. 구문 검증: 허용되면 sshd -T와 테스트 사용자.
  5. 부정 테스트: RequestTTY, 허용되지 않은 scp, -R이 실패해야 함.
  6. 카나리아: 도쿄 등 단일 리전에서 72시간.
  7. 증빙: 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 diff365일플랫폼티켓 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만 공유하세요.

격리 리스로 외주 키 검증

공유 authorized_keys를 건드리기 전에 프로덕션급 리전에서 먼저 확인하세요.