AWS

S3 (Simple Storage Service)

sehunbang 2024. 3. 23. 13:21

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로 배포한 정적 웹사이트에 도메인 달아주기

  • 반드시 버킷 이름과 도메인 이름이 같아야 합니다