Pinterest가 수백 개 Terraform 워크스페이스와 수만 개 클라우드 리소스를 안전하게 변경하려고 만든 전용 Terraform 실행 엔진 RPP(Resource Provisioner Pipeline)를 소개한다. 팀별로 흩어진 멀티 레포 구조에서 CI/CD가 과도한 권한을 쥐지 않도록 secure role-chaining으로 최소 권한을 강제하고, 모든 변경을 PR 기반으로 계획·검토·적용한다. 취약점 스캔·LocalStack 사전 테스트·중앙 감사까지 파이프라인에 녹였다.
핵심 포인트- RPP는 수백 개 워크스페이스와 수만 개 리소스(IAM, VPC, S3, K8s 등)를 관리하는 사내 전용 Terraform 실행 엔진이다.
- 팀별로 흩어진 멀티 레포를 중앙 GitHub Actions로 묶어 PR 이벤트마다 워크스페이스 단위로 plan/apply를 분리 실행한다.
- OIDC 검증으로만 assume되는 중앙 RPPActionsRole에서 시작해 최소 권한 팀 실행 역할로 down-scope하는 secure role-chaining을 쓴다.
- 코드 경로·백엔드 state·KMS 키가 워크스페이스와 정확히 매핑되는지 검증해, 불일치 시 빌드를 즉시 실패시킨다.
- 중앙화로 Semgrep·AI 스캔, LocalStack 사전 테스트, 통합 감사, 일괄 패치 같은 이점을 얻는다.
상세 정리- 관리 범위: RPP는 수백 개 Terraform 워크스페이스로 수만 개 리소스를 다루며, IAM 역할·정책, VPC·보안그룹·로드밸런서·DNS, 접근 제어된 S3와 Kubernetes 클러스터를 포함한다.
- 멀티 레포 과제: Terraform 코드가 팀별 여러 레포에 흩어져 있고 모노레포 통합은 진행 중인데, RPP가 그 사이를 안전하게 잇는다.
- 중앙 실행 모델: 배포는 PR 생성·수정·코멘트 이벤트에 자동 트리거되고, 중앙 composite GitHub Actions가 PR 위에서 동작하며, 한 PR이 여러 워크스페이스를 건드리면 각 워크스페이스별로 plan/apply를 따로 돌린다.
- 이중 통제: 모든 코드 변경은 해당 레포 리뷰어 승인을 거치는 dual control을 요구해 사람 검토를 한 겹 더 둔다.
- 1단계 역할 assume: 파이프라인은 먼저 중앙 RPPActionsRole을 assume하는데, 이 역할은 사전 인가된 특정 GitHub 워크플로에서만, 그것도 GitHub OIDC 토큰을 클라우드 계층에서 검증해야 assume된다.
- 2단계 워크스페이스 속성 결정: RPPActionsRole 안에서 중앙 SSoT 설정 파일을 읽어 워크스페이스와 이메일·설명·작업 디렉터리·github_repo·실행 IAM 역할의 매핑을 확정한다.
- 3단계 백엔드 검증: 코드가 그 워크스페이스에 매핑된 S3 state 백엔드 블록과 KMS 키를 명시적으로 참조하는지 검사하고, 개발자가 백엔드 블록을 다른 워크스페이스로 바꾸면 불일치를 잡아 빌드를 즉시 실패시킨다.
- 4단계 down-scope: 검증을 통과하면 RPPActionsRole이 지정된 축소 권한 team_iam_role을 assume해, 코드 경로가 올바른 환경에서 최소 IAM 권한으로만 실행되게 한다.
- 실행 4단계: terraform fmt로 린팅, terraform plan 결과를 PR 코멘트로 게시(실패 시 머지 차단), Terraform 설정으로 assume할 역할을 지정, 그리고 명시적 PR 코멘트가 있어야만 동일한 role-chaining을 거쳐 terraform apply를 실행하고 결과를 PR에 남긴다.
- 취약점 스캔: 모든 PR이 커스텀 Semgrep 규칙과 Helix/AI 통합으로 정적 분석을 돌려 안전하지 않은 인프라 구성을 사전에 가로챈다.
- 사전 테스트: 복잡한 아키텍처 팀은 파이프라인 안에서 LocalStack으로 AWS 동작을 모킹·미리보기한 뒤 프로덕션에 반영한다.
- 중앙화 이점: 통합 감사, runner 셸 취약점 같은 광범위 이슈의 단일 지점 즉시 패치(레포 수백 개 수정 대신), 경로-워크스페이스 매핑 전역 고정, 리소스 증감 메트릭 추적, 향후 태그 강제의 토대를 얻는다.
- 향후: 이번 RPP는 시작일 뿐이며, 더 견고한 차세대 RPP 엔진을 후속 글에서 공유할 예정이다.
왜 읽나대규모 멀티 레포 환경에서 Terraform·GitHub Actions로 IaC 배포를 최소 권한으로 안전하게 중앙화하려는 플랫폼·SRE·보안 엔지니어에게 구체적 설계 레퍼런스.