AWS 화이트페이퍼 Well-Architected 프레임워크
Well Architected Framework와 일반 지도 원칙
- 클라우드에서 좋은 아키텍처를 갖추려면 수용량을 추측하는 걸 그만둬야 한다.
- 대신 오토 스케일링을 사용해 시스템의 실제 수요에 맞춰서 확장해야 함
- 시스템 테스트를 프로덕션 규모로 수행해야 한다.
- 아키텍처 실험을 더 쉽게 수행하려면 자동화도 중요하다.
- 변화하는 요구 사항에 대응할 수 있게 설계해서 아키텍처가 진화하게 만들어야 한다.
- 데이터를 사용해 아키텍처를 구동할 수도 있다.
- Game Days도 활용할 수 있다.
- 깜짝 할인 기간 동안 애플리케이션을 시뮬레이션하면 시스템에 부하가 생기는 것처럼 일부러 부하를 줌으로써 잘 돌아가고 있는지 확인하는 것
클라우드 사용 시의 설계 원칙과 모범 사례
- 확장성: 수직 확장성과 수평 확장성
- 일회용 리소스: 서버 생성 및 삭제가 쉬워야 한다.
- 간단히 지웠다가 또 구성했다가 할 수 있어야 함
- 클라우드에서는 인프라를 포함한 모든 것이 일회용이어야 함
- 모든 데이터와 구성이 백업되도록 만들어서 전체 아키텍처를 빠르게 재구성할 수 있도록 해야 함
- 자동화: 서버리스, 서비스형 인프라, 오토 스케일링 등의 원칙에 따른다.
- Monolith 애플리케이션이 하나 있다고 생각해보면 이것저것 더해지면서 점점 더 규모가 커질 것이다.
- 더 작고 느슨하게 결합한 컴포넌트로 만드는 편이 좋음
- 한 컴포넌트에 발생한 변경이나 실패가 다른 컴포넌트에 연쇄되어선 안됨
- 서버가 아니라 서비스를 생각하기
- EC2 만을 사용하지 말 것
- 관리형 서비스, 데이터베이스, 서버리스 등을 사용
Well-Architected 프레임워크의 6대 원칙
- 운영 우수성
- 보안
- 안정성
- 성능 효율성
- 비용 최적화
- 지속 가능성
이 6대 원칙을 기둥으로 삼아 AWS에서 우수한 아키텍처를 구축하자는 의미로 서로 타협하고 절충하며 균형을 맞추는게 아니라 시너지 효과를 내야 한다. 운영 우수성이 확인된다면 비용 최적화에도 도움이 되는 것처럼 말이다.
1. Operational Excellence (운영 우수성)
- 시스템을 실행 및 모니터링하고, 비즈니스 가치를 제공하며 지원 프로세스 절차를 지속적으로 개선하는 능력이다.
운영 우수성의 설계 원리
- 작업을 코드로 수행하는 것이다.
- 인프라를 코드로 사용하는 것을 의미
- ex) AWS CloudFormation
- 실패할 경우 되돌릴 수 있도록 작고 되돌릴 수 있는 변경을 자주 수행해야 한다.
- 운영 절차를 자주 개선하고 모든 팀원이 새로운 운영 절차를 숙지하도록 해야 한다.
- 실패를 예상하되, 실패할 경우 실패로부터 배워야 한다.
- 관리형 서비스를 사용하여 운영 부담을 줄이고 실행 가능한 통찰력을 위해 관찰 가능성을 구현한다.
AWS 서비스 측면에서의 운영 우수성
- Prepare(준비)
- 준비는 기본적으로 운영 우수성을 갖기 위해 모든 것을 준비하는 방법임
- 런북을 사용해야 하고 좋은 인프라 표준을 갖추고 있어야 함
- 실행 배포 및 모의 배포와 같은 작업을 수행해야 함
- CloudFormation: 코드로서의 인프라로 준비할 수 있음
- Config: CloudFormation 템플릿의 규정 준수 여부를 평가할 수 있음
- Operate(운영)
- 운영 측면에서는 빨리 작업해야 하기 때문에 가능한 한 많이 자동화해야 함
- 수동 프로세스를 피하는 것이 좋음
- CloudFormation
- Config
- CloudTrail: 모든 API 호출을 추적하고 의도적으로 수행된 것이나 수동으로 변경된 것이 없는지 확인
- CloudWatch: 사용자의 스택의 시간 경과에 따른 성능을 모니터링하고 스택을 작동해야 하는 경우 어떤 작업을 수행해야 하는지 확인
- X-Ray: HTTP 요청을 추적하고 올바르게 작동하는지 확인할 수 있으며, 제대로 작동하지 않을 경우 문제가 발생한 위치를 알려줌
- Evolve(진화)
- 시간이 지남에 따라 인프라를 발전시켜야 함
- CloudFormation: 전체 운영 우수성 원칙의 핵심
- CI/CD 도구들: 빠르게 반복하고, 빠르게 자주 배포하고, 작은 변경 사항을 배포할 수 있도록 하여 운영 우수성에 기여
- CodeBuild, CodeCommit, CodeDeploy, CodePipeline
시험을 위해선 위의 내용을 이해하거나 기억할 필요가 없고, 이러한 서비스를 모두 기억할 필요도 없으며, 특정 서비스가 정확히 운영상의 원칙에 해당된다는 것도 아니다.
단지 이러한 모든 서비스가 어떻게 운영 우수성을 촉진하기 위한 시너지 효과로 사용될 수 있는지 알기 위함이다.
2. Security
- 보안은 정보, 시스템, 자산을 보호하는 동시에 위험 평가 및 완화 전략으로 사업의 가치를 전달하는 능력을 포함한다.
- 강력한 보안은 다음과 같이 설계할 수 있다.
- 자격 증명 기반을 구현해야 한다.
- 사용자 계정 관리를 중앙 집중화
- 권한을 최소화 해야 하는데 IAM이 최소 권한을 갖도록 하는 서비스 중 하나가 될 수 있음
- 추적 기능 활성화
- 모든 로그와 지표를 확인하고 저장해서 이상이 있을 때마다 자동으로 대응하고 조치를 취함
- 모든 계층에 보안 적용
- 한 계층에 장애가 발생하면, 다음 계층이 이어받는 것
- 엣지 네트워크, VPC 서브넷, 로드 밸런서와 보유한 모든 EC2 인스턴스와 패치한 운영체제 애플리케이션이 모두 최신인지 확인해야 함
- 보안 모범 사례 자동화
- 전송 및 저장 중 데이터 보호
- 암호화를 활성화 하고, 늘 SSL을 사용하고 토큰화와 액세스 제어를 사용해야 하는 것
- 사람들이 데이터에 접근하지 못하도록 해야 함
- 데이터에 직접 액세스하거나 수동으로 처리할 필요성을 줄이거나 없앨 수 있음
- 보안 이벤트 대비
- 사고 대응 시뮬레이션을 실행하고 자동화된 도구를 사용하여 탐지, 조사 및 복구 속도를 높여야 함
AWS 서비스 측면에서의 보안
- 자격 증명 및 액세스 관리
- 임시 자격 증명을 생성:
IAM, STS
- 다요소 인증 토큰:
MFA token
- 여러 AWS 계정을 중앙에서 관리:
Organizations
- 탐지 제어
- 규정 준수:
Config
- 이상한 API 호출 탐지:
CloudTrail
- 표준에서 벗어나는 지표와 내용 확인:
CloudWatch
- 인프라 보호
- 디도스 공격에 관한 1차 방어선:
CloudFront
- 네트워크 보호 및 올바른 ACL 설정:
VPC
- 디도스 공격으로부터 AWS 계정 보호:
Shield
- 웹 애플리케이션 방화벽:
WAF
- EC2 인스턴스의 보안 확인:
Inspector
- 데이터 보호 (모든 관리형 서비스에는 데이터 보호 기능이 있음)
- 저장 데이터 모두 암호화:
KMS
- 수 많은 암호화 메커니즘을 가지고 있음:
S3
SSE-S3, SSE-KEM, SSE-C
- 클라이언트 측의 암호화
- 버킷 정책
- HTTPS 엔드 포인트의 노출 활성화:
ELB
- 저장 데이터를 암호화하고 SSL 기능이 있음:
EBS, RDS
- 인시던트(Incident) 대응
- 1차 방어선:
IAM
- 문제가 발생한 계정이 있으면 해당 계정을 삭제하고 권한을 부여하지 않음
- 누군가 전체 인프라를 삭제했을 때 실행 상태로 되돌림:
CloudFormation
- 누군가 리소스를 삭제한 경우에 대한 인스턴스 대응을 자동화:
CloudWatch Events
3. Reliability
- 안정성은 인프라나 서비스 중단에서 복구하고 수요를 충족하기 위해 컴퓨팅 리소스를 동적으로 확보해 잘못된 구성이나 일시적 네트워크 문제와 같은 중단 문제를 완화시키는 것이다.
설계 원칙
- 복구 절차 테스트
- 다양한 장애를 자동으로 시뮬레이션 하거나 이전에 장애를 일으킨 시나리오를 다시 생성
- 장애 발생 시 자동 복구
- 수평적 확장을 통한 전체 시스템 가용성 향상
- 요청을 여러 개의 소규모 리소스에 분산하여 공통 장애 지점을 공유하지 않도록 함
- 용량 추측을 그만하자
- 오토 스케일링을 사용하면 언제나 올바른 사용량을 가질 수 있음
- 자동화 관리로 변경
- 모든 것을 자동화로 변경해야 하며 이는 애플리케이션의 안정성이나 롤백이 가능한지 확인하기 위한 것
AWS 서비스에서의 안정성
- Foundations
- 안정성의 기반:
IAM
- 네트워크의 기반:
VPC
- 서비스 제한 설정이 적합한지 확인:
Service Limits
- 서비스 제한을 보는 방식이나 강력한 기반을 얻기 위해 다른 항목을 살펴보는 방식:
Trusted Advisor
- 변경 관리
- 애플리케이션의 인기에 따른 자동 스케일:
Auto Scaling
- 데이터베이스와 애플리케이션의 지표를 확인하여 안전성을 갖도록 함:
CloudWatch
- API 호출 추적에 안전한지에 관한 것:
CloudTrail, Config
- 장애 관리
- 장애가 발생한 경우 애플리케이션을 복구할 수 있는지 확인:
Backups
- 한 번에 전체 인프라를 다시 생성하는 것:
CloudFormation
- 모든 데이터를 백업:
S3
- 장기적으로 사용하지 않는 아카이브에 관한 것:
S3 Glacier
- 안전성이 있고 고가용성의 글로벌 DNS 시스템을 사용:
Route 53
Reference