https://app.notion.com/p/Terraform-v2 페이지를 현재 코드 상태에 맞게 전면 갱신. 기준일 6/12 → 6/22, 신규 섹션(IRSA·Karpenter·Images CloudFront·DR/S3 CRR) 추가 및 기존 10+ 곳 수정. 로컬 Notion MCP(mcp__notion__API-update-page-markdown)로 직접 배포..ovpn(CA만 포함)에 farmily-client.crt(<cert>)·farmily-client.key(<key>) 주입. Tunnelblick/OpenVPN Connect에 임포트하면 dev VPC 접속 가능. Jenkins 10.0.10.x:8080 직접 접근이 목적.farmily-vpn.ovpn을 Infra/vpn-certs/로 이동. .gitignore에 *.ovpn 추가해 시크릿 파일 커밋 방지.vpn-certs/(디렉토리 전체), *.csr(인증서 서명 요청), *.srl(CA 시리얼), *.p12·*.pfx(인증서+키 묶음), .terraformrc(Terraform Cloud 토큰).설계(Terraform 파이프라인·GitOps 설계서 2종)는 끝났고 실제 구축은 아직 안 했습니다. dev-eks는 구축담당이 이미 ACTIVE 상태로 올려뒀고 ArgoCD·LBC·ESO·앱 매니페스트까지 깔아뒀습니다. 오늘(06-21) 확인해 보니 prod 쪽에도 같은 구조(EKS 블루그린 토대, IRSA 역할 4개)가 이미 PR로 머지돼 들어가 있습니다. 다만 트래픽은 아직 ECS 그대로고, EKS는 0%로 옆에 떠 있기만 합니다.
⚠️ 확인 필요 — 지난주(06-18) 기준으로 dev-eks 클러스터 access entry에 제가 빠져 있어서 kubectl이 403났습니다. 지금도 그 상태인지 확인하고, 안 됐으면 추가를 요청하겠습니다.
Karpenter — AWS가 만든 EKS용 노드 오토스케일러. Cluster Autoscaler와 달리 ASG 없이 EC2를 직접 프로비저닝해서 Pod 요구사항에 맞는 최적 인스턴스 타입을 자동 선택. 속도도 더 빠름. Farmily에서는 farmily-irsa-boundary 설계 시 Karpenter의 iam:PassRole 요구사항 때문에 allow-list 방식을 기각하고 Deny 기반으로 결정한 근거가 됨.
farmily-tf-agent — Dockerfile로 만든 Jenkins Terraform 파이프라인 전용 CI 이미지. terraform·tflint·checkov·aws cli·gh cli·jq를 하나의 컨테이너에 패키징. Jenkins가 파이프라인 실행 시 이 이미지를 ECR에서 pull해서 모든 stage를 이 컨테이너 안에서 돌림. 매 빌드마다 도구 설치 안 해도 되고 버전 고정·재현성·공급망 보안 확보. 도구를 호스트로 꺼내는 게 아니라 컨테이너 안에서 일을 다 하고 결과만 남기는 구조(Jenkins EC2 자체엔 terraform 설치 불필요).
TF_IN_AUTOMATION / TF_INPUT — CI에서 terraform 돌릴 때 필수 환경변수. TF_IN_AUTOMATION=true는 불필요한 안내 메시지 숨김, TF_INPUT=false는 대화형 변수 입력 프롬프트를 차단해서 값 누락 시 대기 대신 즉시 에러로 실패하게 함.
ExternalId (Confused Deputy 방지) — sts:AssumeRole 시 넘기는 추가 검증 문자열. AWS가 발급하는 게 아니라 내가 직접 정한 비밀번호 같은 값. trust policy와 assume-role 요청 양쪽에 같은 값을 넣어두면, 이 값을 모르는 외부인은 역할 ARN을 알아도 assume 거부됨.
CVE 번호 — CVE-{연도}-{순번} 형식의 공개 취약점 고유 식별자. MITRE/CNA가 부여하며 한 번 할당되면 불변. Trivy 같은 스캐너가 이미지의 패키지를 NVD 데이터베이스와 대조해 해당 CVE를 보고함. .trivyignore에 수용한 CVE 번호를 넣어 CI 통과시킬 수 있음.
Pull Request (PR) — "내 브랜치 변경사항을 main에 합쳐달라"는 병합 요청. 직접 main에 push하지 않고 PR을 거치면 변경 diff 가시화·CI 자동 검증·감사 이력이 남음. "Pull"인 이유는 main 쪽에 "내 변경을 당겨가(pull) 달라"고 요청하는 구조이기 때문.
AWS Client VPN — 개인 노트북에서 VPC Private Subnet 내부 리소스(RDS, Jenkins 등)에 접속하기 위한 원격 VPN. OpenVPN 클라이언트로 연결하면 내 PC가 VPC 안에 있는 것처럼 private IP로 통신 가능. Site-to-Site VPN(사무실 네트워크 전체 연결)과 달리 개인 사용자 단위.
PKI (Public Key Infrastructure) — 인증서를 발급·관리·검증하는 체계. CA(인증기관)가 인증서를 서명하고, 받는 쪽이 CA 서명을 검증해서 신뢰를 확인하는 구조. Farmily에서는 openssl로 자체 CA를 만들어 Client VPN의 mutual TLS 인증서(서버+클라이언트)를 발급함. ca.key(CA 개인키)를 잃으면 새 인증서 발급·갱신·폐기가 불가능해져 PKI 전체를 새로 만들어야 함.
.ovpn 파일 — OpenVPN 클라이언트의 연결 설정 파일. 서버 주소·포트·인증 방식·CA/클라이언트 인증서를 하나의 파일에 담아, 클라이언트에 넣고 "연결"만 누르면 VPN이 수립됨. AWS 콘솔에서 기본 설정을 다운로드 후 클라이언트 인증서/키를 삽입해서 팀원에게 배포.
IMDSv2 (Instance Metadata Service v2) — EC2가 자기 자신의 메타데이터(IAM 자격 증명, IP 등)를 조회하는 내부 서비스의 2세대 버전. v1은 curl 169.254.169.254만으로 자격 증명 탈취 가능(SSRF 취약점, 2019 Capital One 해킹이 이 방식). v2는 PUT으로 토큰을 먼저 발급받아야 하므로 SSRF로는 토큰 발급 자체가 불가. http_tokens="required"로 v1을 완전 차단하고, hop_limit=1로 Docker 컨테이너에서 호스트 IMDS 접근도 막음.