AWS 모듈 0: 보안 계정 설정 (Zero to Architect)
Source: Dev.to
소개
이 튜토리얼은 처음부터 AWS 계정을 안전하게 설정하는 과정을 단계별로 안내합니다. 중점 사항은 다음과 같습니다:
- 보안: 무단 접근으로부터 계정을 보호합니다.
- 비용 관리: 청구서에 깜짝 놀라지 않도록 합니다.
- 모범 사례: 첫날부터 전문가 수준의 설정을 적용합니다.
중요: 이 튜토리얼은 공개 저장소를 사용할 것을 전제로 합니다. 모든 설정은 절대로 비밀을 노출하지 않도록 설계되었습니다.
핵심 개념
| 요소 | 권장 사용법 | 비고 |
|---|---|---|
| Root User | 초기 설정 전용 | 절대적인 접근 권한; 유출 시 치명적 위험 |
| IAM User | 일상 작업 | 최소 권한 원칙(Least Privilege)에 따라 제한된 권한 부여 |
| MFA | Root에 필수, IAM에 강력 권장 | 추가 보안 레이어(비밀번호 + 일회용 코드) |
1단계 – Root User 보호
- 콘솔에 로그인하고 Root 사용자로 접속합니다.
- 오른쪽 상단에서 이름을 클릭 → Security credentials를 선택합니다.
- Multi-factor authentication (MFA) 섹션에서 Assign MFA device를 선택하고 다음 중 하나를 고릅니다:
-
Authenticator app (시작에 권장)
-
Security key (YubiKey 등)
-
QR 코드를 Google Authenticator, Authy 또는 Microsoft Authenticator로 스캔합니다.
-
30초 간격으로 연속된 두 개의 MFA 코드를 입력합니다.
-
- 복구 코드를 물리적으로 안전한 장소에 보관합니다.
계정 별칭 만들기
- 같은 화면에서 Account Alias를 찾습니다.
- 기억하기 쉬운 별칭을 생성합니다(예:
mi-startup-prod또는personal-aws). - 별칭을 사용하면 로그인 URL이 더 친숙해집니다:
https://<alias>.signin.aws.amazon.com.
앞으로는 절대로 Root User를 일상 작업에 사용하지 마세요.
2단계 – IAM 사용자 생성
- 콘솔에서 IAM → Users → Create user를 찾습니다.
- 설정:
- User name:
juan-admin(또는 원하는 이름) - Access type: Provide user access to the AWS Management Console 체크
- Console password: Custom password(강력) 또는 Auto‑generated 선택
- “Users must create a new password at next sign‑in” 옵션을 해제(튜토리얼 간소화)
- User name:
- 권한 할당:
- Attach policies directly에서 AdministratorAccess를 찾아 체크(학습용).
- 실제 운영 환경에서는
AmazonS3FullAccess,AWSLambdaFullAccess등 더 세분화된 권한을 부여합니다.
- Next → Create user 클릭.
- 자격 증명이 포함된 CSV 파일을 다운로드하고 1Password, Bitwarden 등 비밀번호 관리 도구에 저장합니다.
- 새 IAM 사용자에 대해 Root User와 동일한 절차로 MFA를 설정합니다(“Multi‑factor authentication (MFA)” 섹션).
- Root User에서 로그아웃하고 계정 별칭과 새 IAM 사용자로 다시 로그인합니다.
3단계 – 청구 알림 설정
- Root 사용자 세션에서 Account → Billing preferences → Edit 로 이동합니다.
- 다음을 활성화:
- Receive Free Tier Usage Alerts
- Receive Billing Alerts
- 이메일을 입력하고 저장합니다.
- IAM 사용자로 AWS Budgets(또는 Billing → Budgets)에 들어가 Create budget를 클릭합니다.
- Template: Zero spend budget (권장)
- Budget name:
Alerta-Costo-Minimo - Period: Monthly
- Budgeted amount:
0.01 USD - Scope: All AWS services
- 알림 설정:
- Alert 1 – 실제 비용: Threshold
Actual costs – 100%(0.01달러 도달 시) - Alert 2 – 예측(선택): Threshold
Forecasted costs – 80%
- Alert 1 – 실제 비용: Threshold
- 각 알림에 이메일을 추가합니다. AWS는 Free Tier 한도에 근접하거나 초과할 경우 알림을 보냅니다.
4단계 – AWS CLI 설치
macOS
curl "https://awscli.amazonaws.com/AWSCLIV2.pkg" -o "AWSCLIV2.pkg"
sudo installer -pkg AWSCLIV2.pkg -target /
Linux
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
unzip awscliv2.zip
sudo ./aws/install
Windows
- MSI 설치 파일을 다운로드합니다.
- 설치 프로그램을 실행합니다.
설치 확인
aws --version
# Expected output: aws-cli/2.x.x Python/3.x.x ...
주의: CLI는 IAM 사용자 전용으로만 설치하고, Root 사용자에서는 절대 설치하지 마세요.
5단계 – 저장소 보안 강화
5.1 CLI용 Access Key 생성
- AWS 콘솔(IAM 사용자) → Users → 해당 사용자 → Security credentials 로 이동합니다.
- Access keys 섹션에서 Create access key를 클릭합니다.
- “I understand…”를 체크 → Next 클릭 후 (선택) 설명을 입력(
CLI-Local-DevMachine). - CSV 파일을 다운로드합니다(한 번만 표시됩니다).
5.2 CLI 프로파일 설정
aws configure --profile mi-proyecto
CSV에 있는 값을 차례대로 입력합니다:
- AWS Access Key ID
- AWS Secret Access Key
- Default region name (예:
us-east-1) - Default output format (
json또는 빈칸)
파일 위치:
- macOS/Linux:
~/.aws/credentials및~/.aws/config - Windows:
C:\Users\<user>\.aws\credentials
5.3 프로파일 환경 변수 설정
Bash/Zsh
echo 'export AWS_PROFILE=mi-proyecto' >> ~/.zshrc
source ~/.zshrc
Fish
echo 'set -gx AWS_PROFILE mi-proyecto' >> ~/.config/fish/config.fish
source ~/.config/fish/config.fish
PowerShell
[System.Environment]::SetEnvironmentVariable('AWS_PROFILE', 'mi-proyecto', 'User')
신원 확인
aws sts get-caller-identity
예상 출력:
{
"UserId": "AIDAXXXXXXXXXX",
"Account": "123456789012",
"Arn": "arn:aws:iam::123456789012:user/juan-admin"
}
- Arn에
:user/가 포함 → 정상 - Arn에
:root가 포함 → Root 사용 중 (문제)
5.4 .gitignore (핵심)
프로젝트 루트에 다음 내용으로 .gitignore 파일을 생성합니다:
# === SECRETOS AWS Y TERRAFORM ===
*.tfvars
*.tfstate
*.tfstate.*
.terraform/
.terraform.lock.hcl
# === CREDENCIALES ===
.env
.env.*
*.pem
*.key
aws_credentials.txt
credentials.json
config.json
# === GOLANG ===
*.exe
*.dll
*.so
*.dylib
*.test
*.out
vendor/
go.work
# === SISTEMA ===
.DS_Store
Thumbs.db
# === EDITORES ===
.vscode/
.idea/
*.swp
*.swo
*~
git status를 실행해 .tfstate, .env, .pem, .key 혹은 .terraform/ 같은 파일이 보이지 않는지 확인합니다.
5.5 Pre‑commit Hook (선택이지만 권장)
pre-commit을 설치합니다:
# macOS
brew install pre-commit
# Linux / Windows
pip install pre-commit
.pre-commit-config.yaml 파일을 만들고 다음을 입력합니다:
repos:
- repo: https://github.com/pre-commit/pre-commit-hooks
rev: v4.5.0
hooks:
- id: check-added-large-files
- id: detect-aws-credentials
- id: detect-private-key
- repo: https://github.com/antonbabenko/pre-commit-terraform
rev: v1.83.5
hooks:
- id: terraform_fmt
- id: terraform_validate
Hook을 활성화합니다:
pre-commit install
최종 검증 체크리스트
- Root User에 MFA가 활성화됨.
- Root User는 일상 작업에 사용되지 않음.
- IAM User가
AdministratorAccess권한으로 생성됨(학습용). - IAM User에 MFA가 활성화됨.
- 청구 알림이 설정되고 테스트됨.
- AWS CLI가 안전한 프로파일로 구성됨.
-
.gitignore가 모든 민감 파일을 보호함. - (선택) Pre‑commit 훅이 활성화됨.
추가 자료
- AWS IAM 공식 문서
- AWS MFA 가이드
- AWS Budgets
- AWS CLI 레퍼런스
- Terraform용 Pre‑commit Hooks