본문 바로가기

프로그래밍/AWS Solutions Architect

AWS SAA - Amazon S3

  • AWS에서 가장 중요한 구성 요소 중 하나
  • "무한히 확장 가능한" 스토리지
    • 크기를 사전에 프로비저닝 할 필요가 없으며 무한히 확장 가능하다.

Bucket

  • S3는 객체를 저장하게 해주는 시스템이자 서비스이다.
  • 파일이 버킷(디렉토리)에 있고 각 버킷은 고유한 이름을 갖는다.
  • 이미 사용 중인 버킷의 이름은 만들 수 없다.
  • 버킷은 region 수준에서 정의된다.
    • S3는 전역 서비스이지만 버킷은 리전 리소스이다.
  • 명명 규칙
    • 버킷 이름은 3자(최소)에서 63자(최대) 사이여야 한다.
    • 버킷 이름은 소문자, 숫자, 점(.) 및 하이픈(-)으로만 구성될 수 있다.
    • 버킷 이름은 문자 또는 숫자로 시작하고 끝나야 한다.
    • 버킷 이름은 IP 주소 형식(예: 192.168.5.4)을 사용하면 안된다.
    • 버킷 이름은 접두사 xn--로 시작해서는 안된다.
    • 버킷 이름은 접미사 -s3alias로 끝나서는 안된다. 이 접미사는 액세스 포인트 별칭 이름 용도로 예약되어 있다.
    • Amazon S3 Transfer Acceleration에 사용되는 버킷은 이름에 점(.)을 사용할 수 없다.

Object

  • 객체(파일)은 Key를 가지고 있다.
  • Key
    • 파일의 전체 경로
    • 접두어(파일 경로)와 객체 이름으로 구성된다.
    • bucket 내에는 "directory" 개념이 없다.
    • 오직 키의 이름만 길고 '/'를 사용할 뿐이다.
  • Value
    • 최대 크기는 5TB(5000GB)이다.
    • 한 번에 5GB 이상 업로드할 수 없다.
      • 만약 5TB를 업로드 하려면 객체를 5GB 미만으로 나누어서 각각 업로드 해야 한다.(multi-part upload)
  • Metadata
    • key / value 페어의 리스트
    • 시스템이나 사용자 메타데이터에서 사용
    • 객체에 정보와 태그를 추가할 때 사용한다.
  • Tags
    • key / value 페어의 유니코드 키 (최대 10개)
    • 보안, 라이프사이클에 유용하다.
  • Version ID
    • versioning이 활성화 되어 있을 경우

Versioning

  • Amazon S3의 파일에 버전을 줄 수 있음
  • 이 기능은 bucket level에서 활성화 해야 함
  • 같은 키로 파일을 다시 업로드 하는 경우 기존 파일을 덮어쓰는 것이 아닌 해당 파일의 새로운 버전을 생성하는 것
  • Amazon S3에서 버킷을 버저닝하여 모든 파일 버전을 어느 정도 유지하는 것이 가장 좋은 방법이다.
    • 원치 않는 삭제로부터 보호받을 수 있기 때문이다.
    • 필요하다면 이전 버전으로 손쉽게 되돌릴 수도 있다.
  • 버저닝을 활성화하기 전에 버전 관리되지 않은 파일은 null 버전이 된다.
  • 버킷에서 버저닝을 중당하면 이전 버전을 삭제하는 것이 아닌 이후의 파일이 버전을 할당받지 못하는 것이다.

Object Encryption

  • 방법
    • SSE-S3
      • AWS가 처리 및 관리하는 키를 사용해 S3 객체를 암호화한다.
    • SSE-KMS
      • AWS Key Management Service를 사용해서 암호화 키를 관리한다.
    • SSE-C
      • 사용자가 만든 암호화 키를 관리할 때 쓰이는 방식이다.
    • Client Side Encryption

SSE-S3

  • Amazon S3에서 처리하고 관리하는 키를 암호화에 사용하는 방식
  • 객체는 서버 측에서 암호화된다.
  • SSE가 Server Side Encryption의 줄임말이다.
  • 암호화 유형이 AES-256 알고리즘이다.
  • 객체를 업로드하고 SSE S3 암호화를 설정하려면 "x-amz-server-side-encryption":"AES256" 으로 헤더를 설정한다.
    • x-amz는 x Amazon이며 x Amazon 서버 측 암호화 AES-256으로 해석할 수 있다.
  • 인스턴스에서 데이터 키를 소유 및 관리한다.

SSE-KMS

  • 암호화 키는 KMS 서비스에서 처리 및 관리한다.
  • 누가 어떤 키에 접근할 수 있을지 제어 가능하고 감사 추적을 할 수 있기 때문이다.
  • 객체는 서버 측에서 암호화된다.
  • 객체를 업로드하고 SSE KMS 암호화를 설정하려면 "x-amz-server-side-encryption":"aws:kms" 으로 헤더를 설정한다.
  • Amazon S3는 미리 정의해둔 KMS Customer Master key(CMK)를 사용해 암호화를 한다.

SSE-C

  • 서버 측 암호화 방식이고 AWS가 외부에서 고객이 관리하는 키를 사용한다.
  • Amazon S3는 고객이 제공한 암호화 키를 저장하지 않는다.
  • 데이터를 AWS로 전송할 때에는 HTTPS를 사용해야 한다.
  • 암호화 키가 HTTP의 헤더에 제공되어야 하는데, 모든 HTTP 요청마다 매번 제공되어야 한다.
    • 사용 후 폐기하기 때문이다.

Client Side Encryption

  • 클라이언트 라이브러리를 사용할 수 있다.
    • Amazon S3 Encryption Client 등으로 암호화를 수행한다.
  • 클라이언트는 데이터를 S3로 보내기 전에 암호화 해야한다.
  • 클라이언트에서 암호화 되었다면 복호화 또한 클라이언트에서 해야한다.
  • 키와 암호화 주기(encryption cycle) 전부를 클라이언트가 관리한다.

Transit Encryption (SSL / TLS)

  • Amazon S3에서 노출 되는 것
    • HTTP endpoint
      • 암호화 되지 않음
    • HTTPS endpoint
      • 전송 중 암호화 됨
  • 원하는 endpoint를 사용해도 되지만, HTTPS를 추천한다.
  • 대부분 클라이언트는 HTTPS endpoint를 기본으로 사용한다.
  • SSE-C를 사용할 경우 HTTPS는 의무적으로 사용해야 한다.
  • Encryption in flight(전송 중 암호화)는 SSL / TLS 라고도 불린다.

S3 Security

  • User Based(사용자 기반 보안)
    • IAM 정책 : 어떤 API 호출이 허용될지 결정한다.
  • Resource Based (리소스 기반 보안)
    • S3 Bucket Policies
      • S3 콘솔에서 설정 가능한 버킷 전반의 규칙이다.
      • S3 버킷에서 보안 주체가 무엇을 할 수 있는지 혹은 할 수 없는지를 결정하는 정책이다.
      • S3 버킷으로의 교차 계정(cross account) 액세스가 활성화된다.
    • Object Access Control List(ACL)
      • 세분화되어 있다.
    • Bucket Access Control List(ACL)
      • 일반적이지 않다.
  • IAM 보안 주체는 다음과 같은 경우 S3 객체에 액세스할 수 있다.
    • 사용자 IAM 권한이 허용하거나 혹은 리소스 정책이 허용한다.
    • 버킷 정책이 사용자 액세스를 명시적으로 거부한다면 액세스가 불가능해진다.

S3 Bucket Policies

  • JSON 기반 정책이다.
    • Resources : Bucket, Object
    • Actions : API의 Allow 혹은 Deny 설정
    • Effect : Allow / Deny
    • Principal : 해당 S3 Bucket의 정책을 적용할 계정 혹은 유저
  • S3 Bucket을 사용하는 사례
    • 퍼블릭 액세스 권한을 승인
    • 업로드 시점에 객체를 암호화 시킬 경우
    • 교차 계정 S3 버킷 정책을 사용해서 다른 계정에 액세스 권한을 주는 경우

Block Public Access Bucket setting

  • 객체가 퍼블릭화 되는 것을 차단하는 설정이다.
  • 계정에 제한이 있을 경우에 사용된다.
  • 종류
    • 새 액세스 제어 목록 (ACLs)
    • 모든 액세스 제어 목록 (ACLs)
    • 새 퍼블릭 또는 액세스 포인트 정책
  • 객체와 버킷이 외부로 공개되지 않도록 차단할 수 있다.
  • 퍼블릭 버킷이나 액세스 포인트 정책을 통해 버킷과 객체를 향한 퍼블릭 및 교차 계정 액세스를 막을 수 있다.

'프로그래밍 > AWS Solutions Architect' 카테고리의 다른 글

AWS SAP - IAM  (0) 2024.02.27
AWS SAA - Amazon Route 53  (0) 2022.05.18
AWS SAA - Amazon ElastiCache  (0) 2022.05.17
AWS SAA - Amazon Aurora  (0) 2022.05.17
AWS SAA - Amazon RDS  (0) 2022.05.15