AWS 모듈 0: 보안 계정 설정 (Zero to Architect)

발행: (2025년 12월 12일 오전 10:33 GMT+9)
8 min read
원문: Dev.to

Source: Dev.to

소개

이 튜토리얼은 처음부터 AWS 계정을 안전하게 설정하는 과정을 단계별로 안내합니다. 중점 사항은 다음과 같습니다:

  • 보안: 무단 접근으로부터 계정을 보호합니다.
  • 비용 관리: 청구서에 깜짝 놀라지 않도록 합니다.
  • 모범 사례: 첫날부터 전문가 수준의 설정을 적용합니다.

중요: 이 튜토리얼은 공개 저장소를 사용할 것을 전제로 합니다. 모든 설정은 절대로 비밀을 노출하지 않도록 설계되었습니다.

핵심 개념

요소권장 사용법비고
Root User초기 설정 전용절대적인 접근 권한; 유출 시 치명적 위험
IAM User일상 작업최소 권한 원칙(Least Privilege)에 따라 제한된 권한 부여
MFARoot에 필수, IAM에 강력 권장추가 보안 레이어(비밀번호 + 일회용 코드)

1단계 – Root User 보호

  1. 콘솔에 로그인하고 Root 사용자로 접속합니다.
  2. 오른쪽 상단에서 이름을 클릭 → Security credentials를 선택합니다.
  3. Multi-factor authentication (MFA) 섹션에서 Assign MFA device를 선택하고 다음 중 하나를 고릅니다:
    • Authenticator app (시작에 권장)

    • Security key (YubiKey 등)

    • QR 코드를 Google Authenticator, Authy 또는 Microsoft Authenticator로 스캔합니다.

    • 30초 간격으로 연속된 두 개의 MFA 코드를 입력합니다.

  4. 복구 코드를 물리적으로 안전한 장소에 보관합니다.

계정 별칭 만들기

  1. 같은 화면에서 Account Alias를 찾습니다.
  2. 기억하기 쉬운 별칭을 생성합니다(예: mi-startup-prod 또는 personal-aws).
  3. 별칭을 사용하면 로그인 URL이 더 친숙해집니다: https://<alias>.signin.aws.amazon.com.

앞으로는 절대로 Root User를 일상 작업에 사용하지 마세요.

2단계 – IAM 사용자 생성

  1. 콘솔에서 IAMUsersCreate user를 찾습니다.
  2. 설정:
    • 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” 옵션을 해제(튜토리얼 간소화)
  3. 권한 할당:
    • Attach policies directly에서 AdministratorAccess를 찾아 체크(학습용).
    • 실제 운영 환경에서는 AmazonS3FullAccess, AWSLambdaFullAccess 등 더 세분화된 권한을 부여합니다.
  4. NextCreate user 클릭.
  5. 자격 증명이 포함된 CSV 파일을 다운로드하고 1Password, Bitwarden 등 비밀번호 관리 도구에 저장합니다.
  6. 새 IAM 사용자에 대해 Root User와 동일한 절차로 MFA를 설정합니다(“Multi‑factor authentication (MFA)” 섹션).
  7. Root User에서 로그아웃하고 계정 별칭과 새 IAM 사용자로 다시 로그인합니다.

3단계 – 청구 알림 설정

  1. Root 사용자 세션에서 AccountBilling preferencesEdit 로 이동합니다.
  2. 다음을 활성화:
    • Receive Free Tier Usage Alerts
    • Receive Billing Alerts
  3. 이메일을 입력하고 저장합니다.
  4. 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
  5. 알림 설정:
    • Alert 1 – 실제 비용: Threshold Actual costs – 100% (0.01달러 도달 시)
    • Alert 2 – 예측(선택): Threshold Forecasted costs – 80%
  6. 각 알림에 이메일을 추가합니다. 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

  1. MSI 설치 파일을 다운로드합니다.
  2. 설치 프로그램을 실행합니다.

설치 확인

aws --version
# Expected output: aws-cli/2.x.x Python/3.x.x ...

주의: CLI는 IAM 사용자 전용으로만 설치하고, Root 사용자에서는 절대 설치하지 마세요.

5단계 – 저장소 보안 강화

5.1 CLI용 Access Key 생성

  1. AWS 콘솔(IAM 사용자) → Users → 해당 사용자 → Security credentials 로 이동합니다.
  2. Access keys 섹션에서 Create access key를 클릭합니다.
  3. “I understand…”를 체크 → Next 클릭 후 (선택) 설명을 입력(CLI-Local-DevMachine).
  4. 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
Back to Blog

관련 글

더 보기 »