| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 |
- network
- TryHackMe
- AWS 인프라 분석
- 리버싱
- Amazon S3
- 프로그래머스
- AWS 인프라 아키텍처
- C
- AWS 3 Tier Architecture
- AWS 아키텍처 분석
- 드림핵
- terraform
- python
- AWS
- reversing.kr
- AWS Active Directory
- 네트워크
- programmers
- AWS 보안 아키텍처 분석
- 운영체제
- AWS 침해사고 사례 분석
- AWS 침해 사고 사례 분석
- reversing
- AWS 사고 사례 분석
- 침입 차단 시스템(IPS)
- IAM Federation
- operating system
- AWS IAM Role
- AWS 보안 사고 사례 모음
- dreamhack
- Today
- Total
lhywk 님의 블로그
AWS Root User & 계정 초기 보안 본문
AWS를 처음 만들고 나서 많은 분들이 그냥 Root 계정으로 모든 작업을 하거나 혹은 IAM User 하나 만들어서 AdministratorAccess 붙이고 쓰는 경우가 많습니다.
해당 글에서는 AWS 계정을 처음 만들었을 때 반드시 해야 하는 보안 설정과 Root User가 실제로 무엇인지를 정확하게 짚고 넘어갑니다.
1. Root User
AWS 계정을 처음 생성하면 계정의 모든 AWS 서비스 및 리소스에 대한 완전한 액세스 권한이 있는 단일 자격 증명이 자동으로 생성됩니다. 이것이 바로 AWS 계정 루트 사용자(Root User)입니다. 계정을 만들 때 사용한 이메일 주소와 암호가 루트 사용자의 로그인 자격 증명입니다.
루트 사용자가 일반 IAM 사용자와 가장 크게 다른 점은 다음과 같습니다.
- 어떠한 제한도 없습니다. IAM 사용자에게 AdministratorAccess 권한을 부여해도 Explicit Deny 또는 Policy Condition으로 특정 IP에서만 접근하도록 제한하는 등의 접근 관리가 가능합니다. 하지만 Root 계정은 이러한 제한이 통하지 않습니다.
- 결제 정보를 포함한 모든 것에 접근할 수 있습니다.
- SCP(Service Control Policy)도 Root User를 완전히 막지 못합니다. (일부 제한은 가능하지만 기본적으로 Root는 별도의 레이어에 있습니다.)
Linux 서버의 root 계정과 개념이 같습니다. Linux에서도 root는 제한 없이 모든 걸 할 수 있지만, 일상 작업에서는 일반 사용자 계정 + sudo를 사용하는 것처럼, AWS도 동일한 철학을 따릅니다.
2. Root User만 할 수 있는 작업
AWS 공식 문서에 따르면 아래 작업들은 반드시 Root User로만 수행해야 합니다. IAM User나 Role로는 불가능합니다.
| 작업 | 설명 |
| 계정 이메일 주소 / 암호 변경 | 계정 기본 정보 수정 |
| 결제/비용에 대한 IAM 액세스 활성화 | IAM 사용자가 Billing 콘솔에 접근할 수 있게 허용 |
| AWS Support 플랜 변경/취소 | Basic/Developer/Business/Enterprise 등 플랜 관리 |
| 예약 인스턴스 마켓플레이스 판매자 등록 | RI 마켓플레이스 판매 기능 |
| AWS GovCloud 가입 | 정부/공공 클라우드 환경 |
| S3 버킷 정책이 모든 접근을 막은 경우 해제 | 잘못 설정된 S3 버킷 정책 복구 |
| 계정 해지 | AWS 계정 영구 삭제 |
| KMS 키 복구 (특정 케이스) | 관리 불능 상태의 KMS 키 복구 |
결론: Root User는 "비상 열쇠"처럼 다루어야 합니다. 금고에 잠가두고 꼭 필요할 때만 꺼내세요.
3. 계정 초기 보안 설정 - 반드시 해야 할 것들
3-1. Root Access Key 삭제! 최우선
Root User로 처음 로그인하면 가장 먼저 해야 할 일은 Root Access Key가 존재하는지 확인하고 즉시 삭제하는 것입니다.
Access Key는 CLI/SDK/API로 AWS에 접근할 때 사용하는 키입니다. Root의 Access Key가 유출되면 Root 계정의ID/Password가 유출된 것과 동일합니다. 그리고 Root는 제한이 없기 때문에 공격자가 계정 전체를 장악할 수 있습니다.
커뮤니티에서 자주 올라오는 "AWS 해킹당해서 한달 치 월급만큼 과금됐어요" 사례의 대다수가 GitHub에 Access Key를 실수로 커밋한 경우입니다.
확인 및 삭제 방법:
- 콘솔 우측 상단 계정 이름 -> 보안 자격 증명(Security credentials)
- 액세스 키(Access keys) 섹션 확인
- 키가 존재한다면 -> 즉시 비활성화 후 삭제
루트 사용자 Access Key가 아예 없어야 정상입니다.
3-2. Root User MFA 활성화
MFA(Multi-Factor Authentication)는 계정 보안에서 가장 효과적인 방어 수단입니다. 비밀번호가 유출되더라도 MFA 없이는 로그인이 불가능합니다.
AWS는 현재 Root User에 대해 MFA 미설정 시 콘솔 첫 로그인 후 35일 이내에 설정을 강제합니다.
MFA 디바이스 종류:
종류 설명 권장 여부
| 종류 | 설명 | 권장 여부 |
| 가상 MFA (TOTP) | Google Authenticator, Authy 등 앱 사용 | 개인/소규모 팀 |
| 하드웨어 TOTP | 물리적 OTP 토큰 기기 | 기업 환경 권장 |
| FIDO2 보안 키 | YubiKey 등 하드웨어 보안 키 | 기업 환경 권장 |
기업 환경에서는 Hardware MFA를 권장합니다. Hardware MFA는 물리적 디바이스이므로 특정 위치에 보관하여 Location-based 접근 관리가 가능합니다. 예를 들어 다음과 같이 역할을 분리할 수 있습니다.
- Root 비밀번호 -> Sys Admin이 관리
- Hardware MFA 디바이스 -> Security Manager가 보관
- 접근 승인 -> CTO 결재
Root 계정에 로그인하려면 세 사람이 협력해야 하는 구조입니다. 보안에서 이런 분리된 책임 구조가 중요합니다.
참고: 루트 사용자 하나에 최대 8개의 MFA 디바이스를 등록할 수 있습니다. 비상용 백업 디바이스를 등록해두는 것을 권장합니다.
가상 MFA 설정 방법:
- 콘솔 우측 상단 계정 이름 → 보안 자격 증명
- 멀티 팩터 인증(MFA) → MFA 디바이스 할당
- 인증 관리자 앱 선택 → QR 코드 스캔 (Google Authenticator / Authy)
- OTP 코드 2회 입력 → 활성화 완료
3-3. 관리용 IAM User 생성 (또는 IAM Identity Center 사용)
Root 계정 설정이 끝나면 이제부터는 Root를 쓰지 않습니다. 일상적인 AWS 관리 작업을 위한 별도 계정을 만들어야 합니다.
AWS는 두 가지 방법을 권장합니다
방법 1 : IAM User 생성
- AdministratorAccess 권한을 부여한 IAM User를 생성
- 해당 IAM User로 일상 작업 수행
- 이 방법도 좋지만 다수의 계정이 있다면 관리가 복잡해집니다
방법 2 (권장) : IAM Identity Center 사용
- AWS Organizations + IAM Identity Center 조합
- Single Sign-On 형태로 여러 계정 접근
IAM User를 생성할 때는 다음을 지켜합니다.
- 그룹(Group)에 정책(Policy)을 연결하고 사용자를 그룹에 추가하는 방식 사용
- 직접 User에 Policy를 붙이는 방식보다 관리가 용이
- IAM User에도 MFA 설정 필수
루트 계정과 IAM 사용자를 구분하는 이유: 루트 계정만 사용하면 CloudTrail 로그가 전부 루트로 기록되어 어떤 사람이 어떤 작업을 했는지 추적이 불가능합니다. IAM User를 구분하면 "홍길동이 EC2를 삭제했다"처럼 행위자 추적이 가능합니다.
3-4. 비용 알림(Budget Alert) 설정
초기 계정 설정에서 꼭 빠뜨리는 것 중 하나가 비용 알림입니다. 리소스를 잘못 만들거나 Access Key가 유출되어 악의적인 사용이 발생했을 때 빠르게 알아채야 합니다.
AWS Budgets 설정 방법:
- AWS Management Console -> Billing and Cost Management
- 좌측 메뉴 -> Budgets -> 예산 생성
- 비용 예산 선택 → 월 예산 금액 설정 (예: $10)
- 알림 설정: 실제 비용이 예산의 80%, 100% 도달 시 이메일 발송
- SNS 토픽을 연결하면 더 유연한 알림 가능
개인 계정이라면 $1~$5 정도의 낮은 금액으로 설정해두면 예상치 못한 과금을 빠르게 감지할 수 있습니다.
3-5. CloudTrail 활성화 (감사 로그)
CloudTrail은 AWS 계정의 CCTV입니다. 누가, 언제, 어떤 API를 호출했는지 모두 기록합니다.
AWS는 기본적으로 CloudTrail 이벤트 기록을 자동으로 활성화합니다. 최근 90일간의 관리 이벤트를 무료로 확인할 수 있습니다.
그러나 장기 보관과 모든 리전 통합 추적을 위해서는 Trail을 직접 생성해야 합니다.
Trail 생성 방법:
- CloudTrail 콘솔 -> 추적 생성(Create trail)
- 추적 이름 입력
- S3 버킷 지정 (로그 저장소)
- 모든 리전에 적용 옵션 활성화 (기본값)
- CloudWatch Logs 연동 (선택 사항, 알람 설정을 위해 권장)
- KMS 암호화 적용 (보안 강화)
비용 참고: 계정당 첫 번째 Trail의 관리 이벤트 전달은 무료입니다. S3 저장 비용은 별도로 발생하지만 소규모 계정 기준 매우 저렴합니다.
3-6. Root User 로그인 알림 설정
Root 계정이 콘솔에 로그인할 경우 즉시 알림을 받도록 설정하면 비인가 접속을 빠르게 탐지할 수 있습니다.
구성 방식: CloudTrail -> EventBridge -> SNS
Root 콘솔 로그인 이벤트 발생
↓
CloudTrail이 ConsoleLogin 이벤트 기록
↓
EventBridge 규칙이 이벤트 감지
↓
SNS 토픽을 통해 이메일/SMS 발송
주의: ConsoleLogin 이벤트는 us-east-1 (버지니아 북부) 리전의 CloudTrail에만 기록됩니다. EventBridge 규칙도 us-east-1에서 생성해야 합니다.
CloudTrail 외에도 AWS Config 서비스를 통해 다음을 모니터링할 수 있습니다:
- Root 계정에 Access Key가 생성되었는지
- Root 계정의 MFA가 비활성화되었는지
이를 AWS Config 관리형 규칙으로 설정하면, 조건에 맞는 경우 SNS로 이메일 알림을 자동 발송합니다.
4. 계정 초기 보안 체크리스트
[ ] Root Access Key 삭제 완료
[ ] Root MFA 활성화 완료
[ ] 관리용 IAM User 생성 (MFA 포함)
[ ] IAM User에 AdminAccess 부여 (그룹을 통해)
[ ] 결제 정보 IAM 접근 활성화 (Billing Access)
[ ] AWS Budgets 비용 알림 설정
[ ] CloudTrail Trail 생성 (멀티 리전)
[ ] Root 로그인 알림 설정 (EventBridge + SNS)
5. 실습: Root 계정 보안 설정 직접 해보기
이 실습은 CloudTrail + EventBridge 알림 구성을 직접 따라하는 실습입니다.
실습 1: CloudTrail Trail 생성
AWS 콘솔 상단 검색창에 CloudTrail을 입력 후 Trails 생성으로 들어갑니다.

Trail name 입력란에 manage-trail을 입력합니다.
Storage location 섹션에서 새 S3 버킷 생성을 선택하고
버킷 이름을 지정합니다. S3 버킷 이름은 전 세계에서 유일해야 하기 때문에 계정 ID를 붙여줍니다.

KMS 암호화를 설정합니다.

CloudWatch Logs에 연결합니다. 실시간으로 로그를 검색하고 이상 행동 발생 시 알림을 보낼 수 있습니다. -> EventBridge 연동

API activity 항목의 Read와 Write를 체크합니다. 리소스 조회와 변경을 감사할 수 있게됩니다.
실습 2: Root 로그인 알림 설정
Step 1: SNS 토픽 생성 (us-east-1 리전에서 진행)
1. 리전을 us-east-1 (버지니아 북부)로 변경
2. SNS 콘솔 → [Topics] → [Create topic]
3. Type: Standard
4. Name: "root-login-alert"
5. [Create topic]
6. [Create subscription] → Protocol: Email → 본인 이메일 입력
7. 이메일 수신함에서 확인 링크 클릭 (구독 확인)
Step 2: EventBridge 규칙 생성 (us-east-1 리전)
1. EventBridge 콘솔 → [Rules] → [Create rule]
2. Name: "root-login-detection"
3. Event source: "AWS events or EventBridge partner events"
4. Custom patterns (JSON editor)선택
{
"detail-type": ["AWS Console Sign In via CloudTrail"],
"detail": {
"userIdentity": {
"type": ["Root"]
}
}
}
5. Target types: "AWS service" 선택
6. Target: SNS topic → [root-login-alert] 선택
7. [Create rule]
8. tag 건너뛰기
테스트: Root 계정으로 콘솔 로그인 시 이메일 알림이 도착하면 성공입니다.

6. 흔한 실수들
실수 1: Root 계정으로 평소에 모든 작업
- 문제: 로그 추적 불가, 보안 위험 극대화
- 해결: IAM User 또는 IAM Identity Center 사용
실수 2: Root MFA 설정 안 함
- 문제: 비밀번호 유출 시 계정 전체 탈취 가능
- 해결: 지금 당장 설정 (5분이면 완료)
실수 3: Access Key를 코드에 하드코딩 후 GitHub Push
- 문제: GitHub 봇이 수초~수분 내에 키를 발견하고 악용
- 해결: 코드에 Key 절대 금지, IAM Role 사용, Secret Manager 활용
실수 4: 비용 알림 없이 사용
- 문제: 예상치 못한 고액 청구서
- 해결: Budgets + Zero spend alert 즉시 설정
실수 5: CloudTrail 없이 운영
- 문제: 보안 사고 발생 시 원인 추적 불가
- 해결: Trail 생성 (관리 이벤트 첫 번째 전달은 무료)
7. 마치며
이번 글에서는 AWS 계정을 처음 만들었을 때 Root User가 무엇인지, 왜 위험한지, 그리고 초기 보안 설정을 어떻게 해야 하는지 살펴봤습니다.
정리하면
- Root User는 비상 열쇠 - 금고에 잠가두고 꼭 필요할 때만 사용
- Access Key 삭제, MFA 설정은 계정 생성 직후 반드시 완료
- 일상 작업은 IAM User (또는 IAM Identity Center)로
- CloudTrail + Budget Alert로 모니터링 체계 구축
참고자료
https://docs.aws.amazon.com/ko_kr/IAM/latest/UserGuide/root-user-best-practices.html
https://docs.aws.amazon.com/ko_kr/IAM/latest/UserGuide/id_root-user.html
https://docs.aws.amazon.com/ko_kr/IAM/latest/UserGuide/enable-mfa-for-root.html
https://docs.aws.amazon.com/ko_kr/awscloudtrail/latest/userguide/cloudtrail-trails.html
https://www.44bits.io/ko/post/first_actions_for_setting_secure_account
'AWS' 카테고리의 다른 글
| AWS IAM Role & STS (0) | 2026.04.02 |
|---|---|
| AWS IAM (0) | 2026.04.02 |
| Sisense 사고 사례 분석 (1) | 2026.04.01 |
| Banfico 아키텍처 분석 (0) | 2026.03.27 |
| ONUS 사고 사례 분석 (0) | 2026.03.26 |