[AWS] 6-1. AWS - S3 버킷 생성 및 파일 업로드 하기
- -
안녕하세요. 갓대희 입니다. 이번 포스팅은 [ 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) 등의 구성요소로 되어있다.
- Key : 파일 이름
- 파일 이름이며 버킷 내 고유한 식별자가 된다.
- 버킷, 키 및 버전 ID 를 통해 고유하게 객체를 식별할 수 있다.
- Value : 파일 데이터
- Version Id : 파일 버전 아이디
- git, svn처럼 S3는 버전 관리가 가능하며, 이를 구분하기 위한 아이디
- MetaData : 파일의 정보를 담은 데이터
- 파일 타입, 소유자, 사이즈, 최종 수정일 등을 담는다.
- response header에 반환되는데, 이러한 특징으로 S3를 통해 정적 웹 호스팅시 헤더 값등을 response header에 담을 수 있으니 꼭 알아 두자.
- ACL : 파일의 접근, 수정 권한을 담은 데이터
- 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 활용 방법을 알아 보자.
'6. DevOps > AWS 기초편' 카테고리의 다른 글
당신이 좋아할만한 콘텐츠
-
[AWS] 6-3. AWS - S3를 통해 정적 웹 사이트 호스팅 하기(3)(S3로 index.html 호스팅 하기) 2023.09.25
-
[AWS] 6-2. AWS - AWS Transfer로 FileZilla(+MobaXterm)로 S3 파일 전송하기(1)(AWS Transfer로 Serverless SFTP 구현하기) 2023.09.15
-
[AWS] 5-3. AWS - EC2 Ubuntu에 mysql8.0 설치하기(Ubuntu 22.04, mysql 8.0.34) 2023.09.06
-
[AWS] 5-2. AWS - EC2 인스턴스 접속하기(Linux Ubuntu) + 기본설정 2023.09.05
소중한 공감 감사합니다