S3에 대한 기본 개념
S3 (Simple Storage Service)의 특징
안전하고 가변적인 Object 저장공간을 제공한다. (ex. Google Cloud)
- AWS에서 모든 파일에 일종의 안전장치를 걸어 놓아서 외부에서 접근은 불가능하게 만들어준다.
- 우리가 따로 저장 공간의 크기를 직접 만지지 않아도 자기가 알아서 크기를 조절한다.
편리한 UI 인터페이스를 통해 어디서나 쉽게 데이터를 저장하고 불러올 수 있다.
파일 크기는 파일당 0KB부터 최대 5TB까지 지원한다.
저장공간이 무제한이다. (디스크 크기를 따로 할당할 필요가 없다)
Bucket 이라는 이름을 사용한다. (디렉토리와 유사함)
Bucket은 보편적인 namespace를 사용한다. (고유한 성질)
- IAM과 마찬가지로 S3는 리전이 글로벌이기 때문에 리전과 상관없이 Bucket 이름은 고유해야한다.
S3 Object 구성요소
- Key (파일명)
- Value (파일에 대한 데이터)
- Version ID (S3 고유 특징)
- 똑같은 파일인데 다른 버전으로 올릴 수 있게 해줄수 있다.
- Metadata (언제 업로드 되었는지, 오너는 누구인지 등등)
- CORS (한 bucket의 파일을 다른 bucket에서 접근 가능하게 해주는 기능)
S3 Data Consistency Model (S3 일관성 모델)
- Read after Write Consistency (PUT) - 데이터 일관성
- PUT 동작(쓰기 후 읽기) 에 대해서는 데이터 일관성을 보장해준다.
- 파일이 S3 Bucket에 올라간다면 그 파일을 즉시 사용할 수 있다는 뜻이다.
- Eventual Consistency (UPDATE, DELETE) - 최종 일관성
- put과 달리 내가 파일을 update/delete 했을 때 바로 누가 읽게되면 그 파일이 update/delete가 안되어 있는 상태일 수 있다.
- 시간이 지남에 따라 당장은 아니지만 최종적으로 일관성이 유지된다는 뜻이다.
S3 스토리지 종류
- 일반 S3
- S3 - IA(Infrequent Access)
- S3 - One Zone IA
- Glacier
- Intelligent Tiering
1. 일반 S3
가장 보편적으로 사용되는 스토리지 타입이다.
높은 내구성 (데이터 손실 없이), 높은 가용성 (데이터 접근 용이)
2. S3 - IA (Infrequent Access)
자주 접근되지는 않으나 접근시 빠른 접근이 요구되는 파일이 많을시 유용하다.
일반 S3에 비해 비용은 저렴하나 접근시 추가 비용이 발생한다. → 접근이 잦은 데이터를 보관하기에는 적합X
Multi-AZ로 인해 가용성이 상당히 높다.
3. S3 - One Zone IA
단일 AZ를 통한 데이터 저장 → 단일 AZ로 인해 데이터 접근 제한 (조금 낮은 가용성)
데이터 접근시 S3 - IA 보다 20% 비용 저렴하다.
4. Glacier
거의 접근하지 않을 데이터 저장 시 유용
매우 저렴한 비용
데이터 접근시 대략 4~5시간 소요된다.
5. Intelligent Tiering
데이터 접근 주기를 알아서 분석한 후 두가지 티어 중 하나로 분류해준다.
- Frequent Tier (비용이 약간 더 비쌈)
- Infrequent Tier
데이터 접근 주기가 불규칙할 때 매우 유용하다.
최고의 비용 절감 효율을 누릴 수 있다.
S3 사용 용례
- 파일 저장소 (로그, 다양한 파일들-이미지, 비디오, 압축파일 등)
- 웹사이트 호스팅 - HTML, CSS, Javascript 등의 파일을 올려서 실제로 웹 사이트를 돌리기 위한 파일들을 업로드한 후 S3 Bucket을 실제 도메인 DNS로 사용할 수 있다.
- CORS
CORS (Cross-Origin Resource Sharing)
현재 사용자가 접속한 웹 애플리케이션이 다른 출처의 리소스를 불러올 때,
Access-Control-Allow-Origin 헤더를 보내주지 않으면 브라우저가 그 리소스를 거부하는 정책으로,
웹 브라우저에서 보안상의 이유로 도입되었음.
S3에서는 접근 제어 리스트(ACL), CORS 정책(CORS Policy)를 설정하여 액세스 권한을 부여할 수 있다.
(IAM으로 사용자의 버킷 권한 액세스도 관리 가능)
S3 암호화
- 파일 업로드/다운로드 시
- S3에서 파일을 업로드,다운로드 시 SSL/TLS 동작
- 가만히 있을 시
- SEE-S3
- SSE-KMS
- SSE-C
SEE-S3
- 기본적으로 S3 Bucket에 저장되어 있는 모든 Object들은 고유한 키를 가지고 있다.
- SEE-S3는 마스터키라는 것을 가지고 일정 시간마다 고유 키값들을 변경시킨다. (우리가 API를 접근할 때 부여받는 토큰 처럼)
SEE-KMS
- KMS 언제 어떻게 암호를 풀었는지에 대한 기록이 복원되어 있어 좀 더 체계적인 관리를 가능하게 해준다.
SEE-C
- 우리가 암호키를 직접 다룰 수 있으며 따라서 키값을 우리가 변경시켜줘야 한다.
S3 암호화 과정
-
PUT 요청이 생성되었을 때 헤더
PUT 요청 헤더에 ‘x-amz-server-side-encryption-parameter’가 들어있으면 S3는 암호화 요청을 건 것으로 간주한다.
위의 헤더 내용처럼 simon-image.jpg라는 파일이 업로드 될 시에 S3는 AES-256 암호화 알고리즘을 사용하여 암호화할 것이다.
암호화가 걸리지 않은 파일은 Bucket에 못올리게 하는 기능은 없을까?
→ S3의 버킷 정책에서 설정이 가능함.
댓글남기기