본문 바로가기
클라우드/AWS

AWS S3 연동 가이드(s3fs-fuse / cli)

by 베어그릴스 2022. 11. 17.
반응형

AWS S3(Simple Storage Service)란?

S3

Simple Storage Service의 약자로 파일 서버의 역할을 하는 서비스다. 일반적인 파일서버는 트래픽이 증가함에 따라서 장비를 증설하는 작업을 해야 하는데 S3는 이와 같은 것을 대행한다. 트래픽에 따른 시스템적인 문제는 걱정할 필요가 없어진다. 또 파일에 대한 접근 권한을 지정할 수 있어서 서비스를 호스팅 용도로 사용하는 것을 방지할 수 있다. 아래는 S3의 주요한 기능적인 특성들이다.

 

AWS S3(Simple Storage Service의 특징

  • 많은 사용자가 접속을 해도 이를 감당하기 위해서 시스템적인 작업을 하지 않아도 된다.
  • 저장할 수 있는 파일 수의 제한이 없다.
  • 최소 1바이트에서 최대 5TB의 데이터를 저장하고 서비스 할 수 있다.
  • 파일에 인증을 붙여서 무단으로 엑세스 하지 못하도록 할 수 있다.
  • HTTP와 BitTorrent 프로토콜을 지원한다.
  • REST, SOAP 인터페이스를 제공한다.
  • 데이터를 여러 시설에서 중복으로 저장해 데이터의 손실이 발생할 경우 자동으로 복원한다.
  • 버전 관리 기능을 통해서 사용자에 의한 실수도 복원이 가능하다.
  • 정보의 중요도에 따라서 보호 수준을 차등할 수 있고, 이에 따라서 비용을 절감할 수 있다. (RSS)

 

AWS S3 연동에 필요한 내역

  1. AWS S3 Management Console 접속하여 버킷및 사용자 생성
  2. Package 설치
  3. s3fs 설치
  4. 마운트
  5. AWS CLI를 통한 업로드, 다운로드,삭제

 

AWS S3 Management Console에 접속하여 버킷 생성

 

AWS S3 → 버킷 만들기

버킷 안에 폴더로 구분 지을 수 있다.

 

버킷명 : jimsfile

폴더구조 : itx-adj-kr-prod / archive / JIMS_Log_Backup_file_s3/

 

상단 우측 메뉴 → 보안자격증명 선택

보안자격증명

[사용자 추가 ]

사용자 추가 이미 사용자가 있다면 추가 안 해도 된다.

 

 

해당 사용자 계정 S3 액세스 권한 추가

사용자 계정에 따른 권한 및 정책을 차등 적용하여

버킷 생성이나 폴더 생성 등의 제한을 둘 수 있다.

 

[사용자 액세스키 발급]

사용자 → 보안 자격 증명 → 엑세스 키 만들기

액세스 키와 비밀키는 한 쌍이고 비밀키는 다른데 적어둔다.(재 확인 안 됨)

 

[Package 설치]

sudo apt-get install build-essential git libfuse-dev libcurl4-openssl-dev libxml2-dev mime-support automake libtool

sudo apt-get install pkg-config libssl-dev

 

[GIT S3FS 다운로드]

git clone https://github.com/s3fs-fuse/s3fs-fuse

 

[S3FS 설정] - passwd-s3fs 파일 생성

vi /etc/passwd-s3fs

아마존에서 생성한 유저의 AWS access key / secret key를 파일에 설정

 

버킷 jimsfile
엑세스키 AKIA5E65
스크릿키 r/miUhtKUBi18fl
합친것 AKIA5E65:r/miUhtKUBi18fl
S3 URI s3://jimsfile/itx-adj-kr-prod/archive/JIMS_Log_Backup_file_s3/
폴더구조 /itx-adj-kr-prod/archive/JIMS_Log_Backup_file_s3/

[passwd-s3fs 권한 변경]

sudo chmod 600 /etc/passwd-s3fs

600은 소유자에게만 읽기, 쓰기 권한을 주는 것으로 변경하는 것이다.

민감한 파일이기 때문에 조심

 

[S3FS의 환경설정]

vi /etc/fuse.conf

아래와 같이 mount_max = 1000 / user_allow_other 주석을 제거해주면 된다.

[S3FS를 이용한 버킷 마운트]

cat /etc/passwd

위와 같이 tomcat 계정에 대한 uid: 1001 gid: 1001을 확인할 수 있다.

아래 명령어로도 확인 가능하다.

id -u
id -g
또는
id tomcat

[폴더 생성]

mkdir -p [경로]

-p 옵션은 상위 경로도 함께 생성하는 옵션

 

만약 tomcat 이란 계정 루트에 특정 폴더를 하나 생성한다고 가정해 보면 아래와 같이 될 것이다.

mkdir -p /home/tomcat/JIMS_Log_Backup_file_s3

 

[s3fs 위치 확인]

which s3fs

[s3fs를 이용한 버킷 마운트]

#첫번째 방법 버킷에 폴더가 없을경우
/usr/bin/s3fs [버킷명] [마운트경로]

#두번째 방법 버킷명에 폴더가 존재하고 상위 폴더도 있을경우 
/usr/bin/s3fs [버킷명]:접두사(폴더) [마운트경로]

#첫 번째 마운트 방법
sudo s3fs jimsfile /home/tomcat/JIMS_Log_Backup_file_s3 -o passwd_file=/etc/passwd-s3fs -o allow_other -o use_cache=/tmp -o uid=1001 -o gid=1001

#두 번째 마운트 방법(use_sse=1 옵션은 버킷에 암호화 정책이 들어가 있으면 넣어주는 옵션인데 테스트는 못함)
sudo s3fs jimsfile:/itx-adj-kr-prod/archive/JIMS_Log_Backup_file_s3/ /home/tomcat/JIMS_Log_Backup_file_s3 -o passwd_file=/etc/passwd-s3fs -o allow_other -o uid=1001 -o gid=1001 -o use_sse=1 -o use_cache=/tmp

[마운트 확인]

혹여 해당 경로에서 ls 명령어 입력 시 Transport endpoint is not connected 메시지가 나온다면

passwd-s3fs 파일의 키값들이 제대로 입력되지 않아 발생되는 문제이니 AWS 사용자 키값을 다시 한번

확인해보기 바란다.

 

해당 JIMS_Log_Backup_file_s3 폴더에 AWS S3의 버킷 및 상위 폴더들이 정상적으로 맵핑된 것을 볼 수 있다.

 

[마운트 해제]

sudo umount -l /home/tomcat/JIMS_Log_Backup_file_s3

[AWS CLI 설치]

sudo apt-get install -y awscli

[AWS CLI 경로 획득]

s3://jimsfile/itx-adj-kr-prod/archive/JIMS_Log_Backup_file_s3/

[AWS CLI 접속 정보 입력]

aws configure

[AWS CLI를 이용한 파일 업로드]

local -> S3

sudo aws s3 cp [파일및경로] s3://[버킷명]/[경로명]

sudo aws s3 cp stop.sh s3://jimsfile/itx-adj-kr-prod/archive/JIMS_Log_Backup_file_s3/

#버킷에 암호화 정책이 있는경우 해당 정책에 맞게 뒤에 옵션을 붙여줘야 한다.
#기본 옵션인경우 --sse AES256
sudo aws s3 cp stop.sh s3://jimsfile/itx-adj-kr-prod/archive/JIMS_Log_Backup_file_s3/ --sse AES256

[AWS CLI를 이용한 파일 다운로드]

S3 -> local

sudo aws s3 cp s3://jimsfile/itx-adj-kr-prod/archive/JIMS_Log_Backup_file_s3/test.txt /home/tomcat/

#버킷에 암호화 정책이 있는경우 해당 정책에 맞게 뒤에 옵션을 붙여줘야 한다.
#기본 옵션인경우 --sse AES256

sudo aws s3 cp s3://jimsfile/itx-adj-kr-prod/archive/JIMS_Log_Backup_file_s3/test.txt /home/tomcat/ --sse AES256

하지만 다운로드할 때 루트 권한으로 받아지기 때문에 관련 옵션을 찾아보아야 한다.

 

[AWS CLI를 이용한 파일 삭제]

#암호화 정책이 있어도 파일삭제는 옵션을 주지 않아도 바로 삭제된다.

sudo aws s3 rm s3://jimsfile/itx-adj-kr-prod/archive/JIMS_Log_Backup_file_s3/test.txt

test.txt 파일이 S3내에서 삭제된 것을 확인할 수 있다.

 

[목록 확인]

sudo aws s3 ls

 

만약 bucket 내의 파일을 확인하고 싶다면 아래와 같이 사용할 수 있다.

sudo aws s3 ls s3://jimsfile

[자동 마운트]

s3fs#버킷명 [마운트경로] fuse _netdev,allow_other 0 0

#아래적용
s3fs#jimsfile /home/tomcat/JIMS_Log_Backup_file_s3 fuse _netdev,allow_other 0 0

#마운트 옵션에 use_see=1을 넣어주었다면 아래 내용을 추가해야 한다는 내용이 있다.
url= https://s3.{AWS::Region}.amazon.com

 

위 적용해도 마운트 안될 때

#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.

mount -a
exit 0

 

오늘도 보람찬 생존 ^.^

반응형

'클라우드 > AWS' 카테고리의 다른 글

AWS CloudWatch(모니터링 및 관찰 시스템)  (0) 2025.02.17
AWS - goofys 설치 및 S3 마운트  (4) 2022.12.05
AWS 리눅스 초기셋팅  (0) 2022.07.21
AWS - EC2 하드디스크 용량 늘리기  (0) 2022.07.21
AWS 비용 계산  (2) 2022.07.21

댓글