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 Bucket ARN 붙여넣기
Resource 끝에 /*을 붙여 저장

 

 

 

 

 

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

+ Recent posts