AWS 공인교육

39일차) 2025-02-24(공인교육4. Architecting on AWS)

eitherwho 2025. 2. 24. 09:33

아키텍팅 기본 사항

리전

AWS 인프라의 위치, 한 개 이상의 가용영역

사용자가 리소스를 사용하는데 있어서 필요

Latency 때문에 사용자와 가까워야 하지만, 보안때문에 위치를 오픈할 수 없어서 나온 개념

 

✔️ 리전 선택 요인

1️⃣ 거버넌스(현지 데이터 관련 규정)

2️⃣ 지연시간

3️⃣ 서비스 가용성

4️⃣ 비용

 

애플리케이션의 장애로 인해 엔드포인트 사용자가 서비스를 이용하지 못한다면

→ 이중화, 삼중화, ...로 해결
→ 여러 가용영역에 애플리케이션을 배포해 하나가 죽어도 다른곳에서 사용 가능하도록

→ 리소스의 고가용성 보장

가용영역

인프라의 위치를 나눔, 데이터센터의 집합

cf. 서울 리전은 4개의 가용영역으로 구성

데이터센터

컴퓨팅 인프라가 포함된 물리적 위치

엣지 로케이션

AWS가 사용하는 인프라, 캐시 서버
전세계적으로 속도와 성능을 높이고, 사용자의 위치 상관없이 빠른 컨텐츠나 동영상 제공을 위해 필요

CloudFront같은 CDN(Contents Delivery Network) 서비스를 가장 빠른 속도로 캐싱하기 위한 거점

 

AWS Local Zones: 짧은 지연시간, 최종 사용자와 더 가까운 곳에 서비스 배포, 로컬 데이터 처리

 

Outposts: 실제 자원은 온프레미스에 둔 랙에서 관리되고 온프레미스에서 인프라 구축 가능한 AWS 완전관리형 서비스

 

WAF(Well-Architected Framework)

보안, 성능 효율성, 비용 최적화, 운영 우수성, 안정성, 지속 가능

cf. 최소 권한의 원칙 → 보안

 

✔️ AWS 사용 방법

  • 콘솔 엑세스
    - 관리 콘솔(GUI): user id/pw
  • 프로그래밍 방식 엑세스
    - CLI(명령어): Access key/Secret access key, 리전, 기본출력방식 필요
    - SDK(SW 개발 키트 → 개발언어별): Access key/Secret access key

실습1)

AWS 관리 콘솔 및 AWS Command Line Interface 사용

  • AWS 관리 콘솔 사용) Amazon S3 버킷 생성 후 객체 업로드

  • AWS CLI 사용) Amazon S3 버킷 생성 후 버킷에 객체를 복사


오른쪽 상단: user명이 아닌 역할


계정보안

AWS 계정 루트 사용자

AWS 서비스에 대한 전체 엑세스 권한 보유(최상위 관리자 계정), 다중인증(MFA) 진행

첫번째 IAM 사용자 생성(메일주소/pw)할 때 사용하고 IAM 사용자 계정을 생성해 사

IAM(Identity and Access Management)

인증과 권한 제어 기능을 제공하는 서비스

IAM 구성요소

  • 사용자(일반 user): 계정 내에서 인증을 통해 리소스 접근, 필요 권한만 최소한으로 부여
                               ↔ 계정(root account, super user)
  • 그룹: IAM 사용자 모음, 여러 사용자의 권한을 지정 및 관리
  • 역할(Role): 사용자 또는 서비스에 임시로 권한을 위임해주는 기능, STS와 같이 작동
    STS(Security Token Service): 임시 자격 증명을 제공하는 웹 서비스(like 방문증)
  • 정책(Policy): 자격증명이나 리소스에 연결되어 Json 문서로 권한 정의
     1) 리소스 기반의 정책: 리소스에 대한 권한 설정, 인라인 정책 연결, 리소스에 할당
         ex. S3 버킷에서 권한 제어를 위해 사용
     2) 자격 증명 기반의 정책: 사용자에게 권한을 부여하기 위해 사용(사용자, 그룹, 역할에 연결 가능), 역할에 할당
          2-1) Inline Policy(1:1): 사용자 정의 정책, 자격 증명(user) 삭제 시 같이 지워짐
                  → 고객 관리형 정책 사용해야 
          2-2) Managed Policy(1:n)
             2-2-1) AWS Managed Policy: 미리 생성되어 있음, AWS가 관리, 변경 불가
             2-2-2) Customer Managed Policy: 사용자가 생성, 이용, Tool 제공(Generator: GUI, simulator: 검증/테스트)
    - AWS Organizations SCP: 다중 계정 관리
                                               계정을 조직 단위(OUI)로 그룹화하여 계층 구조를 생성
                                               서비스 제어 정책(SCP)으로 모든 계정의 사용 가능한 최대 권한을 중앙 제어
    - IAM  권한 경계: 관리형 정책을 사용해 자격 증명 기반 정책이 IAM 엔터티에 부할 수 있는 최대 권한 설정
여러 권한 ⊂ 여러 정책 ⊂ IAM 자격 증명

 

정책 구성요소

  • 명시적 허용 / 명시적 거부 중 하나 이상 포함
    명시적: 직접 기술한거 ↔ 암시적: 거부(보안측면에서)
  • version: 사용할 언어 구문 규칙
  • effect: 엑세스 허용 또는 거부 → Allow/Deny
  • action: 허용/거부하는 작업목록
  • resource: 작업이 적용되는 리소스 목록
  • condition: 정책이 권한을 부여하는 상황
IAM 권한 경계(권한을 제한) ⊂ 허용되는 작업 ⊂ IAM 자격 증명 기반 정책(모든 권한을 부여)

→ SCP와 IAM 정책에 공통적으로 포함되는 권한만 허용

 

✔️ 계층형 방어 적용

1️⃣ SCP 필터를 통과

2️⃣ 자격 증명 기반 정책 통과(허용/거부)

3️⃣ 권한 경계 필터 통과

✅ 유효 권한: 'SCP ∩ 자격 증명 기반 정책 ∩ 리소스 기반 정책'이 허용하는 권한의 교집합

네트워킹

IP 주소

  • 퍼블릭 IP 주소: 인터넷에서 직접 접근할 수 있는 IP 주소
    cf. EC2 인스턴스가 퍼블릭 서브넷에 있을 때 할당 가능, 고정되지 않으나 탄력적 IP를 사용하면 고정 IP로 유지 가능
  • 프라이빗 IP 주소: VPC 내부에서만 사용되는 IP 주소
    같은 VPC 또는 VPN을 통해 연결된 네트워크에서만 접근 가능
    • 프라이빗 IP 대역
      10.0.0.0 – 10.255.255.255
      172.16.0.0 – 172.31.255.255
      192.168.0.0 – 192.168.255.255

CIDR: IP 주소를 효율적으로 할당

  • SM 비트: 네트워크 주소
  • 나머지 비트: 호스트 주소

VPC

사용자 전용 가상 네트워크, 한 리전 내 모든 가용영역이 포함

서브넷

VPC 내 IP 주소 범위, 하나의 가용영역내에 여러 서브넷 포함 가능, 라우팅 테이블과 연결해야 함

  • 서브넷의 아웃바운드 트래픽을 IGW로 라우팅 → 퍼블릭 서브넷
  • 퍼블릭 서브넷: 양방향 트래픽 흐름 허용, 인터넷과 직접 통신할 수 있는 서브넷
    • 라우팅 테이블: 네트워크 트래픽이 전달되는 위치를 결정할때 사용되는 경로 집합
      - 퍼블릭 라우팅 테이블
      - 프라이빗 라우팅 테이블
    • 인터넷 게이트웨이: 트래픽 전송 문, VPC 내 리소스와 인터넷간의 통신 허용, VPC당 1개 IGW 가능
      - 라우팅 테이블의 대상을 제공
      - NAT로 네트워크 IP 주소 보호
    • 퍼블릭 IP 주소: 인터넷에서 엑세스할 수 있는 주소
  • 프라이빗 서브넷: 인터넷과 직접 연결되지 않는 서브넷
    • NAT: 한 IP 주소를 다른 IP 주소에 매핑, 사용되는 IP 주소 보호
    • NAT GW: 프라이빗 서브넷 인스턴스가 인터넷과 통신할 수 있도록 지원
      외부에서 프라이빗 서브넷의 리소스로 직접 접근 불가능
      퍼블릭 서브넷에 NAT GW를 두고 IGW를 통해 인터넷에 간접적으로 엑세스 가능
      → 프라이빗 서브넷 인스턴스는 NAT GW를 거쳐 인터넷에 간접적으로 접근 가능
[VPC: 10.0.0.0/16]
 ├── Public Subnet (10.0.1.0/24) ─── IGW ─── 인터넷
 │     ├── EC2 (퍼블릭 IP O)  
 │     ├── ALB (로드 밸런서)  
 │     ├── NAT Gateway (퍼블릭 IP O)  ← 퍼블릭 서브넷에 위치 
 │  
 ├── Private Subnet (10.0.2.0/24)
       ├── EC2 (퍼블릭 IP X) ──(라우트)──> NAT GW ─> IGW ─> 인터넷
       ├── RDS (데이터베이스 서버)

네트워크 엑세스 제어 목록(Network ACL)

  • 서브넷 경계에서 방화벽 역할
  • 상태 비저장(Stateless): 요청과 응답을 개별적으로 평가
  • 서브넷 단위에서 트래픽 필터링 규칙을 생성

보안 그룹(Security Group)

 

  • 인스턴스 레벨에서 트래픽을 제어하는 가상 방화벽
  • 상태 저장 (Stateful): 요청이 허용되면 응답도 자동으로 허용
  • 프로토콜 및 포트 번호를 기준으로 트래픽 필터링
  • 보안 그룹 간 참조(Inbound Source로 다른 보안 그룹 지정) 가능

기본 VPC 보안 그룹

  • 모든 인바운드(들어오는) 트래픽 차단 → 같은 보안 그룹에 속한 인스턴스 간 인바운드 트래픽만 허용
  • 모든 아웃바운드(나가는) 트래픽 허용

보안 그룹 연결(chaining): 트래픽이 상위 티어에서 하위 티어로 흐른 후 반대로 흐를 수 있도록 규칙 설정

보안그룹 NACL
탄력적 네트워크 인터페이스에 연결, 하이퍼바이저에서 구현 서브넷에 연결되어 네트워크에서 구현
허용 규칙만 지원 허용 규칙 및 거부 규칙 지원
상태 저장 방화벽 상태 비저장 방화벽
트래픽 허용 여부 결정 전에 모든 규칙 평가 트래픽 허용 여부를 결정할때 모든 규칙을 순서대로 평가
인스턴스와 연결된 경우 인스턴스에만 적용됨 여결된 서브넷에 배포된 모든 인스턴스에 적용됨

 

다중 방어 계층 인프라 설계

[VPC]
 ├── IGW ──────────> 퍼블릭 서브넷 ─> 라우팅 테이블 ─> NACL ─> 보안 그룹 ─> 인스턴스
 │
 ├── 프라이빗 서브넷 ──> NACL ─> 보안 그룹 ─> 인스턴스 (NAT GW를 통해 인터넷 접근 가능)

cf. 인스턴스 단위 방화벽 설정: 개발자, DevOps, 운영팀

cf. NACL 방화벽 설정: 네트워크 관리자, 보안 엔지니어 관리자


컴퓨팅

✔️ VM 이점

- 하드웨어 독립성

- 빠른 프로비저닝 속도

- 하드웨어 구매 대신 종량제 요금 모델

- 더 큰 스케일링 규모

- 탄력적 리소스

- 향상된 민첩성

- 유지 관리 축소

 

✔️ 컨테이너화 이점

- 플랫폼 독립성

- 일관된 런타임 환경

- 리소스 사용 증가

- 더욱 간편하고 빠른 배포

- 격리 및 샌드박싱(격리된 환경에서 코드를 실행, 관찰 및 분석하여 네트워크를 보호)

- 더 빠르게 시작하여 몇 초만에 배포

 

✔️ 서버리스 컴퓨팅 이점

- 지속적 크기 조정

- 내장형 내결함성

- 종량제 요금

- 유지 관리 불필요


EC2 인스턴스

- 전세계 리전의 물리적 서버에 호스트

- 클라우드에서 안전하고 크기 조정 가능한 컴퓨팅 용량 제공

- 수요 변화에 맞춰 컴퓨팅 용량을 추가하거나 제거

 

인스턴스 시작

- 태그: 리소스를 관리, 검색, 필터링할 수 있음

- AMI: 클라우드 가상 서버인 인스턴스를 시작하는 데 필요한 정보를 제공

- 인스턴스 패밀리: 범용, 메모리/스토리지/컴퓨팅/HPC 최적화, 가속화 컴퓨팅

- AWS Compute Optimizer: 비용 절감 및 성능 향상을 위해 워크로드에 효율적인 컴퓨팅 리소스 권장

- 키페어: 프라이빗 키(사용자가 저장)/퍼블릭 키(EC2에 저장), 보안 자격 증명 세트, 인스턴스에 연결할 때 신원 증명방법

- 테넌시: 시스템이나 서비스를 공유하는 방식
    공유 테넌시: 물리적 호스트가 공유되지만, 인스턴스 간에는 하이퍼바이저를 통한 격리 제공

    전용인스턴스: 하드웨어를 격리해 특정 AWS 계정에 전용된 물리적 호스트에서 실행

    전용 호스트: 하이퍼바이저 수준에서 물리 호스트를 직접 제어 가능

공유 테넌시 (Shared Tenancy, 기본값) 여러 고객의 인스턴스가 동일한 물리적 호스트에서 실행됨 💲저렴함 ❌ 공유됨 ❌ 직접 관리 불가능
전용 인스턴스 (Dedicated Instance) 특정 AWS 계정에 전용된 물리적 호스트에서 실행되지만, 같은 호스트에 여러 인스턴스가 있을 수 있음 💲💲추가 비용 (시간당 요금) ✅ 전용 ❌ 직접 관리 불가능
전용 호스트 (Dedicated Host) 특정 AWS 계정에 할당된 물리적 서버 전체를 직접 관리 💲💲💲 가장 비쌈 (호스트 단위 요금) ✅ 전용 (전체 물리 서버) ✅ 직접 관리 가능

 

- 배치 그룹 사용
    클러스터: 짧은 네트워크 지연시간, 높은 네트워크 처리량

    분산형: 중요한 인스턴스는 내결함성을 갖춤

    파티션:  상관 관계가 있는 하드웨어 장애 방지

- 사용자 데이터: Linux에 HTTP 서버를 설치하고 Windows에 웹 서버 역할 설치

- 메타데이터: 실행 중인 인스턴스를 구성 및 관리하는 데 사용할 수 있는 인스턴스 관련 데이터


EC2 스토리지 옵션

  1. EBS: 가용 영역에서 자동 볼륨 복제를 사용하여 블록 수준 스토리지 생성
             하나 이상의 EBS 볼륨을 단일 EC2 인스턴스에 연결, USB와 유사
             EC2 인스턴스가 종료되더라도 EBS 볼륨을 유지 가능
  2. 인스턴스 스토어: EC2 물리 서버에 내장된 로컬 디스크 기반 저장소
                                인스턴스를 중지하거나 종료하면 데이터가 삭제됨
  • 볼륨(Volume): EC2 인스턴스에 연결할 수 있는 블록 스토리지 단위, 하드디스크(SSD, HDD) 같은 저장 장치
스토리지 유형 설명 지속성(데이터 유지) 성능 요금 부과
EBS (Elastic Block Store) EC2 인스턴스에 연결하는 네트워크 스토리지 (블록 스토리지) ✅ 인스턴스 종료 후에도 데이터 유지 안정적 사용한 스토리지에 대해 과금
EBS 볼륨 EBS에서 생성한 하나의 저장소 단위 ✅ 인스턴스와 독립적 EBS 유형(GP3, io1 등)에 따라 다름 프로비저닝한 스토리지 용량 기준 과금
인스턴스 스토어 (Instance Store) 물리적 호스트의 로컬 디스크 ❌ 인스턴스 종료 시 데이터 삭제 매우 빠름 무료 (EC2 인스턴스 비용에 포함)
인스턴스 스토어 볼륨 특정 인스턴스 타입에서 제공하는 임시 로컬 스토리지 ❌ 인스턴스 중지 시 데이터 손실 SSD 기반으로 높은 IOPS 제공 무료 (EC2 인스턴스 비용에 포함)

 

EC2 요금 옵션

- 온디맨드: 약정 없이 시간당 사용하는 컴퓨팅 용량에 해당하는 요금 결제

- Savings Plans: 다양한 유연성을 갖춘 1년/3년 약정

- 스팟 인스턴스: 온디맨드 비용에서 최대 90% 할인 혜택을 받아 여분의 EC2 용량 사용 가능

요금 옵션 설명 가격 사용기간 특징
온디맨드(On-Demand) 사용한 시간(초, 분, 시간) 또는 초 단위로 요금 지불 💲💲💲 (비쌈) 자유롭게 사용 가능 초기 비용 없음, 예측 불가능한 워크로드에 적합
Savings Plans 1년 또는 3년 동안 일정 사용량 약정 💲💲 (최대 72% 할인) 1년 / 3년 약정 약정된 사용량을 초과하면 온디맨드 요금 적용
스팟 인스턴스(Spot Instances) 미사용 EC2 용량을 할인된 가격에 제공 💲 (최대 90% 할인) 언제든 중단될 수 있음 유연한 워크로드, 배치 작업에 적합

서버리스 컴퓨팅

서버를 직접 관리하지 않고 코드 실행이 가능한 클라우드 컴퓨팅 모델

AWS, Azure, GCP 등의 클라우드 서비스 제공자가 인프라를 자동으로 관리

사용자는 코드만 작성하면 되고, 필요할 때만 실행되어 비용 절감 효과

✔️ 서버리스 컴퓨팅 특징

1️⃣ 자동 확장 2️⃣ 이벤트 기반 3️⃣ 과금 방식 4️⃣ 서버 관리 불필요

AWS Lambda

서버리스 컴퓨팅 서비스
이벤트가 발생할 때만 실행되는 함수(Function-as-a-Service, FaaS)
인프라 설정 없이 코드만 업로드하면 실행 가능

✔️ Lambda 실행 구조

1️⃣ 이벤트 발생 (ex. S3 파일 업로드)
2️⃣ Lambda 함수 트리거(trigger) → 코드 실행
3️⃣ 결과 반환


실습2)

Amazon VPC 인프라 구축

  • 퍼블릭/프라이빗 서브넷 생성


인터넷 게이트웨이 생성 후 VPC 연결

  • 라우팅 테이블 생성


퍼블릭 서브넷의 인터넷 트래픽을 인터넷 게이트웨이로 라우팅

#  이제 퍼블릭 서브넷은 인터넷 게이트웨이를 통과하는 인터넷으로의 경로를 포함하므로 진짜  퍼블릭  상태


퍼블릭 보안 그룹 생성


퍼블릭 서브넷에서 Amazon EC2 인스턴스 시작


HTTP를 통해 퍼블릭 인스턴스에 연결

  • http://퍼블릭 IPv4 주소, Public IPv4 DNS로 접속


Session Manager를 통해 퍼블릭 서브넷의 Amazon EC2 인스턴스에 연결

  • 홈 디렉터리(/home/ssm-user/)로 변경하고 cURL 명령을 사용하여 웹 연결을 테스트

#  Session Manager를 사용하여 퍼블릭 인스턴스에 연결


NAT 게이트웨이 생성

 

프라이빗 서브넷에서 라우팅 테이블 구성

# 프라이빗 서브넷의 인터넷 바운드 트래픽을 동일한 가용 영역에 있는 NAT 게이트웨이로 보냄

프라이빗 라우팅 테이블을 구성

  • NAT GW 인바운드에 추가

# 프라이빗 서브넷의 인터넷 바운드 트래픽을 동일한 가용 영역에 있는 NAT 게이트웨이로 보냄


프라이빗 리소스용 보안 그룹 생성


프라이빗 서브넷에서 Amazon EC2 인스턴스 시작


프라이빗 서브넷의 Amazon EC2 인스턴스에 연결