외로운 Nova의 작업실

aws - S3 본문

Cloud/aws

aws - S3

Nova_ 2023. 10. 13. 15:26

- S3

S3는 인터넷 스토리지 서비스로 용량에 관계없이 파일을 저장할 수 있고 웹에서 파일에 접근할 수 있습니다. S3를 써야하는 이유는 성능과 비용에 있습니다. 대용량 파일 저장을 EC2와 EBS를 통해 구축한다면 상당히 많은 비용이 들고 노력이 요구됩니다. 하지만, S3는 저장 용량이 무한대이고 파일 저장에 최적화되어있기때문에 성능이 좋고, 비용도 EC2와 EBS로 구축하는 것보다 훨씬 저렴합니다.

 

또한, 정적 웹사이트를 구축한다면 S3에서 바로 정적 웹 서비스를 이용하면됩니다. S3자체가 성능좋은 웹 서버 몇천대로 구성되어 자동 횡적 확장이나 부하 분산에 신경쓰지 않아도 됩니다.

 

- S3 기본개념

객체 : S3에 데이터가 저장되는 최소 단위로 이객체는 파일과 메타데이터로 구성됩니다.

버킷 : S3에서 생성할 수 있는 최상위 폴도로 리전별로 생성해야하며 버킷의 이름은 모든 S3 리전중에서 유일해야합니다.

 

- S3 버킷 생성하기

버킷 카테고리에 들어오면 이렇게 있습니다. 버킷 만들기 버튼을 눌러줍니다.

버킷 이름 설정후 만들어줍니다.

이제 이 버킷에 파일을 올리고 다운받을 수 있습니다.

 

- S3 파일 업로드/다운로드

 

버킷에 들어가서 업로드 해줍니다.

이전에 스크린샷햇던 파일을 추가해보겠습니다.

업로드가 된 것을 확인할 수 있습니다.

해당 객체를 클릭하면 객체 URL이 있습니다. 이를 브라우저를 통해 접속해보겠습니다.

Access Denied 되는 것을 확인할 수 있습니다. 이는 객체의 권한을 설정해줘야 합니다.

 

- 객체 권한 설정

버킷을 만들때 아래와 같이 설정해주었습니다.

즉, 객체의 소유권(편집 권한)은 계정이 소유하며 버킷 정책을 통해서만 액세스 지정이 가능하다고 합니다. 또한 요새는 ACL은 사용하지 않습니다.

그래서 객체를 퍼블릭으로 만들려면 바킷을 퍼블릭이 가능하도록 만든다음 버킷 정책을 통해서 객체를 퍼블릭으로 변경해줘야합니다.

 

먼저 버킷에대해 퍼블릭이 가능하도록 변경해줍니다.

편집을 누르고

모든 체크를 풀어줍니다. 이제 정책을 통해서 퍼블릭으로 만들어줄겁니다.

버킷 정책 편집에서 정책 생성기를 클릭해줍니다. 버킷 ARN을 써야하기에 복사해줍니다.

위 사진처럼 넣어주고 Actions는 getObject만을 넣어줍니다.

이후 생성된 정책을 복사해줍니다.

정책을 붙여넣어주고 Resource 부분에 버킷이 아닌 객체를 할당해야하기 때문에 Resource": "arn:aws:s3:::novatestbuckets3/* 이런식으로 변경해줍니다. 그리고 변경 사항을 저장합니다.

 

그리고 이제 접속해보겠습니다.

누구나 접속해서 getObject할 수 있는 것을 확인할 수 있습니다.

 

- S3 정적 웹사이트 호스팅

S3는 정적 웹사이트로 호스팅이 가능합니다. 웹사이트로 호스팅을 하는 것과 안하는 것의 차이는 URL에 있습니다.

 

일반적인 URL : s3-<리전이름>.amazonaws.com<버킷이름>/<파일이름>

정적 웹호스팅 URL : <버킷이름>.s3-website-<리전이름>.amazoneaws.com/<파일이름>

 

또한 정적 웹사이트 호스팅을 사용하면 인덱스 페이지나 에러페이지를 따로 설정해줄 수 있고 리다이렉션 행동을 할 수 있습니다.

 

한번 만들어보겠습니다. 버킷 - 속성에 들어가보면

편집을 눌러줍니다.

위와 같이 작성후 저장해줍니다. 이제 객체에 index.html을 올려줘야합니다. index.html을 하나 만들어줍니다.

<html>
<head>
    <title Example Website Hosting></title>
</head>
<body>
    <p>hello S3</p>
</body>
</html>

이 파일을 올려줍니다.

이제 버킷 속성에서 s3 website의 엔드포인트 링크를 봐줍니다.

접속해보겠습니다.

이렇게 뜸을 알 수 있습니다.

웹 호스팅 URL : http://novatestbuckets3.s3-website.ap-northeast-2.amazonaws.com/ 

객체 URL : https://novatestbuckets3.s3.ap-northeast-2.amazonaws.com/index.html

 

둘이 서로 URL이 다른것을 확인할 수 있습니다.

 

- S3 HTTP referer로 접근 제한하기

S3 객체에대해 referer로 접근을 제한하는 정책을 사용할 수 있습니다. S3 버킷을 하나 더 만들고 referer를 아까만든 웹 호스팅 URL( http://novatestbuckets3.s3-website.ap-northeast-2.amazonaws.com/ )로 한다음  해당 URL에서만 파일을 불러올 수 있게 해보겠습니다. 

새로운 버킷을 만듭니다. 퍼블릭액세스를 허용해줘야합니다.

해당 버킷에 test 이미지 파일을 하나 업로드해줍니다.

이제 버킷 정책을 통해 referer을 설정해줍니다.

정책을 생성해줍니다.

{
  "Id": "Policy1697177116379",
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "Stmt1697177112455",
      "Action": [
        "s3:GetObject"
      ],
      "Effect": "Allow",
      "Resource": "arn:aws:s3:::referer-nova-test-bucket/*",
      "Condition": {
        "StringLike": {
          "aws:Referer": "http://novatestbuckets3.s3-website.ap-northeast-2.amazonaws.com/*"
        }
      },
      "Principal": "*"
    }
  ]
}

이제 index.html을 수정해줍니다.

<html>
<head>
    <title Example Website Hosting></title>
</head>
<body>
    <p>hello S3</p>
    <img src="https://referer-nova-test-bucket.s3.ap-northeast-2.amazonaws.com/test.png" width="320" height="240">
</body>
</html>

이걸 재 업로드한 후 들어가봅니다.

접속이 잘 되고 사진이 잘 불러와지는 것을 확인할 수 있습니다. 그렇다면 그냥 들어가면 어떻게될까요?

test.png로 접속해보겠습니다.

액세스 거부되는 것을 확인할 수 있습니다.

 

- S3 추가 옵션 설명

S3에서 추가적인 것들을 설정할 수 있습니다. 각각 간단하게 알아보고 넘어가겠습니다.

 

S3 암호화 : S3 객체를 저장할때 암호화 여부를 설정할 수 있습니다.

S3 메타데이터 : HTTP와 S3 전용 메타데이터를 설정해서 클라이언트가 요청할때 메타데이터를 같이 전달해줍니다.

S3 버킷 로그 설정 : S3에 저장된 객체의 접속 로그를 텍스트 파일 형태로 저장할 수 있습니다.

S3 버저닝 : S3는 자체적으로 파일 버전 관리 기능을 내장하고 있어서 이 버저닝 기능을 사용하면 파일을 이전 내용으로 되돌릴 수 있고 삭제한 파일을 복원할 수도 있습니다.

S3 버킷 수명 주기 : 버킷에 저장된 객체의 수명주기를 관리하는 기능으로 일정 시간이 지났을때 사용되지 않는 파일들을 삭제하거나 다른 곳에 백업하여 S3 저장공간을 절약하고 싶을때 사용합니다.

 

'Cloud > aws' 카테고리의 다른 글

aws - RDS  (0) 2023.10.14
aws - CloudFront  (0) 2023.10.13
aws - CloudWatch  (0) 2023.10.12
aws - access Key  (0) 2023.10.12
aws - AMI  (0) 2023.10.12
Comments