[AWS] S3 와 Cloudfront

SJ.CHO·2024년 11월 19일
post-thumbnail

S3 (Simple Storage Service)

  • 개발자나 IT 운영자가 웹 규모 컴퓨팅 작업을 수행하는 데 필요한 데이터 저장 공간을 제공한다.

  • 웹 사이트 호스팅, 온라인 백업, 데이터 아카이브, 기업 애플리케이션, Big Data 분석 등 다양한 용도로 사용 된다.

  • S3 서비스의 사용 예

    • 데이터 백업 및 복구:

      • 시스템 데이터, 애플리케이션 로그, 사용자 파일 등을 안전하게 백업하고 복구 가능.
    • 정적 웹사이트 호스팅:

      • HTML, CSS, JavaScript 등 정적 콘텐츠를 빠르게 제공하며, 비용 효율적인 정적 웹 호스팅에 활용.
    • 데이터 분석 및 빅데이터 저장:

      • 데이터 레이크(Data Lake)로 활용하여 분석 및 머신러닝 작업을 위한 원시 데이터를 저장.
    • 미디어 파일 저장 및 제공:

      • 이미지, 동영상, 오디오 등 대용량 멀티미디어 콘텐츠를 저장하고 전 세계 사용자에게 스트리밍 제공.
    • 소프트웨어 배포 및 콘텐츠 전달:

      • 애플리케이션 업데이트 파일, 소프트웨어 설치 프로그램, 게임 리소스 등을 저장하고 다운로드 서비스 제공.
  • S3 서비스의 장점

    • 무한에 가까운 확장성:

      • 저장 용량에 제한 없이 데이터를 저장 가능하며, 필요에 따라 자동으로 확장.
    • 높은 내구성 및 가용성:

      • 데이터 내구성은 99.999999999% (11 9s)로 보장되며, 다중 리전 복제를 통해 데이터 손실 위험 최소화.
    • 비용 효율성:

      • 사용한 만큼만 비용을 지불하는 종량제 요금제 제공.
        S3 Glacier 및 Glacier Deep Archive를 통해 저비용 장기 데이터 저장 옵션 활용 가능.

Buckets?

  • 데이터를 저장하는 가장 상위 레벨의 폴더 형태의 컨테이너이다.
  • S3에 저장되는 파일들을 ‘객체’ 라고 부르고 모든 객체는 ‘키’(디렉토리)로 식별된다.
prefix/delimiter/object-name

s3://my-bucket/my_folder/my_file.txt
  • 사용하는 이유
    • 데이터를 저장하는 컨테이너 역할
    • 객체에 대한 공용 또는 개인적인 접근 권한을 설정하기 위한 위치
    • 객체에 대한 특별한 이벤트 알림을 설정하기 위한 위치
    • AWS 계정에서 버킷 및 객체 사용에 대한 비용 추적 및 모니터링을 위한 위치
  • 네이밍 컨벤션
    • 대문자 금지, 언더스코어 금지
    • 버킷 이름은 3자(최소)에서 63자(최대) 사이여야 합니다.
    • 버킷 이름은 소문자, 숫자, 점(.) 및 하이픈(-)으로만 구성될 수 있습니다.
    • 버킷 이름은 문자 또는 숫자로 시작하고 끝나야 합니다.
    • 버킷 이름에 두 마침표를 나란히 붙여 사용하면 안 됩니다.
    • 버킷 이름은 IP 주소 형식(예: 192.168.5.4)을 사용하지 않습니다.

S3 생성하기

  • 가장 큰 특징은 버킷은 Global Unique 하다는 것이다. 즉 전세계에서 유일한 이름을 가져야한다.

  • 서비스 형태 또 한 글로벌 서비스 형태를 지닌다.

  • 콘솔내에서 모든 리전안의 버킷들을 전부 볼수 있다.

  • 버킷내의 파일을 업로드도 가능하며, 해당 파일의 정보 및 URL을 확인 가능하다.

  • 하지만 S3 내의 이미지를 URL을 통해 접근하려고 하면 권한이 막혀있다 나오게되는데, S3내부에 있는 파일에 접근을 하려할때 사용해야하는 기능 중 하나이다.

버킷 폴리시

  • IAM과 유사하며 JSON 형식의 문서 이다.
  • 버킷의 모든 객체에 대한 액세스를 제어할 수 있다.
  • 특정 객체 또는 객체 그룹에 대한 액세스를 제어할 수 있다.
  • 특정 객체 또는 객체 그룹에 대한 액세스를 제어할 수 있다.
  • 액세스를 허용하는 IP 주소 또는 범위를 지정할 수 있다.
  • 액세스할 수 있는 리소스의 범위를 제한할 수 있다.
  • 암호화된 연결을 사용하도록 강제할 수 있다.
{
    "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 : 버킷 혹은 오브젝트 를 가르킨다.
  • Effect: Allow 혹은 Deny 속성을 가진다.
  • Principal : 대상 유저를 가르킨다.

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

버킷폴리시 적용하기

  • 현재 버킷의 상태를 보면 퍼블릭접근들을 차단하고있다.
  • 모든 퍼블릭 액세스차단을 해제하고 버킷 폴리시 정책을 편집해보도록 하겠다.
  • 버킷 폴리시 정책 또한 사용자가 직접 JSON을 입력할 필요없이 정책생성기를 통해 간단하게 정책생성이 가능하다.
  • 이를 통해 파일의대한 접근을 URL을 통해 하더라도 접근이 가능하다.

Cloudfront

Content Delivery Network

  • 사용자에게 웹 콘텐츠를 더 빠르고 안정적으로 제공하기 위한 분산 네트워크 시스템 이다.

  • 전 세계 여러 위치에 분산된 서버로 구성되며, 사용자가 특정 웹사이트에 접속할 때 물리적으로 가장 가까운 서버에서 콘텐츠를 전달하게된다.

  • 특히 글로벌 웹사이트나 영상 스트리밍, 소프트웨어 다운로드 등 대규모 트래픽이 발생하는 서비스에서 중요하게 사용되며, 대표적인 CDN 제공업체로는 Cloudflare, Akamai, AWS CloudFront 등이 있다.

  • 장점

    • 향상된 속도 : 지리적으로 가까운 서버에 캐싱된 데이터를 갖고 오기 때문에 무척 빠르다.
    • 안전 : CDN 서비스를 해주는 업체에서 방화벽을 제공할 뿐만 아니라 DDoS 공격이 와도 서버가 분산되어 있고 캐시기능으로 오리진 서버 트래픽은 늘어나지 않는다.
  • 단점

    • 캐시 : 최신 동적 컨텐츠를 제공해야하는 경우에 적합하지 않다.
    • 비용이 추가 발생한다.

profile
70살까지 개발하고싶은 개발자

0개의 댓글