AWS 계정·IAM·빌링 기초 잡기
AWS 계정·IAM·빌링 기초 잡기
요약: 루트 계정은 잠그고 IAM과 비용 알람부터 켜는, AWS를 안전하게 시작하기 위한 최소 세팅을 정리한다.
1. 언제 이 세팅이 먼저인가
AWS는 Amazon Web Services, 클라우드 인프라 모음이다. EC2를 켜기 전에 계정 보안과 비용 가시성을 먼저 둔다. 권한만 열리면 비용과 데이터가 바로 열린다.
이 글의 대상은 첫 계정, 사이드 프로젝트, 팀의 공유 개발 계정이다. 조직의 AWS Organizations·SSO가 이미 있으면 그 절차를 따른다. 여기서는 콘솔로 시작하는 최소선을 다룬다.
하지 말아야 할 것부터 적는다.
- 루트 계정으로 매일 로그인해서 인스턴스를 켜지 않는다
- 루트 액세스 키를 발급하지 않는다
- 알람 없이 프리 티어만 믿고 방치하지 않는다
프리 티어는 일부 서비스의 제한된 무료분이다. 리전·상품·기간이 끝나면 과금된다.
2. 핵심 개념
루트 사용자는 이메일로 가입한 계정 소유자다. 결제 수단 변경, 계정 닫기처럼 극히 일부 작업만 한다. 일상 개발·운영에는 쓰지 않는다.
IAM은 Identity and Access Management, 누가 무엇을 해도 되는지 정하는 서비스다.
- IAM 사용자: 사람(또는 장기 자격). 콘솔 비밀번호, 필요 시 액세스 키
- IAM 그룹: 사용자에게 붙일 권한 묶음
- IAM 역할: 맡으면(Assume) 임시 자격이 나오는 세트. EC2·Lambda·CI가 이걸 쓴다
- 정책: Allow/Deny JSON 문서
최소 권한은 필요한 행동·리소스만 허용하는 원칙이다. AdministratorAccess를 개인에게 상시 다는 습관은 사고 대기 상태다.
MFA는 Multi-Factor Authentication, 비밀번호 외 일회용 코드를 더하는 장치다. 루트와 관리자 IAM에 필수다.
액세스 키는 CLI·SDK용 장기 비밀이다. 유출되면 과금 폭탄이 난다. 깃 저장소·프론트 코드·스크린샷에 넣지 않는다. 사람용보다 역할 Assume이 기본선이다.
Billing·Budgets. 콘솔에서 비용 탐색과 예산 알람을 켠다. 태그는 나중에 붙이기 어렵다. Project, Env, Owner를 처음부터 합의한다.
3. 최소 작업 순서
- 루트에 MFA를 켠다. 복구 코드는 비밀번호 관리기에 둔다.
- 루트 액세스 키가 있으면 삭제한다. 새로 만들지 않는다.
- 본인용 IAM 사용자를 만들고 MFA를 켠다. 관리 작업이 필요하면 그룹으로 권한을 준다.
- 루트는 로그아웃한다. 이후 콘솔은 IAM만 쓴다.
- 월 예산 알람을 두 단계로 둔다. 예: 10 USD, 50 USD. 실제 한도는 팀 합의.
- CLI가 필요하면 프로필을 나눈다.
aws configure --profile work
aws sts get-caller-identity --profile work
get-caller-identity가 기대한 계정·사용자 ARN을 반환하는지 본다. ARN은 Amazon Resource Name, 리소스 주소다.
자격 파일 예시 개념이다. 실제 키 값을 글에 넣지 않는다.
# ~/.aws/credentials — 값은 로컬에만, 커밋 금지
[work]
aws_access_key_id = YOUR_ACCESS_KEY_ID
aws_secret_access_key = YOUR_SECRET_ACCESS_KEY
가능하면 액세스 키 대신 IAM Identity Center(SSO) 또는 역할 전환을 쓴다. CI는 GitHub OIDC처럼 단기 자격이 안전하다.
그룹 예:
Developers: 읽기 + 제한된 배포Ops: CloudWatch, 인스턴스 재시작 등 운영BillingViewers: 비용 조회만
AdministratorAccess가 필요하면 짧은 시간, 별도 역할, MFA 조건으로 한정한다.
4. 운영 시 주의
비용. 리전을 여러 곳에 켜 두면 자원을 잊기 쉽다. 기본 리전을 하나 정한다. NAT Gateway, 퍼블릭 IPv4, 방치된 EBS 스냅샷이 조용히 돈을 먹는다. Cost Anomaly Detection(이상 비용 감지)을 켠다.
보안. 액세스 키가 유출된 흔적이 있으면 즉시 비활성화하고 CloudTrail을 본다. CloudTrail은 API 호출 기록이다. 관리 이벤트 추적은 계정 초기에 켠다.
사람 계정. 퇴사자 IAM 사용자와 키를 회수한다. 공유 사용자(team 하나)는 감사 추적이 안 된다. 사람마다 계정을 둔다.
알람 채널. 예산 SNS 메일이 스팸함에 있으면 없는 것과 같다. SNS는 Simple Notification Service, 알림 버스다. 수신함을 확인한다.
개발 계정과 프로덕션 계정을 나눌 수 있으면 나눈다. 같은 계정이면 태그·권한 경계로라도 환경을 구분한다.
CloudTrail. 처음에는 관리 이벤트만 켜도 된다. S3 데이터 이벤트는 양이 많아 비용이 난다. 필요 버킷만 나중에 켠다. 로그 버킷은 다른 계정에 두면 계정 탈취 후에도 기록이 남는다.
흔한 과금. 실험 EC2를 리전 두 곳에 켜 두고 잊기. Elastic IP를 인스턴스에서 떼고 보유. 프리 티어가 끝난 t2.micro. Marketplace AMI의 시간당 요금을 안 읽기. 청구서의 “처음 보는 줄”은 대부분 여기 있다.
콘솔 오른쪽 위 계정 메뉴에서 IAM과 빌링이 다른 사람 계정으로 열려 있지 않은지 매일 한 번 본다. 프로필 혼선은 프로덕션을 개발로 착각하게 한다.
조직이 커지면 IAM Identity Center(SSO)와 Organizations가 답이 된다. 이 글의 IAM 사용자는 그 전 단계다. 처음부터 SSO를 쓸 수 있으면 사용자 장기 키를 건너뛴다. 청구서는 여전히 루트 계정·멤버 계정 알람이 필요하다. 조직 관리 계정으로 매일 개발하지 않는다.
5. 정리
AWS 시작의 정답은 서비스 개수가 아니다. 루트 보호, IAM, 비용 알람 세 줄이다. 이 세 줄이 없으면 EC2·S3 튜토리얼은 위험 연습이 된다.
체크리스트
- 루트 MFA를 켠다. 루트만 있으면 계정 전체를 가져간다.
- 루트 액세스 키가 없는지 확인한다. 장기 루트 키는 복구가 어렵다.
- 일상 작업용 IAM(또는 SSO)과 MFA를 쓴다. 루트 일상 사용은 실수 범위가 계정 전체다.
- 월 예산 알람을 켠다. 프리 티어는 과금 한도가 아니다.
-
sts get-caller-identity로 프로필이 기대한 계정인지 확인한다. 계정 혼선이 가장 흔한 사고다.
연습
- IAM 사용자로만 콘솔에 들어가 루트 세션이 없는지 확인한다.
- Budgets에 작은 금액 알람을 만들고 테스트 메일이 오는지 본다.
- CLI 프로필을 만든 뒤
get-caller-identity출력을 저장해 둔다.
빌링 콘솔에서 확인할 항목:
- IAM 사용자에게
Billing조회가 허용돼 있는지(루트만 보이면 팀이 Blind다) - 결제 알림 메일이 실제 수신 주소인지
- 리전 필터를 끄고 전 리전 비용을 한 번 보는지. 실험 리전이 청구서에 먼저 나타난다
액세스 키를 만들어야 한다면 수명을 정한다. 90일 회전, 사용처 하나, 권한은 그 CLI가 하는 일만. 만든 키는 채팅에 붙여 넣지 않는다.
비밀번호 정책을 IAM에 켠다. 최소 길이, 재사용 금지는 사람 계정용이다. 역할은 비밀번호가 없다. MFA 미등록 사용자가 콘솔에 못 들어가게 계정 기본값을 검토한다. 불편해도 루트 보호 다음으로 싸다.
댓글
0아직 댓글이 없습니다. 첫 댓글을 남겨보세요.