<aside> ✅
최종 판단: ARN 전면 삭제가 아니라 일부 일반화가 적절하다.
ARN과 Account ID는 인증정보가 아니므로 공개만으로 계정 침해가 발생하지 않는다. 다만 실제 계정·정책·리소스 이름은 정찰에 쓰일 수 있고 코드를 특정 환경에 종속시키므로, 운영값만 변수·data source·resource reference로 전환한다.
</aside>
검토 기준일: 2026-09-16
대상: kintoun-secops/kintoun-infra main ZIP 스냅샷
범위: ARN 노출 위험과 Public Terraform 공개 정책
<aside> 🔑
ARN은 주소
ARN·Account ID만으로 로그인, AssumeRole, S3 접근은 불가능하다.
</aside>
<aside> 🔎
현실적 위험은 정찰
계정, Region, Role·Bucket 이름과 인프라 구조를 파악하는 비용을 낮춘다.
</aside>
<aside> 🛡️
우선순위는 권한
ARN 마스킹보다 apply Role 최소권한화와 Secret·state 차단이 중요하다.
</aside>
| 검사 항목 | 결과 | 판단 |
|---|---|---|
| 전체 / Terraform 파일 | 133개 / 50개 | CI·Rego·YAML까지 정적 검토 |
| 리터럴 ARN | 15개 파일, 60회 | AWS 관리형·더미·실계정 값을 분리해야 함 |
| 실제 Account ID | 9개 파일, 18회 | Credential은 아니나 일반화 권장 |
| Access Key·Token·Private Key | 발견하지 못함 | 현재 스냅샷에서 직접 인증정보 유출 증거 없음 |
| State·plan·실제 tfvars | 발견하지 못함 | .gitignore 제외 규칙도 확인 |
Role Trust Principal: "*" |
검토한 실제 Role에서 없음 | GitHub OIDC·EC2 신뢰 주체가 제한됨 |
| S3 Public Access Block | state·victim 모두 4개 설정 활성화 | Bucket Name 공개가 익명 접근을 뜻하지 않음 |
현재 위험도: 직접 침해 낮음 · 정찰/구조 노출 중간 · 코드 이식성 문제 중간
| 구분 | 대상 | 조치 |
|---|---|---|
| 유지 | AWS Managed Policy ARN | AWS가 공개한 공통 식별자이므로 그대로 사용 |
| 유지 | aws_s3_bucket.x.arn, aws_iam_policy.x.arn |
실제 값을 소스에 고정하지 않는 권장 패턴 |
| 유지 | 123456789012 더미 ARN |
예제임을 명시하면 공개 가능 |
| 일반화 | 실제 Account ID·Customer Managed Policy ARN | aws_caller_identity, aws_partition, 변수로 전환 |
| 일반화 | 실제 state Bucket·운영 리소스 이름 | 환경별 입력 또는 partial backend config 사용 |
| 제거 | EC2·VPC·IGW·SG 마이그레이션 ID | 마이그레이션 완료 후 삭제하거나 비공개 입력으로 이동 |
| 공개 금지 | Access Key, Token, Password, Private Key, state, 실제 tfvars | 발견 즉시 폐기·교체 후 history와 로그까지 조사 |
platform/migration.tf
bootstrap/example.tfvars · bootstrap/variables.tf
123456789012로 교체identity/groups.yaml
identity/variables.tf · platform/victim/variables.tf · platform/wazuh/variables.tf
null 또는 공통 입력으로 전환.github/policy/*_test.rego
backend.tf
PowerUserAccess + IAMFullAccess를 실제 Terraform 작업에 필요한 권한으로 축소