대상: Apple Silicon 원격 Mac 여섯 지역에서 서명과 CI를 운용하면서 한 호스트에서는 match가 복호화되지만 다른 호스트에는 프로파일이 도착하지 않거나, ASC 키는 돌았는데 릴리스 전날까지 CI가 여전히 “초록”처럼 보이는 불안정한 실패를 겪는 팀입니다. 얻는 것: 리포지터리 수준과 머신 수준으로 나눈 비밀, match·ASC·SSH·CI 토큰을 순서화하는 로테이션 티켓, 최소 검증 번들과 롤백 가능 창입니다. 구성: 여섯 가지 함정, 세 표, 여섯 단계 런북, 세 KPI, 마무리; 함께 읽을 글은 Fastlane 멀티호스트와 TestFlight 배포입니다.
2025–2026년에 흔한 “무작위 빨강”은 단일 키체인 결함이라기보다 단일 소스의 드리프트입니다. 암호화된 match 리포지터리가 중간에 움직였거나, ASC API 키는 조직에서 돌았는데 레인이 예전 issuer id를 가리키거나, 권한 강화 뒤 PAT 범위가 줄어 작업이 조용히 실패합니다. 이어지는 여섯 가지는 다중 노드에서 자주 보는 실패 모드입니다.
known_hosts 불일치가 “불안정한 Git”처럼 보입니다.fastlane lanes 목록만 보고 아카이브→ASC 샌드박스 업로드는 건너뛰어 프로덕션 릴리스 창으로 위험을 미룹니다.OIDC와 세분화 토큰을 도입한다면 어떤 워크플로가 어떤 ASC 비밀 번들에 접근하는지 매핑합니다. 여섯 지역은 실행 평면일 뿐이며 아이덴티티는 조직 IAM에 남습니다. 셀프호스티드 러너 비밀 격리 가이드와 함께, 로테이션 동결 집합에 어떤 비밀이 들어가는지 표시하세요.
티켓을 열기 전에 사용할 표입니다. Git 또는 조직 금고에 둘 것과 허용 목록 호스트에만 둘 것을 나눕니다.
| 자산 | 조직/리포지터리 진실로 | 호스트 허용 목록으로 | 6지역 메모 |
|---|---|---|---|
| match Git 리포지터리 | 인증서와 프로파일을 위한 단일 복호화 표면 | 패스프레이즈는 CI 비밀과 제한된 대화형 호스트에만 | 새 노드는 풀에 들어가기 전에 읽기 전용 match 실행 |
| ASC API 키 | 역할 매핑이 있는 중앙 레지스트리 | 업로드와 메타데이터 키를 분리해 최소 권한 | 감사는 TestFlight 플레이북의 업로드 허용 호스트에 묶음 |
| SSH 키 | 리포지터리당 읽기 전용 배포 키 | 빌드 호스트별 바스티언 자료 | 개인 키를 공유하지 말고 지역 홉별로 별도 키 쌍 사용 |
| CI 토큰/PAT/OIDC | 환경 접두사가 있는 리포지터리 비밀 | 대화형 공증 또는 기기 결합 단계 | 자동화에는 좁은 프로젝트 토큰 사용 |
참고: 교차 시간대 CI 릴레이 글과 같이, 프로덕션 서명 단계는 작은 러너 태그 집합으로 제한합니다. 본문은 그 태그에서 자격 증명을 어떻게 돌리는지 설명하고 플릿 상태를 쪼개지 않습니다.
범위는 흔한 엔지니어링 감사 박자를 반영합니다. 보안팀과 Apple 계정 정책에 맞추세요.
| 자격 증명 | 전형적 트리거 | 감사 구간(예) | 변경 후 1차 검증 |
|---|---|---|---|
| match 자료 | 신규 하드웨어, 프로파일 만료 경고, 유출 의심 | 자연스러운 인증서 만료와 함께 검토; 분기마다 최소 한 번 프로파일 diff | 모든 러너에서 동일한 읽기 전용 레인 지문 확인 |
| ASC API 키 | 오프보딩, 권한 감사, 업로드 오류 급증 | 종종 분기별 또는 주요 릴리스 트레인마다 | 비프로덕션 빌드 번호로 샌드박스 업로드 |
| SSH(Git/바스티언) | 바스티언 재구축, CVE 통지, 호스트 키 드리프트 경고 | 분기 인프라 롤링; 네트워크 강화 후에는 더 빠르게 | 로그가 있는 측정된 git ls-remote 왕복 |
| CI 토큰/PAT | 공급망 감사, 리포지터리 이동, 러너 등록 변경 | 단기 토큰은 플랫폼마다 30~90일 등 | 읽기 전용 드라이런과 하나의 녹색 레인 |
| 패턴 | 언제 | 비용 | 실행 메모 |
|---|---|---|---|
| 동시성 동결 | 고위험 match 또는 ASC 이벤트 | 짧은 처리량 감소 | 프로브 스크립트 통과 전까지 자동 확장 호스트 참가 금지 |
| 블루/그린 풀 | 안정적인 6지역 플릿 | 병렬 용량 예산 창 | 태그 전환 전 유휴 풀에서 비밀을 모두 갱신 |
| 지역 카나리아 | 영향 범위가 불명확한 작은 키 변경 | 스케줄 오버헤드 | 주 아티팩트 경로에 가까운 지역부터 |
archive, 한 번의 성공한 ASC API 핸드셰이크, 한 번의 내부 테스트 푸시.# Example probe fragment (rename lanes to match your Fastlane wrapper)
# fastlane run verify_signing_consistency
# Expect identical profile fingerprints on every host tagged `signing`
# CI: cap concurrency to avoid half-rollouts
# concurrency-group: release-credentials-${{ github.ref }}
# cancel-in-progress: false
ORG_PROD_ASC 대 ORG_BETA_ASC처럼 이름을 강제해 6지역 작업이 잘못된 번들을 읽지 못하게 합니다.위 수치는 다팀 릴리스 관행을 반영하며 Apple SLA가 아닙니다. 내부 정책에 녹여 넣으세요.
피크를 위해 버스트 렌탈 노드를 추가할 때는 “참가 전 비밀 스냅샷”과 “퇴역 전 캐시 삭제”를 같은 체크리스트에 두어, 임시 용량이 오래 살아 남는 프로파일 드리프트가 되지 않게 합니다.
로테이션은 변경 관리입니다. 전용 호스트, 감사 가능한 로그, 안정적인 출구가 필요합니다. 빌린 노트북은 match 패스프레이즈를 흩뜨리고, 알 수 없는 호스트는 수동으로 인증서를 가져와 다음 동결 창까지 실패를 숨깁니다.
개인 장비는 키체인 경계와 동시 실행 동결을 동시에 유지하기 어렵습니다. 컴파일 풀과 서명 허용 목록을 APAC과 북미로 나누는 조직에는, 일회성 조율보다 다지역 배치와 기간 유연성이 있는 전문 Mac 클라우드가 보통 낫습니다. MACCOME은 계층화된 풀에 맞춰 6지역을 선택할 수 있는 베어 메탈 Apple Silicon을 제공합니다. 런북을 고정하기 전에 공개 대여 요금과 다지역 가이드를 확인하세요.
파일럿 아이디어: 주 Git에 가까운 원격 Mac 하나와 주 협업 지역에 가까운 원격 Mac 하나에서 전체 로테이션과 롤백 드라이런을 수행한 뒤, 월간 또는 분기 약정이 피크를 덮는지 결정합니다.
FAQ
match와 ASC를 같은 날에 돌려야 하나요?
반드시 그런 것은 아닙니다. 의존성을 문서화하세요. 새 ASC 키가 업로드에 필요해도 match 프로파일이 모든 노드에 없으면 먼저 읽기 전용 검증을 끝냅니다. 공개 요금은 대여 요금을 참고하세요.
바스티언에서 SSH 지문이 바뀌었습니다. 어떻게 해야 하나요?
로테이션의 한 단계로 다루고 소유자를 맞춥니다. 대화형 디버깅에 쓰는 개인 키를 공유하기보다 전용 CI 배포 키와 예측 가능한 바스티언 이미지를 선호하세요. 일반 도움말은 고객 센터입니다.
로테이션 후 TestFlight 업로드만 실패합니다. 어디서 시작하나요?
업로드 경로 진단은 컴파일 타임 서명과 다릅니다. TestFlight 플레이북과 App Store Connect 처리 작업을 여는 것이지 match만 반복 실행하는 것이 아닙니다.