📄 2025.12.03 (Day 28) [AWS 클라우드 기초: AWS 개요, 계정 관리, IAM 서비스]
1. 핵심 개념 정리 (Concepts & Theory)
| # | 핵심 개념 | 간결한 설명 |
|---|---|---|
| 1 | 클라우드 컴퓨팅 (Cloud Computing) | 인터넷을 통해 IT 리소스를 온디맨드(On-Demand) 로 제공하고, 종량제(Pay-as-you-go) 방식으로 사용한 만큼만 비용을 지불하는 모델입니다. 물리적 서버 구매 및 데이터센터 운영 없이 컴퓨팅, 스토리지, 네트워킹 자원을 사용할 수 있습니다. |
| 2 | AWS 글로벌 인프라 | AWS는 전 세계에 리전(Region) 과 가용 영역(Availability Zone, AZ) 으로 구성된 인프라를 운영합니다. 리전은 지리적으로 분리된 데이터센터 그룹이며, AZ는 리전 내에서 물리적으로 독립된 데이터센터입니다. 현재 30개 이상의 리전과 90개 이상의 AZ를 운영 중입니다. |
| 3 | 탄력성 (Elasticity) | 수요에 따라 리소스를 자동으로 확장(Scale Out)하거나 축소(Scale In)할 수 있는 특성입니다. Auto Scaling 을 통해 트래픽 증가 시 자동으로 인스턴스를 추가하고, 감소 시 제거하여 비용을 최적화합니다. |
| 4 | AWS 주요 서비스 | 컴퓨팅: EC2(가상 서버), Lambda(서버리스). 스토리지: S3(객체 스토리지), EBS(블록 스토리지). 데이터베이스: RDS(관계형 DB), DynamoDB(NoSQL). 네트워킹: VPC(가상 네트워크), CloudFront(CDN). 보안: IAM(권한 관리), KMS(키 관리). 관리: CloudWatch(모니터링), CloudTrail(감사 로그). |
| 5 | AWS 프리 티어 (Free Tier) | 신규 가입자에게 12개월 동안 제한적으로 무료 서비스를 제공합니다. EC2 t2.micro(750시간/월), S3 5GB, RDS 750시간/월, Lambda 100만 요청/월 등이 포함됩니다. 일부 서비스는 영구 무료 제공됩니다. |
| 6 | IAM (Identity and Access Management) | AWS 리소스에 대한 액세스 제어 를 담당하는 서비스입니다. 사용자(User), 그룹(Group), 역할(Role), 정책(Policy) 으로 구성되며, “누가, 무엇을, 어떻게” 사용할 수 있는지를 JSON 정책 문서로 정의합니다. |
| 7 | IAM 사용자 & 그룹 | IAM 사용자 는 개별 사용자 또는 애플리케이션에 대한 자격 증명입니다. 프로그래밍 방식 액세스(Access Key ID/Secret Access Key) 또는 콘솔 액세스(비밀번호)를 설정합니다. IAM 그룹 은 유사한 권한이 필요한 사용자들을 묶어 관리하는 단위로, 그룹에 정책을 연결하면 소속 사용자 모두에게 적용됩니다. |
| 8 | IAM 정책 (Policy) | JSON 형식으로 작성된 권한 정의 문서 입니다. Effect (Allow/Deny), Action (수행 가능한 작업), Resource (대상 리소스), Condition (적용 조건)으로 구성됩니다. AWS 관리형 정책 (AWS 제공), 고객 관리형 정책 (사용자 생성), 인라인 정책 (특정 엔티티에 직접 삽입)으로 구분됩니다. |
| 9 | IAM 역할 (Role) | 임시 자격 증명 을 제공하는 엔티티로, 장기 자격 증명(Access Key) 없이 권한을 위임받습니다. EC2 인스턴스, Lambda 함수, 다른 AWS 계정, 외부 사용자(SAML, OIDC)가 역할을 “assume"하여 권한을 획득합니다. STS(Security Token Service)가 임시 토큰을 발급합니다. |
| 10 | AWS Organizations | 여러 AWS 계정을 중앙에서 관리 하는 서비스입니다. 조직 단위(OU, Organizational Unit)로 계정을 그룹화하고, 통합 결제 와 SCP(Service Control Policy) 로 계정 수준 권한을 제한합니다. |
2. 실습 코드 & 응용 (Practice & Code Walkthrough)
(A) AWS CLI 기본 사용법
AWS CLI 설치 및 구성:
# AWS CLI 버전 확인
aws --version
# AWS CLI 설정 (Access Key ID, Secret Access Key, 리전 입력)
aws configure
# AWS Access Key ID [None]: AKIAIOSFODNN7EXAMPLE
# AWS Secret Access Key [None]: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
# Default region name [None]: ap-northeast-2
# Default output format [None]: json
# 현재 자격 증명 확인
aws sts get-caller-identity
# Output:
# {
# "UserId": "AIDACKCEVSQ6C2EXAMPLE",
# "Account": "123456789012",
# "Arn": "arn:aws:iam::123456789012:user/developer"
# }
# 설정 파일 위치
~/.aws/credentials # Access Key 저장
~/.aws/config # 리전 및 출력 형식 저장
S3 기본 명령어:
# S3 버킷 목록 조회
aws s3 ls
# S3 버킷 생성
aws s3 mb s3://my-unique-bucket-name-20241203 --region ap-northeast-2
# 버킷에 파일 업로드
aws s3 cp test.txt s3://my-unique-bucket-name-20241203/
# 버킷 내 파일 목록 조회
aws s3 ls s3://my-unique-bucket-name-20241203/
# 파일 다운로드
aws s3 cp s3://my-unique-bucket-name-20241203/test.txt ./downloaded.txt
# 버킷 동기화 (로컬 디렉토리 → S3)
aws s3 sync ./local-folder s3://my-unique-bucket-name-20241203/backup/
# 버킷 삭제 (비어있어야 함)
aws s3 rb s3://my-unique-bucket-name-20241203
# 버킷 강제 삭제 (파일 포함)
aws s3 rb s3://my-unique-bucket-name-20241203 --force
EC2 기본 명령어:
# EC2 인스턴스 목록 조회
aws ec2 describe-instances
# 특정 리전의 EC2 인스턴스 목록
aws ec2 describe-instances --region us-east-1
# 실행 중인 인스턴스만 필터링
aws ec2 describe-instances --filters "Name=instance-state-name,Values=running"
# 보안 그룹 목록 조회
aws ec2 describe-security-groups
(B) IAM 사용자 및 정책 생성 실습
1. IAM 사용자 생성 (Console):
- AWS Management Console → IAM 서비스로 이동
- 좌측 메뉴 “사용자(Users)” 클릭 → “사용자 추가(Add user)”
- 사용자 세부 정보:
- 사용자 이름: developer-john
- AWS 액세스 유형: ☑ 프로그래밍 방식 액세스 (Access Key) ☑ AWS Management Console 액세스 (비밀번호)
- 권한 설정:
- 기존 정책 직접 연결: “AmazonS3ReadOnlyAccess”
- 태그 추가 (선택사항):
- Key: Department, Value: Engineering
- 검토 및 생성
- Access Key ID와 Secret Access Key 저장 (다시 볼 수 없음)
2. IAM 그룹 생성 및 사용자 추가:
- IAM → 그룹(Groups) → “그룹 생성(Create group)”
- 그룹 이름: Developers
- 정책 연결:
- AmazonEC2FullAccess
- AmazonS3FullAccess
- AmazonRDSReadOnlyAccess
- 그룹 생성 완료
- 사용자 → developer-john → 그룹 탭 → “그룹에 사용자 추가”
3. IAM 정책 JSON 예시:
S3 특정 버킷에 대한 읽기 권한:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:ListBucket"
],
"Resource": "arn:aws:s3:::company-data"
},
{
"Effect": "Allow",
"Action": [
"s3:GetObject"
],
"Resource": "arn:aws:s3:::company-data/*"
}
]
}
EC2 인스턴스 시작/중지 권한 (특정 리전만):
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ec2:StartInstances",
"ec2:StopInstances",
"ec2:DescribeInstances"
],
"Resource": "*",
"Condition": {
"StringEquals": {
"aws:RequestedRegion": "ap-northeast-2"
}
}
}
]
}
시간 기반 액세스 제어:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "s3:*",
"Resource": "*",
"Condition": {
"DateGreaterThan": {"aws:CurrentTime": "2024-01-01T00:00:00Z"},
"DateLessThan": {"aws:CurrentTime": "2024-12-31T23:59:59Z"}
}
}
]
}
4. IAM 역할 생성 (EC2 → S3 접근):
- IAM → 역할(Roles) → “역할 만들기(Create role)”
- 신뢰할 수 있는 엔터티 유형: AWS 서비스
- 사용 사례: EC2
- 권한 정책 연결: AmazonS3FullAccess
- 역할 이름: EC2-S3-Access-Role
- 역할 생성 완료
EC2 인스턴스에 역할 연결
- EC2 콘솔 → 인스턴스 선택 → 작업 → 보안 → IAM 역할 수정
- EC2-S3-Access-Role 선택 → 업데이트
EC2 인스턴스 내부에서 테스트
ssh ec2-user@
(C) AWS Management Console 실습
S3 버킷 생성 및 파일 업로드:
- AWS Console → S3 서비스로 이동
- “버킷 만들기(Create bucket)” 클릭
- 버킷 설정:
- 버킷 이름: my-first-bucket-20241203 (전역적으로 고유한 이름 필요)
- AWS 리전: 아시아 태평양(서울) ap-northeast-2
- 퍼블릭 액세스 차단: ☑ 모든 퍼블릭 액세스 차단 (기본값)
- 버킷 버전 관리: 비활성화 (선택사항)
- 태그: Key=Environment, Value=Learning
- 버킷 만들기 완료
버킷 정책으로 퍼블릭 읽기 허용 (주의: 보안 위험):
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "PublicReadGetObject",
"Effect": "Allow",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::my-first-bucket-20241203/*"
}
]
}
(D) AWS Budgets 설정
예산 알림 설정 (과금 방지):
- AWS Console → Billing and Cost Management
- Budgets → “Create budget”
- 예산 유형: Cost budget
- 예산 설정:
- 예산 이름: Monthly-Budget-10USD
- 기간: Monthly
- 예산 금액: $10.00
- 알림 설정:
- 임계값: Actual cost >= 80% of budgeted amount
- 이메일: your-email@example.com
- 예산 생성 완료
결과:
- 월 사용 비용이 $8 (80%) 초과 시 이메일 알림 발송
CloudWatch Billing Alarm (대체 방법):
- CloudWatch 서비스로 이동 (us-east-1 리전 필수)
- Alarms → “Create alarm”
- 지표 선택: Billing → Total Estimated Charge
- 조건: Greater/Equal than $10
- 알림: SNS 주제 생성 → 이메일 추가
- 알람 생성 완료
3. 실무/보안 관점 분석 (Insight & Scenario Mapping)
| 분야 | 적용 시나리오 |
|---|---|
| 클라우드 아키텍처 설계 | 다층 아키텍처 구성: EC2(웹 서버) + RDS(데이터베이스) + S3(정적 파일) + CloudFront(CDN) + ELB(로드 밸런서)로 확장 가능한 3-Tier 아키텍처 구축. 고가용성 설계: 최소 2개 이상의 AZ에 리소스를 분산 배치하여 단일 장애점(SPOF) 제거. Auto Scaling Group으로 트래픽에 따라 자동 확장/축소. 재해 복구(DR): 다중 리전 배포로 리전 장애 대비. S3 Cross-Region Replication으로 데이터 백업. 비용 최적화: Reserved Instances(1년/3년 약정)로 최대 75% 비용 절감, Spot Instances로 단기 워크로드 처리. |
| 보안 & 컴플라이언스 | IAM 보안 강화: 루트 계정 MFA 필수 활성화, 루트 계정 Access Key 삭제, IAM 사용자별 개별 자격 증명 부여, 비밀번호 정책 강화(최소 14자, 대소문자/숫자/특수문자 혼합, 90일 만료). 최소 권한 원칙: IAM Policy Simulator로 권한 테스트 후 적용, 불필요한 *:* 권한 제거. Access Key 관리: 90일마다 교체, CloudTrail로 사용 이력 추적, 코드에 하드코딩 금지(환경 변수 또는 Secrets Manager 사용), 미사용 키 삭제. |
| DevOps & 자동화 | Infrastructure as Code (IaC): AWS CloudFormation 또는 Terraform으로 인프라를 코드화하여 버전 관리 및 재현 가능한 배포. CI/CD 파이프라인: CodeCommit(Git 저장소) → CodeBuild(빌드) → CodeDeploy(배포) → CodePipeline(오케스트레이션)으로 자동화. Blue/Green 배포 또는 Canary 배포로 무중단 배포. 모니터링 & 알림: CloudWatch로 CPU, 메모리, 디스크 사용률 모니터링, 임계값 초과 시 SNS로 알림. |
| 비용 관리 & FinOps | 태그 기반 비용 추적: 모든 리소스에 태그 부여(Environment=Production, Department=Engineering), Cost Allocation Tags로 부서별/프로젝트별 비용 분석. 예산 알림: AWS Budgets로 월 예산 설정 및 80% 도달 시 알림, Cost Anomaly Detection으로 비정상 비용 증가 자동 탐지. 리소스 최적화: Trusted Advisor로 활용도 낮은 EC2 인스턴스 식별 및 다운사이징, EBS 볼륨 미사용 스냅샷 삭제. |
| 멀티 계정 전략 | AWS Organizations 구조: 루트 계정 아래 OU(Organizational Unit)로 계층 구성. 예: (1) Security OU(로그 수집, 보안 도구), (2) Production OU(운영 환경), (3) Development OU(개발/테스트). SCP로 계정 제한: Production OU에는 특정 리전만 사용 허용, Development OU에는 고비용 인스턴스 사용 금지. 통합 결제: 모든 계정의 사용량을 합산하여 볼륨 할인 적용. |
4. 개인 인사이트 및 다음 단계 (Reflection & Next Steps)
배운 점/느낀 점:
- 클라우드의 패러다임 전환: 물리적 서버를 직접 구매하고 관리하던 On-Premise 환경과 달리, 클라우드는 “필요한 만큼, 필요한 때에” 리소스를 사용하는 완전히 다른 접근 방식임을 체감했습니다.
- IAM의 중요성: AWS 보안의 핵심은 IAM임을 명확히 깨달았습니다. 루트 계정 노출, 과도한 권한 부여, Access Key 하드코딩 등 IAM 설정 실수가 대형 데이터 유출 사고로 이어지는 사례가 많습니다.
- 정책 작성의 어려움: IAM 정책 JSON 문법이 처음에는 복잡하게 느껴졌지만, Effect-Action-Resource-Condition 구조를 이해하니 명확해졌습니다.
- 역할(Role)의 강점: Access Key를 코드나 인스턴스에 하드코딩하지 않고, IAM 역할로 임시 자격 증명을 부여하는 방식이 훨씬 안전하다는 것을 실습으로 확인했습니다.
- 비용 관리의 필요성: 프리 티어가 있지만, 한도를 초과하면 즉시 과금되므로 CloudWatch Billing Alarm과 AWS Budgets 설정이 필수입니다.
심화 방향:
- EC2 인스턴스 배포: 실제 웹 서버를 EC2에 배포하고, Security Group 설정, Elastic IP 할당, SSH 접속 실습. Auto Scaling과 Load Balancer 연동으로 확장 가능한 아키텍처 구성.
- VPC 네트워킹: VPC, Subnet, Internet Gateway, NAT Gateway, Route Table, Security Group, NACL 구성. Public Subnet과 Private Subnet 분리, Bastion Host를 통한 안전한 SSH 접속.
- CloudFormation/Terraform: 인프라를 코드로 관리하는 IaC 실습. VPC부터 EC2, RDS까지 전체 스택을 템플릿으로 정의하고 자동 배포.
- 보안 강화: GuardDuty(위협 탐지), AWS Config(규정 준수 점검), Security Hub(통합 보안 대시보드), Secrets Manager(비밀번호 암호화 저장) 실습.
- Well-Architected Framework 학습: AWS의 5가지 기둥(Operational Excellence, Security, Reliability, Performance Efficiency, Cost Optimization) 기반으로 아키텍처 설계 원칙 습득.
5. 추가 참고사항 (Quick Reference)
AWS 주요 서비스 & 포트 번호
| 서비스 카테고리 | 서비스명 | 설명 | 포트/프로토콜 | 보안 고려사항 |
|---|---|---|---|---|
| 컴퓨팅 | EC2 | 가상 서버 | 22(SSH), 80(HTTP), 443(HTTPS) | Security Group 최소 권한, Key Pair 안전 보관, IMDSv2 사용 |
| Lambda | 서버리스 함수 | N/A | 실행 역할 최소 권한, 환경 변수 암호화, VPC 연결 시 NAT Gateway | |
| 스토리지 | S3 | 객체 스토리지 | 443(HTTPS) | 퍼블릭 액세스 차단, 버킷 정책 최소 권한, Versioning 활성화, 암호화(SSE-S3/SSE-KMS) |
| EBS | 블록 스토리지 (EC2 연결) | N/A | 볼륨 암호화, 스냅샷 정기 백업, 미사용 볼륨 삭제 | |
| 데이터베이스 | RDS | 관계형 DB (MySQL, PostgreSQL 등) | 3306(MySQL), 5432(PostgreSQL) | Private Subnet 배치, Security Group 최소 허용, SSL/TLS 연결, 자동 백업 |
| DynamoDB | NoSQL DB | 443(HTTPS API) | IAM 정책으로 테이블 접근 제어, Point-in-Time Recovery | |
| 네트워킹 | VPC | 가상 사설 네트워크 | N/A | Public/Private Subnet 분리, NACL + Security Group 다층 방어, VPC Flow Logs |
| CloudFront | CDN | 80, 443 | Origin Access Control(OAC), HTTPS 강제, WAF 연동, Geo Restriction | |
| 보안 | IAM | 액세스 관리 | N/A | 루트 계정 MFA, 최소 권한, Access Key 교체, CloudTrail 로깅 |
| KMS | 키 관리 서비스 | 443(HTTPS API) | 키 자동 교체, Key Policy 최소 권한, CloudTrail로 사용 추적 | |
| 모니터링 | CloudWatch | 모니터링 & 로그 | N/A | Metric Filter로 이상 탐지, 알람 설정, Logs Insights로 분석 |
| CloudTrail | API 감사 로그 | N/A | 모든 리전 활성화, S3 버킷 암호화, Log File Validation | |
| GuardDuty | 위협 탐지 | N/A | 자동 활성화 권장, SNS 알림 연동 |
IAM 정책 JSON 키워드 정리
| 요소 | 설명 | 예시 |
|---|---|---|
| Version | 정책 언어 버전 (항상 “2012-10-17”) | "Version": "2012-10-17" |
| Statement | 권한 정의 배열 | "Statement": [...] |
| Effect | Allow(허용) 또는 Deny(거부) | "Effect": "Allow" |
| Action | 수행 가능한 작업 | "Action": "s3:GetObject" 또는 "Action": ["s3:GetObject", "s3:PutObject"] |
| Resource | 대상 리소스 ARN | "Resource": "arn:aws:s3:::my-bucket/*" |
| Principal | 주체 (누가) - 리소스 기반 정책에서 사용 | "Principal": {"AWS": "arn:aws:iam::123456789012:user/john"} |
| Condition | 조건부 접근 제어 | "Condition": {"IpAddress": {"aws:SourceIp": "192.0.2.0/24"}} |
IAM 모범 사례 체크리스트
☑ 루트 계정 MFA 활성화 ☑ 루트 계정 Access Key 삭제 ☑ 일상 작업용 IAM 사용자 생성 (Administrator 권한) ☑ IAM 사용자 MFA 활성화 ☑ IAM 비밀번호 정책 강화 (최소 14자, 대소문자/숫자/특수문자) ☑ 그룹 기반 권한 관리 (개별 사용자에게 직접 정책 연결 지양) ☑ 최소 권한 원칙 적용 (: 권한 금지) ☑ Access Key 90일마다 교체 ☑ 미사용 IAM 사용자 및 Access Key 삭제 ☑ EC2 인스턴스에 IAM 역할 연결 (Access Key 하드코딩 금지) ☑ CloudTrail 활성화 (모든 API 호출 로깅) ☑ IAM Access Analyzer로 외부 공유 리소스 점검
AWS 아키텍처 설계 원칙 (Well-Architected Framework)
1. Operational Excellence (운영 우수성)
- Infrastructure as Code (CloudFormation, Terraform)
- 모니터링 및 로깅 (CloudWatch, X-Ray)
- 장애 대응 프로세스 문서화
- 정기적인 게임 데이 연습
2. Security (보안)
- IAM 최소 권한 원칙
- 데이터 암호화 (저장 시, 전송 중)
- 다층 방어 (Security Group, NACL, WAF)
- 보안 이벤트 탐지 (GuardDuty, Security Hub)
3. Reliability (안정성)
- 다중 AZ 배포
- Auto Scaling으로 자동 복구
- 정기 백업 및 DR 계획
- 장애 테스트 (Chaos Engineering)
4. Performance Efficiency (성능 효율성)
- 적절한 인스턴스 타입 선택
- 캐싱 (CloudFront, ElastiCache)
- 모니터링 및 지속적 최적화
- Serverless 아키텍처 활용
5. Cost Optimization (비용 최적화)
- Reserved Instances / Savings Plans
- Auto Scaling으로 유휴 리소스 제거
- S3 Lifecycle Policy
- Cost Explorer로 비용 분석
리전 선택 기준표
| 고려 사항 | 세부 내역 |
|---|---|
| 지연시간(Latency) | 사용자와 가까운 리전 선택. 예: 한국 사용자 → 서울(ap-northeast-2), 미국 사용자 → 버지니아(us-east-1) |
| 비용(Pricing) | 리전마다 요금 차이 존재. 일반적으로 us-east-1이 가장 저렴하고, 아시아/유럽 리전이 비쌈 |
| 컴플라이언스(Compliance) | 데이터 주권 법규. 예: EU GDPR 준수 시 EU 리전(eu-west-1) 필수, 한국 개인정보보호법 고려 시 서울 리전 |
| 서비스 가용성 | 모든 리전에서 모든 서비스 제공 안 됨. 신규 서비스는 주로 us-east-1부터 출시 |
| 재해 복구(DR) | 다중 리전 배포 시 지리적으로 멀리 떨어진 리전 선택 (예: 서울 + 오하이오) |