본문 바로가기

Public Cloud/AWS

AWS 자습 노트 - 6. Simple Storage Service(S3) 기본 동작

반응형

들어가며

Cloud Service에서 가장 중요한 개념 중 하나는 Virtual Machine이고 다른 하나가 Storage Service이다.(AWS에서는 이 두 가지 서비스를 가장 먼저 Launching했다) 이번 포스팅에서는 AWS에서 제공하는 Storage Service인 S3에 관한 내용이다. S3는 Object 기반의 저장소이며, 이로 인해 용량 확장이 쉽다는 장점을 가진다. (무제한으로 확장 가능) 

 

1. 나만의 Bucket 만들기

AWS Management Console에 접속한 뒤 '서비스' > 'Storage' > 'S3'로 진입하면 <pic 1>과 같이 Bucket 진입 화면이 나오고, 상단에 있는 '버킷 만들기'를 Click하면 <pic 2>와 같은 버킷 이름과 버킷을 생성할 리전(S3는 리전 단위로 생성된다. 가용 영역 기준이 아니다.) 입력을 요구하는 Popup 창이 보여진다. 버킷 이름은 전 AWS Service에 걸쳐 유일한 이름을 가져야 한다는 점을 유의해야 한다. 이는 S3가 URL로 접근 가능한데 URL이 Bucket 이름으로 만들어 지기 때문이다. (참조

 

<pic 1> S3 기본 화면.
<pic 2> Bucket 생성 Popup 화면

<pic 2>에서 옵션이나 권한 설정 없이 Bucket 이름과 리전만 입력하면 '생성' 버튼이 활성화 되고 Button을 클릭하면 <pic 3>와 같이 Bucket 생성 결과를 확인할 수 있다.

<pic 3> 시드니 리전에 만들어진 'browndwarfbucket' 이라는 Bucket 

 

2. Bucket에 File Upload

AWS Management Console을 통한 File Upload는 매우 간단하다. (PUT 명령어를 이용하거나 AWS SDK를 이용해서 Upload 할 수 있으나 이 포스팅에서는 언급하지 않겠다.) 위에서 만들어진 Bucket에 들어가면 <pic 4>와 같은 화면이 보이고, 업로드 버튼을 누르면 <pic 5>와 같은 팝업창이 표시된다. 여기에 파일을 Drag-Drop 한 후, <pic 6>에 표시된 '업로드' 버튼을 클릭하면 File이 Upload 된다. (*)

<pic 4. Bucket 진입 화면과 '업로드' 버튼>
<pic 5. Upload를 위한 Popup 창>
<pic 6. File을 Drag&Drop한 후에 팝업창>

<pic 6>에서 '업로드' 버튼을 누르고 좀 기다리면 업로드가 완료되고 <pic 7>과 같이 Bucket에 올라간 Object들의 List를 확인할 수 있다.

<PIC 7. Upload된 Object>

 

3. Upload된 Object Access 하기

<pic 7>에 보여지는 Obejct를 Click 하면 <pic 8>과 같이 Object의 세부 정보를 확인할 수 있다. '개요', '속성', '권한', 'Select 소스' 등 4개의 Tab이 있으며 이 중에서 '개요' Tab에서 보이는 '열기'와 '다운로드' 를 통해 Object의 내용을 확인하거나 다운로드할 수 있다. (단, AWS 계정 소유주나 이 Bucket에 Access가 권한이 있는 User의 경우에만 가능하다.)

 

<pic 8. Upload된 Object의 세부 정보 화면>

그리고 <pic 8>에 제일 아래 표기된 객체 URL을 사용해서 접근할 수도 있다. 하지만, 별다른 권한 설정 변경 없이 위의 URL로 접근을 시도하면 <pic 9>와 같이 'Access Denied'오류가 발생하게 된다. S3 Bucket은 Public Acess를 기본적으로 거부하기 때문에 발생하는 문제이고 이를 해결하려면 Bucket과 Bucket에 올라간 FIle(Object)의 Access Policy를 변경해야 한다.

 

<pic 9. URL로 접근했을 때 거부당한 예>

이를 위해서는 제일 먼저 Bucket의 Access Policy를 변경해야 한다. <pic 10>과 같이 Bucket에 진입 > '권한' Tab > '퍼블릭 엑세스 차단'으로 진입한 후, Default로 Check되어 있는 '모든 퍼블릭 엑세스 차단' 을 Un-Check 한 후 저장한다.

<pic 10 Bucket의 퍼블릭 엑세스 차단 설정 UI>

그 후에 다시 Object를 Click 해서 보면, <pic 8>에는 비활성화 되어있던 '퍼블릭으로 설정' 버튼이 <pic 11>에서는 활성화된 것을 알 수 있다. 그리고 이 버튼을 Click하면 URL을 통한 접근이 가능하게 된다.

<pic 11. Object에 Public Acccess 허용>

이 과정을 끝내면 이 Object는 <pic 12>와 같이 Browser를 통한 접근이 허용되게 된다.

<pic 12. Public Access한 Object의 예>

 

4. 파일 버젼 관리

각 Object들은 변경 History를 관리할 수 있다. Bucket에 진입한 후 '속성' > '버전 관리'로 들어간 후 <pic 13>과 같이 '버전 관리 가능'을 설정하면 Bucket에 모든 Object들은 변경 History를 보관하게 된다.

<pic 13. Bucket 버전 관리 설정>

버전 관리 기능을 Test 하기 위해 기존에 Upload 했던 'Hello_Browndwarf.txt' 파일을 <pic 14>의 아래 붉은 색으로 표기한 내용을 추가한 후 다시 Upload 했다.

 

<pic 14. 변경된 Object 내용>

 

Upload 후에 Bucket을 확인하면 <pic 15>에서와 같이 이전에는 없었던 '버전 숨기기/표시' 선택 버튼이 표시되어 있고, '표시'를 선택하면 Bucket에 포함된 Object들의 변경 History가 모두 표시된다. (기존에는 19 byte, 최신 버전은 53 byte)

 

<pic 15. 버전 관리 기능이 적용된 'Hello_Browndwarf.txt' Object>

버전 관리는 Object가 삭제 됐을 때에도 유효하게 작동한다. 위에서 언급한 'Hello_Browndwarf.txt'를 삭제한 후에 버전을 표시하면 <pic 16>와 같이 '(삭제 마커)' 라고 삭제된 Object임을 나타내면서 표기하게 된다. 

<pic 16. 삭제된 Object의 버전 관리의 예>

 

이렇게 보여지는 과거 버전의 Object들은 사용자가 선택 후 다운로드를 받을 수 있기 때문에 Object가 임의로 변경되거나 삭제되었을 때 다시 원래로 복구할 수 있는 기능으로 활용될 수 있다. 다만 이전 변경 사항들을 모두 보관하게 되기 때문에 Bucket의 용량을 Object의 버전 갯수만큼 사용하게 되고,  이는 다시 비용문제를 발생시키기 때문에 보관하는 Object들의 성격에 따라 이 기능을 사용할 지 여부를 정해야 한다. 

 

5. 암호화

S3에 있는 Object들은 보안을 위해 암호화된 상태로 저장될 수 있다. 개별 Object, 폴더, Bucket 단위로 암호화를 지원한다. 일단 Object를 암호화 하는 방법을 정리하면, Object를 선택한 후에 '속성' > '암호화' 로 진입하면 <pic 17>과 같이 AES-256, AWS-KMS 등의 암호화 방법을 선택할 수 있다. AWS-KMS는 AWS에서 제공하는 Key 관리 서비스로서 암호화할 때 사용하는 Key를 생성/등록/관리할 때 사용하는데, 여기서는 간단하게 Test하기 위해서 AES-256방식을 선택했다. (이 경우 Amazon에서 관리하는 Key(SSE-S3)로 암호화 하게 된다.)

<pic 17. 속성 Tab을 통한 Object 암호화>

또는 <pic 18>, <pic 19>과 같이 Object를 선택해서 작업버튼을 누르고 '암호화 변경'을 클릭해서 암호화 할 수 있는 방법도 있다. 

<pic 18. 작업 메뉴에서의 Object 암호화 설정>
<pic 19. Object 암호화 설정 팝업>

암호화 방법을 선택하고 <pic 17>의 '저장' 버튼이나 <pic 19>의 '변경' 버튼을 선택하면 암호화가 진행되고, 암호화 작업 후에 Object의 속성을 보면 <pic 20>와 같이 암호화 상태가 표시된다.

 

<pic 20. Object 암호화 확인>

폴더를 암호화할 때는 한 가지 옵션이 더 있다 Bucket 진입 화면에서 '폴더 만들기'를 선택하면 <pic 21>과 같이 폴더명과 암호화 설정을 하는 팝업 메뉴가 발생한다. 여기서 암호화를 설정해서 폴더를 만들게 되면 이후에 폴더에 포함되는 Object들은 자동으로 암호화 된다.

 

<pic 21 폴더 생성시 암호화 메뉴>

폴더 암호화 과정은 일반 Object 암호화 과정과 동일하며, 폴더를 암호화 하게되면 이 폴더에 속해있던 비암호화 Object들과 새로 추가하는 Object들 모두 자동으로 암호화가 이루어진다.

 

<pic 22. 기존 폴더 암호화>

그리고 또 Bucket 전체에 암호화를 설정할 수도 있다. <Pic 23>과 같이 Bucket에 진입한 직후에 '속성' > '암호화'를 선택하면 Bucket을 암호화할 수 있다.

 

<pic 23. Bucket의 암호화 설정>

Bucket을 암호화하게 되면 그 때까지 포함하고 있던 Object 들과 암호화 이후에 추가한 Object들 모두 암호화 되서 저장된다. <pic 24>는 'Encryped' 폴더에 앞에서 설정한 암호화 설정을 해제한 후 Bucket에 암호화 설정을 활성화 했을 때 기존과 동일하게 Object가 암호화 되어 있음을 보여주고 있다. (**)

 

<pic 24. Bucket에 암호화 설정을 적용한 후 Object에 적용된 결과>

 

맺음말

이 밖에 S3에서 Life Cycle 관리, Cross-Region Replication, Access Log 확인 등의 기본 기능이라 할 수 있는데.. Life Cycle 관리는 확인시 까지 시간이 오래 걸리고, Cross-Region Replication과 Access Log 기능들은 비용이 발생하는 것으로 보여져서(비용이 발생하지 않을 수도 있음. 확인이 덜 된 상태임) 이 포스팅에서는 제외했다. 

 

 

(*) Storage의 저장 방식은 BLock Storage, File Storage, Object Storage 등이 있고, S3는 Object Storage이기 떄문에 Upload된 File들은 Object로 관리된다. Storage Type에 따른 차이는 여기를 참고하는 것이 좋을 것 같다. 

 

(**) 참고로 객체 URL을 추가적으로 확인하는 것을 권장한다. 3절에서 언급한 Bucket에 바로 포함된 Object와 폴더에 포함된 Object의 URL 차이는 폴더명이 추가된다는 점을 상기하자. 그리고 Object의 URL은 https://{버킷명}.s3-{리즌명}.amazonaws.com/{Folder 명}/{Object 명} 이다.