학습자료 (Udemy)
Stephane Maarek - AWS Certified Solutions Architect Associate
AWS 클라우드 개요
AWS Regions (리전)
- 전 세계에 퍼져 있음
- 고유한 이름 가지고 있음
ex) US-East-1
- 데이터 센터의 집합
- 대부분 서비스는 특정 리전 범위(region-scoped)와 연결됨
한 리전을 다른 리전에서 다시 사용하려면 새로 서비스를 이용하는 것과 같음
AWS Region 선택하는 방법? (시험)
상황에 따라 다름 = Region 선택에 영향을 줄 수 있는 요인을 고려해 선택하기
요인)
Compliance(준수) : 정부가 데이터를 해당 국가에 두길 원함
Proximity(근접성) : Latency(지연)를 줄이기 위해 가까운 리전에 배포
Available services(이용가능서비스) : 모든 리전이 모든 서비스를 제공하지 않음
Pricing(가격) : 서비스 가격 페이지를 참고해 가격 비교하기
AZ(Availability Zone)
- 리전(Region)에 실제로 포함되는 구성요소
(각 리전에는 최소 3개, 최대 6개의 AZ를 가짐)
- 각 AZ는 하나 이상의 독립적인 데이터 센터로 구성 : redundant power, networking, connectivity를 가짐
ex) ap-southeast-2a (2개의 데이터 센터), ap-southeast-2b, ap-southeast-2c
- 각 AZ는 재해로부터 영향을 덜 받도록, 서로 분리되어 있음
ex) ap-southeast-2a에 문제가 발생해도 다른 AZ에 연쇄적으로 번지지 않음
- 데이터 센터와 AZ가 고대역폭, 초저지연 네트워킹으로 연결되어 있음
Points Of Presence(Edge Locations)
- Global Section에서 알아볼 주제
- AWS는 90개 도시에서 400개 이상의 Points Of Presence를 운영
- 콘텐츠를 전달할 때 최저 지연 시간으로 사용자에게 전달됨
IAM & AWS CLI
IAM : 사용자, 그룹, 정책
IAM = Indetity and Access Management
- IAM은 '글로벌 서비스' -> 사용자를 생성하고 그룹에 배치하므로
- 루트 계정은 기본으로 생성되고, 그 외 사용자계정을 생성할 때만 사용되어야함
- 하나의 사용자 = 조직 내의 한 사람
- 사용자들을 그룹(조직)으로 묶을 수 있음
- 그룹은 오직 사용자만 배치할 수 있음 (다른 그룹 포함 X)
- 한 사용자가 다수의 그룹에 속할 수 있음
- 그룹에 포함되지 않은 사용자도 존재함
- Q. 사용자와 그룹을 생성하는 이유? = AWS 계정을 사용하도록 허락하기 위해 (Permission, 권한)
- 사용자들의 권한을 정의 = IAM 정책(IAM Policy)
- JSON 문서로 지정
- 특정 사용자, 특정 그룹에 속한 모든 사용자들이 어떤 작업 권한을 가지고 있는지 적어 놓은 문서
- 모든 사용자들에거 모든 권한을 부여하지 않는 '최소 권한 원칙 적용함 (사용자가 꼭 필요로 하는 것 이상의 권한을 주지 않음)
IAM Policy
- 사용자가 그룹에 속해 있든, 아니든 원하는 사용자에게 인라인 정책 적용 가능
- 구조 & 명명법
- Effect, Principal, Action, Resource (시험)
"version": "2012-10017", // 정책 언어 버전
"Id" : "S3-Account-Premissions", // 정책 식별 ID (선택)
"Statement" :[ // 문장은 하나일 수도, 여러 개일 수도
{
"Sid" : "1", // 문장 ID = 문장의 식별자 (선택)
"Effect" : "Allow", // 문장이 특정 API에 접근하는 것을 허용(Allow)/거부(Deny)할지에 대한 내용
"Principal" : { // 특정 정책이 적용될 사용자/계정/역할
"AWS" : ["arn:aws:iam:12312"]
},
"Action" : [ // effect에 기반해 허용 및 거부되는 API 호출의 목록
],
"Resource" : [], // 적용될 action의 리소스 목록
"Condition" : // 문장이 언제 적용될지 결정
}
]
IAM - 사용자, 그룹이 손상되지 않도록 보호하기
**방법1)
- Password Policy
- 강력한 패스워드 = 계정 보안 강화됨
- AWS는 다양한 옵션으로 비밀번호 정책 설정 가능
- 최소 비밀번호 길이 설정
- 특정 문자 유형 요구 ex) 대문자, 소문자, 숫자, 특수 문자 등
- IAM 사용자들이 자신의 패스워드를 변경하도록 허용/허용X 할 수 있음
- 일정 시간 이후에 사용자에게 패스워드 변경 요구 (패스워드 만료)
- 패스워드를 변경할때, 이미 가지고 있는 또는 이전에 사용한 패스워드로 변경 불가능하게
방법2)
- Multi Factor Authentication - MFA
- AWS에서 MFA를 사용하는 것이 필수이며 매우 권장됨
- 최소한 루트 계정과 모든 IAM 사용자를 보호하고 싶을 것임
- MFA = 우리가 알고 있는 패스워드 + 우리가 소유한 보안 장치 조합
- AWS에서 MFA 장치 옵션 (시험)
- Virtual MFA device(가상 MFA 장치)
: 한 번에 하나의 전화에서만 작동하거나 인증을 요구하는 구글 인증기 / 단일 장치에서 여러 토큰 지원
: 루트 계정 , IAM 계정 등 다른 IAM 사용자를 가질 수 있음
- Universal 2nd Factor(U2F) Security Key(UTF 보안 키)
: 물리적인 장치
: 유비코의 유비키는 AWS의 타사 제품으로 단일 보안 키를 사용해 여러 루트 및 IAM 사용자를 지원함(= 사용자 수만큼 키가 필요하지 않음)
- Hardware Key Fob MFA Device
: 젬알토
- Hardware Key Fob MFA Device for AWS GovCloud(US)
: 미국 정부의 클라우드 AWS GovCloud를 사용하고 있다면, SuperPassID에서 제공하는 보안 토큰이 있음
AWS 액세스 키, CLI & SDK
- AWS에 액세스 하는 방법
- AWS Management Console(= 관리 콘솔)
: 사용자 이름, 패스워드 + MFA로 보호됨
- AWS Command Line Interface(= 명령줄 인터페이스)
: 액세스 키(자격 증명)으로 보호됨
- AWS Software Devloper Kit(SDK = 소프트웨어 개발자 키트)
: AWS로부터 애플리케이션 코드 내에서 API를 호출할 때 사용하는 방식
: Cmd와 같은 액세스 키로 보호됨
- 액세스 키 생성 방법
- 관리 콘솔을 사용해 생성 가능
- 사용자들이 자신들의 액세스 키를 직접 관리함
(사용자에게 액세스 키 = 패스워드 = 공유 절대 X)
- Access Key ID = 유저 이름
- Secret Access Key = 패스워드
- CLI
- 명령어줄을 사용해 AWS 서비스들과 상호작용할 수 있도록 해주는 도구
- 사용하는 이유? 모든 명령어가 aws로 시작하기 때문
- CLI를 사용하면 AWS 서비스의 공용 API로 직접 액세스 가능
- CLI를 통해 리소스를 관리하는 스크립트를 개발해 일부 작업 자동화 가능
(콘솔 대신 CLI로 사용하기도 함)
- SDK
- 특정 언어로 된 라이브러리 집합
- 프로그래밍 언어에 따라 개별 SDK 존재
- AWS 서비스나 API에 프로그래밍을 위한 액세스가 가능하도록 해줌
- 단, SDK는 cmd에서 사용하는 것이 아닌 코딩을 통해 애플리케이션에 심어두어야 함
= 애플리케이션 내에 자체적인 AWS SDK가 있는 것
- 다양한 프로그래밍 언어 지원
: js, python, php, net, ruby, java, go, node.js
: mobile sdk(android, ios)
: ios device sdks (embedded c)
IAM Role(역할)
- 어떤 서비스는 우리 계정에서 수행해야하므로, AWS 서비스에 권한을 부여해야함
- 실제 사람이 사용하도록 만든 룰이 아니라 AWS 서비스에 의해 사용되도록 만들어짐
- Role 종류
- EC2 Instance Roles
- Lamda Function Roles
- Roles for ColudFormation
IAM 보안 도구
- IAM Credentials Report (IAM 자격 증명 보고서)
- 계정 수준
- 보고서는 계정에 있는 사용자와 다양한 자격 증명의 상태를 표현함
- IAM Access Advisor (IAM 액세스 관리자)
- 사용자 수준
- 사용자에게 부여된 서비스의 권한과 해당 서비스에 마지막으로 액세스한 시간이 보임
- 최소 권한 원칙을 따랐을 때 매우 도움되는 정보
- 해당 도구를 사용해 어떤 권한이 사용되지 않는지 볼 수 있어 사용자의 최소 권한 원칙을 지킬 수 있음
IAM 가이드 라인
- AWS 계정을 설정할 때를 제외하고 루트 계정을 사용하지 말기
- 한 명의 AWS 사용자 = 한 명의 물리적 사용자
- 사용자를 그룹에 할당하고 그룹에 권한을 할당해 보안이 그룹 수준에서 관리될 수 있도록 할 수 있음
- 강력한 비밀번호 정책을 만들어야함 (다중 인증 or MFA)
- AWS 서비스에 권한을 부여할 때, 역할을 생성하고 사용하는 것이 좋음
- CLI/SDK 에서 액세스 키를 사용해야함
- 계정 권한을 감시하기 위해 IAM 자격 증명 보고서, IAM 액세스 관리자 기능 사용할 수 있음
- 절대 IAM 사용자 & 액세스 키 공유하지 말기!!!