새소식

300x250
6. DevOps/AWS 기초편

[AWS] 6-1. AWS - S3 버킷 생성 및 파일 업로드 하기

  • -
728x90

안녕하세요. 갓대희 입니다. 이번 포스팅은 [ AWS - S3 버킷 생성 하기, 파일 업로드 해보기 입니다. : )

 

1. S3(Simple Storage Service)란? 

 - 온라인 오브젝트(객체) 스토리지 서비스이다.
 - 구글 드라이브 처럼 파일 저장 스토리지 서비스이며, 데이터를 온라인, 오브젝트 형태로 저장하는 서비스라고 볼 수 있다.

 

2. S3 특징

1) 확장성 : EC2와 마찬가지로 확장, 축소가 쉽다.
2) 가용성 및 내구성
 - 99.99999%의 데이터 내구성을 가지고 있어 장애나 오류, 위협에 강하다.
 - S3객체는 최소 4개의 가용 영역에 자동으로 복제되어 보존되기 때문에 어느 한쪽에 장애가 발생해도 계속 사용가능 하다.
3) 신뢰성 : 암호화 기능과 접근 관리 도구가 있고, 각종 규정을 준수하며 감사 기능을 갖추고 있다.
4) 다양한 관리 기능 : 스토리지 클래스 분석, 수명 주기 정책 등을 시작으로 각종 관리 기능 존재 한다.

 

3. S3 사용 목적 및 이유

 - 저장 용량이 무한대이고 파일 저장에 최적화되어 있다. 용량을 추가하거나 성능을 높이는 작업이 필요없다.
 - EC2와 EBS등에 비해 훨씬 저렴하다.
 - 다양한 용도로 활용 가능하다. 

 - 해당 포스팅에선 하기 파일 업로드 정도만 테스트 해볼 예정이다.

 ex1) FTP 처럼 단순 파일 저장 가능하다, 클라우드 저장소 (구글 드라이브처럼 활용)
 ex2) 정적 웹 사이트 호스팅(저렴한 비용으로 정적 웹 호스팅이 가능 하다.)
 ex3) 이미지서버, 동영상 서버로 사용 가능하다.
 ex4) EBS 스냅샷 저장 및  AWS 서비스의 로그 저장이 가능 하다.

 

4. S3 버킷 / 객체 개념

 - 객체(Object) : 데이터와 메타데이터를 구성하고 있는 저장 단위.
 - 버킷(Bucket) : 객체를 저장하고 관리하는 역할을 한다. 디렉토리/폴더 개념으로 이해 하자.

 

4.1) 버킷 만들기

1) AWS Console에 접속 > S3 검색 및 Console에 접속 한다.

 

2) "버킷 만들기" 클릭

 

3) 버킷 이름 및 리전 지정 하기

 - 버킷 이름 : 이름을 지어주는데 버킷의 이름은 S3에서 유일해야 한다. 전세계에 어디에도 중복된 버킷은 없다.

 - 버킷 주소는 https://bucketname.s3.Region.amazonaws.com 형태로 이루어진다.

   ※ 한 계정 당 최대 100개의 버킷 사용 가능하다.

   ex) 만약 "gdh"라는 이름의 버킷에 "image.png" 객체 파일을 저장하면

   http://gdh.s3.amazonaws.com/image.png라는 URL이 생성되게 된다.

 

 - 리전 : S3가 생성한 버킷을 저장할 위치를 지정해야 한다.

※ 리전 간 객체 공유는 불가능하며, 버킷 위치(리전)을 어디에 지정하냐에 따라 지연 시간, 비용 등이 결정되게 된다.

 

4) 객체 소유권은 Default 권장설정, ACL 비활성화됨 으로 선택 한다.

 - ACL(Access Control List) : 버킷, 객체에 대해 요청자의 권한 허용 범위를 간단하게 설정할 수 있다.

 

5) 퍼블릭 액세스 차단

 - 클라우드, 이그로 정적 웹 호스팅 등을 실습할 예정이므로 해당 설정은 체크 해제 하도록 한다.

※ 참고

▶ 새 ACL(액세스 제어 목록)을 통해 부여된 버킷 및 객체에 대한 퍼블릭 액세스 차단
 - 지정된 ACL이 퍼블릭이거나, 엑세스 요청에 퍼블릭 ACL이 포함되어 있으면 차단 한다.


▶ 임의의 ACL(액세스 제어 목록)을 통해 부여된 버킷 및 객체에 대한 퍼블릭 액세스 차단
 - 퍼블릭 ACL를 포함하는 PUT 요청은 허용 한다. (모든 퍼블릭 ACL과 포함된 모든 Object를 무시)

 

▶ 새 퍼블릭 버킷 또는 액세스 지점 정책을 통해 부여된 버킷 및 객체에 대한 퍼블릭 액세스 차단
 - 지정된 버킷 정책이 퍼블릭이면 액세스 차단한다. 
 - 버킷 및 객체에 대한 퍼블릭 액세스를 차단하고 사용자가 버킷 정책을 관리할 수 있다.


▶ 임의의 퍼블릭 버킷 또는 액세스 지점 정책을 통해 부여된 버킷 및 객체에 대한 퍼블릭 액세스 차단
 - 퍼블릭 정책이 있는 버킷에 대한 액세스가 권한이 있는 사용자와 AWS 서비스로만 제한된다.

 

 

6) 버저닝

 - 버저닝(Versioning)은 객체에 여러 버전을 관리할 수 있게 한다. 개발자들에게는 익숙할 것이다.
 - 객체에 버젼 아이디를 붙임으로서, 버전 관리를 사용하여 모든 객체의 버전을 보존, 검색 및 복원할 수 있다.

 - 편리한 기능이지만, 비용을 조심해야한다. > 이때문에 일단 지금은 비활성화로 체크 하도록 하자.

  - 버전을 사용하도록 설정한 후에는 비활성화 상태로 돌아갈 수는 없고, 일시 중지 설정은 가능하다.

 

7) 태그 : 실습 단계에선, 따로 지정하지 않았다.

 

8) 기본 암호화 : default 선택 사항으로 진행 하도록 한다.

9) 고급 설정은 보안과 관련된 내용이고, 따로 설정하지 않았다.

10) "버킷 만들기" 클릭하여 버킷 생성.

11) 버킷이 생성된 것을 볼 수 있다.

 

4.2) 버킷에 파일(객체) 업로드 하기.

1) AWS에서 객체(Object)란?

 - S3 Object에는 Key, Value, Version ID, Metadata, CORS(Cross Origin Resource Sharing) 등의 구성요소로 되어있다.

  1. Key : 파일 이름
    • 파일 이름이며 버킷 내 고유한 식별자가 된다.
    • 버킷, 키 및 버전 ID 를 통해 고유하게 객체를 식별할 수 있다.
  2. Value : 파일 데이터
  3. Version Id : 파일 버전 아이디
    • git, svn처럼 S3는 버전 관리가 가능하며, 이를 구분하기 위한 아이디
  4. MetaData : 파일의 정보를 담은 데이터
    • 파일 타입, 소유자, 사이즈, 최종 수정일 등을 담는다.
    • response header에 반환되는데, 이러한 특징으로 S3를 통해 정적 웹 호스팅시 헤더 값등을 response header에 담을 수 있으니 꼭 알아 두자.
  5. ACL : 파일의 접근, 수정 권한을 담은 데이터
  6. CORS(Cross Origin Resource Sharing) : 한 버킷의 파일을 지역을 무시하고 다른 버에서 접근 가능하게 해주는 기능

 

2) 버킷에 폴더 생성

 - 버킷의 [객체] 메뉴로 들어오면, 폴더를 생성하거나 객체를 업로드할 수 있다.

 - 폴더 이름에는 '/'를 포함할 수 없다. (폴더 객체에 액세스할 때 URL을 사용할 것이기 때문이다.)

 - 폴더를 생성하게되면, 버킷 경로는 다음과 같이 된다.

s3://버킷명/폴더명/
s3://gdh-test-bucket-01/test1/


3) 버킷에 파일 업로드
 - 해당 폴더에 이미지 파일을 업로드 해보자. 해당 버킷 및 폴더 이동

 

 - "업로드" 클릭

 - "파일 추가" > 업로드할 파일 선택 > "업로드" 클릭하면 업로드를 시작 다.

※ 참고

 ▼대상 세부 정보 > 버전 : "대상 세부 정보"를 살펴보면 나와 같은 경우 비용의 문제를 고려하여 "버킷 버전 관리"는 비활성화 해 두었다.

※ 참고

▼ 속성

 - 스토리지 클래스, 암화화 설정, 태그 등을 지정할 수 있는데,

   스토리지 클래스는 용도에 따라 기간과 요금 등을 잘 고려하여 선택하면 된다. 

 - AWS 자격증 시험에서 단골로 나오는 부분 이었던걸로 기억 한다.

( ※ 라뗀 특히 S3 스토리지 클래스 에 관련되어 많이 나왔던 것 같다. )

 

 - 업로드 완료 된 파일을 클릭 해보자.

 

 - 업로드한 객체 url 주소를 확인할 수 있으며, 클릭 해보자. 

 - Access Denied가 뜰 것 이다.

 - 버킷 화면으로 돌아가보자. "객체를 퍼블릭으로 설정할 수 있음" 을 클릭 한다.

   객체에 대한 퍼블릭 엑세스를 부여야함을 볼 수 있다.

 

4.3) 버킷 정책 설정하기

1) JSON 으로 접근 권한 설정

 - 외부에서 해당 버킷에 접근 가능하도록 버킷 정책을 수정해야 한다. "권한"탭을 클릭하여 보면 하단 "버킷 정책"이 비어있음을 볼 수 있다. "편집" 을 클릭 해보자.

 - "정책 예제"는 꼭 한번 시간 날 때 확인 해보도록 하자. "정책 생성기" 클릭.

 - 다음 항목들에 대해 본인의 환경에 맞게 수행 하자.

 - "Generate Plicy" 버튼이 활성화 됨을 볼 수 있다. 클릭 한다. 

 - 생성된 json 내용을 복사 하도록 한다.

 - 내용을 정책 편집기에 붙여 넣고, "변경 사항 저장" 을 클릭 한다.

 - 에러발생. 접근할 수 있는 resource의 경로를 지정해주지 않아 발생하는 에러 이다.

 - Resource의 맨 뒤에 /*를 달아준다.

(혹시 특정 폴더만 접근 가능하게 하고 싶으면 /폴더이름 을 입력하면 된다.)

 - 다시 업로드했던 객체의 url을 클릭해보면 정상적으로 호출되는것을 볼 수 있다.

 

2) etc 
 - 버킷 정책을 JSON으로 설정해 보았었다.

 - 이외 ACL, IAM을 통해 설정 가능하지만, 실습 위주의 내용에서 이번내용에서는 제외 하도록 하였다.

5. 파일 공유

 - 위의 환경에서는 파일 업로드 후 url만 공유해주면 파일공유나 다름이 없다.

 - 하지만 퍼블릭(public)설정이 아닌 버킷, 객체의 경우 임시 권한(pre-signed url)로 공유 할 수 있다.

 - pre-signed url은 일정 시간 지나면 만료되어 접근 불가능해진다.

1) 공유할 파일 or 폴더 선택 > 작업 > "미리 서명된 URL과 공유" 클릭

2) 원하는기간을 지정 > "미리 서명된 URL 생성" 클릭

 - "미리 서명된 URL 복사" 클릭

 - 복사된 url을 확인해보면 다음과 같이 복잡한 형태를 띄고 있다.

 

 - 단순하게 파일 업로드 까지 해보았다, 다음엔 또다른 S3 활용 방법을 알아 보자.

 

300x250
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.