1. AWS 이론 학습
[AWS 클라우드]
- 장점 : 탄력성(현재 상황에 맞는 인프라 용량을 가질 수 있음), 속도 및 민첩성(인프라 구축에 들어가는 시간 절약), 세계화(글로벌 확장이 용이), 종량제 비용(운영비용, 즉 사용하는 만큼만 돈이 나간다), 안전함(AWS 클라우드 보안은 안전)
AWS account 내에 정보가 들어가게 된다.
AWS IAM(Identity Access Management) 사용자는 운영자이다. IAM 계정에 의해 다른 사용자는 감시된다.
계정 ID에는 모든 자산이 포함되며 사용자는 개별 항목에 엑세스 할 수 있다.
누가 엑세스할 수 있는지를 제어하는 개념 : 공유책임모델
AWS는 클라우드 보안을 책임지고, 고객은 클라우드에서 보안을 유지할 책임이 있다. - 집을 연상하기
창문이 제대로 닫히는지 등은 목수의 일이지만 누가 들어올 수 있는지 선택하는 것은 집주인의 역할
[보안설계원칙]
- 특성 : 최소권한 원칙(피해 영향을 줄이는 좋은 방법), 책임 추적성(모니터링, 로그 분석), 모든 계층에 대한 보안(방화벽만으로는 부족), 보안 자동화(사람의 실수로 인한 취약점 방지), 전송 중인 데이터와 저장된 데이터 보호(암호화, 엑세스 제어), 보안 이벤트에 대비, 공격 영역 최소화(AWS Shield 등)
[보안태세]
- 인증(자격 증명) : 사용자가 누구인지 확인하는 절차
- 인가(권한 부여) : 무엇을 할 수 있고, 무엇을 할 수 없는지
- 모니터링 : Amazon CloudWatch, AWS CloudTrail 등
- 암호화 : AWS에서는 다양한 키 관리 솔루션(AWS Key Management Service)을 제공
ex) 마스터 키가 안전하게 보관되고 있나요? -> 네 KMS을 사용했습니다. 증명은 CloudTrail 로그를 확인해보세요.
- 전송 중 보안 : AWS에서의 모든 커뮤니케이션은 TLS 또는 IPSec으로 보호된다. 인증서 관리 프로그램
- VPC(Virtual Private Cloud) : 여러분의 콘텐츠를 다른 사람과 논리적으로 격리시킬 수 있다.
[AWS Well-Architected Framework]
- 6가지 설계 원칙
- 운영 효율성, 보안, 안정성, 성능 효율성, 비용 최적화, 지속 가능성
- 보안 원칙(5가지 영역) : 권한 관리 및 접근 제어, 로깅 및 모니터링, 데이터 보호, 인프라 보안, 사고 대응
- 모범 사례를 기반으로 워크로드 개선을 위한 권장사항 제공
- 무료이며, 워크로드 정의 후 WA Framework 객관식 질문에 대해 답변하고 위험 식별
Ⅰ. 계정, 권한
[AWS IAM(Identity Access Management)]
- AWS 전체의 권한 통제 시스템(인증과 인가 모두 포함)
- IAM 사용자
> 실사용자 기준으로 통제할 때 사용
> 상시 자격 증명
> IAM 그룹은 IAM 권한을 한꺼번에 주기 위한 용도
- IAM 역할(Role)
> 인스턴스 또는 AWS 서비스를 위한 임시 자격 증명
> 권한 없는 사용자를 위한 임시 자격 증명(정해진 시간 지나면 자동으로 역할 해제됨)
> AWS 서비스 권한을 AD 사용자 속성과 매핑 가능
- IAM 정책(Policy)
> 모든 AWS 서비스는 접근제어 정책(Policy)을 기반으로 인가됨
> 매 API 호출 시 적용된 정책을 통해 인가 수행
> 원칙적으로 deny이며, 정책에 따라 allow됨
> Identity-based 정책 : 요청하는 주체에 연결되므로 principal을 따로 지정하지 않음
> Resource-based 정책 : principal 필수
- IAM 정책과 역할의 차이
> 정책은 사용자, 그룹, 역할, 서비스에 부여되는 것(회수 전까진 지속적으로 유지)
> 역할은 어떤 것을 할 수 있는 역할을 할당하는 것
- 자격 증명 보고서(Credential Report) 받기
> 계정의 모든 사용자와 다양한 자격 증명 상태 나열
> 액세스 키 교체, 마지막 비밀번호 변경일, MFA 활성화 여부 등 확인 가능
- IAM Policy Simulator로 안전하게 IAM 정책 사전 검증 가능
<IAM 정책 구성요소>
- Effect: 명시된 정책에 대한 허용 또는 차단(Allow, Deny)
- Principal: 접근을 허용 또는 차단하고자 하는 대상(리소스에 액세스하려는 엔터티를 의미)
- Action: 허용 또는 거부되는 특정 작업(s3:ListBucket)
- Resource: 요청의 목적지가 되는 서비스(*, arn:aws:~~)
- Condition: 명시된 조건 유효하다고 판단될 수 있는 조건
- 특정 리전에서만 권한 부여할 경우
> Effect : Deny
> Condition : StringNotEquals {특정 리전}
> 해당 리전과 일치하지 않는 경우 거부됨
※ 언제나 명시적인 거부가 우선 적용됨!!!
> ex) redstone 사용자에게 AdministratorAccess 정책 주어져있고, redstone은 others 그룹에 속해있을 때, others 그룹은 MFA 없는 경우 EC2 삭제 금지 정책이 적용되어 있다. redstone 사용자가 EC2 삭제하려고 하면 성공하는데, 그 이유는 AdministratorAccess 정책 때문이 아니라 명시적 거부 정책 먼저 적용되나, MFA가 걸려있기 때문에 성공한거다.
<Role Switch(역할 전환)>
- 필요 : 계정 ID, 역할 ARN, STS:AssumeRole
1) 새로운 역할(Role) 구성
> redstone이라는 사용자의 계정 복사
> AWS 관리 콘솔 -> IAM -> 역할 -> 역할 만들기
> "다른 AWS 계정" 선택하고 redstone 계정 ID 입력
> 원하는 권한 정책 연결하고 역할 이름 정의
> 생성된 역할 확인하고 역할 ARN 복사
2) 위임을 위한 새로운 정책 생성
> AWS 관리 콘솔 -> IAM -> 정책 -> 정책 생성
> 서비스 : STS
> 작업 : Assume
> 리소스 : 앞서 복사해놓은 역할 ARN
> 정책 이름 정의
3) 사용자 또는 그룹에 권한 추가
4) 사용자 재로그인 및 역할 전환 선택
<IAM 사용자 액세스 키 교체 방법>
- AWS API 사용하여 교체
1) 첫번째 액세스 키 아직 활성 상태인 동안 두번째 액세스 키 생성
> CreateAccessKey
2) 새 엑세스 키를 사용하도록 모든 애플리케이션 업데이트
> UpdateAccessKey
3) 첫번째 액세스 키가 아직 사용 중인지 확인
> GetAccessKeyLastUsed
4) 즉시 삭제보다는 첫번째 액세스 키 사용 중지
> UpdateAccessKey (옵션 --status Inactive)
5) 이상이 없는지 일정 시간 확인 후 첫번째 액세스 키 삭제
> DeleteAccessKey
<최소권한을 위한 서비스>
- Access Advisor로 어떤 권한을 언제 마지막으로 사용했는지 확인 가능하므로 미사용 권한 삭제
- IAM Access Analyzer로 권한 과도하게 주어진 리소스 판별 가능
> AWS CloudTrail 로그를 분석하여 특정 시간 내 사용자가 사용한 서비스 및 작업을 식별하여 정책을 생성
[AWS Organizations]
- 모든 AWS 계정의 중앙 집중식 관리
- 모든 멤버 계정에 대한 통합 결제
- 계정의 계층적 그룹화 : 계정을 조직 단위(OU)로 그룹화하고 OU마다 다른 액세스 정책 연결 가능
- 각 계정이 액세스할 수 있는 AWS 서비스 및 API 작업 제어 정책 설정 가능
- 조직 계정의 리소스에 대해 자동 백업 구성 가능 : 자동으로 AWS Backup 계획 구성 및 적용
- "Condition" : { "aws : PrincipalOrgID" : ["O-YYY-YYY"] }
> 해당 리소스에 액세스하는 보안 주체가 조직의 계정에 속하는지 확인하는 조건(S3에 액세스 제한 걸려면 S3 버킷 정책에 추가)
- SCP(서비스 제어 정책) : 조직에서 권한을 관리하는데 사용할 수 있는 조직 정책 유형
[Amazon Cognito]
- 웹 및 모바일 앱에 대한 인증, 권한 부여, 사용자 관리 제공
- 주요 구성 요소 : 사용자 풀, 자격 증명 풀
> 사용자 풀(user pool) : 여러가지 방법의 로그인 지원
> 자격 증명 풀(identity pool) : 특정 사용자의 고유한 자격 증명을 만들고 사용자에게 AWS 서비스에 대한 접근권한 부여 가능
[AWS Directory Service]
- 디렉터리 설정 또는 AWS 리소스를 기존 온프레미스 Microsoft Active Directory(AD)에 연결할 때 사용
- 주요 사용처
> 사용자 및 그룹 관리
> 애플리케이션 및 서비스에 SSO 제공
> 그룹 정책 생성 및 적용
- 트러스트 : 도메인 간 관계로, 한 도메인의 사용자가 다른 도메인 컨트롤러에서 인증될 수 있도록 함
> 단방향 트러스트 : 트러스트의 한쪽에서만 인증 참조를 허용함
> 양방향 트러스트 : 양쪽에서 인증 참조를 허용함
Ⅱ. Storage
[AWS EC2]
- AWS 클라우드에서 확장 가능한 컴퓨팅 용량을 제공
- 다양한 요구에 맞춰 광범위한 인스턴스 구성을 제공
- 최대절전모드(hibernate) : 절전 후 필요할 때 다시 가동시킬 수 있음
- EC2는 EBS보다 높은 IOPS(속도)
> 버퍼, 캐시와 같이 자주 변경되는 임시 데이터나 여러 인스터스 상에서 복제되는 데이터 저장에 적합
<AWS EBS 및 EC2 암호화 방법>
> 암호화된 EBS 볼륨 생성하면 Amazon EBS는 볼륨 암호화를 위해 선택한 KMS key를 지정하여 AWS KMS에 GenerateDataKeyWithoutPlaintext 요청 전송
> KMS는 새 데이터 키 생성하고 지정된 KMS key로 암호화한 다음 암호화된 데이터 키를 EBS로 전송하여 볼륨 메타데이터와 함께 저장
> EC2는 Decrypt 요청과 함께 암호화된 데이터 키를 KMS로 전송
> KMS는 암호화된 데이터 키를 해독한 다음 해독된 데이터 키를 EC2로 전송
> EC2는 데이터 키를 사용하여 디스크 I/O를 EBS 볼륨으로 암호화(데이터 키는 EBS 볼륨이 EC2 인스턴스에 연결되어 있는 한 메모리에 유지)
<EC2에서 암호화된 EBS 볼륨 연결 시 EC2 인스턴스 시작 불가 문제>
- 상황 : EC2 권한 있는 IAM 사용자가 유지 관리 작업을 위해 EC2 인스턴스 중지 후 다시 시작할 수 없는 경우
- 원인 : EC2 리소스에 대한 액세스 권한이 있지만 EC2가 KMS key에 액세스 허용할 권한이 없음
> kms:CreateGrant 권한 부여
> 다만, 최소 권한 원칙 적용을 위하여 조건 설정
> kms:GrantIsForAWSResouce : true
<EC2 Auto Scaling>
- EC2 Auto Scaling은 애플리케이션 로드를 처리하는데 사용할 수 있는 EC2 인스턴스의 정확한 수 확보에 도움됨
- Auto Scaling 그룹이라는 EC2 인스턴스 모음 생성
> 최소 및 최대 인스턴스 수 지정 가능
- 확장 : 트래픽 변경이 발생하였을 때 Auto Scaling 그룹의 용량 조정
> SQS 대기열의 크기(시스템 로드 변경)에 따라 조정 가능
<EC2 인스턴스 유형>
- 온디맨드 인스턴스 : 사용한 만큼 지불
- 예약 인스턴스 : 선불(1년 또는 3년)
- 정기 예약 : 1년 기간 동안 지정된 시작 시간과 기간으로 매일, 매주, 매월 반복되도록 예약된 용량(현재는 제공X)
- 스팟 인스턴스 : 최대 90% 할인, 가장 저렴
- 스팟 플릿 : 스팟 인스턴스 + 온디맨드
- 전용 인스턴스 : 인스턴스가 전용 하드웨어에서 실행되어 물리적 격리
- 온디맨드 용량 예약 : 특정 가용 영역에 대해 원하는 기간만큼 용량 예약
- EC2 전용 호스트
> 호스트 단위 결제, 소켓 및 물리 코어 수 표시 지원, 시간이 지나도 계속 같은 물리적 서버에 인스턴스 배포 가능
> 기존 서버 한정 소프트웨어 라이선스 사용 가능(Microsoft, Oracle 등)
* EC2 전용 인스턴스와의 차이점 주의
<프라이빗 서브넷에 있는 EC2 인스턴스 인터넷을 통해 액세스 방법>
- 프라이빗 서브넷에 있는 EC2 인스턴스와 ELB 연결하려면 프라이빗 서브넷과 동일한 가용 영역에 퍼블릭 서브넷 생성 -> 퍼블릭 서브넷을 ELB와 연결
<EC2 배치그룹(전략)>
- 클러스터 : 동일한 AZ, 동일한 랙 안에 인스턴스 배치, 낮은 지연율과 높은 네트워크 처리량 필요한 애플리케이션에 적합
- 분산 : 여러 AZ에 분산 배치, 고가용성에 적합
- 파티션 : 여러 AZ 안에 파티션을 두고 파티션 안에 여러 인스턴스를 배치
<EC2 수명 주기 링크(후크)>
- 해당 기능 이용 시, Auto Scaling 인스턴스 수명 주기의 이벤트를 인식하고 해당 수명 주기 이벤트가 발생할 때 사용자 지정 작업을 수행 가능
[Amazon EBS(Elastic Block Storage)]
- EC2에서 사용하도록 설계된 고성능 블록 스토리지 서비스
- 단일 AZ에 중복 저장
- S3나 EFS와 달리 독립형 스토리지가 아님(EC2와 함께 사용)
- EC2 인스턴스용 영구 스토리지
> 인스턴스의 중지나 종료에 상관없이 데이터가 유지
- 데이터에 빠르게 액세스하고 장기적으로 지속해야 하는 경우 적합(단일 인스턴스에 대한 고성능 스토리지 서비스)
- FSR(빠른 스냅샷 복원)
> 생성 시 완전히 초기화된 스냅샷에서 불륨 생성 가능
> 액세스할 때 I/O 작업의 대기시간 제거됨
- EBS는 고성능, 대신 고가용성은 S3
- EBS는 다중 AZ에 있는 EC2 인스턴스에 탑재 불가(공유 불가)
[Amazon EFS(Elastic File Storage)]
- 파일 기반 저장 서비스
- AWS 클라우드 및 온프레미스 서버의 컴퓨팅 인스턴스와 함께 사용할 수 있는 공유 파일 스토리지 제공
- 여러 AZ에 중복 저장
- 대용량 데이터 저장에 적합하지 않음(자주 액세스하는 파일 저장)
- 공유 파일 액세스가 필요한 애플리케이션은 EFS를 사용하여 다수의 클라이언트에게 제공할 때 적합
- 자동 고성능 확장을 통해 여러 EC2 인스턴스에 대한 공유 파일 스토리지 옵션이 필요할 때 적합
- 가용성이 높고 내구성 있는 위치에 저장해야 하는 데이터에 적합
- EFS 스토리지 클래스
> Standard : 자주 액세스하는 파일에 사용
> Standard-IA : 매일 액세스하지 않는 파일
- 수명주기 관리정책 있음(1, 7, 14, 30, 60, 90일 단위)
> Standard에서 IA로의 데이터 이동
- Linux 전용, 기본적으로 Windows 운영체제와 호환되지 않음
> Windows에서 파일 공유하는 경우에는 Amazon FSx 사용
* 파일 시스템 언급되면 EFS, FSx 먼저 생각하기
- 여러 다중 AZ에 있는 EC2 인스턴스 간에 EFS 공유 가능
- 캐싱 기능 없으므로 파일 액세스 시간 증가될 수 있음
[Amazon FSx]
- Windows에서 파일 공유하는 경우 사용(EFS와 유사한 기능)
- Amazon FSx for Lustre : Lustre 파일 시스템의 확장성 및 성능을 가진 완전관리형 공유 스토리지
[Amazon S3(Simple Storage Service)]
- 파일 서버의 역할을 하는 서비스(웹에서 사용 가능한 객체 저장소)
- 여러 AZ에 중복 저장
- 저장 용량이 무한대이고 파일 저장에 최적화되어 있음(용량 추가하거나 성능 높이는 작업 불필요)
- EC2나 EBS보다 비용 저렴
- AWSLogs 폴더 들어가보면 AWS CloudTrail 로그가 S3 버킷으로 이동하는 것을 확인 가능
- 서버측 암호화 : 데이터를 받는 애플리케이션 또는 서비스에 의해 대상에서 데이터를 암호화하는 것, 3가지 옵션이 있음
> SSE-S3 : S3 관리형 키를 사용, 각 개체는 고유한 키로 암호화
> SSE-KMS : KMS에 저장된 KMS 키 사용하여 암호화
> SSE-C : 고객 제공 키를 사용하여 암호화
- 전송 중 암호화와 유휴 시 암호화 제공
> 전송 중 암호화 : HTTPS를 의미, aws:SecureTransport : ture
> 유휴 시 암호화 : S3 버킷에 대한 기본 암호화 설정
- S3 버킷에 대한 프라이빗 네트워크 연결 필요한 경우
> S3 버킷에 대한 게이트웨이 VPC 엔드포인트 생성(인터넷 연결 없이 가능 -> 비용 절감)
- 정적 웹 사이트를 호스팅하는 데 적합
> HTML, CSS, 클라이언트측 JavaScript 및 이미지는 모두 정적 리소스에 해당
> S3 버킷에서 웹 사이트 호스팅하면 컴퓨팅 리소스에 대한 비용 지불할 필요 없어서 일반적으로 EC2 인스턴스에서 호스팅하는 것보다 비용 효율적
- S3 버킷 우발적인 삭제 방지 방법
> 버전 관리 활성화(이전 버전 유지를 위함)
> MFA 삭제 활성화(삭제를 위해서는 MFA 인증 요구)
- 객체 수명 주기 정책
> 유형 : 전환 작업, 만료 작업
> 전환 작업 : 객체가 다른 스토리지 클래스로 전환할 시기를 정의
> 만료 작업 : 객체가 만료되는 시기 정의, S3는 만료된 객체 자동 삭제함
- 객체 잠금 : 객체 버전에 대해 변경하거나 삭제 불가
- 교차 리전 복제 : 다른 리전의 S3에 객체 복사(재해 복구가 주요 목적)
> 고가용성은 다중 AZ가 메인
- IAM 없는 사람에게 액세스 권한 주기 : URL에 시간 제한 기능 설정 가능
- 스토리지 클래스 순서 : S3 Standard > S3 Intelligent-Tiering > S3 Standard-IA > S3 One Zone-IA > S3 Glacier Instant Retrieval > S3 Glacier Flexible Retrieval > S3 Glacier Deep Archive
<Amazon S3 Intellingent Tiering>
- S3 지능형 계층화는 액세스 패턴이 변경될 때 운영 오버헤드나 성능에 대한 영향 없이 스토리지 비용 최적화 기능 제공
- 즉, 액세스 빈도 수를 알 수 없거나 변화하는 경우 활용
- 자주 액세스하지 않는 데이터를 사용 패턴에 따라 더 저렴한 스토리지 계층으로 자동 이동 가능
<Amazon S3 Standard-IA>
- Amazon S3 Standard-Infrequent Access
- 자주 액세스하진 않지만 필요할 때 빠르게 액세스해야 하는 데이터에 적합
- 장기 스토리지, 백업 및 재해 복구 파일용 데이터 스토리지에 적합
<Amazon S3 One Zone-IA>
- Amazon S3 One Zone-Infrequent Access
- 자주 액세스하진 않지만 필요할 때 빠르게 액세스해야 하는 데이터에 적합
- S3 Standard-IA와의 차이 : One Zone-IA는 단일 AZ에 저장하여 비용 저렴, 대신 가용성 및 복원력이 떨어짐
- 쉽게 다시 생성할 수 있는 데이터의 보조 백업 스토리지로 적합
<Amazon S3 Glacier>
- 저비용 데이터 보관 및 장기 백업을 위한 스토리지
- Vault(볼트) : 아카이브를 저장하기 위한 컨테이너
- Vault Lock policy : 정책을 더이상 변경하거나 삭제 불가 기능
- 볼트 잠금 정책 적용 단계 : 볼트 잠금 정책 시작 -> 잠금 ID 복사하여 다른 장소에 저장 -> (24시간 내) 볼트 잠금 정책 테스트 -> Complete Vault Lock policy -> 잠금 ID를 입력
- 만약 24시간 내 볼트 잠금 정책 완료하지 않으면 잠금 ID 만료되서 다시 진행하여야 함
- 정책 오류 등으로 수정하고 싶은 경우, 잠금 정책 완료 전에 "abort-vault-lock" 명령 후 수정하고 "initial-vault-lock" 호출
- 스토리지 클래스
> S3 Glacier Instant Retrieval : 분기당 한번 액세스, 밀리초 단위 검색 시간에 적합
> S3 Glacier Flexible Retrieval : 연간 1~2회 액세스, 수분~12시간의 검색 시간에 적합
> S3 Glacier Deep Archive : 연 1회 미만 액세스, 12~48시간 검색 시간에 적합, 가장 저렴
<Amazon S3 Select>
- 간단한 SQL 식을 사용하여 애플리케이션이 객체에서 일부 데이터만 가져올 수 있도록 하는 서비스
- S3 Glacier Select : Glacier에서 파일 쿼리하고 검색 가능
<Amazon S3 Gateway Endpoint>
- 인터넷을 거치지 않고 S3 접근할 때 사용(인터넷 통하지 않음 -> 비용 절감, 성능 향상)
- S3 퍼블릭 IP 사용
- 온프레미스에서의 액세스 허용하지 않음
- 다른 리전에서의 액세스 허용하지 않음
- 특정 버킷에 대한 액세스 제한 방법 : 지정한 버킷 arn을 허용하는 엔드포인트 정책 생성
<Amazon S3 Interface Endpoint>
- VPC의 프라이빗 IP 사용하여 S3에 액세스
- 온프레미스, 다른 리전에서의 액세스 허용
<Amazon S3 Transfer Acceleration>
- 클라이언트와 S3 버킷 간 장거리 파일 전송 기능
- 장점 : 고속, 전세계에서 S3 버킷으로의 전송에 최적화
- CloudFront와 혼동 주의!! 데이터 다운로드 및 업로드는 Transfer Acceleration에 해당
<Amazon S3 Storage Lens>
- S3 버킷의 사용량 및 활동량을 분석하여 시각화(모니터링)
- 비용절감 계획 세울 때 활용 가능
[AWS Athena]
- S3에 저장된 데이터에 쿼리 수행하는 쿼리 엔진 서비스
- 서버리스 서비스로 따로 설정하거나 인프라 관리 불필요
[AWS Storage Gateway]
- 온프레미스 소프트웨어 어플라이언스(FSx의 경우 윈도우 파일서버)를 클라우드 기반 스토리지에 연결하여 온프레미스 IT 환경과 AWS 클라우드 스토리지 인프라에 데이터 저장 가능한 서비스
- 장점 : 데이터 보안 유지(디폴트로 데이터를 암호화), 확장 가능, 비용 효율
- 유형
> 파일 기반 파일 게이트웨이 (Amazon S3 파일 및 Amazon FSx 파일)
> 볼륨 기반 (캐시 및 저장) 스토리지 솔루션
> 테이프 기반 스토리지 솔루션
- Storage Gateway 하드웨어 어플라이언스 : 가상화 환경, 서버 관리 인원 등이 없는 경우에도 Storate Gateway 이용 가능하게 해주는 서비스, 어플라이언스 주문 후 배송 받는 방식
Ⅲ. DBMS
[Amazon RDS(Relational Database Service)]
- AWS에서 관계형 데이터베이스를 보다 쉽게 설정, 운영, 확장할 수 있게 해주는 웹 서비스
- RDS 장점
> MariaDB, Microsoft SQL Server, MySQL, Oracle, PostgreSQL과 같은 데이터베이스 제품 사용 가능
> 백업, 소프트웨어 패치, 자동 장애 감지, 복구 관리
> 자동 백업을 켜거나 직접 백업 스냅샷을 수동으로 생성 가능
- RDS 유형
> 범용 SSD : 중형 DB 인스턴스에서 실행되는 광범위한 워크로드에 이상적인 비용 효율적 스토리지 제공, 개발 및 테스트 환경에 적합
> 프로비저닝된 IOPS SSD : 예측 가능한 성능(일관된 I/O 처리량)과 지속적으로 낮은 대기시간(낮은 I/O 대기시간), 프로덕션 환경에 적합
- RDS 인스턴스 및 스냅샷 암호화 방안
> 암호화되지 않은 DB는 암호화된 스냅샷 생성 불가
> 따라서 스냅샷 생성 시 KMS 암호화 사용, 이후 DB 복원하여 기존 DB 인스턴스를 교체
- DB 인스턴스 용량 증가 방법 : 스토리지 확장, 그러나 예측할 수 없는 경우에는 자동 크기 확장(auto scaling) 설정하기
[Amazon Aurora]
- 고성능 및 고가용성을 위해 설계된 완전 관리형 RDBMS
- MySQL 및 PostgreSQL과 호환됨
- RDS 보다 MySQL 처리량을 최대 5배 제공 가능(MySQL 처리 성능 향상을 위해서는 RDS에서 Aurora로 이주)
- Aurora Auto Scaling을 사용하여 자동으로 확장 가능
- 고가용성을 위해서라면 다중 AZ 배포 필요
- Aurora 서버리스 : 인스턴스 또는 클러스터 관리 필요없는 데이터베이스
- Aurora 글로벌 데이터베이스
> 여러 리전에 걸쳐 있어서 대기 시간이 짧은 글로벌 읽기 지원
> 중단 신속히 복구 가능
<Aurora 엔드포인트 유형>
- 클러스터 엔드포인트 : DDL 등 쓰기 작업 수행할 수 있는 유일한 엔드포인트
- 리더 엔드포인트 : DB 클러스터에 대한 읽기 전용 연결 시 로드 밸런싱 지원(오버헤드 감소)
- 인스턴스 엔드포인트 : 클러스터 또는 리더 엔드포인트 사용이 부적합한 경우 인스턴스 엔드포인트가 DB 클러스터에 대한 연결 직접 제어
- 사용자 지정 엔드포인트 : 해당 엔드포인트 적용할 인스턴스 지정 가능, 로드밸런싱
[Amazon DynamoDB]
- 서버리스 기반 NoSQL 데이터베이스
- 많은 데이터 저장하고 검색, 방대한 동시요청, 높은 트래픽 감당에 적합
- HTTP로 통신(Connectionless)
- 용량 모드
> 온디맨드 모드 : 용량 계획 없이 사용한 만큼 가격 지불
> 프로비저닝된 모드 : 초당 읽기 및 쓰기 횟수 지정, 비용 예측 가능
- 백업 유형
> PITR(특정 시점 복구) : 단, 최근 35일까지 가능
> 온디맨드 백업 : AWS Backup을 사용, 장기간 아카이빙 및 보존
- DynamoDB Accelerator(DAX) : 읽기용 호출의 경우, DAX와 같은 캐싱 서비스 이용(짧은 지연 시간)
- JSON 문서 형식 데이터인 경우 DynamoDB 사용
- DynamoDB는 테이블 조인 기능 없음
[Amazon Redshift]
- 쿼리 분석기(표준 SQL을 사용하여 모든 데이터를 비용 효율적으로 분석할 수 있는 클라우드 데이터 웨어하우스)
- 이미 정제하고 적재된 데이터를 이용하여 분석
- 복잡한 쿼리를 빨리 수행해야 하거나 정기적인 배치 처리가 필요한 경우 적합
- 데이터 웨어하우스의 설정, 운영, 조정 작업을 모두 관리, 데이터 확장성 제공
- 단, 고가용성은 제공 x
[Amazon ElastiCache]
- 클라우드에서 분산된 인 메모리 캐시 데이터를 쉽게 생성, 확장 가능한 서비스 (데이터베이스 솔루션은 아님)
* 인 메모리 캐시 : 모든 데이터를 메모리에 올려놓고, 디스크에 접근하지 않음. 따라서 데이터 저장 및 검색 속도 매우 빠름. 단 메모리 크기까지만 저장 가능
- Redis용 Amazon ElastiCache : 실시간 애플리케이션을 지원할 수 있도록 1밀리초 미만의 지연 시간을 제공
- 세션 관리를 위한 분산 캐시
Ⅳ. 데이터 전송, 처리
[AWS Transit Gateway]
- 온프레미스 네트워크와 VPC 상호 연결하는데 사용 가능한 네트워크 전송 허브
[AWS Direct Connect]
- 온프레미스 데이터 센터에서 AWS로 전용 네트워크 연결을 설정할 수 있는 네트워크 서비스
- 해당 연결은 공용 인터넷을 우회하며 온프레미스 애플리케이션과 Amazon S3 간에 보다 안정적이고 지연 시간이 짧은 통신을 제공
- AWS Direct Connect 연결을 통해 백업 트래픽을 전달하면 인터넷 대역폭에 미치는 영향을 최소화하고 적시에 백업 가능
- 만약 연결 실패할 경우를 대비하여 VPN 연결을 백업으로 프로비저닝하면 고가용성 충족
[AWS DataSync]
- 온프레미스 스토리지 시스템과 Amazon S3 또는 기타 스토리지 대상 간에 데이터를 효율적이고 안전하게 전송하는 데이터 전송 서비스
- 보다 안전하게 전송하고자 하는 경우, AWS Direct Connect를 통한 AWS DataSync 이용 적합
[AWS Snowball]
- 대용량 데이터 이동 장치 서비스
- S3로 가져오기/내보내기 선택하면 Snowball 장치를 배송받아서 이전 작업 실행
- 네트워크 대역폭을 사용하지 않음
- 속도 빠름, 다만 장치 주고 받는데 걸리는 시간 존재
- 주의! Snowball은 온프레미스 데이터센터에서 AWS로 데이터 이동할 때 사용하는 것
[AWS DMS(Database Migration Service)]
- 데이터베이스 마이그레이션용으로 설계
- 변경 데이터 캡쳐(CDC) : 변경 시점과 해당 항목 추적하고 알림 전송
[Amazon Kinesis Data Streams]
- 대규모 스트리밍 데이터를 실시간으로 처리하기 위한 완전 관리형 서비스
- 대량의 데이터를 실시간·지속적으로 캡처하고 저장 가능
[AWS Lambda]
- 이벤트에 대한 응답으로 코드를 실행하고 수요에 맞게 자동으로 확장할 수 있는 서버리스 컴퓨팅 플랫폼
- 장점 : 서버리스(운영 오버헤드 감소), 자동 크기 조정
- 최대 크기 4KB, 최대 연속 사용 시간 15분
- 가장 저렴하게 app layer 구현할 수 있는건 lambda
[AWS Glue]
- 이벤트 기반 서버리스 컴퓨팅 플랫폼
- ETL 서비스(데이터 추출, 변환, 적재)
[AWS Elastic Beanstalk]
- Java, .NET, PHP, Node.js, Python, Ruby, Go, Docker를 사용하여 Apache, Nginx, Passenger, IIS와 같은 친숙한 서버에서 개발된 웹 애플리케이션 및 서비스를 간편하게 배포하고 조정할 수 있는 서비스
[Amazon AppFlow]
- SaaS 애플리케이션과 S3 및 Redshift 같은 AWS 서비스 간에 안전하게 데이터 교환할 수 있게 해주는 완전 관리형 통합 서비스
[AWS Transfer for SMTP]
- 완전관리형 고가용성 SMTP 서비스
- SMTP 프로토콜로 S3 버킷에 액세스 가능
- 서비스 내에서 사용자 생성 가능하기에 외부 인원도 쉽게 액세스 가능
Ⅴ. Network 및 Security
[Amazon Route 53]
- 가용성과 확장성이 뛰어난 DNS 웹 서비스
- 기능 : 도메인 등록, DNS 라우팅, 리소스 상태 확인
- 라우팅 정책 유형
> 단순 라우팅 정책
> 다중값 라우팅 정책 : 다중 리소스에 대해 DNS 응답을 배포
- Alias Recodes : 호스트 이름이 특정 AWS 리소스로 라우팅됨
> 무료
> Ex) ELB, CloudFront 등
> CloudFront CNAME과의 차이 : CNAME은 호스트 이름이 다른 호스트 이름으로 라우팅 되는 것이나, Alias는 리소스로 라우팅을 의미
[Amazon CloudFront]
- AWS에서 제공하는 CDN 서비스
- 캐시 가능한 정적 콘텐츠(이미지 및 비디오)와 동적 콘텐츠(API 가속 및 동적 사이트 제공) 모두의 성능을 향상 가능
- 장점 : 콘텐츠 캐싱을 통한 빠른 속도(부하 감소), 콘텐츠 보안 유지, 국가별 액세스 제한 설정 가능
- HTTP 프로토콜 처리하도록 설계됨
- 기본적으로 AWS Shield 기능 활성화됨
- 용어 정의
> Origin Domain name(원본 도메인) : CloudFront와 연결하고자 하는 S3, EC2 등
> Origin Access ID(OAI, 원본 액세스 ID) : CloudFront를 통해서만 객체 접근할 수 있도록 하기 위함(객체 권한에서 퍼블릭 액세스 차단 설정하기)
> CNAME(대체 도메인) : CloudFront 도메인 외의 다른 도메인 사용하고자 할 경우 작성
- CloudFront 도메인으로 S3 객체 접근시 Access Denied된 경우
> S3 버킷 권한 설정 중 객체 소유권 확인
> 객체 소유권 편집하여 ACL 활성화 필요
- CloudFront 배포 시 S3 버킷 권한 업데이트하지 못하는 경우
> S3 버킷 권한 탭에서 버킷 정책에 CloudFront OAI 입력 필요
[AWS Global Accelerator]
- 엣지 로케이션을 사용하여 가장 가까운 지역 엔드포인트에 대한 최적의 경로를 찾음
- TCP 및 UDP와 같은 HTTP 및 비HTTP 프로토콜 모두에 적합
> 비HTTP : 게임(UDP), IoT(MQTT), VoIP
- CloudFront와 마찬가지로 DDoS 보호를 위해 AWS Shield 활성화됨
- 자동 장애 조치 기능 존재(트래픽을 정상 엔드포인트로 리디렉션하는 시스템)
[Amazon VPC(Virtual Private Cloud)]
- 사용자가 정의한 가상 네트워크
- 클라우드 환경에서 실제 IDC 환경과 동일한 가상의 IDC 환경을 구축할 수 있도록 제공하는 기능
- 네트워크 구조
> PC -> AWS Cloud -> 서울 리전 -> VPC
> 인스턴스 > SG > NACL(나클) > 라우팅 테이블 > 인터넷 게이트웨이 > 외부
> 인스턴스 > SG > NACL > 라우팅 테이블 > 타 NACL > 타 SG > 타 인스턴스
- VPN(Virtual Private Network) : 가상 사설망(vpc와 연관지어 생각하기)
- 생성 가능한 사설 IP(Private IP)
> 10.0.0.0/8
> 172.16.0.0/12
> 192.168.0.0/16
- VPC 내에 서브넷 생성 가능(더 많은 네트워크망 만들기 위함)
- 공인 IP는 할당 방식의 차이로 두개로 나뉨
> Public IP : 재부팅 시 바뀔 수 있음
> Elastic IP : 사용자가 해제하기 전까지는 계속 동일한 IP 유지, 한정된 자원이므로 요금 부과
- VPC 흐름 로그
> 네트워크 트래픽(IP) 흐름 기록 및 모니터링
> VPC 대시보드 메뉴에서 Flow Logs를 만들어서 활성화 가능
> 인스턴스 도달하는 트래픽 모니터링 및 SG 규칙 진단 등에 도움
- VPC의 DNS 속성
> DNS 호스트이름 및 DNS 확인이 활성화된 경우, VPC로 시작된 인스턴스는 퍼블릭 DNS 호스트 이름을 받음
> VPC 내 "세부정보" 에서 DNS hostnames, DNS resolution 활성화 체크하기
> 만약 인스턴스가 DNS 사용을 못하게 하려면 DNS 확인 비활성화 시키면 됨
- NAT 인스턴스와 NAT 게이트웨이 : NAT 게이트웨이는 더 나은 가용성과 대역폭 제공
- NAT 게이트웨이 : Private subnet에서 외부 인터넷과 아웃바운드 통신 필요한 경우 사용, Private subnet의 인스턴스가 VPC 외부의 서비스에 연결할 수 있지만 외부 서비스는 해당 인스턴스와의 연결을 시작할 수 없도록 사용 가능
- VPC 설정 후에는 CIDR을 변경할 수 없으므로 IP 확장을 위해서는 보조 CIDR 블록을 연결해야 함
<VPC와 다른 AWS 연결>
- 외부 인터넷과의 연결과 같이 설정하여야 함
- 라우팅 테이블을 통해 S3 Public IP로 보내야 함
- Private Subnet의 경우 NAT 게이트웨이를 사용하여야 함
- VPC 엔드포인트 - 게이트웨이 엔드포인트
> 처리비용이 무료이므로 사용 고려(NAT 게이트웨이 없이 S3 등 접근 가능)
> S3와 Dynamo DB로만 접근 가능
<VPC와 다른 VPC 연결>
- VPC Peering
> 연결이 필요한 VPC 간에는 IP 주소가 중복되지 않아야 함
- Transit Gateway
<게이트웨이 VPC 엔드포인트>
- VPC용 인터넷 게이트웨이 또는 NAT 게이트웨이가 없어도 EC2 인스턴스에서 S3 및 DynamoDB에 대한 안정적인 연결 제공
[ENI(Elastic Network Interface)]
- VPC에서 가상 네트워크 카드를 나타내는 논리적 네트워킹 구성요소
- 인스턴스가 다른 네트워크 리소스와 통신할 수 있도록 함
- 모든 인스턴스는 기본 ENI 있어야 함
- 하나의 서브넷에만 연결됨
[Bastion Host]
- 외부에서 접근 불가능한 Private Subnet 접근하기 위하여 사용
- Public Subnet에 Bastion Host 두고, 이를 통하여 Private Subnet 접근하도록 가능
[Routing Table]
- 서브넷 단위로 라우트 테이블 연결
- 기본 정책으로 VPC IP 전체 대역이 Local로 설정되어 있음
- Private Subnet에서 NAT 게이트웨이을 통해 외부로 통신하고자 한다면, 라우팅 테이블에서 0.0.0.0/0에 대해서 NAT 게이트웨이로 라우트시켜야 함
[NLB, ALB, GLB] -> 주요 기능은 로드 밸런싱
- NLB(Network Load Balancer)
> TCP/IP 프로토콜 헤더에 따라 패킷 전송
> IP 주소, Port 번호를 보고 스위칭
> 고정 IP 적용 가능
> SSL 적용 불가
> 사용하기 전에 리스너 하나 이상 추가 필요
> TLS 리스너 사용하려면 NLB에 한 개 이상의 서버 인증서 반드시 배포 필요
- ALB(Application Load Balancer)
> HTTP/HTTPS 프로토콜 헤더에 따라 패킷 전송
> IP 주소, Port 번호, 패킷 내용을 보고 스위칭
> ALB는 기본적으로 IP 변경되기 때문에 고정 IP 사용하고자 한다면 NLB를 앞에 둠으로서 적용 가능
> SSL 적용 가능
> 리스너 규칙 : ALB가 하나 이상의 대상 그룹에서 대상으로 요청을 라우팅하는 방법 결정(route 53 불필요)
> ALB로 전송된 요청에 대한 자세한 정보 캡쳐하는 액세스 로그 제공
* 각 로그에는 요청 시간, IP주소, 경로 등이 포함
* 액세스 로그 사용하여 트래픽 패턴 분석 및 문제 해결 가능
* ALB에 대한 액세스 로그를 활성화하면 압축파일로 S3 버킷에 저장함
> 상호 TLS 인증(mTLS) 지원하지 않음
* mTLS 지원 필요한 경우에는 Network Load Balancer 또는 Classic Load Balancer를 사용하여 TCP 리스너 생성하고 대상에서 mTLS 구현 필요
- GLB(Gateway Load Balancer)
> 방화벽, IDS/IPS과 같은 가상 어플라이언스로 트래픽 분산
> OSI 3 Layer에서 작동
[Network ACL]
- 서브넷 단위 방화벽
- allow, deny 설정 가능
- Stateless(상태 비저장) 기반이므로 인바운드/아웃바운드 다 사용하여야 함
- Default로 모든 인바운드 및 아웃바운드 허용 설정되어 있음
- NACL 아웃바운드의 경우 임시포트로 배정됨
> 범위 : 1024-65535
- 서브넷 단위이므로 서브넷 안의 리소스 간 통신 시 NACL 적용되지 않음
[SecurityGroup]
- 인스턴스 단위 방화벽
- allow만 설정 가능, 거부 규칙을 지정할 수 없음
- Stateful(상태 저장) : 허용된 인바운드 트래픽에 대한 응답은 아웃바운드 규칙에 관계없이 인스턴스에서 나갈 수 있음
- Default로 모든 인바운드 차단, 아웃바운드는 허용 설정되어 있음
- 주의) a 회사에서 인스턴스 접근하고자 하는 경우, a 회사의 내부 IP(사설 IP) 범위 액세스 허용하는 것이 아니라 a 회사의 외부 IP(공인 IP) 범위 액세스 허용시켜야 함
- 사용 사례
> 웹 서버의 경우, 0.0.0.0/0에서 443(HTTPS) 포트 허용
> 데이터베이스 서버의 경우, 1433(MS SQL) 포트 허용
- SG는 같은 서비스끼리로 묶어서 쓰는게 좋음(인스턴스별로 전부 다 나누면 비효율적)
- 인바운드 및 아운바운드에 IP 뿐만 아니라 SG를 대상으로도 설정 가능(ALB의 SG를 거쳐서 들어오는 것만 허용)
<SecurityGroup 설정 추출>
- AWS CloudShell에서 명령어를 통한 설정 추출
> aws ec2 describe-security-groups --output text > test.txt
> 파이썬 파일을 업로드하여 실행시킴으로서 가공된 정보 획득 가능
- 시스템 점검 등 Role 확인을 위함
[AWS Network Firewall]
- 상태 저장하는 네트워크 방화벽 및 IDS/IPS
- VPC 수준에서 네트워크 트래픽 필터링 가능
- Layer 3~7까지 보호
[AWS Shield]
- DDoS 보호 서비스
- Standard 타입, Advanced 타입으로 구분
- Standard 타입은 AWS 사용시 자동으로 활성화(무료), CloudFront, Route53 등 서비스에 대하여 L3, L4레벨 DDoS 방어
- Advanced 타입은 EC2, ELB, S3 등 서비스에 대해 L3, L4, L7 레벨 DDoS 방어
[AWS WAF]
- 웹 애플리케이션 방화벽 서비스로 HTTP(S) 요청 모니터링하여 특정 IP 차단, SQL 인젝션 차단 등을 수행
- 구성요소 : 웹 ACL, ROLE, ROLE GROUP
- 다음과 같은 리소스 유형을 보호 가능
> CloudFront
> Amazon API Gateway
> Application Load Balancer
> AWS AppSyncGraphQL API
> Amazon Cognito 사용자 풀
Ⅵ. 로그 관리
[AWS CloudTrail]
- AWS 환경에서 발생한 모든 작업에 대한 로그 기록
- 각 이벤트는 S3 버킷에 저장
- 이벤트 요청, 응답, 사용자 자격 증명 등에 대한 세부 정보 모두 확인 가능
- AWS 계정에 대한 거버넌스, 규정 준수, 운영 및 위험 감사를 위하여 도움이 됨
- AWS CloudTrail 이벤트 기록을 사용하여 IAM 액세스 키에 대한 지난 90일 동안의 AWS API 활동 식별 가능
- AWS CloudTrail 대용량 로그를 검색 및 분석하는 방법
> S3에서 Athena 쿼리를 사용하는 것 : Athena를 사용하여 필터링할 수 있기 때문
> Amazon Macie는 S3 버킷에서 특정 데이터 검색에는 용이하지만, CloudTrail 로그 필터링은 불가
- 사용자 활동 및 API 호출 기록을 추적
> EC2 인스턴스 내 애플리케이션에서 로그 보내지는 않음(이를 위해서는 CloudWatch 에이전트 필요)
[Amazon CloudWatch]
- AWS 서비스 및 리소스 활동 모니터링 및 로그 관리
- 실시간 로그, 지표 및 이벤트 데이터를 수집하고 시각화하여 인프라 및 애플리케이션 유지 관리를 간소화
- CloudWatch에서는 액세스 키의 수명에 대한 규칙을 모니터링하거나 알람할 수 없음
- CloudWatch 대시보드 공유
> AWS 계정에 직접 액세스 권한 없는 사람들에게 대시보드 공유 가능
> (공개) 링크가 있는 모든 사람이 대시보드 볼 수 있도록 대시보드 공개적으로 공유
> (특정) 대시보드 공유 선택하고 특정 이메일 주소 입력하여 링크 생성(사용자 이름, 임시 암호 포함된 이메일 자동으로 주어짐)
<CloudWatch Logs>
- EC2 인스턴스, CloudTrail, Route 53 등의 로그파일을 모니터링, 저장, 액세스 가능
- 상황 : 통합 CloudWatch 에이전트를 사용하여 로그를 Amazon CloudWatch Logs로 푸시하고 있지만, CloudWatch Logs 콘솔에서 로그가 확인되지 않는 경우
- 가능성 있는 원인
1) 오래된 버전의 CloudWatch 에이전트 사용
2) CloudWatch Logs 엔드포인트 연결 실패
> 엔드포인트 연결 테스트 : telnet logs.<region>.amazonaws.com 443
> 연결 오류 발생 시, SecurityGroup 및 Network ACL 규칙 확인
3) 계정, 리전 및 로그 그룹 구성 검토
> 지정된 리전이 콘솔 리전과 일치하는지 확인
4) IAM 권한 확인
> 로그 이벤트를 게시하려면 먼저 로그 그룹과 로그 스트림을 생성하여야 함
> 따라서 아래 권한 누락되어 있는지 확인
> logs:CreateLogGroup
> logs:CreateLogStream
> logs:PutLogEvents
> logs:DescribeLogStreams
5) CloudWatch 에이전트 실행 오류
> 에이전트 실행 중인지 확인(awslogs 서비스가 실행 중인지 여부)
> 실행되고 있지 않는다면 로그 파일(/var/log/awslogs.log)에서 오류 확인
6) 타임스탬프 문제
> 14일 이상 경과 도는 예정 시간이 2시간 이상 남은 로그 이벤트 타임스탬프가 있는지 확인
<CloudWatch 지표 필터>
- 지표(측정항목) 필터 생성 방법
> CloudWatch 콘솔 실행
> 탐색 창에서 로그를 선택
> 로그 그룹 목록에서 CloudTrail 로그 이벤트에 대해 생성한 로그 그룹을 선택
> '작업' 선택 후 '지표 필터 생성'을 선택
> 패턴 정의 페이지에서 필터 패턴을 선택한 후 상황에 맞는 패턴 입력
<CloudWatch Alarm>
- CloudTrail에서 특정 로그 이벤트(ex stoplogging)가 발생하는 경우를 알람 설정 가능
- 이메일, SMS 등으로 알람 보낼 수 있음
- 알람(경보) 만들기 : 생성한 지표 필터에 대하여 조건 지정
Ⅶ. 보안 서비스
[AWS Config]
- AWS 리소스 변경 모니터링(설정 변경 내역을 확인 가능)
- 리소스 설정이 보안 규정을 위반하는지 지속적으로 모니터링 가능
- 규정 준수 팩을 사용하여 K-ISMS 배포 가능(준수 여부 확인)
- 사용자의 IAM 권한 변경 확인 가능
- 리소스 생성되거나 구성 변경될 때 리소스에 자동으로 태그 지정하는 규칙 생성 가능
- 관리 규칙 목록
> approved-amis-by-id : 실행 중인 인스턴스가 지정된 AMI를 사용하는지 확인
> access-keys-rotated : 액세스 키가 지정된 기간 내에 교체되는지 확인
> acm-certificate-expiration-check : 만료되는 인증서 확인
> ...
[KMS(Key Management Service]
- 암호화 키 관리
- KMS 키를 생성하고 관리 가능(용어 변경 : CMK -> KMS 키)
- Key material(키 자료) : 암호화 알고리즘에 사용되는 비트 문자열
> 각 KMS 키에는 키 자료가 포함되어 있음
> 출처는 1) KMS에서 생성 2) 자체 키 자료 가져오기 등이 있음
> 키 자료 없이 KMS 키 생성한 다음 자체 키 자료를 가져올 수 있음(BYOK)
> 자체 키 자료는 대칭 암호화 KMS 키에서만 지원됨
> 다만, 키 자료 자동 교체는 KMS 키 자료를 사용하는 경우만 가능, 자체 키 자료를 사용하는 경우에는 수동 교체 필요
- 4KB 이상의 데이터를 암호화 및 복호화할 수 없음
- KMS 키 유출 대비
> KMS 키 자동 교체를 선택하면 데이터를 다시 암호화할 필요 없음
> 이전 버전의 키로 암호화된 데이터의 해독에 사용할 이전 버전의 키를 자동으로 보관
> 모든 새 암호화 요청은 최신 버전의 키로 암호화
- 다중 리전 키 지원
> 여러 리전에 동일한 키가 있는 것처럼 상호 교환하여 사용
> 여러 지역에서 KMS 암호화된 AWS 리소스 해독하는데 사용 가능
- KMS 키 유형
> AWS 관리형 키 : AWS 서비스가 AWS 계정에 생성하는 키, 자동 회전 기능 존재(필수), 고객이 관리 불가
> 고객 관리형 키 : 본인이 생성, 소유, 관리하는 키, 자동 회전 기능 존재(옵션)
- 키 정책 : KMS 키에 대한 액세스를 제어
> 모든 KMS 키에는 정확히 하나의 키 정책이 있어야 함
> KMS 키를 사용 권한이 있는 사람과 키 사용 방법을 결정
> 다른 AWS 리소스 정책과 달리 KMS 키 정책은 계정이나 사용자에게 자동으로 권한 부여하지 않음
- 다른 계정의 사용자가 KMS 키 사용하도록 허용 방법
> 키 정책을 수정하여 KMS 키를 사용할 수 있도록 외부 계정에 권한 부여
[AWS Systems Manager]
- Parameter Store : 암호, 데이터베이스 문자열, AMI ID, 라이선스 코드 등과 같은 데이터를 파라미터 값으로 저장 가능
> 장점 : 안전하고 확장 가능한 호스팅 방식 암호 관리 서비스, 코드와 격리
> KMS를 사용하여 보안 문자열 파라미터 값 암호화 및 해독 가능
> KMS 사용 시 주요 문제점 : KMS 키가 없는 경우, KMS 키가 비활성화인 경우
> 자동 교체 기능 없음
- Session Manager : AWS 애플리케이션 및 리소스를 위한 운영 허브
> 인바운드 포트를 열거나 Bastion host를 유지하거나 SSH 키를 관리할 필요 없음
> IAM 정책 사용하여 관리 노드에 대한 중앙 집중식 액세스 제어
> 세션 활동 로깅 및 감사
[AWS Secrets Manager]
- 데이터베이스 자격증명, API 키 및 기타 암호를 교체, 관리 가능
- Parameter Store(SSM 내 서비스)와 비교
> 공통점 : 두 서비스 모두 매개변수 및 비밀에 대한 키-값 쌍으로 선언 가능
> 차이점 : 1) Secrets Manager는 항상 암호화가 활성화(데이터를 일반 텍스트로 저장 불가)
2) Secrets Manager는 언제든지 암호를 교체 가능, 정기적인 교체 구성 가능
[ACM(AWS Certificate Manager)]
- AWS 웹 사이트와 애플리케이션을 보호하는 SSL/TLS 인증서와 키 생성, 저장, 갱신하는 기능 제공
- ACM의 인증서는 리전별 리소스에 해당
> 각 리전에 대한 인증서를 요청하거나 가져와야 함
> 리전 간에 인증서 복사할 수 없음
> CloudFront에서 ACM 인증서 사용하려면 미국 동부(버지니아 북부) 리전(us-east-1)에서 인증서를 요청하여야 함
- 타사 인증서는 AWS에서 자동 갱신을 설정할 수 없음
> 방법 : Amazon EventBridge(Amazon CloudWatch Events) 사용하여 타사 인증서를 갱신하라는 알림 보내기
[AWS Artifact]
- AWS 규정 준수 보고서를 온디맨드 방식으로 엑세스할 수 있도록 무료로 제공되는 서비스
[Amazon GuardDuty]
- 무단 액세스 또는 데이터 반출 등과 같은 특정 위협 탐지 및 알람 가능
- 가장 기본적인 보안 서비스
- 악성 IP 주소 및 도메인 목록 등 위협 피드 바탕으로 머신러닝 적용하여 잠재적 무단 활동과 악의적 활동 찾아냄
- GuardDuty의 기능은 "검출"까지이다. 이후 조치는 다른 서비스 이용해야 함
- findings 주기 설정 가능하므로 짧게하는게 좋음
- IPS 처럼 동작시키기 : GuardDuty에서 특정 이벤트 탐지 -> CloudWatch에서 트리거 발동 -> CloudWatch에서 메일을 보내고 람다를 실행시켜 NACL에 추가
- 트래픽 검사 및 트래픽 필터링을 위한 특정 규칙을 생성하는 기능은 없음
[AWS Detective]
- 보안 탐지 결과 또는 의심스러운 활동의 원인 분석 및 조사를 지원
- 일반적으로 GuardDuty Finding 결과에 대해 조사를 수행하도록 설정
- 정탐/오탐 판단을 돕는 역할
[AWS Inspector]
- AWS 리소스에 대한 취약점 점검 도구
- 규칙 패키지 : 네트워크 평가(네트워크 연결성), 호스트 평가(CVE 취약점), CIS 벤치마크
- 실행 중인 EC2, ECR, Lambda 함수 자동 검색 및 스캔 가능
- 리전별 서비스
[AWS Macie]
- 버킷에서 데이터 검색할 때 사용하는 기능
- 특정 문자나 정규표현식을 사용하여 검색
- 개인정보나 민감정보 식별 가능
- ex) 010-{\d}{4}-{\d}{4} : 휴대폰 번호
[AWS Trusted Advisor]
- 주기적으로 체크하여 지적해주는 서비스
- 비용 최적화, 성능, 보안, 내결함성, 서비스 한도
[AWS Backup]
- AWS 서비스에 대한 데이터 백업을 중앙에서 관리하는 서비스
- AMI, Snapshot
- 백업 및 복원 가능
Ⅷ. 기타 서비스
[AWS Cost Explorer(비용 탐색기)]
- AWS 사용량을 시각화해줌으로서 빠르게 확인 및 관리 가능한 도구
- 비용 과다하게 나온 경우 원인 식별에 사용됨
- 지난 12개월 데이터 확인 가능
[AWS CUR(Cost and Usage Report)]
- AWS 사용량 추적하고 계정의 예상 요금 알려줌
- S3 버킷으로 보고서 파일 전송 가능
> 청구서 분석을 위해서는 Athena 활용
[AWS CloudFormation]
- AWS 리소스들을 자동으로 생성해주는 IaC 도구
- AWS 구성을 재사용하기 쉽게 코드로 작성해두는 것
- 작동방법 : 템플릿 작성 -> 업로드 -> 스택 생성 -> 설정 및 리소스 생성
[Amazon SES(Simple Email Service)]
- 사용자의 이메일 주소와 도메인을 사용하는 이메일 플랫폼
- SES SMTP 인터페이스 사용하여 이메일 보내려면 SMTP 엔드포인트 연결 필요
> API 엔드포인트 형식 예: email.us-east-1.amazonaws.com
> SMTP 엔드포인트 형식 예: email-smtp.us-east-1.amazonaws.com
- SES SMTP 엔드포인트에서는 TLS(전송 계층 보안)을 사용하여 모든 연결 암호화
- TLS 암호화 연결을 위한 2가지 방식이 존재(STARTTLS, TLS Wrapper)
- STARTTLS
> 암호화되지 않은 연결을 암호화된 연결로 업그레이드하는 수단
> 포트 25, 587 또는 2587 사용
> SMTP 클라이언트는 포트 25, 587, 2587에서 SES SMTP 엔드포인트에 연결하여 STARTTLS 연결 후 SMTP 정상적으로 진행
- TLS Wrapper
> 해당 기능 사용 시 SES SMTP 엔드포인트는 TLS 협상하지 않음(클라이언트 책임)
> 포트 465 또는 2465 사용
[Amazon SNS(Simple Notification Service)]
- 동시에 여러 수신자에게 메시지를 보낼 수 있는 완전히 관리형 게시-구독 메시징 서비스
- 많은 메시지 처리 방법
> 여러 SQS 구독을 통해 SNS 주제에 메시지 게시
> 대기열의 메시지 처리하도록 애플리케이션 구성
- 사용방법: Topic(주제) 생성 -> 토픽을 전달할 subscription(구독) 설정 -> eventbridge 등에 따른 트리거로 이메일 전달
[Amazon EventBridge]
- AWS 서비스 등에서 이벤트 받아 원하는 SNS와 같은 타겟으로 보내주는 역할
- JSON 명령어 예
> "source": 이벤트 소스를 지정
> "detail-type": 이벤트에 포함된 세부 정보 유형을 지정(ex "AWS API Call via CloudTrail")
> "detail": 이벤트 세부 정보 지정 섹션
[Amazon SQS(Simple Queue Service)]
- 마이크로 서비스, 분산 시스템 및 서버리스 애플리케이션 간에 메시지를 저장, 처리 및 전송할 수 있는 완전 관리형 분산 메시지 대기열 서비스
- FIFO 대기열 : 메시지가 수신된 순서대로 처리되도록 함
- SQS 대기열을 사용하여 Lambda 함수 통합 가능
- 정보 수신 및 로드에 별도의 Lambda 함수를 사용하면 확장성을 개선하고 구성 작업을 최소화 가능
- SQS는 확장성 향상과 관련 있음
- ChangeMessageVisibility API(가시성 제한 시간 설정)
> 한 사람이 이미 메시지 선택하여 처리중일 때 다른 사람도 중복되어 처리되는 것을 방지하기 위함
> 메시지가 선택되고 처리 후 삭제된 시점부터 메시지 보이지 않도록 함
- SQS는 대기열 생성자에게 대기열 사용할 권한 자동 부여하지 않음 -> 명시적으로 부여 필요
- 제3자가 메시지를 SQS 대기열에 전송하도록 액세스 부여 방법
> 제3자에 대한 IAM 사용자 생성
> 사용자를 그룹에 추가
> SQS 작업 액세스 권한을 그룹에 부여하는 정책 생성
- 비동기식
[Amazon QuickSight]
- 데이터 시각화 기능 제공
- QuickSight 대시보드 액세스 권한 부여
> 대시보드 공유 -> 사용자 및 그룹 초대 -> 권한 수준 선택
[AWS Fargate]
- 기본 인프라를 프로비저닝하고 관리할 필요 없이 컨테이너를 실행하는 완전관리형 컨테이너 실행 환경
- 따라서 중요한 애플리케이션을 유지 관리하는 데 집중하고 기본 인프라 프로비저닝 및 관리를 책임지고 싶지 않은 경우 적합
[Amazon Rekognition]
- 애플리케이션에서 이미지 및 비디오 분석 서비스
- 해당 서비스를 활용하여 이미지에 부적절하거나 불쾌한 콘텐츠 포함 여부 확인 가능
[Amazon Textract]
- 애플리케이션에서 문서 텍스트 감지 및 분석 기능 제공
[AWS SCT(Schema Conversion Tool)]
- 기존 데이터베이스 스키마를 한 데이터베이스 엔진에서 다른 데이터베이스 엔진으로 변환하는 서비스
[Amazon MQ]
- 클라우드의 메시지 브로커
- 애플리케이션 및 다양한 언어, 운영체제, 프로토콜을 사용하여 통신 가능
- 메시징 시스템을 관리, 운영, 유지할 필요 없이 기존 애플리케이션 및 서비스와 함께 동작
- SQS,SNS는 메시지 브로커를 설정할 필요없는 서비스
[AWS Tag Editor]
- AWS 리소스에 태그 지정 가능한 서비스
- 모든 리전에 대해서 태깅할 리소스 찾을 수 있음
2. 상황 대처 예시
<IP 패킷 트래픽 검사>
- 문제점 : 패킷 계층 트래픽(IP)을 검사하는 AWS 서비스 없음
- 해결책 : 호스트 또는 시장 유형 솔루션 사용
> 프록시 솔루션 도입하여 EC2와 모든 아웃바운드 VPC 트래픽에 대하여 프록시 프록시 사용하여 검사 수행
> VPC 내 각 EC2 인스턴스에서 호스트 기반 에이전트 구성하고, 호스트 기반 에이전트 내에서 검사를 수행
<EC2 남용 대처 방법>
- 격리와 백업
> 격리 : 포렌식 워크스테이션을 통해 인/아웃 차단
> 백업 : 볼륨(EBS, 메모리)의 스냅샷
- 증거 보존을 위하여 자동 복구하면 안됨
- 손상된 EC2 인스턴스를 재시작하는 것은 의미없음
<EC2 인스턴스 액세스에 사용되는 SSH 키 유출된 경우>
- EC2 인스턴스에 대한 22번 포트 차단
- EC2 인스턴스에서 authorized_keys 파일 수정
* authorized_keys 파일 : 원격 호스트에 로그인하도록 허용된 사용자 인증에 사용되는 키(퍼블릭 키) 저장되어 있음
<액세스 키 노출 시 자격 증명 오용 여부 확인>
- AWS CloudTrail 분석
- IAM에서 Credential Report 다운 및 분석
<CloudWatch Logs 에이전트의 로그 전달이 중지되는 경우>
- 상황 : Amazon CloudWatch Logs 에이전트가 CloudWatch Logs 서비스에 성공적으로 로그를 전달하고 있으나 연결된 로그 스트림이 특정 시간 동안 활성화된 후에는 로그 전달이 중지되는 경우
- 조치 방안 :
> CloudWatch Logs 에이전트의 모니터링 파일에 대한 파일 권한이 수정되지 않았는지 확인
> OS logrotate 설정(로그 순환 규칙)이 에이전트 스트리밍에 대한 구성 요구 사항과 호환 또는 충돌되는지 확인
<계정 CloudTrail 기록이 없는 경우>
- 상황 : AWS 계정은 단일 S3 버킷에 로그인하도록 CloudTrail 설정되어 있으나 S3 버킷 안에 기록이 없는 경우
- 조치 방안 :
> S3 버킷 정책이 해당 계정에서 CloudTrail에 대한 액세스 허용하는지 확인
> CloudTrail 콘솔에서 S3 버킷 이름이 올바르게 설정되어 있는지 확인
> CloudTrail 콘솔에서 각 trail이 활성화되고 정상인지 확인
<온프레미스 Active Directory를 AWS 자격 증명에 활용>
- 각 AD 그룹에 해당하는 권한을 가진 IAM 역할 생성
- AD와 AWS 간에 신뢰 당사자 트러스트를 추가하도록 AD 구성
<EC2 인스턴스에 대한 보안 경고 발생>
- 상황 : EC2 인스턴스를 격리한 다음 조사를 위한 방안
- 조치 방안 :
> 보안그룹을 활용하여 격리
> CloudTrail 및 VPC 흐름 로그 분석을 통한 조사
<자주 사용하지 않는 DB의 경우 비용 효율적인 방법>
- DB 중지하더라도 중지된 DB의 스토리지에서 금액이 발생
- DB의 수동 스냅샷 생성하고 종료시키기, 차후 필요시 스냅샷 복원하는 것이 베스트
<meta data>
- 객체의 키와 값에 대한 데이터
- Ex) AMI ID, SecurityGroup 등
- IAM 권한 없는 자가 EC2 인스턴스와 연결된 IAM 역할 목록 요청할 때 사용 가능
> curl http://연결할 IP/latest/meta-data/iam/info
3. AWS 보안 서비스
카테고리 | 서비스명 | 설명 |
자격 증명 및 엑세스 관리 | Identity Access Management(IAM) | AWS 전체의 권한 통제 시스템 |
탐지 및 검색 | AWS Security Hub | 보안 및 규정 준수 센터 |
Amazon GuardDuty | 로그 분석 및 처리를 통한 위협 탐지 | |
Amazon Detective | 탐지 결과 분석 | |
AWS Inspector | AWS 리소스에 대한 취약점 점검 도구 | |
AWS Mecie | 데이터 검색(개인정보 및 민감정보 식별 가능) | |
인프라 보호 | AWS Shield | DDoS 보호 서비스 |
AWS Web Application Firewall(WAF) | 웹 애플리케이션 방화벽 웹 트래픽 필터링 |
|
AWS Firewall Manager | 방화벽 규칙 관리 | |
로그 | AWS CloudTrail | AWS 환경에서 발생한 모든 작업에 대한 로그 기록 |
Amazon CloudWatch | AWS 서비스 및 리소스 활동 모니터링 및 로그 관리 | |
키 관리 | AWS Key Management Service(KMS) | 키 저장 및 관리 |
규정 준수 | AWS Artifact | AWS 규정 준수 보고서를 온디맨드 방식으로 엑세스할 수 있도록 무료로 제공되는 서비스 |