[AWS] S3 사용하기

2020. 3. 16. 14:17AWS/AWS_Service

반응형

안녕하세요, 달콤한달팽이입니다.🐌😎


오늘은 AWS를 사용하여 객체를 저장하고, 이를 사용하는 방법을 알아보겠습니다.


S3란?

S3란, AWS에서 제공하는 객체 스토리지 서비스로 파일을 저장하기 위해 사용되는 서비스를 의미합니다.

 

버킷(Bucket)별로 버저닝, 라이프 사이클, 정적 웹 사이트 호스팅 등 활용방법이 무궁무진하기 때문에

아마 가장 많이 사용되는 서비스 중 하나가 아닐까 생각됩니다.


1) S3 생성

AWS 서비스의 S3를 검색한 후, 버킷 만들기를 선택합니다.

 

버킷을 생성하기 위해선 이름과 리전을 정해주도록 합시다.

(이름은 고유해야 하기 때문에, 실습에서는 오늘 날짜로 정하도록 하겠습니다.)

 

이후 선택할 수 있는 객체 소유권, 퍼블릭 액세스 차단 설정, 버전 관리, 암호화 등은 모두 기본으로 두고 버킷을 만들어주도록 합시다.

(위 사항들은 버킷 생성 이후에도 수정이 가능합니다!)

 

2) 파일 업로드(AWS 콘솔)

S3에 파일을 업로드 하는 방식은 크게 3가지가 있습니다.

첫 번쨰는 AWS 콘솔을 통해 업로드 하는 방식이고,

두 번째는 AWS CLI를 통해 업로드 하는 방식,

마지막 세 번째는 S3 Client Tool과 같은 외부 툴을 사용하는 방식입니다.

(이번 글에서는 외부 툴 사용법은 제외하도록 하겠습니다.)

 

우선 AWS 콘솔을 통해 파일을 업로드 해보도록 하겠습니다.

콘솔 사용법은 로컬 환경을 사용하듯, 폴더를 만들거나 업로드 탭에서 파일 드래그&드랍으로 업로드를 할 수 있습니다.

 

콘솔을 통한 실습에서는 console 폴더를 만들고, 텍스트 파일을 하나 업로드 해보겠습니다.

 

3) 파일 업로드(AWS CLI)

이제 AWS CLI를 통해 파일을 업로드 해보도록 하겠습니다.

CLI 사용법은 콘솔 사용법에 비해 비교적 어려울 수 있으나,

다수의 파일을 업로드하거나, GUI가 지원되지 않는 환경에서 업로드가 가능하다는 점에서 유용합니다.

 

AWS CLI를 통해 파일을 업로드하기 위해선,

업로드할 서버에  (1) S3를 사용할 권한이 있거나, (2) S3 사용가능한 계정의 AccessKey가 등록되어 있어야합니다.

(편의상 이번 실습에선 EC2에 AdministratorAccess 권한을 부여하여 진행하겠습니다.)

 

우선 해당 서버에서 S3가 사용 가능한지, S3 버킷 리스트를 출력해보도록 하겠습니다.

aws s3 ls

 

이제 서버에 있는 파일을 S3의 CLI라는 폴더에 업로드해보도록 하겠습니다.

(만약 지정한 폴더(ex. cli)가 없다면 알아서 생성해주니 걱정하지 않아도 괜찮습니다!)

aws s3 cp {파일명} {S3 URI}

 

이제 콘솔과 CLI를 통해 업로드한 파일을 확인하도록 합니다.

 

4) 권한 설정

웹 사이트의 경우, 외부 사용자들은 별도의 권한이나 정책이 부여되지 않은채 파일에 접근하게 됩니다.

때문에 파일의 URL을 복사하여 접근을 시도하면 권한 문제로 인해 접속이 되지 않는 것을 확인할 수 있습니다.

이는 S3 버킷의 기본 정책이 Private으로 설정되어있기 때문입니다.

 

이를 해결하기 위해선 버킷의 권한을 수정해야하며, 

버킷의 권한은 크게 ACL과 Bucket Policy 2가지로 인해 결정됩니다.

 

(1) ACL: 버킷이나 객체에 대해 요청자의 권한 허용 범위를 설정할 수 있습니다.

(2) Bucket Policy: 버킷에 대한 권한 요청을 사용자별로 권한 허용 범위를 설정할 수 있습니다.

 

ACL이나 Bucket Policy를 통해 객체의 권한을 설정하기에 앞서, 퍼블릭 액세스 차단을 수정해주어야 합니다.

이번에는 Bucket Policy만을 수정할 것이므로, 버킷 정책에 관련된 차단만 비활성화 시켜주었습니다.

 

이후 json 형식으로 구성된 버킷 정책을 수정해주어 퍼블릭 엑세스가 가능하도록 설정해줍니다.

   1) Version: 정책의 버전을 지정합니다.

  2) Effect: Allow/Deny 로 구성되어 있으며, 권한을 활성화할지 비활성화할지 결정합니다.

  3) Principal: 어떠한 계정, 어떠한 대상에 대해서 권한을 설정할지 지정합니다.

  4) Action: S3의 어떠한 권한(ex. Get, Put, List 등)을 부여할지 지정합니다.

  5) Resource: S3의 어떠한 객체에 대하여 권한을 부여할지 지정합니다.

 

이후 다시 URL 접근을 시도해볼 경우, 정상접근이 되는 것을 확인할 수 있습니다.

 


지금까지 S3 사용 방법에 대하여 알아보았습니다.

 

버저닝, 라이프 사이클 등 다뤄볼 주제가 너무 많지만

그러기엔 글이 너무 길어지므로 다음에 다뤄보도록 하겠습니다 :)

 

감사합니다.

반응형