카테고리 없음

AWS 4일차 (1) S3

kiminaki 2021. 6. 6. 20:39

S3 실습

 

1. 버킷 생성

버킷은 바구니라는 뜻으로 S3의 스토리지 개념이다

 

먼저 콘솔에 S3를 검색하고 클릭.

 

 

 

 

 

버킷만들기 클릭

 

 

 

버킷이름과 리전을 선택할 수 있다. 이외에도 버킷의 버전이나 암호화, 퍼블릭 엑세스에 관한 설정도 있다. 

일단 생성한다.

 

 

 

S3생성완료.

 

 

2. S3 버킷에 파일 올리기/받기

S3는 기본적으로 파일을 저장하고 필요할때 다운로드가 가능해야한다. 이 부분을 실습해 본다.

 

 

 

파일을 저장할 버킷 클릭

 

 

업로드 클릭

 

 

단일파일을 추가할 수도 있고,

 폴더추가를 통해 폴더를 이동시키면 하위에 있는 파일 전부를 추가시킬 수 있다.

 

 

테스트를 위해 이미지파일 하나를 추가 시켰다. 업로드 클릭

 

 

성공에 대한 결과값을 얻을 수 있었다.

 

 

 

테스트할 버킷안에 해당 이미지 파일이 저장되어 있는것을 확인할 수 있다.

해당파일을 클릭해보자.

 

 

해당파일에 대한 상세정보를 알 수 있고, 다운로드 및 S3 URL 복사가 가능하다. 다운로드를 해보자

 

 

크롬 하단에 다운로드가 된것을 알 수 있다.

 

 

 

3. S3 세부 설정

S3에는 단지 파일을 저장하는것만이 아닌 해당파일에 대한 접근권한을 설정할 수 있다.

예를들어 파일을 전체 공개할수도 잇고, 특정 사용자에게만 공개할 수도 있다.

어떻게 설정하느냐에 따라 다양한 접근 제어가 가능하다.

HTTP Referer, 웹사이트 운영, 로그기록, 수명주기 버저닝등을 관리할 수 있다.

 

 

간단한 권한 관리로 버킷에 있는 파일을 인터넷에 공개해보도록 하겠다.

 

S3에 있는 IU.PNG파일에 링크가 걸려 있는것을 확인할 수 있다. 한번 들어가보자

 

 

에러메세지가 뜨며 엑세스가 디나이되었다는 코드가 나와 있다. 

이 파일은 인터넷에 공개가 되어있지 않게 설정되어있다는 뜻이다.

이 파일을 공개 변경해 보겠다.

 

 

 

IU.PNG 파일 설정에 오른쪽에 객체 작업-퍼블릭으로 설정을 클릭

 

 

클릭하기 되면 주의사항에 전 세계 누구나 지정된 객체에 액세스할 수 있다고 설명되어있다.

퍼블릭으로 설정 클릭

 

 

 

이때 권한부족으로 액세스 편집이 실패가 떳다.

S3버킷 기본설정 문제로 예상된다.

 

 

 

버킷 설정에 권한을 보게되면 퍼블릭 액세스가 차단되이 있는것을 확인할 수 있다.

 

 

편집을 통해 액세스 차단을 풀어준다.

 

 

 

다시 버킷에 있는파일을 퍼블릭으로 바꾸어준다.

 

 

 

URL을 클릭하면 해당파일에 접근이 가능한것을 볼 수 있다.

 

 

S3 버킷 권한

이전 실습에서는 버킷안에 있는 객체에 대해서 권한관리를 했다면 이번실습에서는 버킷에 대해 권한을 설정해서 버킷 안에 든 모든 객체에 적용할 수 있도록 한다.

 

 

버킷에 새로운 이미지파일을 업로드 시킨다.

 

 

URL에 들어가면 엑세스 디나이가 된것을 확인할 수 있다.

객체마다 하나하나 설정하면 번거로울 수 있다. 그래서 버킷설정을 변경하여 업로드하더라도 퍼블릭 액세스에 접속할수 있도록 변경해준다.

 

 

 

버킷 세부설정에 권한에 들어가면

 

 

 

버킷 정책이 보인다 편집-정책 생성기 클릭

 

 

 

먼저 1번에서는 정책 유형 선택이 있는데 IAM, S3, SNS, VPC, SQS 정책에 대해서 설정할 수 있다.

S3를 선택한다

 

 

 

 

항목에 대한설명이다.(번역이 어색하다)

  • 효과: 허용(Allow), 거부(Deny)를 선택할 수 있습니다. 기본값 그대로 Allow를 선택합니다.
  • 주요한: 권한을 적용할 사용자입니다. IAM 계정을 사용할 수 있습니다. 여기서는 인터넷에 전체 공개할 것이므로 *을 입력합니다.
  • AWS서비스: 처음 Select Type of Policy를 선택하면 그에 맞는 서비스가 자동으로 선택됩니다. 기본값 그대로 사용합니다.
  • 행위: S3의 모든 액션이 표시됩니다. 우리는 파일을 받는 액션만 사용할 것이므로 GetObject를 선택합니다.
  • Amazon Resource Name(ARN): 아마존의 리소스를 고유하게 표현하는 방식입니다. arn:aws:s3:::s3saatest/*을 입력합니다. 이것은 AWS의 S3에서 s3saatest 아래 모든 파일을 뜻합니다. /* 대신 /Jellyfish.jpg 등으로 특정 파일을 지정해 줄 수도 있습니다.

 

 

 

정책 생성클릭

 

 

 

정책에 대한 제이슨 문이 출력된다. 이걸 복사하고

 

 

 

정책에 입력한다음 변경 사항을 저장한다.

 

 

주황버섯 URL을 클릭하면 접근이 가능한것을 볼 수 있다.

 

 

S3 정적 웹 호스팅 

실습전 위와 같은 설정으로 새로운 버킷을 만든다.

 

 

<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8" />
  <title>Test</title>
</head>
<h1>HELLO S3 HTTP<h1>
<body>
  <div id="wrap">
    <table id="tb">
      <tbody>
        <tr>
            <td class="left_box"><label for="">ID</label></td>
            <td class="input_box"><input type="text" id="name" name="name" /></td>
        </tr>
        <tr>
            <td class="left_box"><label for="">PASSWORD</label></td>
            <td class="input_box"><input type="text" id="phone" name="phone" /></td>
        </tr>
      </tbody>
    </table>
    <input type="button" id="enter" value="계정생성"/>
  </div>
</body>
</html>

 

먼저 index.html 파일을 만들어 준다.

 

<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8" />
  <title>Test</title>
</head>
<h1>에러 페이지입니다<h1>
</html>

 err.html 파일도 만들어준다.

 

 

업로드 확인 

 

 

해당 버킷의 속성 하단에 정적 웹 사이트 호스팅 항목이 있다.

편집 클릭

 

 

정적 웹 사이트 호스팅을 설정하고

인덱스 문서에 index.html

오류 문서에 err.html을 등록한다.

 

 

 

 

정적 웹 사이트 호스팅을 보면 url이 바뀐것을 볼 수 있다.

해당 url 들어가보자.

 

 

 

원래에 버킷 객체에 들어가면 url 뒤에 파일 명이 붙는데 해당 url에 그런것 없이 바로 index.html에 들어가게 된다. 

고의적으로 웹페이지에 에러를 일으켜 본다.

 

 

 

에러페이지로 리다이렉션 된 모습을 볼 수 있다.

이런 에러페이지는 보안상 중요한데 간단하게 고의적으로 에러를 일으켯을때 보안상 설정을 제대로 해놓지 않으면 서버 자체에 들어갈수 있기때문에 이런식으로 에러가 일어났을때 바로 이페이지로 리다이렉션을 해주는 것이다.

 

 

 

 

 

HTTP Referer로 S3 접근 제한하기

우선 실습전 Referer를 이해할 필요가 있다.

 

 

 

Referrer???? 은 조회인이라는 뜻을 가지고 있는데, 예를들어 어떤 A라는 설문조사를 했을때 A라는것을 알게된 경로 이런것을들 한번씩 본적 있을것이다. 

 

이걸 HTTP로 바꾼다면 예를들어 네이버에서 아이유를 검색했다하자 

 

아이유가 검색된것을 볼 수 있다. 이때 그럼 referrer은 뭘까? 바로 네이버이다 우리는 네이버에서 검색을 통해 들어 왔기 때문이다. 

 

그러면 인스타그램에 들어가면 referrer은 뭘까 ???

바로 위의 url이 될것이다. 

 

 

실습에 들어가보자

이미지가 있는 버킷에 해당 내용을 입력해준다.

 

 

항목에 대한 설명은 

Effect : 지정한 도메인만 허용 -> Allow
Principal : 정책을 적용할 대상. 인터넷 전체 공개 -> ***
**Action
 : 이미지 파일을 다운로드 -> s3:GetObject
Condition : 문자열 포함 조건절 -> StringLike

 

여기서 http://s3http123.s3-website.ap-northeast-2.amazonaws.com/* 에는 본인이 생성한 S3 정적 웹사이트 호스팅 버킷의 주소를 설정합니다.

 

 

 

 

 

이미지가 있는 버킷에 IU2의 URL에 들어가본다.

그러면  분명 모든 조건을 열줬으음에도 엑세스가 디나이 된것을 확인할 수 있는데, 이는 Referer가 제한되어 그런것이다. 

 

즉 오직 정해진 리퍼러http://s3http123.s3-website.ap-northeast-2.amazonaws.com/*  에서만 접속할수 있기 때문이다.

 

그렇다면 리퍼러의 장점은 뭘까 일단 해당 이미지로 들어갈수 있는 경로가 제한되어 있어 트래픽량이 줄어들기때문에 과금이 적어진다. 또한 경로가 제한되어 보안상 유리하다.

 

제한된 경로로 들어가는 실습을 해보자 

 

<!DOCTYPE html>
<html>
<head>
    <title>S3 TEST</title>
</head>

<body>
    <p>Hello S3</p>
    <img src="https://s3saatest.s3.ap-northeast-2.amazonaws.com/IU2.PNG" width="500"
        height="500">
</body>
</html>

 

index.html 파일을 만들어주고 정적 버킷에 업로드 한다음 정적 웹 사이트에 들어가보자.

 

 

 

그럼 제한한 경로로는 들어갈 수 있는 모습을 볼 수 있다.