📌 S3 암호화
💡 S3 객체 암호화 개요
- S3 객체 암호화는 서버 측 암호화(SSE)와 클라이언트 측 암호화로 나뉜다.
- 서버 측 암호화(SSE)의 세 가지 옵션
- SSE-S3: AWS가 관리하는 키로 암호화 (기본 설정)
- SSE-KMS: KMS 서비스를 사용하여 암호화 키를 관리
- SSE-C: 사용자 제공 키로 암호화
- 클라이언트 측 암호화는 데이터를 S3로 업로드하기 전에 사용자가 직접 암호화한다.
🔒 서버 측 암호화 - SSE-S3
- SSE-S3
- AWS에서 관리하는 키를 사용해 서버 측에서 객체를 암호화한다.
- 암호화 방식은 AES-256이며, 객체 업로드 시 헤더에 x-amz-server-side-encryption: "AES256"을 설정해야 한다.
- SSE-S3는 새로운 버킷과 객체에 기본적으로 활성화되어 있다.
🔒 서버 측 암호화 - SSE-KMS
- SSE-KMS
- AWS KMS(Key Management Service)를 사용해 키를 관리한다.
- KMS를 사용하면 키의 사용을 제어하고, CloudTrail을 통해 로그를 남겨 추적할 수 있다.
- 객체 업로드 시 헤더에 x-amz-server-side-encryption: "aws"를 설정해야 한다.
- SSE-KMS는 AWS에서 제공하는 추가적인 보안 기능을 사용하여 암호화를 강화한다.
🚨 SSE-KMS 한계점
- SSE-KMS를 사용할 때는 KMS API 호출 한계에 주의🚨해야 한다.
- 업로드 시 GenerateDataKey / 다운로드 시 Decrypt API가 호출된다
- (이는 KMS의 초당 API 요청 한도에 포함됨)
- 리전에 따라 5,500 ~ 30,000 요청/초의 한계가 있으며, 할당량을 초과하면 성능에 영향을 미칠 수 있다.
- 서비스 할당량을 늘릴 수 있는 옵션이 있다.
🔒 서버 측 암호화 - SSE-C
- SSE-C는 사용자가 직접 제공한 키로 서버 측에서 암호화를 수행한다.
- Amazon S3는 이 키를 저장하지 않으며, 사용 후 폐기된다.
- HTTPS 통신을 사용하여 키를 전송해야 하며, 모든 HTTP 요청에 암호화 키를 제공해야 한다.
🔒 클라이언트 측 암호화
- 클라이언트 측 암호화는 데이터를 클라이언트에서 직접 암호화한 후 S3로 업로드하는 방식.
- 이를 위해 Amazon S3 클라이언트 측 암호화 라이브러리(Amazon S3 Client-Side Encryption Library)와 같은 라이브러리를 사용할 수 있다.
- 클라이언트가 암호화 주기를 완전히 관리한다. 즉, 암호화 및 복호화는 모두 클라이언트 측에서 이루어지며, AWS는 암호화 키를 저장하거나 관리하지 않는다.
- 데이터를 S3에 업로드하기 전에, 클라이언트가 먼저 데이터를 암호화해야 하고, 데이터를 다운로드할 때는 클라이언트가 복호화해야 한다.
🔒 전송 중 암호화 (SSL/TLS)
- 전송 중 암호화는 SSL/TLS 프로토콜을 사용해 데이터를 안전하게 전송하는 방식
- HTTP와 HTTPS 엔드포인트 중 HTTPS를 사용해야 데이터를 암호화할 수 있다.
- SSE-C를 사용할 때는 반드시 HTTPS를 사용해야 한다.🌟🌟
📌 S3 기본 암호화
💡 Amazon S3 기본 암호화와 버킷 정책
- 기본적으로 Amazon S3는 SSE-S3 암호화를 사용해 새로 저장된 객체를 암호화한다.
- 그러나, 버킷 정책(Bucket Policies)을 통해 특정 암호화 헤더가 없는 API 호출을 거부하고 강제 암호화를 적용할 수 있다.
💡 버킷 정책을 통한 암호화 강제
- 버킷 정책을 사용해 SSE-KMS 또는 SSE-C와 같은 특정 암호화 헤더가 없는 API 호출을 거부할 수 있다.
- 버킷 정책은 항상 기본 암호화보다 우선적으로 평가된다.
- 키: s3:x-amz-server-side-encryption
- 값: aws:kms
- 서버 측 암호화가 AWS KMS(Key Management Service)를 사용해야만 요청이 허용된다는 의미
즉, PutObject 요청이 서버 측 암호화를 AWS KMS로 설정하지 않으면 이 요청은 거부된다.
📌 S3 CORS
💡 CORS의 개념
- CORS는 Cross-Origin Resource Sharing의 약자
- 이를 통해 하나의 웹 페이지에서 다른 origin에 있는 리소스에 접근할 수 있게 한다.
- 출처는 프로토콜, 호스트(도메인), 포트로 구성되며, 출처가 다르면 기본적으로 웹 브라우저는 보안 상의 이유로 요청을 차단한다.
- 동일 출처의 예: http://example.com**/app1** 과 http://example.com**/app2**
- 서로 다른 출처의 예: http://**www.example.com** 과 http://**other.example.com**
- 웹 브라우저는 다른 출처로의 요청이 허용되는지 확인하기 위해 'CORS 헤더'를 사용한다.
🦾 CORS 작동 원리
- 웹 브라우저가 첫 번째 서버(예: https://www.example.com)에 접근하고 다른 출처의 리ㅁ소스(예: https://www.other.com)에 접근하려고 할 때 'Preflight 요청'이 발생한다.
- Preflight 요청
- OPTIONS 메서드를 사용해 다른 서버에 요청이 허용되는지 확인하고, 응답으로 CORS 헤더가 포함된 Access-Control-Allow-Origin을 받는다.
- 그 이후에 본격적인 GET 요청이 이루어진다.
💡 CORS in Amazon S3
- Amazon S3에서 교차 출처 요청을 처리하려면 CORS 헤더를 활성화해야 한다.
- 특정 출처만 허용하거나, 모든 출처를 허용하는 설정이 가능하다.
- 예시로, 정적 웹사이트가 활성화된 S3 버킷에서 다른 버킷의 리소스를 가져올 때 CORS 설정이 없으면 요청이 거부될 수 있다.
📌 S3 MFA 삭제
💡 MFA Delete의 정의
- MFA는 Multi-Factor Authentication(다중 인증)
- 사용자가 중요한 작업을 수행하기 전에 추가로 생성된 코드를 입력해야 하는 보안 기능
- 추가 인증 단계를 거치게 함으로써 보안 강화
- MFA Delete가 적용되는 작업
- 객체 버전의 영구 삭제
- 버킷의 버전 관리 중단
- MFA Delete가 적용되지 않는 작업
- 버전 관리 활성화
- 삭제된 버전 나열
💡 MFA 장치 사용
- MFA Delete는 보통 모바일 디바이스나 하드웨어 디바이스에서 생성된 코드를 요구한다.
- Google Authenticator와 같은 소프트웨어나 하드웨어 장치를 사용할 수 있다.
- 루트 계정만이 MFA Delete를 활성화하거나 비활성화할 수 있다.
📌 S3 액세스 로그
💡 S3 Access Logs의 개념
- "S3 Access Logs"
- 감사 목적을 위해 S3 버킷에 대한 모든 액세스를 기록하는 방법
- 모든 계정에서 S3에 보낸 모든 요청이 다른 S3 버킷에 기록된다.
- 데이터를 분석하기 위해 다양한 분석 도구를 사용할 수 있다.
- 로깅 버킷은 동일한 AWS 리전 내에 있어야 한다.
🚨 S3 Access Logs 주의 사항
- 로깅 버킷을 모니터링되는 버킷으로 설정하면 안된다.🚨
- 이 설정은 로그 루프를 생성하여 버킷의 크기가 기하급수적으로 증가하게 만든다.
📌 S3 사전 로그인된 URL
🧐 S3 Pre-Signed URLs 개념 및 생성 방법
Pre-Signed란??
- 사용자가 생성한 URL을 통해 지정된 시간 동안 서버의 자원(파일 등)에 접근할 수 있게 해주는 임시 링크
- Pre-Signed URL은 S3 콘솔, AWS CLI, SDK를 사용해 생성 가능하다.
- 이 URL은 서버에 저장된 자원에 대한 요청을 사전에 승인하며, 서명된 쿼리 파라미터를 포함하여 생성된다.
- URL에는 만료 시간이 설정되며, S3 콘솔을 사용하면 최대 12시간, CLI를 사용하면 최대 168시간까지 설정 가능하다.
- 설정한 유효 기간 동안만 유효하며, 이 기간이 지나면 자동으로 접근이 불가능해진다.
- Pre-Signed URL을 받은 사용자는 URL을 생성한 사용자의 권한을 상속받아 GET/PUT 작업을 수행할 수 있다.
💡 Pre-Signed URLs의 사용 사례
- Pre-Signed URL은 다음과 같은 상황에서 유용하게 사용된다
- 로그인한 사용자만 프리미엄 비디오를 다운로드할 수 있도록 설정.
- 사용자 목록이 계속 변하는 경우, 매번 동적으로 URL을 생성하여 파일 다운로드를 허용.
- 특정 사용자가 S3 버킷에 파일을 업로드할 수 있도록 일시적으로 권한 부여.
📌 S3 사전 엑세스 포인트
🧐 S3 Access Points란?
- S3 Access Points는 S3 버킷에 대한 보안 관리를 단순화한다.
- 각 Access Point는 자체 DNS 이름(인터넷 또는 VPC 오리진)을 가지고 있으며, 개별 액세스 포인트 정책(버킷 정책과 유사)을 통해 대규모로 보안을 관리할 수 있다.
🌟 Access Points의 역할
- 여러 사용자가 서로 다른 접근 권한을 가지고 S3 버킷의 일부에 액세스할 수 있도록 허용한다.
- 예:
- Finance Access Point: 재무 데이터를 읽기/쓰기 권한으로 제공
- Sales Access Point: 영업 데이터를 읽기/쓰기 권한으로 제공
- Analytics Access Point: 전체 버킷을 읽기 전용으로 제공
✴️ VPC 오리진의 Access Point
- VPC 안에서만 액세스할 수 있도록 정의할 수 있다.
- VPC Endpoint를 사용해 Access Point에 액세스할 수 있으며, VPC Endpoint 정책은 S3 버킷과 Access Point에 대한 액세스를 허용해야 한다.
📌 S3 객체 Lambda
🧐 S3 Object Lambda란?
- AWS Lambda 함수를 사용하여 S3 버킷에서 검색된 객체를 변경하거나 가공할 수 있는 기능.
- 추가적인 S3 버킷 생성 없이 동일한 S3 버킷 내에서 객체를 다양한 형태로 제공할 수 있다.
- S3 액세스 포인트 및 S3 Object Lambda Access Points를 통해 동작한다.
- E-Commerce, Analytics, Marketing 애플리케이션이 각각 오리지널, 편집된, 보강된 객체를 S3 Object Lambda Access Point를 통해 얻는 과정.
- Lambda 함수가 객체를 어떻게 변경하는지와 각각의 애플리케이션이 해당 객체를 어떻게 다르게 접근하는지 설명.
💡 주요 활용 사례
- 개인 식별 정보(PII) 편집: 분석 또는 비생산 환경에서 데이터를 활용할 때 민감한 정보를 편집하는 경우.
- 데이터 형식 변환: XML에서 JSON으로 데이터 형식 변환과 같은 다양한 데이터 형식 간의 변환 작업.
- 이미지 처리: 워터마크 추가, 이미지 크기 조정 등. 사용자별로 다르게 객체를 가공해 제공할 수 있다.
반응형
'AWS' 카테고리의 다른 글
AWS Section 16. ECS, ECR 및 Fargate - AWS의 도커 (0) | 2024.10.26 |
---|---|
AWS Section 15. CloudFront (0) | 2024.10.26 |
AWS Section 13. Amazon S3 고급 (0) | 2024.09.27 |
AWS Section 12. AWS CLI, SDK, IAM 역할 및 정책 (0) | 2024.09.27 |
AWS Section 11. Amazon S3 (0) | 2024.09.27 |