[AWS] S3

👀·2024년 11월 18일

S3

Amazon Simple Storage Service(S3)는 AWS에서 제공하는 객체 스토리지 서비스이다.

build 후 정적파일을 저장하고 제공하는데 사용.

공식문서

버킷

  • S3에서 데이터를 저장하는 기본 단위

버킷 만들기

  1. AWS 콘솔에 로그인한다.
  2. 검색창 똔느 서비스 목록을 통해 S3대시보드에 접근한다.
  3. 버킷 생성을 클릭한다.
  4. 버킷 이름을 작성한다.
  5. '모든 퍼블릭 엑세스 차단'을 허용하고 퍼블릭 상태가 될 수 있다는 경고창을 확인하고 체크한다.
  6. 버킷 만들기 클릭

버킷 정책 설정

  1. 버킷 세부 페이지로 이동
  2. 권한 탭 클릭
  3. 편집 버튼 클릭후, 정책 추가
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "PublicReadGetObject",
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::내버킷이름입력/*"
        }
    ]
}

"Resource"에 내 버킷이름 입력하고 끝에 /*은 누락하면 안된다.

Version: 정책 언어의 버전
Statement:
- 하나 이상의 개별 statement을 포함하는 배열
Sid: PublicReadGetObject:
- Statementh ID의 약자로 statement의 목적을 설명하는 식별자.
- PublicReadGetObject설정은 내 객체를 공개적으로 읽기 가능하게 해준다.
- 웹 사이트 호스팅이나 다운로드 가능한 파일에 주로 이 권한을 부여한다.
Effect: Allow:
- IAM정책 statement에 필수 필드로 Allow는 지정한 작업을 허용함을 나타낸다.
- 반대는 Deny
Pricipal: "*":
- 정책이 적용되는 대상을 지정한다.
- ""은 모든 사용자를 의미하여 누구나 이 권한을 가질 수 있다.
Action: "s3:GetObject":
- 허용되는 작업을 지정한다.
- "s3:GetObject"는 내 객체를 읽거나 다운로드할 수 있다.
Resource: "arn:aws:s3:::내버킷이름/
" :
- 정책이 적용되는 리소스를 지정한다.
- arn:aws:s3:::내버킷이름/*은 지정된 버킷("내버킷이름")의 모든 객체를 의미한다.
- *은 버킷 내의 모든 객체에 이 정책이 적용됨을 나타낸다.

CORS 구성

  1. 권한 탭에서 CORS(Cross-origin 리소스 공유) 섹션을 찾는다.
    2, 편집 클릭 후, 다음 구성 추가.

    [
     {
         "AllowedHeaders": ["*"],
         "AllowedMethods": ["GET", "HEAD"],
         "AllowedOrigins": ["내 도메인"],
         "ExposeHeaders": []
     }
    ]
  2. 변경 사항 저장 클릭

    정적 웹 사이트 호스팅 설정

  3. 속성 탭에서 정적 웹 사이트 호스팅 섹션을 찾는다.

  4. 편집 클릭

  5. Next.js로 실습을 진행하기 때문에 오류문서 항목만 404.html로 수정해준다.

  6. 변경 사항 저장 클릭

    버킷에 정적파일 올려보기 (도메인이 없을 경우)

  7. 버킷 전용 엔드포인트 확인하기

  • 속성 탭 클릭

  • 최 하단의 정적 웹 사이트 호스팅 섹션에서 엔드포인트를 확인할 수 있다.
    현재 브라우저를 열면 404 Not Found화면이 뜨는데 현재 버킷에 파일이 없기 때문에 당연한 결과다.

    버킷에 빌드 결과물 올리기.

  1. Next.js설정: next.config.ts
    output: 'export'로 해주면 빌드물이 out폴더에 생성된다.
import type { NextConfig } from "next";

const nextConfig: NextConfig = {
  output: "export",
};

export default nextConfig;
  1. next프로젝트가 있다면 프로젝트 빌드물, 없다면 create-next-app@latest로 만들어서 빌드한다.

  2. 생성한 버킷의 상세 페이지에서 업로드 버튼을 클릭

  3. 파일 추가를 클릭하고 out폴더에 있는 모든 파일을 모두 업로드한다.

버킷과 객체

S3에서 객체(Object)는 클라우드 환경에 최적화된 저장 단위이며 버킷이라는 컨테이너 내에 저장된다.

객체의 특징
1. 기본 저장 단위:
객체는 S3에서 데이터를 저장하는 기본 단위.
2. 파일과 유사한 개념:
객체는 컴퓨터의 파일과 유사한 개념이다. 이미지,비디오, 문서 등 어떤 종류의 파일이든 객체가 될 수 있다.
3. 구성 요소:

  • 데이터: 실제 저장하려는 콘텐츠
  • 키: 버킷 내에서 객체를 고유하게 식별하는 이름
  • 메타 데이터: 객체에 대한 추가 정보 (ex: 생성 날짜 등)
  1. 크기:
    한 객체는 최대 5TB까지 저장할 수 있다.
  2. 불변성:
    객체를 수정할 수 없다. 변경하려면 새 객체를 만들어 덮어써야한다.
  3. 버킷 내 저장: 모든 객체는 반드시 버킷이라는 컨테이너 내에 저장된다.

정적 페이지 호스팅 확인

버킷 속성 탭에서 최하단의 정적 웹 사이트 호스팅 섹션에 있는 엔드포인트를 클릭하면
버킷에 업로드한 프로젝드가 화면에 노출된다.

0개의 댓글