<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와 로그까지 조사

파일별 수정안

  1. platform/migration.tf
  2. bootstrap/example.tfvars · bootstrap/variables.tf
  3. identity/groups.yaml
  4. identity/variables.tf · platform/victim/variables.tf · platform/wazuh/variables.tf
  5. .github/policy/*_test.rego
  6. 여러 backend.tf

보안 우선순위