AWS Cloud School 13기 117일차

Forever 김·2026년 6월 22일

AWS Cloud School

목록 보기
108/116

2026-06-22

Today

  • Terraform v2 Notion 페이지 싱크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)로 직접 배포.
  • farmily-vpn.ovpn 완성 — AWS 콘솔 다운로드 .ovpn(CA만 포함)에 farmily-client.crt(<cert>farmily-client.key(<key>) 주입. Tunnelblick/OpenVPN Connect에 임포트하면 dev VPC 접속 가능. Jenkins 10.0.10.x:8080 직접 접근이 목적.
  • Infra/vpn-certs/ 정리farmily-vpn.ovpnInfra/vpn-certs/로 이동. .gitignore*.ovpn 추가해 시크릿 파일 커밋 방지.
  • Infra/.gitignore 보완 — 누락 패턴 6개 추가: vpn-certs/(디렉토리 전체), *.csr(인증서 서명 요청), *.srl(CA 시리얼), *.p12·*.pfx(인증서+키 묶음), .terraformrc(Terraform Cloud 토큰).

Notes

현재 상태

설계(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났습니다. 지금도 그 상태인지 확인하고, 안 됐으면 추가를 요청하겠습니다.

다음 단계 (제가 할 일)

  1. OIDC trust policy 와일드카드 좁히기 — 지금은 모든 브랜치·PR·포크가 GitHub Actions 역할을 assume할 수 있는 상태입니다. 이걸 main/prod로 제한합니다.
  2. 오늘 머지된 신규 IAM 역할 4개(lbc·app·eso_reader·agentcore) 최소권한 리뷰.
  3. kubeconform으로 gitops 매니페스트 스키마 검증 — Jenkins 검증 파이프라인을 로컬에서 먼저 리허설해 봅니다.
  4. farmily-irsa-boundary 정책 초안 작성 — Jenkins가 IAM 역할을 만들 때 권한상승을 막는 안전장치입니다. 아직 정책 자체가 없어서 Jenkins를 켜기 전에 먼저 만들어야 합니다.
  5. kind 클러스터 + 로컬 Jenkins 컨테이너로 파이프라인 리허설 — 어제 Docker Desktop을 설치해서 이제 가능해졌습니다.

Learned

  • 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 접근도 막음.

Prompt(회고)

  • Mac Book으로 처음 작업을 하다보니 Window랑 헷갈리는 부분이 많았다. 그래도 Mac을 사용하니 기분도 좋고 뭔가 작업이 더 잘되는 느낌을 받는다. 이 느낌 고대로 열심히 해보겠다.
profile
나를 한줄로

0개의 댓글