Buckets (버킷)

📌 Amazon S3에서 데이터를 저장하는 기본 단위(컨테이너)**입니다.

  • S3에서 모든 객체(Object)는 반드시 하나의 버킷에 속하며, 버킷은 데이터를 정리하고 관리하기 위한 최상위 디렉토리 역할을 합니다.

버킷의 주요 특징

  1. 데이터 저장소
    • S3에 저장되는 모든 객체(파일)는 반드시 버킷에 포함되어야 합니다.
    • 하나의 AWS 계정에서 최대 100개의 버킷을 생성 가능(기본 설정, 요청 시 한도 증가 가능).
  2. 고유 이름
    • 버킷 이름은 전 세계적으로 고유해야 함.
      (인터넷 도메인 이름처럼 중복된 이름을 사용할 수 없음).
  3. 접근 제어
    • 버킷 정책, ACL(Access Control List), IAM(Identity and Access Management) 등을 사용해 세부적인 접근 권한 관리 가능.
  4. 버전 관리
    • 동일한 파일 이름으로 여러 버전을 저장할 수 있도록 버전 관리(Versioning) 지원.
  5. 객체 저장 및 호출
    • 버킷에 저장된 파일(객체)은 HTTP(S)를 통해 접근 가능하며, URL 형태로 접근.

버킷 이름 규칙

  • 글로벌 고유 이름: AWS 전체에서 다른 사용자가 동일한 이름을 사용할 수 없음.
  • 소문자만 사용: 버킷 이름에는 대문자를 사용할 수 없음.
  • 길이 제한: 3~63자 이내.
  • 특수문자 제한: a-z, 0-9, .(점), -(하이픈)만 사용 가능.
  • IP 형식 금지: 이름이 192.168.1.1 같은 IP 주소 형식이면 안 됨.

버킷을 설정할 때 고려 사항

  1. 리전 선택
    • 데이터를 저장할 AWS 리전을 선택해야 함.
    • 리전을 선택하면 데이터가 해당 리전에 저장되며, 데이터 접근 속도비용에 영향을 미침.
    • 예: 미국 리전에 저장된 데이터를 한국에서 접근할 경우, 지연 시간이 더 길어질 수 있음.
  2. 스토리지 클래스
    • 버킷에 저장된 데이터를 스토리지 클래스에 따라 관리 가능.
    • 예: S3 Standard, S3 Glacier 등.
  3. 접근 정책
    • 버킷에 대한 접근 권한을 설정하여 공개 또는 비공개 여부를 결정.
    • 기본적으로 버킷은 비공개이며, 명시적으로 접근 권한을 부여해야 함.
  4. 수명 주기(Lifecycle Policy)
    • 버킷에 저장된 데이터를 일정 시간 후 자동으로 **아카이브(S3 Glacier)**하거나 삭제하도록 설정 가능.
  5. 버킷 로깅
    • 버킷 활동(데이터 업로드, 다운로드 등)을 추적하는 로깅 기능 제공.

버킷의 주요 사용 사례

  1. 정적 웹사이트 호스팅
    • S3 버킷을 사용해 HTML, CSS, JavaScript 파일을 저장하고 정적 웹사이트를 호스팅.
  2. 데이터 백업 및 복원
    • 중요한 파일, 데이터베이스 백업을 버킷에 저장.
  3. 미디어 저장 및 제공
    • 이미지를 업로드하고 URL로 제공하거나 동영상을 스트리밍.
  4. 로그 저장소
    • 애플리케이션 또는 시스템 로그를 저장하여 분석.
  5. 대량 데이터 처리
    • S3에 데이터를 저장하고, 분석 도구(예: Athena, EMR)와 연계.

S3 버킷과 객체의 구조

  • 버킷은 파일을 저장하는 최상위 디렉토리.
    • 예: my-bucket
  • **객체(Object)**는 버킷에 저장되는 데이터 단위(파일).
    • 예: image.png, docs/report.pdf
  • 경로 예시:
  • https://<bucket-name>.s3.<region>.amazonaws.com/<object-key>

S3 버킷의 주요 장점

  1. 글로벌 접근성
    • 전 세계 어디서든 URL을 통해 버킷에 저장된 데이터를 접근 가능.
  2. 고가용성과 내구성
    • 버킷에 저장된 데이터는 기본적으로 AWS 내에서 여러 가용 영역(AZ)에 복제.
  3. 유연한 데이터 관리
    • 버킷 정책, ACL, 수명 주기 정책 등을 통해 데이터를 효율적으로 관리 가능.
  4. 무제한 확장성
    • 버킷 내 저장 용량에 제한이 없음.

S3 버킷과 관련된 용어

용어 설명
버킷(Bucket) 데이터를 저장하는 최상위 컨테이너.
객체(Object) 버킷에 저장된 데이터 단위. 데이터 + 메타데이터 + 키(Key)로 구성.
키(Key) 객체를 고유하게 식별하는 이름.
버킷 정책(Bucket Policy) 버킷 수준에서 접근 권한을 정의.
버전 관리(Versioning) 객체의 여러 버전을 저장하여 데이터 손실 방지.

쉽게 이해하기

  • **버킷은 "S3에서 사용하는 클라우드 폴더"**입니다.
  • 버킷 안에 파일(객체)을 저장하며, 각각의 파일은 고유한 이름(키)을 가집니다.
  • 파일을 업로드하면 URL이 생성되며, 이를 통해 어디서든 파일에 접근할 수 있습니다.

 

 

버킷 정책(Bucket Policy) 

📌 AWS S3 버킷에 대한 접근 제어를 JSON 형식으로 정의하는 문서입니다.

  • 이를 통해 특정 사용자, 그룹, 또는 서비스가 버킷과 객체에 대해 어떤 작업을 할 수 있는지를 설정할 수 있습니다.

버킷 정책의 주요 특징

  1. JSON 형식
    • 버킷 정책은 AWS 정책 언어를 사용하며, JSON 형식으로 작성.
  2. 버킷 수준에서 작동
    • 개별 객체가 아닌, 버킷 전체에 대해 적용.
  3. 권한 제어
    • IAM 사용자, AWS 서비스, 또는 익명 사용자에 대해 허용(Allow) 또는 거부(Deny) 권한을 설정.
  4. 세부적 제어 가능
    • IP 주소, VPC, 시간 조건, HTTP 메서드 등 다양한 조건에 따라 접근을 허용하거나 거부.
  5. IAM 정책과 병행 사용
    • IAM 정책과 함께 사용 가능하지만, 버킷 정책은 버킷과 관련된 모든 요청에 직접 적용.

버킷 정책의 주요 요소

요소 설명
Version 정책 버전을 지정. 일반적으로 "2012-10-17" 버전을 사용.
Id (선택적) 정책의 고유 식별자.
Statement 정책의 주요 구성 요소로, 허용/거부, 작업(Action), 리소스(Resource) 및 조건(Condition)을 정의.
Effect 허용(Allow) 또는 거부(Deny) 여부를 지정.
Principal 정책이 적용되는 사용자, 그룹, 서비스. 예: 특정 AWS 계정, 익명 사용자 등.
Action 허용 또는 거부할 S3 작업. 예: s3:GetObject, s3:PutObject.
Resource 정책이 적용되는 리소스(버킷 또는 객체). 예: arn:aws:s3:::my-bucket/*.
Condition (선택적) 정책이 적용되는 조건. 예: 특정 IP 주소, 요청 시간 등.

버킷 정책의 기본 구조

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "PolicyStatementID",
      "Effect": "Allow",
      "Principal": "*",
      "Action": "s3:GetObject",
      "Resource": "arn:aws:s3:::my-bucket-name/*"
    }
  ]
}
  • Version: 정책 버전 (일반적으로 "2012-10-17" 사용).
  • Statement: 정책의 규칙(여러 Statement를 배열로 포함 가능).
    • Effect: 허용(Allow) 또는 거부(Deny).
    • Principal: 정책을 적용할 대상. *은 모든 사용자.
    • Action: 수행할 수 있는 작업.
    • Resource: 정책이 적용되는 S3 리소스(버킷 또는 객체).
  • Condition: 조건에 따라 정책 적용 여부 결정(선택적).

버킷 정책 예제

1. 모든 사용자에게 읽기 권한 부여 (버킷 공개)

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "PublicReadGetObject",
      "Effect": "Allow",
      "Principal": "*",
      "Action": "s3:GetObject",
      "Resource": "arn:aws:s3:::my-bucket-name/*"
    }
  ]
}
  • Principal: "*" → 모든 사용자(익명 사용자 포함).
  • Action: "s3:GetObject" → 객체를 읽는 작업 허용.
  • Resource: "arn:aws:s3:::my-bucket-name/*" → 버킷 내 모든 객체에 적용.

2. 특정 AWS 계정에 전체 권한 부여

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "GrantFullAccess",
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::123456789012:root"
      },
      "Action": "s3:*",
      "Resource": "arn:aws:s3:::my-bucket-name/*"
    }
  ]
}
  • Principal: 특정 AWS 계정(123456789012)에 권한 부여.
  • Action: "s3:*" → 모든 S3 작업 허용.
  • Resource: 버킷 내 모든 객체에 적용.

3. 특정 IP 주소에서만 액세스 허용

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "AllowSpecificIP",
      "Effect": "Allow",
      "Principal": "*",
      "Action": "s3:GetObject",
      "Resource": "arn:aws:s3:::my-bucket-name/*",
      "Condition": {
        "IpAddress": {
          "aws:SourceIp": "192.168.1.1/32"
        }
      }
    }
  ]
}
  • Condition: aws:SourceIp 조건을 사용해 특정 IP에서만 접근 허용.
  • 192.168.1.1/32 → 지정된 단일 IP에서만 접근 가능.

4. 모든 사용자의 업로드 차단 (쓰기 금지)

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "DenyAllUploads",
      "Effect": "Deny",
      "Principal": "*",
      "Action": "s3:PutObject",
      "Resource": "arn:aws:s3:::my-bucket-name/*"
    }
  ]
}
  • Effect: Deny → 업로드 작업 거부.
  • Action: "s3:PutObject" → 객체 업로드 작업 차단.

버킷 정책 vs IAM 정책

특징 버킷 정책 IAM 정책
적용 대상 특정 S3 버킷 및 객체 사용자, 그룹, 역할
적용 범위 버킷 수준에서 설정 AWS 리소스 전반에 대해 설정 가능
세부 제어 버킷 내 리소스에 대한 세부 제어 가능 사용자/그룹에 대한 권한 설정
관리 주체 리소스 소유자가 직접 관리 IAM 관리자가 관리

버킷 정책의 장단점

장점 단점
리소스 소유자가 직접 권한 관리 가능 잘못된 설정 시 데이터 유출 위험
특정 조건(IP, VPC 등) 기반 세부적인 제어 가능 JSON 형식이 익숙하지 않으면 작성이 어려움
사용자 지정 정책으로 유연한 권한 설정 가능 IAM 정책과 충돌할 경우 관리가 복잡해질 수 있음

쉽게 이해하기

  • 버킷 정책은 "S3 버킷에 출입 규칙을 정하는 보안 문서"라고 생각하면 됩니다.
    • 누구(Principal)가, 어떤 작업(Action)을, 어디(Resource)에 대해, 어떤 조건(Condition)으로 할 수 있는지 정의.
  • 예를 들어:
    • 특정 IP에서만 읽기 허용.
    • 모든 사용자에게 읽기는 허용하되 쓰기는 차단.

 

+ Recent posts