본문 바로가기
AWS

AWS Section 14. Amazon S3 보안

by _비니_ 2024. 9. 27.

📌 S3 암호화

 

💡 S3 객체 암호화 개요

  • S3 객체 암호화는 서버 측 암호화(SSE)와 클라이언트 측 암호화로 나뉜다.
  • 서버 측 암호화(SSE)의 세 가지 옵션
    1. SSE-S3: AWS가 관리하는 키로 암호화 (기본 설정)
    2. SSE-KMS: KMS 서비스를 사용하여 암호화 키를 관리
    3. SSE-C: 사용자 제공 키로 암호화
  • 클라이언트 측 암호화는 데이터를 S3로 업로드하기 전에 사용자가 직접 암호화한다.

 

🔒 서버 측 암호화 - SSE-S3

  • SSE-S3
    • AWS에서 관리하는 키를 사용해 서버 측에서 객체를 암호화한다.
  • 암호화 방식은 AES-256이며, 객체 업로드 시 헤더에 x-amz-server-side-encryption: "AES256"을 설정해야 한다.
  • SSE-S3는 새로운 버킷과 객체에 기본적으로 활성화되어 있다.

사용자가 객체를 업로드하고, AWS가 소유한 키를 사용하여 서버 측에서 객체가 암호화되는 과정

 

🔒 서버 측 암호화 - SSE-KMS

  • SSE-KMS
    • AWS KMS(Key Management Service)를 사용해 키를 관리한다.
  • KMS를 사용하면 키의 사용을 제어하고, CloudTrail을 통해 로그를 남겨 추적할 수 있다.
  • 객체 업로드 시 헤더에 x-amz-server-side-encryption: "aws"를 설정해야 한다.
  • SSE-KMS는 AWS에서 제공하는 추가적인 보안 기능을 사용하여 암호화를 강화한다.

사용자가 객체를 업로드할 때, KMS 키를 사용해 암호화하는 과정

 

🚨 SSE-KMS 한계점

  • SSE-KMS를 사용할 때는 KMS API 호출 한계에 주의🚨해야 한다.
  • 업로드 시 GenerateDataKey / 다운로드 시 Decrypt API가 호출된다
  • (이는 KMS의 초당 API 요청 한도에 포함됨)
  • 리전에 따라 5,500 ~ 30,000 요청/초의 한계가 있으며, 할당량을 초과하면 성능에 영향을 미칠 수 있다.
  • 서비스 할당량을 늘릴 수 있는 옵션이 있다.

SSE-KMS를 사용해 파일을 업로드하거나 다운로드할 때, KMS API 호출이 발생하는 과정

 

 

🔒 서버 측 암호화 - SSE-C

  • SSE-C사용자가 직접 제공한 키로 서버 측에서 암호화를 수행한다.
  • Amazon S3는 이 키를 저장하지 않으며, 사용 후 폐기된다.
  • HTTPS 통신을 사용하여 키를 전송해야 하며, 모든 HTTP 요청에 암호화 키를 제공해야 한다.

사용자가 제공한 암호화 키를 사용하여 S3 객체가 암호화되는 과정 (AWS는 이 키를 저장하지 않으며, 사용자는 HTTPS를 통해 안전하게 키를 전달)

 

🔒 클라이언트 측 암호화

  • 클라이언트 측 암호화는 데이터를 클라이언트에서 직접 암호화한 후 S3로 업로드하는 방식.
  • 이를 위해 Amazon S3 클라이언트 측 암호화 라이브러리(Amazon S3 Client-Side Encryption Library)와 같은 라이브러리를 사용할 수 있다.
  • 클라이언트가 암호화 주기를 완전히 관리한다. 즉, 암호화 및 복호화는 모두 클라이언트 측에서 이루어지며, AWS는 암호화 키를 저장하거나 관리하지 않는다.
  • 데이터를 S3에 업로드하기 전에, 클라이언트가 먼저 데이터를 암호화해야 하고, 데이터를 다운로드할 때는 클라이언트가 복호화해야 한다.

 

클라이언트 측에서 직접 파일을 암호화 한 후, 해당 파일을 S3에 업로드 하는 과정

🔒 전송 중 암호화 (SSL/TLS)

  • 전송 중 암호화는 SSL/TLS 프로토콜을 사용해 데이터를 안전하게 전송하는 방식
  • HTTP와 HTTPS 엔드포인트 중 HTTPS를 사용해야 데이터를 암호화할 수 있다.
  • SSE-C를 사용할 때는 반드시 HTTPS를 사용해야 한다.🌟🌟

HTTP와 HTTPS 연결의 차이
HTTPS를 통해서만 버킷에 접근할 수 있도록 하는 정책

 

📌 S3 기본 암호화

 

💡 Amazon S3 기본 암호화와 버킷 정책

  • 기본적으로 Amazon S3는 SSE-S3 암호화를 사용해 새로 저장된 객체를 암호화한다.
  • 그러나, 버킷 정책(Bucket Policies)을 통해 특정 암호화 헤더가 없는 API 호출을 거부하고 강제 암호화를 적용할 수 있다.

 

💡 버킷 정책을 통한 암호화 강제

  • 버킷 정책을 사용해 SSE-KMS 또는 SSE-C와 같은 특정 암호화 헤더가 없는 API 호출을 거부할 수 있다.
  • 버킷 정책은 항상 기본 암호화보다 우선적으로 평가된다.

각각의 정책이 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 버킷에 기록된다.

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 작업을 수행할 수 있다.

S3 버킷 소유자가 Pre-Signed URL을 생성하고, 해당 URL을 사용자가 활용하여 프라이빗 버킷에 있는 파일을 액세스하는 과정

 

💡 Pre-Signed URLs의 사용 사례

  • Pre-Signed URL은 다음과 같은 상황에서 유용하게 사용된다
    1. 로그인한 사용자만 프리미엄 비디오를 다운로드할 수 있도록 설정.
    2. 사용자 목록이 계속 변하는 경우, 매번 동적으로 URL을 생성하여 파일 다운로드를 허용.
    3. 특정 사용자가 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: 전체 버킷을 읽기 전용으로 제공

Finance, Sales, Analytics라는 3개의 그룹에 각기 다른 액세스 포인트를 부여해, 각각의 S3 버킷 일부에 대해 적절한 접근 권한을 가진다.

 

 

✴️ VPC 오리진의 Access Point

  • VPC 안에서만 액세스할 수 있도록 정의할 수 있다.
  • VPC Endpoint를 사용해 Access Point에 액세스할 수 있으며, VPC Endpoint 정책은 S3 버킷과 Access Point에 대한 액세스를 허용해야 한다.

EC2 인스턴스가 VPC Endpoint를 통해 Access Point에 접근하고, 해당 Access Point는 VPC 오리진에 대한 정책을 적용받아 S3 버킷에 연결된다.

 

📌 S3 객체 Lambda

 

🧐 S3 Object Lambda란?

  • AWS Lambda 함수를 사용하여 S3 버킷에서 검색된 객체를 변경하거나 가공할 수 있는 기능.
  • 추가적인 S3 버킷 생성 없이 동일한 S3 버킷 내에서 객체를 다양한 형태로 제공할 수 있다.
  • S3 액세스 포인트 및 S3 Object Lambda Access Points를 통해 동작한다.

어떻게 Lambda 함수와 S3 액세스 포인트가 연결되어 객체를 가공하는지를 보여준다.

  • 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