AWS

[AWS] Simple Storage Service (S3)

Happy._. 2024. 6. 25. 20:45

S3

  • 인터넷 스토리지 서비스
  • 개발자나 IT 운영자가 웹 규모 컴퓨팅 작업을 수행하는 데 필요한 데이터 저장 공간을 제공
  • 정적 웹 사이트 호스팅, 온라인 백업, 데이터 아카이브, 기업 애플리케이션, Big Data 분석 등 다양한 용도로 사용

S3 서비스의 사용 예

  • 웹 사이트 호스팅
  • 멀티미디어 파일 저장 및 스트리밍
  • 애플리케이션 데이터 저장
  • 백업 및 복원
  • 아카이브

S3 서비스의 장점

  • 높은 내구성, 가용성 및 안정성
  • 손쉬운 사용 및 관리
  • 보안성
  • 높은 확장성

Buckets

  • 데이터를 저장하는 가장 상위 레벨의 폴더 형태의 컨테이너
  • 데이터를 저장하는 컨테이너 역할
  • 객체에 대한 공용 또는 개인적인 접근 권한을 설정하기 위한 위치
  • 객체에 대한 특별한 이벤트 알림을 설정하기 위한 위치
  • AWS 계정에서 버킷 및 객체 사용에 대한 비용 추적 및 모니터링을 위한 위치

객체: S3에 저장되는 파일들로 모든 객체는 키(디렉터리)로 식별된다.

s3://버켓명/폴더명/파일명.확장자

 

Buckets 네이밍 컨벤션

  • 대문자 금지, 언더스코어(_) 금지
  • 최소 3자 ~ 최대 63자 사이
  • 소문자, 숫자, 점(.), 하이픈(-)으로만 구성
  • 문자 또는 숫자로 끝나야 함
  • 두 마침표(..)를 나란히 붙여 사용할 수 없음
  • IP 주소 형식을 사용하지 않음

Bucket 생성

  1. S3로 검색 후 이동 → 우측 상단에서 Seoul로 Region 변경 [Create bucket]
  2. Bucket name 설정 - bucket name은 다른 사용자의 bucket과 중복되지 않는 이름으로 설정
  3. Object Ownership: ACLs disabled (recommended)
  4. [Create bucket]

Bucket Policy

  • IAM과 유사한 JSON 형식의 문서
  • Bucket의 모든 객체에 대한 엑세스를 제어할 수 있음
  • 특정 객체 또는 객체 그룹에 대한 엑세스를 제어할 수 있음
  • 액세스를 허용하는 IP 주소 또는 범위를 지정할 수 있음
  • 액세스 할 수 있는 리소스의 범위를 제한할 수 있음
  • 암호화된 연결을 사용하도록 강제할 수 있음

Bucket Policy 예시

이 정책은 IAM 사용자 "USERNAME"이 GetBucketLocation 작업을 수행할 수 있도록 지정된 버킷 "BUCKET-NAME"에 대한 액세스를 허용

{
    "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"
        }
    ]
}
  • Resource : Bucket 혹은 Object
  • Effect: Allow or Deny
  • Principal : 대상 유저

ARN

  • 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: AWS 리소스명을 가리키는 고정 문자열
  • aws: 리소스가 AWS에서 호스팅 되는 것을 나타내는 고정 문자열
  • service: AWS 서비스명을 나타내는 문자열 (예: s3, lambda, ec2 등)
  • region: AWS 리전명을 나타내는 문자열 (예: us-east-1, ap-northeast-2 등)
  • account-id: AWS 계정 ID를 나타내는 숫자
  • resource-id: 해당 리소스의 고유 식별자 (예: S3 버킷 이름, Lambda 함수 이름 등)

Bucket Policy 설정

  1. 생성된 Bucket의 Permissions로 이동
  2. Block public access (bucket settings) → [Edit]  Block all public access 체크 해제  [Save changes]
  3. Bucket Policy  [Edit] → Bucket ARN 복사 → 우측 상단 [Policy generator]
    1. Select Type of Policy: S3 Bucket Policy
    2. Effect: Allow
    3. Pricipal: *
    4. Actions: GetObject
    5. Amazon Resource Name (ARN): 복사한 ARN
    6. [Add Statement]
  4. [Generate Policy]
  5. Policy JSON Document 복사
  6. Edit bucket policy에 붙여넣기 → Resource값 맨 뒤에 /* 추가(/*가 없으면 버킷을 가리키기 때문에 에러 발생)
  7. [Save changes]

S3를 이용한 Static Site 호스팅

  1. Bucket에 호스팅할 파일을 업로드 - 파일명이 index.html여야 함
  2. [Properties] → Static website hosting → [Edit]
  3. Static website hosting: Enable
  4. Hosting a static website: Host a static website
  5. Index document: index.html
  6. Error document: 에러가 발생했을 때 이동할 페이지
  7. [Save changes]
  8. [Properties] → Static website hosting → Bucket website endpoint로 접속

'AWS' 카테고리의 다른 글

[AWS] Relational Database Service (RDS)  (0) 2024.06.25
[AWS] Elastic Load Balancer (ELB)  (0) 2024.06.25
[AWS] Elastic Compute Cloud  (0) 2024.06.24
[AWS] Identity and Access Management  (0) 2024.06.18