본문 바로가기
개발 공부/AWS

[AWS] SAA 공부 (10) S3 (Simple Storage Service) - 구성 요소 / 보안 / 복제

by sngynhy 2025. 3. 31.

S3 (Simple Storage Service)

객체 스토리지 서비스 (파일 보관만 가능)

확장성, 고가용성, 보안을 제공하는 클라우드 기반의 파일 저장소로 다양한 유형의 데이터를 손쉽게 저장하고 관리

    • 무제한 스토리지
    • 고가용성
      • 글로벌 서비스지만 데이터는 리전 단위로 저장
      • 최소 3개의 가용 영역(AZ)에 데이터를 분산하여 저장 > 99.999999999%의 내구성 보장
      • 여러 AWS 리전에 걸쳐 자동으로 데이터 복제 > 재해 복구 가능
  •  
  • 데이터 보안
    • 암호화와 IAM을 통해 파일에 대한 접근 제어
  • 자동화
    • 파일의 수명 주기를
    • 정의하여 자동으로 관리 > 데이터의 보관 기간 설정 등
  • 버전 관리
    • 파일의 변경 내역을 관리 > 이전 버전으로 복구 가능
  • 글로벌 액세스
    • 인터넷만 있으면 언제 어디서든 데이터에 쉽게 접근 가능
  • 사용 사례
    • 스토리지 및 백업, 아카이빙 > 파일, 디스크
    • 하이브리드 클라우드 스토리지
      • 온프레미스 스토리지를 클라우드로 확장하고 할 때
    • 애플리케이션 호스팅
    • 미디어 호스팅 > 동영상 파일이나 이미지 등
    • 정적 웹 사이트 호스팅
    • 데이터 레이크 및 빅데이터 분석

S3 구성 요소

  • 버킷 (Bucket)
    • S3의 최상위 단위데이터를 저장하는 컨테이너
      • 저장 공간을 구분하는 단위로 디렉토리/폴더와 같은 개념
    • S3 버킷의 파일을 객체라고 하며 계정 안에 생성
    • 버킷 이름은 전 세계에서 고유해야함 > 데이터 식별에 사용
      • 계정에 있는 모든 리전과 AWS에 존재하는 모든 계정에서 고유해야함
    • 버킷은 리전 단위로 생성 > 버킷 내 객체에 대한 URI로 접근 가능
  • 객체 (Object)
    • 버킷에 저장되는 데이터의 단위 (파일이나 그 외의 데이터 단위)
      • 최대 객체 크기 5TB (= 5000GB)
      • 업로드하는 파일의 크기가 5GB보다 클 경우 멀티파트 업로드 사용 > 파일을 여러 부분으로 나눠 업로드
    • 객체는 데이터와 메타데이터로 구성
      • 데이터: 실제 파일의 내용
      • 메타데이터: 파일의 속성 (파일 크기, 수정 일시, 콘텐츠 타입 등)
  • 키 (Key)
    • 객체를 고유하게 식별하는 문자열 > 버킷 내 객체의 경로
    • s3://my-bucket/my_file.txt ← 키
      s3://my-bucket/my_folder1/another_folder/my_file.txt
    • 키는 접두사와 객체명으로 구성
      • my_folder1/another_folder (접두사) / my_file.txt (객체명)
    • 계층 구조의 디렉토리 개념 X
  • 객체의 메타데이터
    • 각 객체에 대한 추가 정보
      • 자동 메타데이터: 소유자, AWS 리전, 크기, 유형, 키, S3 URI
      • 사용자 정의 메타데이터: 사용자가 설정한 키-값 쌍

S3 보안

  • 자격 증명 기반 정책
    • IAM 정책 - IAM 사용자와 역할에 대해 세부적인 액세스 제어 설정
      • 예) 특정 사용자만 특정 버킷에 접근하도록 제한 가능
    • 동일 계정의 IAM 엔티티의 S3 권한을 관리하거나, S3 이외에 다른 AWS 서비스와 같이 권한을 관리할 때 사용
  • 리소스 기반 정책
    • 버킷 정책 - 버킷과 그 객체에 대한 액세스 권한을 제어하는 정책 설정 
      • 특정 버킷의 데이터에 '언제 어디서 누가 무엇을 어떻게' 할 수 있는지 정의 가능
        • IAM 사용자 및 역할에 따른 권한 설정 가능
        • S3 버킷에 액세스할 수 있는 교차 계정 > 다른 계정의 엔티티에 대해 권한 설정 가능
          예) 특정 사용자가 접근할 수 있도록 하거나 다른 계정의 사용자를 허용
        • 익명 사용자에 대한 권한 설정 가능
    • ACL - 객체와 버킷에 대해 세부적인 권한 설정 > 버킷 혹은 객체 단위로 읽기/쓰기 권한 부여 
      • Object Access Control List
      • Bucket Access Control List
      • (ACL은 점점 사용하지 않는 추세)
    • IAM 원칙이 S3 객체에 액세스할 수 있는 조건
      • IAM 권한이 허용하거나 리소스 정책이 허용하는 경우
      • IAM 원칙이 특정 API 호출 시
  • 암호키 사용 > 객체 암호화
  • 모든 버킷은 새로 생성 시 기본적으로 Private
    • 모든 퍼블릭 엑세스 차단이 기본값으로 설정되어 있음
  • MFA를 활용해 객체 삭제 방지
  • Versioning을 통해 파일 관리
  • 액세스 로그 생성 및 전송
  • 별도의 설정을 통해 불특정 다수에게 공개 가능 (웹 호스팅)

S3 버킷 정책

  • JSON 기반 - 특정 사용자, 그룹 또는 서비스에 대해 읽기/쓰기/삭제 등의 권한 부여
    {
        "Version": "2025-03-31",
        "Statement": [
        	{
                "Sid": "PublicRead",
                "Effect": "Allow", // 작업 허용 여부 Allow OR Deny
                "Principal": "*", // 정책을 적용한 AWS 사용자 또는 서비스 (ex. 특정 IAM 사용자, 역할, 계정 등)
                "Action": ["s3:GetObject"], // 허용할 S3 작업 (s3:GetObject, s3:PutObject, s3:DeleteObject 등)
                "Resource": ["arn:aws:s3::mybucket/*"] // 정책이 적용될 특정 버킷과 객체
            }
        ]
    }
  • 공개 액세스를 위한 버킷 정책
    • 버킷 정책이 S3 버킷에 첨부되면 해당 버킷 내의 모든 객체에 액세스 가능
    • 계정 내 사용자, 즉 IAM 사용자의 경우 정책을 통해 IAM 사용자에게 권한 할당 가능
    • EC2 인스턴스가 있는 경우, IAM 권한을 통해 EC2 인스턴스에 역할을 생성
  • 교차 계정 액세스 허용
    • 다른 계정에 IAM 사용자가 있을 때, 추가 버킷 정책을 생성하여 이 특정 IAM 사용자에게 교차 계정 액세스 허용
      => IAM 사용자는 S3 버킷으로 접근 가능
  • 블록 공개 액세스
    • 기업 데이터 유출을 방지하기 위한 추가 보안 계층
    • S3 버킷 정책을 설정하여 공개로 만들더라도 이 설정이 활성화되어 있을 경우 버킷은 공개되지 않음

S3의 버전 관리

  • 객체의 생성, 업데이트, 삭제의 모든 단계를 저장
    • 객체에 대한 모든 버전 저장 및 복원 가능
    • 삭제 시 실제 객체를 삭제하는 대신 삭제 마커를 추가
  • 버킷 단위로 활성화 필요 (default 비활성)
    • 버전 관리를 시작하면 비활성화 불가능 (중지는 가능)
    • 버전 관리 활성화 전에 버전 관리가 적용되지 않은 모든 파일은 null 버전을 갖게 됨
    • 버전 관리를 중단해도 이전 버전은 유지
  • 수명 주기 관리와 연동 가능

S3 복제

  • CRR (Cross-Rigion Replication) - 교차 리전 복제
    • 다른 리전에 복제
    • 컴플라이언스, 데이터가 다른 리전에 있어 발생할 수 있는 지연 시간을 줄일 경우
    • 계정간의 복제에 사용
  • SRR (Same-Rigion Replication) - 같은 리전 복제
    • 동일한 리전에 복제
    • 다수의 S3 버킷간의 로그를 통합할 때
    • 개발 환경이 별도로 있어 운영 환경과 개발 환경간의 실시간 복제를 필요로 할 때 사용
  • 소스 버킷과 복제 대상 버킷 모두 버전 관리 기능 활성화 상태여야 복제 가능
  • 복제는 백그라운드에서 비동기식으로 이루어짐
  • 버킷은 서로 다른 AWS 계정간에도 복제 가능
  • 복제 기능이 정상적으로 실행되려면, 올바른 IAM 권한(읽기, 쓰기 권한)을 S3에 부여해야함
  • 기본적으로 복제를 활성화한 후에는 새로운 객체만 복제 대상이 됨
    • 기존의 객체를 복제하는 방법 > S3 배치 복제 기능 활용 (기존 객체부터 복제에 실패한 객체까지 복제 가능)
  • 복제 작업 삭제
    • 소스 버킷에서 대상 버킷으로 삭제 마커를 복제
    • 버전 ID로 삭제하는 경우 버전 ID는 복제되지 않음 > 영구적 삭제
  • 체이닝 복제 불가
    • 1번 버킷이 2번 버킷에 복제되어 있고, 2번 버킷이 3번 버킷에 복제되어 있다고 해서
      1번 버킷의 객체가 3번 버킷으로 복제되지 않음