Amazon Simple Storage Service(S3)
인터넷 스토리지 서비스입니다. 이 서비스는 개발자나 IT 운영자가 웹 규모 컴퓨팅 작업을 수행하는 데 필요한 데이터 저장 공간을 제공합니다. Amazon S3는 웹 사이트 호스팅, 온라인 백업, 데이터 아카이브, 기업 애플리케이션, Big Data 분석 등 다양한 용도로 사용됩니다. 콘솔창에서 region 상관없이 S3를 모두 확인할 수 있습니다.
* 프론트엔드 - 정적 웹사이트 호스팅 / 백엔드 - 동적 웹사이트 호스팅
S3 서비스의 사용 예
- 웹 사이트 호스팅
- 멀티미디어 파일 저장 및 스트리밍
- 애플리케이션 데이터 저장
- 백업 및 복원
- 아카이브
S3 서비스의 장점
- 높은 내구성, 가용성 및 안정성
- 손쉬운 사용 및 관리
- 보안성
- 높은 확장성
EBS는 단일 인스턴스에 대한 고성능 스토리지 서비스가 필요한 경우. Read/ Write가 빈번한 경우 사용한다.
S3는 비교적 저렵한것이 장점. 정적 웹 사이트도 지원하므로 여러개의 정적 HTML 페이지를 호스팅해야 하는 경우 사용. Write once Read many times 파일 수정 불가(덮어쓰기)
| EFS | EBS | S3 |
| NFS 파일 시스템 | Block Storage | object(객체) Storage |
| 비쌈 | 평균 | 쌈 |
| 빈번한 Read / Write | 빈번한 Read / Write | Write once Read many times |
| 여러 AZ에 중복 저장 | 단일 AZ에 중복 저장 | 여러 AZ에 중복 저장 |
| 파일 수정 가능 | 파일 수정 가능 | 덮어쓰기 |
| 대규모 사용 사례에 적합 | 데이터베이스, ERP 시스템, 메일 서버, 쉐어포인트, 웹 서버, 디렉터리 서버, DNS 서버 또는 미들웨어에 적합 | 정적 웹사이트(프론트) 호스팅에 적합 |
Buckets?
버킷이란 데이터를 저장하는 가장 상위 레벨의 폴더 형태의 컨테이너입니다!
S3에 저장되는 파일들을 ‘객체’ 라고 부르고 모든 객체는 ‘키’(디렉토리)로 식별됩니다.
prefix/delimiter/object-name
s3://my-bucket/my_folder/my_file.txt
Amazon S3에서 버킷은 다음과 같은 목적으로 사용됩니다.
- 데이터를 저장하는 컨테이너 역할
- 객체에 대한 공용 또는 개인적인 접근 권한을 설정하기 위한 위치
- 객체에 대한 특별한 이벤트 알림을 설정하기 위한 위치
- AWS 계정에서 버킷 및 객체 사용에 대한 비용 추적 및 모니터링을 위한 위치
버킷 네이밍 컨벤션
- 대문자 금지, 언더스코어 금지
- 버킷 이름은 3자(최소)에서 63자(최대) 사이여야 합니다.
- 버킷 이름은 소문자, 숫자, 점(.) 및 하이픈(-)으로만 구성될 수 있습니다.
- 버킷 이름은 문자 또는 숫자로 시작하고 끝나야 합니다.
- 버킷 이름에 두 마침표를 나란히 붙여 사용하면 안 됩니다.
- 버킷 이름은 IP 주소 형식(예: 192.168.5.4)을 사용하지 않습니다.
버킷 생성하고 파일 업로드



※ 버킷 이름과 apex 도메인 이름이 같아야 한다.




※ 열기로 접속시 작성한 html이 보이지만 object URL 접속시 Access Denied
버킷폴리시
- 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 함수 이름 등)
html 작성후 버킷에 업로드
<--index.html 파일로 아래 내용을 생성-->
<!DOCTYPE html>
<html lang="en">
<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>
</body>
</html>






https://docs.aws.amazon.com/AmazonS3/latest/userguide/WebsiteAccessPermissionsReqd.html
<!--policy에 아래 코드 붙여넣기-->
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "PublicReadGetObject",
"Effect": "Allow",
"Principal": "*",
"Action": [
"s3:GetObject"
],
"Resource": [
"이부분에 버킷 ARN 붙여넣기/*"
]
}
]
}
S3에 도메인 네임 적용하기

※ 보통 프론트에 apex 도메인(기본 도메인 ex. xxx.com)을 할당
※ 예시에서는 버킷과 도메인에 front. 를 앞에 붙여 생성했습니다.







※ 레코드 이름으로 접속은 돼는데 https:// 접속이 안됨.
'aws' 카테고리의 다른 글
| 11. [aws] EBS(Elastic Beanstalk) & http를 https로 리다이렉트 (0) | 2023.05.26 |
|---|---|
| 10. [aws] CDN (0) | 2023.05.26 |
| 08. [aws] VPC (0) | 2023.05.26 |
| 07. [aws] 도메인 HTTPS 연결 (0) | 2023.05.26 |
| 06. [aws] DNS, CNAME vs Alias (0) | 2023.05.23 |