[AWS] S3와 S3의 구성 요소들
A. Question
AWS S3란? S3의 다양한 구성 요소들은 어떤 것들이 있는가?
B. Answer
AWS S3(Simple Storage Service)
는 Amazon Web Services에서 제공하는 클라우드 기반 객체 스토리지 서비스이다. S3는 대규모 데이터를 안전하게 저장하고 인터넷을 통해 빠르게 액세스할 수 있는 기능을 제공한다. 사용자는 다양한 유형의 데이터를 무제한으로 저장할 수 있으며, 데이터의 확장성과 가용성이 뛰어나며, 전 세계 어디서나 접근이 가능하다.
S3는 높은 내구성과 가용성을 갖추고 있으며, 데이터를 자동으로 여러 시설에 걸쳐 복제하여 데이터 손실 가능성을 극도로 낮춘다. 이를 통해 기업은 대규모 데이터 저장, 백업, 아카이브, 빅 데이터 분석, 웹 콘텐츠 호스팅 등을 효율적으로 처리할 수 있다. 또한, S3는 비용 효율적인 스토리지 계층을 제공해 데이터 사용 패턴에 맞춰 비용을 최적화할 수 있다.
보안 측면에서도 강력한 암호화 옵션과 세밀한 접근 제어 기능을 제공하여 데이터의 기밀성과 무결성을 보장한다. S3는 사용자의 데이터 보호와 관리 요구를 충족하며, 다양한 AWS 서비스와의 원활한 통합을 위해 강력한 데이터 관리 솔루션을 구축할 수 있도록 지원한다.
1. 버킷(Bucket)
- S3에서 데이터를 저장할 때는 버킷(Bucket)이라는 컨테이너에 파일을 저장한다. 각 버킷은 전역적으로 고유한 이름을 가지며, 기본적으로 파일 저장소의 최상위 디렉터리와 같은 역할을 한다.
- 버킷은 프로젝트별, 데이터 종류별로 분리하여 관리할 수 있다. 예를 들어, 하나의 버킷은 사용자 업로드 파일을, 다른 버킷은 로그 데이터를 저장하는 식으로 사용할 수 있다.
- 버킷별로 분리하여 관리할 수 있어 데이터의 접근 제어, 보안 설정, 정책 적용 등을 세부적으로 조정할 수 있다.
2. 객체(Object)
- 객체는 S3에 저장되는 파일과 메타데이터를 합친 형태이다. 메타데이터는 객체에 대한 부가 정보로, 파일의 크기, 마지막 수정 날짜, 콘텐츠 타입, 사용자 정의 정보 등을 포함할 수 있다. 객체는 S3 내에서 특정 키(Key)를 통해 고유하게 식별된다.
- 키(Key)와 구조: 객체의 키는 파일의 경로와 이름을 포함하는 식별자이며, 이를 통해 객체를 버킷 내에서 구분할 수 있다. 키는 디렉터리 구조처럼 보일 수 있지만, 실제로 S3는 평면적인 구조를 사용한다. 예를 들어,
documents/reports/2024-summary.pdf
라는 키를 가진 객체는documents
폴더 내의reports
폴더에 있는2024-summary.pdf
파일처럼 보이지만, S3는 이러한 구조를 키 값으로만 구분한다. - 객체는 다양한 포맷을 지원하기 때문에 텍스트 파일, 이미지, 비디오, 로그 파일 등 여러 유형의 데이터를 저장할 수 있다. 이로 인해 다양한 데이터 활용 시나리오에 맞춰 S3를 유연하게 사용할 수 있다.
3. 버전 관리(Versioning)
- S3 버전 관리를 활성화하면 동일한 파일의 여러 버전을 저장할 수 있다. 데이터 수정이나 삭제가 발생할 경우 이전 버전을 복원할 수 있어 데이터 손실을 방지하는 데 유용하다.
- 중요한 데이터가 변경될 가능성이 있거나 복구가 필요할 수 있는 경우 버전 관리를 활성화해 데이터를 안전하게 보호한다.
(1) 버전 관리 활성화
- AWS Management Console에 로그인한 후, S3 대시보드로 이동한다.
- 원하는 버킷을 선택하고 버킷 설정 페이지로 들어간다.
- “버전 관리” 탭을 클릭하여 “활성화” 버튼을 선택한다.
- “버전 관리 활성화” 버튼을 누르면 버킷에 버전 관리가 적용된다.
(2) 버전 관리 사용 예시
- 파일 업로드 및 버전 확인
reports/annual-report.pdf
파일을 버킷에 업로드한다고 가정해본다. 이 파일은 초기 업로드 시 첫 번째 버전으로 저장된다.- 동일한 파일 이름으로 새로운 내용을 추가한
annual-report.pdf
를 업로드하면, 이전 버전은 보존된 채 새 버전이 추가된다.
- 파일 버전 복원
- 실수로 파일을 수정하거나 잘못된 내용을 덮어쓴 경우, S3 콘솔에서 해당 객체를 클릭하면 모든 버전을 확인할 수 있다.
- 복원이 필요한 이전 버전을 선택하여 “이전 버전으로 복원” 버튼을 클릭하면 해당 파일을 복원할 수 있다.
(3) 버전 관리 활성화 후의 파일 삭제
- 버전 관리가 활성화된 버킷에서 파일을 삭제하면, 실제 파일은 삭제되지 않고 삭제 마커가 추가된다. 즉, 삭제된 것으로 보이지만, 이전 버전은 그대로 유지된다.
- 삭제된 파일을 복구하려면, S3 콘솔에서 삭제 마커를 제거하여 이전 버전을 복원할 수 있다.
4. 접근 제어(Access Control)
- S3는 객체에 대한 접근을 제어하기 위해 다양한 방식의 정책을 제공한다. 버킷 정책, 사용자 정책, ACL(Access Control List)을 통해 특정 사용자나 IP Address에 대해 접근 권한을 설정할 수 있다.
- 민감한 데이터를 저장할 때 접근 권한을 엄격히 설정하여 데이터 유출을 방지할 수 있다.
- 한 금융 회사가 AWS S3에 민감한 고객 데이터를 저장하는 시나리오를 가정해본다. 이 회사는 내부 보안 규정을 준수하기 위해 다음과 같은 접근 제어를 설정할 수 있다.
- 버킷 정책으로 특정 IP Address(내부 네트워크에서만 접근 가능)를 설정해 외부 접속을 제한
- 사용자 정책을 통해 특정 팀원들에게만 데이터의 읽기/쓰기 권한을 부여
- 객체 ACL을 사용해 특정 객체를 외부 파트너와 공유할 때 개별 객체에 대한 읽기 권한만 설정
5. 수명 주기 정책(Lifecycle Policy)
- S3의 수명 주기 정책은 데이터를 저장하는 기간과 방법을 자동으로 관리하기 위한 규칙을 정의하는 기능이다. 이 정책을 통해 데이터의 라이프사이클을 제어할 수 있으며, 일정 기간이 지나면 데이터를 저비용 스토리지 클래스로 이동하거나 삭제할 수 있다. 이를 통해 데이터를 효율적으로 관리하고 비용을 절감할 수 있다.
- 정책의 주요 기능
- 데이터 이동: 자주 액세스되지 않는 오래된 데이터를 저비용 스토리지 계층인 S3 Glacier나 Glacier Deep Archive로 자동 이동할 수 있다. 이는 장기 보관이 필요하지만, 즉각적인 접근이 필요하지 않은 데이터에 유용하다.
- 데이터 삭제: 특정 기간이 지난 데이터는 자동으로 삭제되도록 설정할 수 있다. 예를 들어, 일정 기간이 지난 로그 파일이나 임시 데이터를 정리하여 스토리지 공간을 확보할 수 있다.
6. 보안 및 암호화
- S3는 데이터 암호화 기능을 제공하여 저장 중(암호화-암호해독)에 데이터가 보호되도록 지원한다. 서버 측 암호화(Server-Side Encryption)와 클라이언트 측 암호화(Client-Side Encryption)를 통해 데이터 보안을 강화할 수 있다.
- 예를 들어, 민감한 사용자 데이터를 저장할 때 암호화를 활성화하여 데이터의 기밀성을 유지할 수 있다.
- S3는 데이터 보호를 위한 다양한 보안 및 암호화 옵션을 제공한다. 이는 데이터를 저장하거나 전송하는 중에 외부의 위협으로부터 데이터를 안전하게 지키기 위함이다. 적절한 보안 설정을 통해 데이터의 기밀성, 무결성, 가용성을 보장할 수 있다.
(1) 서버 측 암호화(Server-Side Encryption, SSE)
SSE-S3
: S3가 제공하는 기본 서버 측 암호화 방식으로, AWS가 자체적으로 관리하는 키를 사용하여 데이터를 암호화하고 복호화한다. 사용자가 별도로 키를 관리할 필요 없이 간편하게 암호화를 적용할 수 있다.SSE-KMS
: AWS Key Management Service(KMS)를 사용하여 암호화 키를 관리한다. 사용자는 자체적인 키 정책을 통해 키 접근을 세부적으로 제어할 수 있으며, 더 강력한 보안 제어와 감사 기능을 제공한다.SSE-C
: 고객이 직접 관리하는 키를 사용하여 암호화를 수행한다. 데이터 저장 시 클라이언트가 제공하는 키로 암호화되며, AWS는 키를 보관하지 않는다. 데이터에 접근할 때 클라이언트는 해당 키를 다시 제공해야 한다.
(2) 클라이언트 측 암호화(Client-Side Encryption)
- 클라이언트 측 암호화는 데이터를 S3에 전송하기 전에 클라이언트 애플리케이션에서 직접 암호화한다. 데이터를 암호화한 후 S3에 업로드하며, 복호화를 위해 클라이언트 측에서 키를 관리해야 한다. 민감한 데이터나 특정 보안 정책이 필요한 경우, 클라이언트 측 암호화를 사용한다.
- 데이터 전송 중 암호화
- S3는
SSL/TLS
프로토콜을 사용하여 데이터가 전송되는 동안 암호화된다. 이를 통해 네트워크 상에서 데이터가 전송될 때 중간에 탈취되거나 위협을 받을 가능성을 줄일 수 있다.
- S3는
(3) 실제 사용 시나리오
- 개인 식별 정보(PII) 보호: 금융 기관이 고객 데이터를 S3에 저장할 때, 서버 측 암호화를 적용하여 데이터를 보호하고 내부 규정 및 법적 요구 사항을 충족할 수 있다.
- 암호화된 데이터 백업: 의료 데이터를 다루는 병원이 환자 기록을 S3에 저장할 때, SSE-KMS를 사용해 데이터 암호화를 수행하고, 키 접근 제어를 통해 누가 데이터를 해독할 수 있는지 세부적으로 관리한다.
- 데이터 전송 보호: 전송 중 데이터가 탈취되지 않도록 SSL/TLS를 사용하여 S3와 클라이언트 간의 데이터 전송을 보호한다.
(4) 추가 보안 기능
- 액세스 제어: IAM 정책, 버킷 정책, ACL을 통해 세부적인 접근 제어가 가능하다.
- 감사 및 로깅: AWS CloudTrail과 통합하여 S3 API 호출에 대한 기록을 남겨 보안 감사에 활용할 수 있다.
7. S3 이벤트 알림
- S3 이벤트 알림은 S3 버킷에서 특정 이벤트(예: 파일 업로드, 삭제 등)가 발생할 때 이를 감지하고 다른 AWS 서비스(Lambda, SQS, SNS 등)와 연동하여 자동으로 작업을 수행하도록 하는 기능이다. 이를 통해 데이터가 S3에 추가되거나 변경될 때 배겡ㄴ드 로직을 자동으로 실행할 수 있다.
(1) 동작 방법
- S3 버킷에 파일이 업로드되면, S3는 사전에 설정된 알림 규칙에 따라 AWS Lambda 함수, SQS 대기열, 또는 SNS 주제로 알림을 보낸다.
- 예를 들어, 사용자가 S3에 이미지를 업로드하면 Lambda 함수가 자동으로 호출되어, 이미지 리사이징이나 데이터 처리와 같은 작업을 수행할 수 있다.
(2) 사용 사례
- 이미지 처리: 사용자가 사진을 업로드할 때 Lambda 함수가 트리거되어 자동으로 썸네일을 생성하고 저장
- 문서 처리: 문서 파일이 업로드되면 자동으로 텍스트를 추출하여 분서갛거나 데이터베이스에 저장
- 알림 전송: 중요한 파일이 업로드되면 SNS를 통해 관리자에게 알림 메시지를 전송
(3) 설정 방법
- S3 콘솔에서 버킷을 선택하고 “이벤트 알림” 옵션을 통해 이벤트 유형(예: 파일 업로드 시)을 설정하고, 알림을 받을 서비스를 선택하면 된다.
(4) 장점
- 자동화: 데이터를 S3에 업로드하거나 변경할 때 수동 작업 없이 자동으로 처리할 수 있어 편리하다.
- 유연성: Lambda, SQS, SNS 등 다양한 AWS 서비스와 연동하여 데이터 처리와 알림 기능을 쉽게 확장할 수 있다.
8. S3 스토리지 클래스
- S3는 데이터를 어떻게 사용하는지에 따라 다양한 스토리지 클래스를 제공한다. 각 클래스는 데이터 액세스 빈도와 비용 효율성을 기준으로 최적화되어 있어, 데이터를 효율적으로 관리할 수 있다.
(1) 주요 스토리지 클래스
- S3 Standard: 자주 접근해야 하는 데이터에 사용된다. 웹 애플리케이션이나 사용자 파일 저장소 등에 적합하다.
- S3 Standard-IA (Infrequent Access): 가끔 접근하지만 빠른 접근이 필요한 데이터에 사용된다. 예를 들어, 월간 보고서나 주기적으로 보는 문서에 적합하다.
- S3 One Zone-IA: 단일 가용 영역에 저장되어 저렴하지만, 장애 시 데이터 손실 위험이 있다. 복구가 가능하지만 덜 중요한 데이터에 적합하다.
- S3 Intelligent-Tiering: 액세스 패턴이 불규칙한 데이터에 자동으로 최적의 계층으로 데이터를 이동시켜 비용을 절감한다.
- S3 Glacier: 장기 보관용으로 저렴하며, 몇 시간 내 복구가 가능하다. 백업이나 아카이브에 적합하다.
- S3 Glacier Deep Archive: 거의 접근하지 않는 데이터의 장기 보관에 가장 저렴하며, 복구에는 최대 12시간이 걸릴 수 있다.
(2) 스토리지 클래스 변경
- S3는 수명 주기 정책을 통해 데이터가 오래되면 자동으로 더 저렴한 스토리지 클래스로 이동하도록 설정할 수 있다. 예를 들어, 30일간 자주 사용된 데이터는 S3 Standard에 저장하고, 이후에는 Standard-IA나 Glacier로 이동시켜 비용을 절감할 수 있다.
(3) 사용 시 고려사항
- 비용: 자주 사용되는 데이터는 S3 Standard가 좋지만, 덜 사용되거나 보관만 필요한 데이터는 Standard-IA, Glacier, Glacier Deep Archive로 비용을 줄일 수 있다.
- 복구 시간: Glacier나 Glacier Deep Archive는 복구 시간이 길어, 빠른 접근이 필요하지 않은 데이터에 적합하다.
C. Detail - 클라이언트 측 암호화 VS 서버 측 암호화
1. 암호화 키 관리의 간소화
- 서버 측 암호화는 AWS가 키 관리를 대신 처리하거나 KMS를 통해 사용자가 지정한 키를 AWS가 관리하게 함으로써, 데이터 암호화와 키 관리의 복잡성을 줄여준다.
- 클라이언트 측 암호화는 클라이언트가 직접 암호화 작업을 수행하고, 데이터에 접근할 때 사용할 키를 관리해야 한다. 이는 보안 측면에서는 추가적인 제어를 제공하지만, 키 관리가 복잡해지고 키를 분실하면 데이터를 복구할 수 없다는 위험이 있다.
2. 보안 규정 및 준수
- 금융 기관은 보통 규정을 준수하기 위해 강력한 보안 정책이 필요하지만, 이와 동시에 효율적인 관리도 요구된다. SSE-KMS는 AWS Key Management Service를 통해 키 접근을 세부적으로 제어할 수 있어, 규정 준수를 보장하면서도 관리 부담을 덜어준다.
- 클라이언트 측 암호화는 더 많은 보안 제어를 제공하지만, 키 관리와 보안 책임이 전적으로 클라이언트에게 있다. 서버 측 암호화를 사용하면 AWS의 보안 인프라를 활용하면서 규정 요구 사항을 충족할 수 있는 이점이 있다.
3. 운영의 간소화와 비용 효율성
- 서버 측 암호화는 데이터가 S3에 저장될 때 자동으로 암호화되고, 데이터 액세스 시 자동으로 복호화된다. 이는 애플리케이션 코드에서 암호화 및 복호화를 추가적으로 구현할 필요가 없기 때문에 운영이 간편하고 개발 비용이 절감된다.
- 클라이언트 측 암호화는 데이터를 업로드하기 전과 다운로드 후에 클라이언트가 직접 암호화 및 복호화를 수행해야 하므로, 애플리케이션 설계와 개발이 복잡해진다.
4. 데이터 액세스 속도
- 서버 측 암호화는 S3가 데이터를 저장하거나 검색할 때 백그라운드에서 암호화 및 복호화를 처리하므로, 사용자나 애플리케이션의 액세스 속도에 영향을 최소화한다.
- 클라이언트 측 암호화는 데이터 전송 전에 암호화, 전송 후 복호화를 클라이언트가 직접 수행해야 하므로, 성능이 느려질 수 있다.
5. 책임 분담 모델
- AWS 책임 분담 모델에 따르면, 서버 측 암호화는 AWS의 책임 하에 암호화와 키 관리가 이루어진다. 기업은 애플리케이션 보안을 보장해야 하지만, 저장된 데이터의 암호화와 키 관리는 AWS가 지원한다.
- 클라이언트 측 암호화의 경우, 데이터 보안 및 키 관리의 모든 책임이 클라이언트에게 있다. 이는 보안 책임의 범위가 더 커지며, 보안 관리에 더 많은 리소스가 필요할 수 있다.
D. Detail - S3 Glacier
S3 Glacier
는 AWS에서 제공하는 스토리지 클래스 중 하나로, 장기 보관용으로 설계된 저비용 스토리지 솔루션이다. S3 Glacier는 데이터가 자주 사용되지 않지만, 규정 준수나 보안 이유로 장기간 안전하게 보관해야 하는 경우에 적합하다. 이 스토리지는 데이터의 저렴한 저장 비용과 높은 내구성을 제공하지만, 즉각적인 데이터 액세스를 제공하지 않기 때문에 데이터를 사용하려면 복구 과정을 거쳐야 한다.
(1) 저렴한 비용
- 장기 보관 데이터에 적합하며, 자주 접근하지 않는 데이터를 경제적으로 관리할 수 있다.
- 저장 비용은 매우 낮지만, 데이터를 복구할 때는 추가 비용이 발생할 수 있다.
(2) 데이터 복구 필요
- Glacier에 저장된 데이터는 즉각적으로 액세스할 수 있는 상태가 아니다. 데이터를 사용하려면 복구 요청을 통해 아카이브된 데이터를 풀어 활성 상태로 전환해야 한다.
- 복구 요청은 Expedited, Standard, Bulk의 세 가지 옵션이 있으며, 복구 시간은 수 분에서 수 시간까지 걸린다. Expedited는 몇 분 내의 빠른 복구가 가능하며, Bulk는 비용이 저렴하지만 복구 시간이 길어질 수 있다.
(3) 높은 내구성
- S3 Glacier는 99.999999999$의 내구성을 제공하여 데이터를 안전하게 보관할 수 있다. 데이터는 여러 가용 영역(AZ)에 걸쳐 중복 저장되어 데이터 손실 위험이 거의 없다.
(4) 보안 및 암호화
- 모든 데이터는 기본적으로 서버 측 암호화를 통해 안전하게 저장되며, 필요에 따라 AWS Key Management Service(KMS)를 사용하여 키 관리 및 보안을 강화할 수 있다.
- IAM 정책과 버킷 정책을 통해 데이터 접근 제어를 설정할 수 있어 데이터에 대한 보안 관리가 용이하다.
(5) 사용 사례
- 규제 준수 및 법적 요구 사항: 금융, 의료, 정부 기관 등 데이터 보관 기간이 법적으로 요구되는 경우, S3 Glacier는 적합한 솔루션이다. 데이터를 장기적으로 안전하게 보관하면서 비용을 절감할 수 있다.
- 데이터 백업 및 아카이브: 오래된 프로젝트 파일, 주기적으로 생성되는 로그 데이터, 백업 파일 등 자주 액세스하지 않는 데이터를 저장할 때 효과적이다.
- 재해 복구: 재해 상황에 대비해 복구 가능성이 필요한 데이터를 장기 보관하면서 저렴하게 관리할 수 있다.
댓글남기기