S3 (Simple Storage Service)
1. S3 서비스 소개
Amazon Simple Storage Service(Amazon S3)는 인터넷 스토리지 서비스입니다. 이 서비스는 개발자나 IT 운영자가 웹 규모 컴퓨팅 작업을 수행하는 데 필요한 데이터 저장 공간을 제공합니다. Amazon S3는 웹 사이트 호스팅, 온라인 백업, 데이터 아카이브, 기업 애플리케이션, Big Data 분석 등 다양한 용도로 사용됩니다.
S3 서비스의 사용 예
- 웹 사이트 호스팅
- 멀티미디어 파일 저장 및 스트리밍
- 애플리케이션 데이터 저장
- 백업 및 복원
- 아카이브
S3 서비스의 장점
- 높은 내구성, 가용성 및 안정성
- 손쉬운 사용 및 관리
- 보안성
- 높은 확장성
Buckets?
버킷이란 데이터를 저장하는 가장 상위 레벨의 폴더 형태의 컨테이너입니다!
S3에 저장되는 파일들을 ‘객체’ 라고 부르고 모든 객체는 ‘키’(디렉토리)로 식별됩니다.
prefix/delimiter/object-name
s3://my-bucket/my_folder/my_file.txt
Amazon S3에서 버킷은 다음과 같은 목적으로 사용됩니다.
- 데이터를 저장하는 컨테이너 역할
- 객체에 대한 공용 또는 개인적인 접근 권한을 설정하기 위한 위치
- 객체에 대한 특별한 이벤트 알림을 설정하기 위한 위치
- AWS 계정에서 버킷 및 객체 사용에 대한 비용 추적 및 모니터링을 위한 위치
버킷 네이밍 컨벤션
- 대문자 금지, 언더스코어 금지
- 버킷 이름은 3자(최소)에서 63자(최대) 사이여야 합니다.
- 버킷 이름은 소문자, 숫자, 점(.) 및 하이픈(-)으로만 구성될 수 있습니다.
- 버킷 이름은 문자 또는 숫자로 시작하고 끝나야 합니다.
- 버킷 이름에 두 마침표를 나란히 붙여 사용하면 안 됩니다.
- 버킷 이름은 IP 주소 형식(예: 192.168.5.4)을 사용하지 않습니다.
S3 사용해보기

3. 버킷 폴리시
버킷폴리시

- IAM과 유사하며 JSON 형식의 문서입니다.
- 버킷의 모든 객체에 대한 액세스를 제어할 수 있습니다.
- 특정 객체 또는 객체 그룹에 대한 액세스를 제어할 수 있습니다.
- 특정 객체 또는 객체 그룹에 대한 액세스를 제어할 수 있습니다.
- 액세스를 허용하는 IP 주소 또는 범위를 지정할 수 있습니다.
- 액세스할 수 있는 리소스의 범위를 제한할 수 있습니다.
- 암호화된 연결을 사용하도록 강제할 수 있습니다.
폴리시 예시
- Resource : 버킷 혹은 오브젝트
- Effect: Allow 혹은 Deny
- Principal : 대상 유저
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowUserToGetBucket",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::ACCOUNT-ID:user/USERNAME"
},
"Action": "s3:GetBucketLocation",
"Resource": "arn:aws:s3:::BUCKET-NAME"
}
]
}
이 정책은 IAM 사용자 "USERNAME"이
GetBucketLocation 작업을 수행할 수 있도록
지정된 버킷 "BUCKET-NAME"에 대한 액세스를 허용합니다.
ARN
- AWS에서 사용하는 고유한 식별자로 AWS의 모든 리소스에 대한 고유한 식별자 역할을 합니다.
arn:partition:service:region:account-id:resource-id
arn:partition:service:region:account-id:resource-type/resource-id
arn:partition:service:region:account-id:resource-type:resource-id
//예시
arn:aws:iam::123456789012:user/johndoe
arn:aws:s3:::my_corporate_bucket/
arn:aws:ec2:us-east-1:123456789012:vpc/vpc-0e9801d129EXAMPLE
- ARN은 다음과 같은 형식으로 구성됩니다.
- arn: AWS 리소스 이름을 가리키는 고정 문자열
- aws: 리소스가 AWS에서 호스팅되는 것을 나타내는 고정 문자열
- service: AWS 서비스 이름을 나타내는 문자열 (예: s3, lambda, ec2 등)
- region: AWS 리전 이름을 나타내는 문자열 (예: us-east-1, ap-northeast-2 등)
- account-id: AWS 계정 ID를 나타내는 숫자
- resource-id: 해당 리소스의 고유 식별자 (예: S3 버킷 이름, Lambda 함수 이름 등)
ACL
- Access Control List : 접근 권한을 가진 경우들을 명시합니다.
버킷 폴리시 적용해보기





5. S3로 정적 웹사이트 배포하기
index.html
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>프론트엔드</title>
</head>
<body>
<h1>S3에 배포한 내 정적 사이트</h1>
<p>
Lorem ipsum dolor sit amet consectetur adipisicing elit. Earum culpa
temporibus saepe sunt porro fugiat minima, voluptatem similique esse odit
officiis possimus aut, enim necessitatibus. Et facere temporibus excepturi
quis.
</p>
</body>
</html>
6. S3로 배포한 정적 웹사이트에 도메인 달아주기
- 반드시 버킷 이름과 도메인 이름이 같아야 합니다