Buckets (버킷)
📌 Amazon S3에서 데이터를 저장하는 기본 단위(컨테이너)**입니다.
- S3에서 모든 객체(Object)는 반드시 하나의 버킷에 속하며, 버킷은 데이터를 정리하고 관리하기 위한 최상위 디렉토리 역할을 합니다.
버킷의 주요 특징
- 데이터 저장소
- S3에 저장되는 모든 객체(파일)는 반드시 버킷에 포함되어야 합니다.
- 하나의 AWS 계정에서 최대 100개의 버킷을 생성 가능(기본 설정, 요청 시 한도 증가 가능).
- 고유 이름
- 버킷 이름은 전 세계적으로 고유해야 함.
(인터넷 도메인 이름처럼 중복된 이름을 사용할 수 없음).
- 버킷 이름은 전 세계적으로 고유해야 함.
- 접근 제어
- 버킷 정책, ACL(Access Control List), IAM(Identity and Access Management) 등을 사용해 세부적인 접근 권한 관리 가능.
- 버전 관리
- 동일한 파일 이름으로 여러 버전을 저장할 수 있도록 버전 관리(Versioning) 지원.
- 객체 저장 및 호출
- 버킷에 저장된 파일(객체)은 HTTP(S)를 통해 접근 가능하며, URL 형태로 접근.
버킷 이름 규칙
- 글로벌 고유 이름: AWS 전체에서 다른 사용자가 동일한 이름을 사용할 수 없음.
- 소문자만 사용: 버킷 이름에는 대문자를 사용할 수 없음.
- 길이 제한: 3~63자 이내.
- 특수문자 제한: a-z, 0-9, .(점), -(하이픈)만 사용 가능.
- IP 형식 금지: 이름이 192.168.1.1 같은 IP 주소 형식이면 안 됨.
버킷을 설정할 때 고려 사항
- 리전 선택
- 데이터를 저장할 AWS 리전을 선택해야 함.
- 리전을 선택하면 데이터가 해당 리전에 저장되며, 데이터 접근 속도와 비용에 영향을 미침.
- 예: 미국 리전에 저장된 데이터를 한국에서 접근할 경우, 지연 시간이 더 길어질 수 있음.
- 스토리지 클래스
- 버킷에 저장된 데이터를 스토리지 클래스에 따라 관리 가능.
- 예: S3 Standard, S3 Glacier 등.
- 접근 정책
- 버킷에 대한 접근 권한을 설정하여 공개 또는 비공개 여부를 결정.
- 기본적으로 버킷은 비공개이며, 명시적으로 접근 권한을 부여해야 함.
- 수명 주기(Lifecycle Policy)
- 버킷에 저장된 데이터를 일정 시간 후 자동으로 **아카이브(S3 Glacier)**하거나 삭제하도록 설정 가능.
- 버킷 로깅
- 버킷 활동(데이터 업로드, 다운로드 등)을 추적하는 로깅 기능 제공.
버킷의 주요 사용 사례
- 정적 웹사이트 호스팅
- S3 버킷을 사용해 HTML, CSS, JavaScript 파일을 저장하고 정적 웹사이트를 호스팅.
- 데이터 백업 및 복원
- 중요한 파일, 데이터베이스 백업을 버킷에 저장.
- 미디어 저장 및 제공
- 이미지를 업로드하고 URL로 제공하거나 동영상을 스트리밍.
- 로그 저장소
- 애플리케이션 또는 시스템 로그를 저장하여 분석.
- 대량 데이터 처리
- S3에 데이터를 저장하고, 분석 도구(예: Athena, EMR)와 연계.
S3 버킷과 객체의 구조
- 버킷은 파일을 저장하는 최상위 디렉토리.
- 예: my-bucket
- **객체(Object)**는 버킷에 저장되는 데이터 단위(파일).
- 예: image.png, docs/report.pdf
- 경로 예시:
- 버킷: my-bucket
- 객체: folder1/image.png
- URL: https://my-bucket.s3.ap-northeast-2.amazonaws.com/folder1/image.png
- https://<bucket-name>.s3.<region>.amazonaws.com/<object-key>
S3 버킷의 주요 장점
- 글로벌 접근성
- 전 세계 어디서든 URL을 통해 버킷에 저장된 데이터를 접근 가능.
- 고가용성과 내구성
- 버킷에 저장된 데이터는 기본적으로 AWS 내에서 여러 가용 영역(AZ)에 복제.
- 유연한 데이터 관리
- 버킷 정책, ACL, 수명 주기 정책 등을 통해 데이터를 효율적으로 관리 가능.
- 무제한 확장성
- 버킷 내 저장 용량에 제한이 없음.
S3 버킷과 관련된 용어
용어 | 설명 |
버킷(Bucket) | 데이터를 저장하는 최상위 컨테이너. |
객체(Object) | 버킷에 저장된 데이터 단위. 데이터 + 메타데이터 + 키(Key)로 구성. |
키(Key) | 객체를 고유하게 식별하는 이름. |
버킷 정책(Bucket Policy) | 버킷 수준에서 접근 권한을 정의. |
버전 관리(Versioning) | 객체의 여러 버전을 저장하여 데이터 손실 방지. |
쉽게 이해하기
- **버킷은 "S3에서 사용하는 클라우드 폴더"**입니다.
- 버킷 안에 파일(객체)을 저장하며, 각각의 파일은 고유한 이름(키)을 가집니다.
- 파일을 업로드하면 URL이 생성되며, 이를 통해 어디서든 파일에 접근할 수 있습니다.
버킷 정책(Bucket Policy)
📌 AWS S3 버킷에 대한 접근 제어를 JSON 형식으로 정의하는 문서입니다.
- 이를 통해 특정 사용자, 그룹, 또는 서비스가 버킷과 객체에 대해 어떤 작업을 할 수 있는지를 설정할 수 있습니다.
버킷 정책의 주요 특징
- JSON 형식
- 버킷 정책은 AWS 정책 언어를 사용하며, JSON 형식으로 작성.
- 버킷 수준에서 작동
- 개별 객체가 아닌, 버킷 전체에 대해 적용.
- 권한 제어
- IAM 사용자, AWS 서비스, 또는 익명 사용자에 대해 허용(Allow) 또는 거부(Deny) 권한을 설정.
- 세부적 제어 가능
- IP 주소, VPC, 시간 조건, HTTP 메서드 등 다양한 조건에 따라 접근을 허용하거나 거부.
- 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에서만 읽기 허용.
- 모든 사용자에게 읽기는 허용하되 쓰기는 차단.
'Cloud > AWS' 카테고리의 다른 글
[AWS] ACL (AWS의 리소스 접근 권한을 제어하는 규칙) (0) | 2025.03.10 |
---|---|
[AWS] ARN (AWS의 고유 식별자) (0) | 2025.03.09 |
[AWS] S3 (AWS의 데이터 저장공간) (0) | 2025.03.07 |
[AWS] VPC (AWS의 가상의 사설 네트워크) (2) | 2025.03.06 |
[AWS] Route 53 (클라우드 기반 DNS 관리 서비스) (0) | 2025.03.05 |