Security, Identity and Compliance
2025. 10. 21. 18:58ㆍCERTIFICATES/AWS DEA-C01
최소 권한의 원칙
- 작업을 수행하는 데 필요한 권한만 부여함
- 개발 중에는 광범위한 권한으로 시작할 수 있음
- 하지만 워크로드에 필요한 정확한 서비스와 작업을 명확히 알게 되면 권한을 제한해야 함
- IAM Access Analyzer를 사용하여 접근 활동을 기반으로 최소 권한 정책을 생성할 수 있음

데이터 마스킹과 익명화
- PII(개인 식별 정보)나 기타 민감한 데이터를 다룰 때 사용함
- 마스킹은 데이터를 난독화함
- 예: 신용카드 번호나 주민등록번호의 마지막 4자리만 남기고 나머지를 마스킹함
- 비밀번호를 마스킹함
- Glue DataBrew와 Redshift에서 지원함
- 익명화 기법
- 무작위 값으로 대체함
- 셔플(데이터 순서 무작위화)
- 암호화(결정적 또는 확률적 방식)
- 해싱
- 또는 데이터를 삭제하거나 처음부터 가져오지 않음
Key Salting
- 솔팅이란 해시하기 전에 데이터(주로 비밀번호)에 무작위 값인 ‘솔트(salt)’를 앞이나 뒤에 덧붙이는 과정
- 공격자가 자주 사용되는 비밀번호의 해시값을 미리 계산해둔 ‘레인보우 테이블(rainbow table)’을 이용해 일치 여부를 찾는 사전 계산 공격을 방지함
- 동일한 데이터(예: 같은 비밀번호 두 개)라도 솔트가 다르기 때문에 서로 다른 해시값을 생성하도록 보장함
- 솔트는 강력하고 암호학적으로 안전한 난수 값을 사용해야 함
- 솔트를 주기적으로 교체해야 함
- 각 사용자는 고유한 솔트를 가져야 함
- 비밀번호를 저장하기 전에 솔트를 추가하고 해시 처리해야 함

데이터를 지정된 위치에 유지하기
- 규제 요건으로 인해 특정 리전으로 데이터 전송이 금지될 수 있음
- 백업이나 복제가 허용되지 않은 리전으로 데이터를 전송하는 실수를 하기 쉬움
- AWS Organizations의 서비스 제어 정책(Service Control Policies, SCP)을 사용하여 이를 강제할 수 있음
- 허용된 리전만 접근하도록 IAM 정책과 S3 버킷 정책을 제한해야 함
- RDS, Aurora, Redshift의 백업 및 복제 설정 시 주의해야 함
- CloudTrail과 CloudWatch를 사용하여 모니터링 및 알림을 설정해야 함
- 예시: RDS 백업을 us-east-1과 us-west-1 리전으로만 제한하는 IAM 정책

IAM
IAM: 사용자와 그룹
- IAM은 Identity and Access Management(신원 및 접근 관리)로, 글로벌 서비스임
- 루트 계정은 기본적으로 생성되며, 사용하거나 공유해서는 안 됨
- 사용자는 조직 내의 사람을 의미하며, 그룹으로 묶을 수 있음
- 그룹은 다른 그룹을 포함할 수 없고 오직 사용자만 포함함
- 사용자는 반드시 그룹에 속할 필요는 없으며, 여러 그룹에 속할 수도 있음

IAM: 권한
- 사용자나 그룹에는 정책이라 불리는 JSON 문서를 할당할 수 있음
- 이 정책은 사용자의 권한을 정의함
- AWS에서는 최소 권한 원칙을 적용함: 사용자가 필요한 권한 이상은 부여하지 않음

IAM Policies inheritance

IAM 정책 구조
- 구성 요소
- Version: 정책 언어 버전, 항상 “2012-10-17”을 포함해야 함
- Id: 정책의 식별자 (선택 사항)
- Statement: 하나 이상의 개별 문(statement)으로 구성됨 (필수)
- Statement 구성 요소
- Sid: statement의 식별자 (선택 사항)
- Effect: 접근을 허용할지 거부할지를 지정함 (Allow, Deny)
- Principal: 이 정책이 적용되는 계정, 사용자, 역할
- Action: 정책이 허용하거나 거부하는 작업 목록
- Resource: 작업이 적용되는 리소스 목록
- Condition: 정책이 적용되는 조건 (선택 사항)

IAM – 비밀번호 정책
- 강력한 비밀번호는 계정의 보안을 강화함
- AWS에서는 비밀번호 정책을 설정할 수 있음
- 최소 비밀번호 길이 설정
- 특정 문자 유형 요구
- 대문자 포함
- 소문자 포함
- 숫자 포함
- 영문 이외의 특수 문자 포함
- 모든 IAM 사용자가 자신의 비밀번호를 변경할 수 있도록 허용
- 일정 기간 후 비밀번호 변경을 요구(비밀번호 만료 설정)
- 이전에 사용한 비밀번호 재사용 방지
다중 인증(Multi-Factor Authentication, MFA)
- 사용자는 계정에 접근할 수 있으며, AWS 계정 내 설정을 변경하거나 리소스를 삭제할 수도 있음
- 루트 계정과 IAM 사용자를 보호해야 함
- MFA는 사용자가 알고 있는 비밀번호와 사용자가 소유한 보안 장치의 조합임

- MFA의 주요 이점: 비밀번호가 탈취되거나 해킹되더라도 계정이 침해되지 않음
AWS에서 사용할 수 있는 MFA 장치 옵션
- 가상 MFA 장치 (Virtual MFA device)
- Google Authenticator (모바일 전용)
- Authy (모바일 전용)
- 하나의 장치에서 여러 토큰을 지원함
- 범용 2차 인증 키 (Universal 2nd Factor, U2F Security Key)
- YubiKey (Yubico, 서드파티 제공)
- 하나의 보안 키로 여러 루트 계정 및 IAM 사용자를 지원함
- 하드웨어 키 폽 MFA 장치 (Hardware Key Fob MFA Device)
- Gemalto(서드파티)에서 제공
- 물리적 하드웨어 토큰 형태의 MFA 장치임
- AWS GovCloud(US)용 하드웨어 키 폽 MFA 장치
- SurePassID(서드파티)에서 제공
- AWS GovCloud(US) 환경 전용 MFA 장치임
서비스용 IAM 역할
- 일부 AWS 서비스는 사용자를 대신하여 작업을 수행해야 함
- 이를 위해 IAM 역할을 사용하여 AWS 서비스에 권한을 부여함
- 일반적인 역할 예시
- EC2 인스턴스 역할
- Lambda 함수 역할
- CloudFormation용 역할

왜 암호화를 사용하는가?
전송 중 암호화(Encryption in flight, TLS / SSL)
- 데이터는 전송 전에 암호화되고, 수신 후 복호화됨
- TLS 인증서는 암호화를 지원하며(HTTPS 사용)
- 전송 중 암호화를 통해 중간자 공격(Man-In-The-Middle, MITM)을 방지할 수 있음

서버 측 저장 시 암호화(Server-side encryption at rest)
- 데이터가 서버에 도착한 후 암호화됨
- 데이터가 전송되기 전에 복호화됨
- 데이터는 키(일반적으로 데이터 키)를 사용하여 암호화된 형태로 저장됨
- 암호화 및 복호화에 사용되는 키는 별도로 관리되어야 하며, 서버는 해당 키에 접근할 수 있어야 함

클라이언트 측 암호화(Client-side encryption)
- 데이터는 클라이언트에서 암호화되며, 서버에서는 절대 복호화되지 않음
- 데이터는 수신한 클라이언트에서 복호화됨
- 서버는 데이터를 복호화할 수 없어야 함
- Envelope Encryption(봉투 암호화) 방식을 활용할 수 있음
AWS KMS(Key Management Service)
AWS KMS (Key Management Service)
- AWS 서비스에서 ‘암호화’라는 단어가 나오면 대부분 KMS를 의미함
- AWS가 암호화 키를 관리함
- IAM과 완전히 통합되어 권한 관리를 수행함
- 데이터 접근 제어를 간단히 수행할 수 있음
- CloudTrail을 통해 KMS 키 사용 내역을 감사할 수 있음
- 대부분의 AWS 서비스(EBS, S3, RDS, SSM 등)와 원활하게 통합됨
- 비밀정보는 절대 평문으로 저장하지 말아야 하며, 특히 코드 내에 저장해서는 안 됨
- KMS 키 암호화는 API 호출(SDK, CLI)을 통해서도 사용할 수 있음
- 암호화된 비밀정보는 코드나 환경 변수에 저장할 수 있음
KMS 키 유형
- KMS Key는 기존의 KMS Customer Master Key(CMK)의 새로운 명칭임
- 대칭 키(Symmetric, AES-256 키)
- 암호화와 복호화에 사용되는 단일 암호화 키
- KMS와 통합된 대부분의 AWS 서비스는 대칭 CMK를 사용함
- 암호화되지 않은 KMS 키에 직접 접근할 수 없으며, KMS API를 호출해야만 사용할 수 있음
- 비대칭 키(Asymmetric, RSA 및 ECC 키 쌍)
- 공개키(암호화용)와 개인키(복호화용) 쌍으로 구성됨
- 암호화/복호화 또는 서명/검증 작업에 사용됨
- 공개키는 다운로드 가능하지만, 개인키는 암호화되지 않은 상태로 접근할 수 없음
- 사용 사례: KMS API를 호출할 수 없는 외부 사용자에 의한 AWS 외부 암호화 작업
AWS KMS (Key Management Service)
- KMS 키 유형
- AWS 소유 키(무료): SSE-S3, SSE-SQS, SSE-DDB에서 사용되는 기본 키
- AWS 관리형 키(무료): aws/service-name 형식 (예: aws/rds, aws/ebs)
- KMS에서 생성된 고객 관리형 키: 월 1달러
- 가져온 고객 관리형 키: 월 1달러
- 추가로 KMS API 호출 요금 발생 ($0.03 / 10,000회 호출당)
- 자동 키 회전
- AWS 관리형 KMS 키: 1년에 한 번 자동 회전
- 고객 관리형 KMS 키: 자동 또는 필요 시 수동(on-demand) 회전 가능 (활성화 필요)
- 가져온 KMS 키: 별칭(alias)을 사용하여 수동으로만 회전 가능
리전 간 스냅샷 복사

KMS 키 정책
- KMS 키에 대한 접근을 제어하며, S3 버킷 정책과 “유사한” 개념임
- 차이점: KMS 키 정책이 없으면 접근 제어 자체를 할 수 없음
- 기본 KMS 키 정책
- 별도의 KMS 키 정책을 제공하지 않으면 자동으로 생성됨
- 루트 사용자(즉, 전체 AWS 계정)에 키에 대한 전체 접근 권한을 부여함
- 사용자 정의 KMS 키 정책
- KMS 키에 접근할 수 있는 사용자 및 역할을 정의함
- 키를 관리(관리자 권한)할 수 있는 주체를 정의함
- 다른 AWS 계정에서 KMS 키에 접근해야 하는 경우 유용함
계정 간 스냅샷 복사하기
- 자체 KMS 키(고객 관리형 키)로 암호화된 스냅샷을 생성함
- 교차 계정 접근을 허용하도록 KMS 키 정책을 추가함
- 암호화된 스냅샷을 공유함
- (대상 계정에서) 스냅샷의 복사본을 생성하고, 해당 계정의 CMK로 다시 암호화함
- 스냅샷으로부터 새 볼륨을 생성함

AWS Macie
- Amazon Macie는 완전관리형 데이터 보안 및 개인정보 보호 서비스로, 머신러닝과 패턴 매칭을 사용하여 AWS 내의 민감한 데이터를 탐지하고 보호함
- Macie는 개인 식별 정보(PII)와 같은 민감한 데이터를 식별하고 이에 대한 알림을 제공함

AWS Secrets Manager
- 비교적 새로운 서비스로, 비밀정보를 안전하게 저장하기 위한 용도로 사용됨
- 일정 주기(X일)마다 비밀정보를 강제로 회전시킬 수 있음
- Lambda를 사용하여 비밀정보 회전 시 자동으로 새로운 비밀정보를 생성함
- Amazon RDS(MySQL, PostgreSQL, Aurora)와 통합 가능함
- 비밀정보는 KMS를 사용하여 암호화됨
- 주로 RDS와의 통합을 위해 사용됨
AWS Secrets Manager – 다중 리전 비밀 정보
- 여러 AWS 리전에 비밀 정보를 복제할 수 있음
- Secrets Manager가 기본 비밀 정보와 읽기 전용 복제본을 자동으로 동기화함
- 읽기 전용 복제본을 독립적인 비밀 정보로 승격할 수 있음
- 사용 사례: 다중 리전 애플리케이션, 재해 복구 전략, 다중 리전 데이터베이스 등

AWS WAF – 웹 애플리케이션 방화벽(Web Application Firewall)
- 웹 애플리케이션을 일반적인 웹 공격으로부터 보호함 (7계층)
- 7계층은 HTTP 프로토콜을 의미하며, 4계층(TCP/UDP)과 구분됨
- 다음과 같은 서비스에 배포할 수 있음
- Application Load Balancer
- API Gateway
- CloudFront
- AppSync GraphQL API
- Cognito 사용자 풀
- 웹 ACL(Web Access Control List) 규칙을 정의함
- IP 집합: 최대 10,000개의 IP 주소를 지정할 수 있으며, 더 많은 IP를 위해 여러 규칙을 사용할 수 있음
- HTTP 헤더, HTTP 본문, URI 문자열을 기반으로 필터링하여 일반적인 공격(SQL 인젝션, XSS 등)을 방지함
- 크기 제약, 지리적 매칭을 통해 특정 국가를 차단할 수 있음
- 발생 횟수를 계산하는 속도 기반 규칙을 사용하여 DDoS 공격을 방어할 수 있음
- 웹 ACL은 CloudFront를 제외하고 리전 단위로 적용됨
- 규칙 그룹은 여러 규칙을 묶어 웹 ACL에 재사용할 수 있는 단위임
WAF – 로드 밸런서와 함께 사용할 때 고정 IP 설정
- WAF는 네트워크 로드 밸런서(Network Load Balancer, 4계층)를 지원하지 않음
- 고정 IP와 WAF를 함께 사용해야 하는 경우, Global Accelerator를 사용하여 Application Load Balancer(ALB)에 WAF를 적용할 수 있음

AWS Shield: DDoS 공격으로부터 보호
- DDoS(Distributed Denial of Service, 분산 서비스 거부)란 다수의 요청을 동시에 보내 시스템을 마비시키는 공격임
- AWS Shield Standard
- 모든 AWS 고객에게 자동으로 활성화되는 무료 서비스임
- SYN/UDP Flood, 리플렉션(Reflection) 공격 등 3계층 및 4계층 공격으로부터 보호함
- AWS Shield Advanced
- 선택적으로 사용할 수 있는 유료 DDoS 완화 서비스(조직당 월 $3,000)
- Amazon EC2, Elastic Load Balancing(ELB), Amazon CloudFront, AWS Global Accelerator, Route 53 등의 고급 공격을 방어함
- AWS DDoS 대응팀(DRP)에 24시간 365일 접근 가능함
- DDoS로 인한 사용량 급증 시 발생하는 추가 요금으로부터 보호함
- 애플리케이션 계층(7계층) DDoS 완화 기능을 자동으로 수행하며, AWS WAF 규칙을 자동으로 생성·평가·배포하여 공격을 차단함
Security
Kinesis
- Kinesis Data Streams
- HTTPS 프로토콜을 사용하는 SSL 엔드포인트를 통해 전송 중 암호화를 수행함
- AWS KMS를 사용하여 서버 측 암호화(Encryption at rest)를 제공함
- 클라이언트 측 암호화를 사용하려면 자체 암호화 라이브러리를 사용해야 함
- VPC 엔드포인트(PrivateLink)를 지원하여 프라이빗하게 접근 가능함
- KCL(Kinesis Client Library)은 DynamoDB 테이블에 대한 읽기/쓰기 권한이 필요함
- Kinesis Data Firehose
- S3, Elasticsearch, Redshift, Splunk 등으로 데이터를 전달할 수 있도록 IAM 역할을 연결해야 함
- KMS를 사용하여 전송 스트림을 서버 측 암호화를 할 수 있음
- VPC 엔드포인트(PrivateLink)를 지원하여 프라이빗하게 접근 가능함
- Kinesis Data Analytics
- IAM 역할을 연결하여 Kinesis Data Streams 및 참조 데이터 소스에서 읽고, 출력 대상으로(예: Kinesis Data Firehose) 쓸 수 있도록 해야 함
SQS
- HTTPS 엔드포인트를 사용하여 전송 중 암호화를 수행함
- KMS를 사용하여 서버 측 암호화를 지원함
- IAM 정책에서 SQS 사용 권한을 명시적으로 허용해야 함
- SQS 큐 접근 정책을 설정할 수 있음
- 클라이언트 측 암호화는 수동으로 구현해야 함
- VPC 엔드포인트는 인터페이스를 통해 제공됨
AWS IoT
- AWS IoT 정책(AWS IoT Policies)
- X.509 인증서 또는 Cognito ID에 연결됨
- 언제든지 특정 디바이스의 접근 권한을 회수할 수 있음
- IoT 정책은 JSON 문서 형식으로 작성됨
- 개별 사물 대신 그룹에 정책을 연결할 수도 있음
- IAM 정책(IAM Policies)
- 사용자, 그룹 또는 역할에 연결됨
- IoT 관련 AWS API 접근을 제어하는 데 사용됨
- 규칙 엔진에 역할을 연결하여 해당 작업을 수행할 수 있도록 함
Amazon S3
- IAM 정책
- S3 버킷 정책
- 접근 제어 목록(ACLs)
- HTTPS를 사용한 전송 중 암호화
- 저장 시 암호화
- 서버 측 암호화: SSE-S3, SSE-KMS, SSE-C
- 클라이언트 측 암호화: Amazon S3 Encryption Client와 같은 방식 사용
- 버전 관리 및 MFA Delete 지원
- 웹사이트 보호를 위한 CORS(Cross-Origin Resource Sharing) 설정 가능
- VPC 엔드포인트는 게이트웨이를 통해 제공
- Glacier는 삭제 방지를 위한 볼트 잠금 정책(Vault Lock Policy, WORM)을 지원함
DynamoDB
- 데이터는 TLS(HTTPS)를 사용하여 전송 중 암호화됨
- DynamoDB 테이블은 저장 시 암호화됨
- 기본 테이블과 보조 인덱스는 KMS 암호화를 사용함
- AWS 소유 키(기본값)
- AWS 관리형 키(aws/dynamodb)
- 고객 관리형 키(사용자가 생성한 키)
- 테이블, API, DAX 접근은 IAM을 통해 제어함
- DynamoDB Streams 또한 암호화되어 있음
- VPC 엔드포인트는 게이트웨이를 통해 제공
RDS
- VPC를 통해 네트워크 격리를 제공함
- 보안 그룹을 통해 DB 인스턴스에 대한 네트워크 접근을 제어함
- KMS를 사용하여 저장 시 암호화를 수행함
- SSL을 사용하여 전송 중 암호화를 지원함
- IAM 정책을 통해 RDS API 접근을 보호함
- IAM 인증은 PostgreSQL, MySQL, MariaDB에서 지원됨
- 데이터베이스 내부에서 사용자 권한을 직접 관리해야 함
- MSSQL Server와 Oracle은 TDE(Transparent Data Encryption, 투명한 데이터 암호화)를 지원함
Aurora
- (RDS와 매우 유사함)
- VPC를 통해 네트워크 격리를 제공함
- 보안 그룹을 통해 DB 인스턴스에 대한 네트워크 접근을 제어함
- KMS를 사용하여 저장 시 암호화를 수행함
- SSL을 사용하여 전송 중 암호화를 지원함
- IAM 인증은 PostgreSQL과 MySQL에서 지원됨
- 데이터베이스 내부에서 사용자 권한을 직접 관리해야 함
Lambda
- 각 Lambda 함수에는 IAM 역할이 연결됨
- 소스(Sources)와 대상(Targets)에 따라 접근 권한을 제어함
- 비밀정보는 KMS 암호화를 사용함
- 구성 정보는 SSM Parameter Store를 통해 관리함
- CloudWatch Logs를 통해 로그를 수집함
- 프라이빗 리소스에 접근하기 위해 VPC 내에 배포할 수 있음
Glue
- Glue 서비스에 대한 IAM 정책을 설정함
- Glue가 JDBC 연결 시 SSL만 사용하도록 구성해야 함
- 데이터 카탈로그는 KMS로 암호화됨
- 연결 비밀번호는 KMS로 암호화됨
- AWS Glue가 데이터를 쓸 때 적용되는 보안 설정
- S3 암호화 모드: SSE-S3 또는 SSE-KMS
- CloudWatch 암호화 모드
- Job bookmark 암호화 모드
EMR
- SSH 자격 증명을 위해 Amazon EC2 키 페어를 사용함
- EC2 인스턴스에 IAM 역할을 연결하여 다음을 수행함
- S3에 대한 적절한 접근 권한 부여
- EMRFS의 S3 요청 처리
- Hive를 통한 DynamoDB 스캔 수행
- EC2 보안 그룹 구성
- 마스터 노드용 보안 그룹
- 클러스터 노드(코어 노드 또는 태스크 노드)용 보안 그룹
- 저장 시 암호화 : EBS 암호화, 오픈소스 HDFS 암호화, LUKS, EMRFS를 통한 S3 암호화 지원
- 전송 중 암호화 : 노드 간 통신, EMRFS, TLS를 통한 데이터 전송 암호화
- 데이터는 S3에 업로드되기 전에 암호화됨
- Kerberos 인증: Active Directory 기반 인증 제공
- Apache Ranger: 외부 EC2 인스턴스에 설정하여 중앙 집중식 권한 관리(RBAC – 역할 기반 접근 제어) 제공
- 참고: https://aws.amazon.com/blogs/big-data/best-practices-for-securing-amazon-emr/
OpenSearch Service
- Amazon VPC를 통해 네트워크 격리를 제공함
- OpenSearch 정책을 사용하여 보안을 추가로 관리함
- KMS를 사용하여 저장 시 암호화를 수행함
- HTTPS(TLS)를 사용하여 전송 중 암호화를 지원함
- IAM 또는 Cognito 기반 인증을 지원함
- Amazon Cognito를 사용하면 최종 사용자가 SAML을 통해 Microsoft Active Directory와 같은 기업용 신원 공급자를 이용하여 OpenSearch 대시보드에 로그인할 수 있음
Redshift
- VPC를 통해 네트워크 격리를 제공함
- 클러스터 보안 그룹을 사용하여 접근을 제어함
- SSL이 활성화된 JDBC 드라이버를 사용하여 전송 중 암호화를 수행함
- KMS 또는 HSM 장치를 사용하여 저장 시 암호화를 수행함 (HSM 연결 필요)
- 기본 관리형 키를 사용하는 S3 SSE(Server-Side Encryption)를 지원함
- Redshift용 IAM 역할을 사용해야 함
- S3 또는 KMS 등 다른 AWS 리소스에 접근하기 위함
- COPY 또는 UNLOAD 명령문 내에서 해당 IAM 역할을 참조해야 함
- 또는 액세스 키와 시크릿 키 자격 증명을 붙여넣을 수 있음
Athena
- 서비스 접근을 제어하기 위해 IAM 정책을 사용함
- 데이터는 S3에 저장되며, IAM 정책, 버킷 정책, ACL을 통해 접근을 제어함
- S3 표준에 따른 데이터 암호화를 지원함: SSE-S3, SSE-KMS, CSE-KMS
- Athena와 S3, JDBC 간 통신은 TLS를 사용하여 전송 중 암호화를 수행함
- AWS Glue 데이터 카탈로그를 활용하여 세밀한 단위의 접근 제어를 제공함
QuickSight
- Standard Edition
- IAM 사용자 기반 접근
- 이메일 기반 계정 지원
- Enterprise Edition
- Active Directory 통합 지원
- Federated Login 지원
- 다중 인증(MFA) 지원
- 저장 시 및 SPICE 내 데이터 암호화 지원
- 행 수준 보안을 통해 사용자별로 접근 가능한 행을 제어함
- 열 수준 보안을 통해 데이터셋 내 특정 열에 대한 접근을 제한함
'CERTIFICATES > AWS DEA-C01' 카테고리의 다른 글
| Management and Governance (0) | 2025.10.22 |
|---|---|
| Networking and Content Delivery (0) | 2025.10.21 |
| Application Integration (0) | 2025.10.21 |
| Analytics (0) | 2025.10.21 |
| Container (0) | 2025.10.14 |