본문 바로가기

AWS

[AWS 교과서] 5장 AWS 스토리지 서비스

1. 스토리지 서비스 및 주요 기능 

 

스토리지(stroage)

- 데이터를 보관하는 장소로, 우리가 사용하는 모든 저장 장치를 스토리지라고 할 수 있다. 

 

1) 블록 스토리지

 

- 단일 스토리지 볼륨(volume)을 '블록' 이라는 개별 단위로 분할해서 저장한다. 

- 각 블록은 저장된 위치에 고유한 주소가 있기 때문에 서버에서 파일을 요청하면 블록들을 재구성하여 하나의 데이터로 서버에 전달한다. 

- 클라우드 환경에서 블록 스토리지의 각 블록은 가상 머신 인스턴스에 위치하며, 마치 일반 컴퓨터에 하드디스크를 추가하여 C 드라이브, D 드라이브처럼 논리적으로 구분해서 사용하는 것과 같다. 

 

- 일반적으로 블록 스토리지는 SAN(Storage Area Network) 또는 가상 머신의 디스크로 사용된다. 

 

cf. SAN

 - 서로 다른 종류의 데이터 저장 장치를 한 데이터 서버에 연결하여 총괄적으로 관리해 주는 네트워크를 의미 

 

 

2) 파일 스토리지 

 

- 디렉터리(directory) 구조로 파일을 저장한다. 

- 각 파일은 폴더에 종속되고 폴더 역시 다른 폴더에 종속되어 계층 구조를 이룬다. 

 

- 일반적으로 파일 스토리지는 NAS(Network Attached Storage)에 사용된다. 

 

cf. NAS

- 컴퓨터 네트워크에 연결된 파일 수준의 컴퓨터 기억 장치로, 서로 다른 네트워크 클라이언트에 데이터 접근 권한을 제공한다. 

 

 

3) 객체 스토리지 

 

- 각 데이터 조각을 가져와서 객체로 지정하고, 개별 단위로 지정한다. 

- 파일 스토리지와 다르게 모든 객체는 중첩된 계층 구조 없이 단일한 평면적인 주소 공간에 저장된다. 

- 평면 주소 공간에는 데이터 및 메타데이터(metadata)로 구성된 객체에 고유 식별자가 있다. 

- 객체 스토리지 접근에는 HTTP 프로토콜 기반의 REST API를 사용한다. 

- 비정형 데이터 효율적으로 처리 가능 

 

 

2. Amazon EBS

 

- Amazon EBS(Elastic Block Store)는 EC2 인스턴스에 사용할 수 있는 블록 스토리지 볼륨을 제공하는 서비스이다. 

- 데이터베이스처럼 데이터 출입이 많은 서비스에 적합

 

- EBS 스토리지는 AWS 관리 콘솔에서 필요한 용량과 성능에 맞추어서 볼륨을 생성한 후 EC2 인스턴스에 연결하고 파일 시스템을 포맷한 후 사용한다. 

- 이때 파일 시스템 포맷은 운영체제에 따라 다르게 사용된다.

  • 리눅스 : xfs 또는 ext4 유형
  • 윈도우 : NTFS 포맷

- 포맷이 완료되면 해당 볼륨을 서버에서 마운트한 후 데이터를 해당 디렉터리에 저장해서 사용한다. 

 

- EBS는 고속 네트워크로 연결되어 있으며, 데이터 수명 시간이 독립되어 있다. 

 

독립된 데이터 수명 시간

- 서로 연결된 인스턴스와 볼륨을 사용하다 해당 인스턴스를 삭제해도 볼륨은 계속 사용할 수 있고 그 볼륨에 저장된 데이터도 다른 인스턴스와 연결하여 이어서 사용할 수 있다. 

 

- 인스턴스는 다수의 볼륨을 연결해서 사용할 수 있다. 하지만 하나의 EBS 볼륨은 한 번에 하나의 인스턴스에만 연결할 수 있고, 해당 인스턴스에서 지원하는 형태의 시스템으로 포맷해야 사용할 수 있다. 

 

1) EBS 볼륨 유형 

 

SSD - 메모리형 디스크 사용
- 데이터를 빠르게 읽고 처리하는 능력 good
- 서버의 운영 체제가 설치되는 OS 영역, 일반 데이터베이스 보관용 스토리지 유형으로 사용 
HDD - 플래터(platter) 디스크 사용  
- 속도와 상관없이 데이터 저장 용량이 많음 
- 데이터 분석에 활용 

 

 

2) EBS 스냅샷 

 

- 특정 시점에 포인트를 찍어서 그 시점으로 되돌아갈 수 있는 지점을 만드는 기능 

- 증분식 백업 방식을 이용하여 마지막 스냅샷 이후 변경되는 데이터 블록만 기록하고 복제하므로 저장 비용과 시간도 효과적으로 절감할 수 있다. 

 

 

3) EFS

 

- Amazon EFS(Elastic File System)는 클라우드 환경과 온프레미스 환경에서 사용할 수 있는 완전 관리형 네트워크 파일 시스템이다. 

- 처음 파일 시스템을 생성한 후 서버에 연결하면 사용한 만큼 자동으로 스토리지 크기가 확장되고, 사용한 만큼 비용을 지불하면 되기 때문에 사실상 용량 제한 없이 사용 가능하다. 

 

특징

  • 고성능 네트워크 파일 시스템으로, 여러 대의 컴퓨터가 네트워크상의 동일한 데이터에 접근해야 할 때 사용 가능 
  • NFS 표준 프로토콜 기반의 연결을 지원하고 있어,  기존 다양한 애플리케이션과 유연하게 통합할 수 있고, 여러 컴퓨팅 인스턴스에서 동시에 사용 가능 
  • IOPS가 높고 용량이 매우 크기 때문에 처리량이 많고 대기 시간이 짧다. 
  • 파일 시스템의 사용 증가에 따라 자동으로 용량 및 성능이 조정되는 탄력성을 제공하여 네트워크 스토리지의 용량 및 성능부족을 걱정할 필요 없다. 

 

3. Amazon S3

 

Amazon S3(Simple Storage Service)

 

- AWS에서 제공되는 객체 스토리지 서비스 

- S3에 저장되는 데이터를 객체라고 하며, 이 객체에 저장소를 버킷(bucket)이라고 한다. 

- 객체에 대한 입출력은 HTTP 프로토콜로 하며, REST API를 이용하여 명령이 전달된다. 

 

- S3 객체는 기본적으로 웹 접속이 가능하기 때문에 간단한 정적 웹 콘텐츠를 S3에 올려 웹 서버의 도움 없이 바로 웹 서비스가 가능하다. 

 

- S3는 보안 규정 준수 및 감시 기능을 제공하고 있어 데이터가 안전하게 저장되고 인증된 사용자만 접근할 수 있도록 구성한다. 

 

1) S3 구성 요소 

 

버킷 - 데이터 스토리지를 위한 S3의 기본 컨테이너 
- 객체는 반드시 버킷에 저장되어야 하며, 하나의 리전에서 생성된 후에는 버킷 이름과 리전을 변경할 수 없다. 
객체 - S3에 저장되는 기본 매체로, 객체 데이터와 객체 메타데이터로 구성되어 있다. 
- 메타 데이터는 객체를 설명하는 이름-값에 대한 하나의 쌍으로 존재한다. 

- 버킷 내에서 객체의 고유한 식별자
- 버킷 내 모든 객체는 고유한 하나의 키를 갖게 되며, S3은 '버킷+키+버전'과 객체 사이의 기본 데이터 맵으로 생각 할 수 있다. 
S3 데이터 일관성 - S3 버킷에 있는 객체에 대해 여러 서버로 데이터를 복제하여 고가용성 및 내구성을 구현하고 데이터 일관성 모델을 제공한다. 

 

 

2) S3 특징 

 

- 하나의 리전 내 최소 세 개 이상의 물리적으로 분리된 가용 영역에 데이터를 복제해서 저장하므로 높은 내구성과 고가용성을 제공하며, 서버의 OS 도움 없이 객체별 접근이 가능하므로 데이터 저장 및 활용에 용이 

 

- 동일 버킷 내 여러 개의 객체 변형을 보유하여 데이터 복구에 특화된 객체 스토리지 

 

- AWS와 다른 서비스를 유기적으로 연동시켜 다양한 형태로 사용 가능 

 

 ex) 웹에 접근할 때 사용하는 이미지를 인터페이스별로 크기를 분리하는 기능이 필요할 때

  -> S3을 이용하여 사용자 인터페이스 정보를 변경하면 해당 정보를 이벤트로 발생시켜 'AWS의 람다' 서비스와 연동한다 그러면 하나의 화면 이미지를 자동으로 여러 개의 해상도를 갖는 이미지로 나누어 새엉하고, 접근 자이별 인터페이스 화면에 전달하여 동일한 내용을 확인 가능 

 

- 뛰어난 내구성 덕분에 최근에는 빅데이터, 머신 러닝을 위한 데이터를 저장하거나 기업의 데이터를 영구적으로 보관하는 등 데이터를 보관하거나 분석할 때 자주 사용 

 

- 웹 서버의 장치 도움 없이 S3 서비스 객체에 직접 접근할 수 있어 대규모의 이미지를 사용하는 e-커머스 업무에 사용되는 이미지나 동영상을 S3에 저장한 후 고객에게 S3 웹 서비스를 이용한 직접적인 서비스와 이미지, 동영상을 제공할 수 있다.

 

 

3) S3 스토리지 클래스 

 

standard - 가장 일반적인 스토리지 클래스
intelligent-tiering - 객체 접근 저옵가 고정되어 있지 않을 때 자동으로 빈번한 접근 그룹과 간헐적 접근 그룹에 나누어서 저장 
infrequent access - 객체가 자주 사용되지는 않지만, 조회가 필요할 때 사용되는 데이터를 저장하는 클래스 
S3 glacier - 데이터 아카이브와 장기간 백업을 고려하여 만든 스토리지 클래스 
- 아카이빙 데이터 : 오랫동안 데이터가 저장되어 있는 것
S3 glacier deep archive - 재사용이 거의 없는 데이터를 보관할 때 사용하는 클래스 

 

 

4) S3 보안 

 

- S3 버킷 접근은 일반적으로 버킷을 생성할 대 사용한 버킷 이름을 포함하여 생성된 유일한 식별자를 기반으로 언제, 어디에서든 접근이 가능하다. 

 

- IAM으로 사용자 및 정책별 접근 권한을 제어할 수 있지만, 접근 권한이 있는 사용자가 개별 객체에 접근할 수 있게 하는 S3만의 버킷 정책으로 S3 버킷 내 모든 객체에 대한 권한을 조정할 수 도 있다. 

 

- 쿼리를 요청할 때 쿼리 문자열을 인증하여 사용자 인증 정보도 함께 보낼 수 있는데, 해당 객체에 접근할 때 이 인증 정보로 일시적 허용 여부 권한을 이용할 수 도 있다. 

 ex) 임시 권한을 부여해서 접근하는 presign 기능 

 

- S3 객체는 기본적으로 외부 사용자가 접근할 수 없도록 설정되어 있다. 객체 소유자와 루트 사용자만 해당 객체에 접근할 수 있으며, 외부에서 접근하려면 별도의 정책을 이용해서 직접 설정해야 한다. 

 

 

4. 다양한 AWS 스토리지 서비스 구성하기 

 

실습 단계 

 

  • 실습에 필요한 기본 인프라 배포
  • EBS 스토리지를 추가로 생성하고 사용 
  • EBS 스토리지의 볼륨 크기를 변경하고, 스냅샷 기능으로 백업을 확인
  • EBS 스토리지를 생성하고 사용 
  • Public S3 스토리지로 외부 접근을 확인
  • Private S3 스토리지의 제한된 접근 및 데이터를 백업 

 

1) 실습에 필요한 기본 인프라 배포 

 

- 실습 동작에 필요한 기본 인프라 자원은 AWS CloudFormation을 이용하여 자동으로 배포한다. 먼저 스택을 생성한다. 

 

- AWS 관리 콘솔에서 서비스 > 관리 및 거버넌스 > CloudFormation 메뉴로 들어간 후 스택 생성을 누른다. 

 

- 스택 세부 정보 지정 페이지에서 다음과 같이 설정하고 다음을 누른다. 

  • 스택 이름에 'storagelab'입력
  • KeyName은 사용자 키 페어 파일 선택 

- 스택 옵션 구성은 별도의 설정 없이 다음을 누른다. stroagelab 검토에서는 별도의 설정은 없으나 가장 아래쪽에 있는 'AWS CloudFormation에서 사용자 지정 이름으로 IAM 리소스를 생성할 수 있음을 승인합니다.'에 체크하고 전송을 누른다. 

 

- EC2 인스턴스(EC2-STG1, EC2-STG2)의 SSH 터미널에 접속하여 EBS 스토리지 기본 정보를 확인 

# STG1 SSH 터미널 접속
# df(disk free) 디스크 여유 공간 확인

df -hT /dev/xvda1

# lsblk 사용 가능한 디스크 디바이스와 마운트 포인트(해당하는 경우) 확인

lsblk

# 디바이스의 UUID 확인

blkid

# 디바이스의 탑재 지점 확인

cat /etc/fstab

 

 

 

 

 

2) EBS 스토리지를 추가로 생성한 후 사용하기 

 

- 새로운 EBS 볼륨을 AZ 1 영역에 생성

- AWS 관리 콘솔에서 서비스 > 컴퓨팅 > EC2 > Elastic Block Storage > 볼륨 > 볼륨 생성을 선택한다. 

- 볼륨 생성 페이지가 나타나면 다음과 같이 설정한다. 

  • 볼륨 유형은 범용 SSD(gp2) 선택
  • 크기(GiB)는 '20' 입력
  • 가용 영역은 ap-northeast-2a 선택
  • 태그 추가 누르기
  • 키는 'Name', 값은 'Data1' 입력
  • 아래쪽 볼륨 생성 누르기 

 

 

 

- 생성된 EBS 스토리지를 EC2 인스턴스에 연결한다. 추가된 Data1 볼륨을 체크한 후 작업 > 볼륨 연결을 선택한다. '인스턴스(EC2-STG1), 디바이스(/dev/sdf)'를 선택하여 설정한 후 볼륨 연결을 선택한다.

 

 

- 볼륨(디스크)을 추가할 때는 일반적으로 인스턴스를 중지한 후 연결해야 하지만 핫스왑(hot swap) 기능이 있기 때문에 동작(라이브) 상태에서 자동으로 추가된 볼륨을 인식한다. 

 

 - 인스턴스(EC2-STG1)에 추가로 연결된 EBS 볼륨을 사용하도록 설정한다. 

 

# STG1 SSH 터미널 접속
# 라이브 상태에서 디바이스 추가 확인

lsblk

# 볼륨을 포맷하여 파일 시스템 생성

mkfs -t xfs /dev/xvdf

# 디렉터리를 생성한 후 마운트

mkdir /data
mount /dev/xvdf /data

# 파일을 생성한 후 확인

echo "EBS Test" > /data/memo.txt
cat /data/memo.txt

# 디바이스 확인

lsblk

df -hT /dev/xvdf

# 재부팅 이후에도 볼륨 자동 탑재를 위한 fstab 설정
# 파일 시스템 정보를 저장하고 있으며, 부팅할 때 파일 안에 구성 값으로 자동 마운트되도록 하는 정보 확인

cat /etc/fstab

# 장착할 볼륨 정보 확인

blkid

# fstab 설정 (blkid 코드 결과에서 확인한 자신의 UUID 입력 => xvdf의 UUID를 입력해야함)

echo "UUID=36d4b7ad-5f45-49ee-8cf7-7d7c2fe2f635 /data xfs defaults,nofail 0 2" >> /etc/fstab

# fstab 설정 확인

cat /etc/fstab

 

 

 

3) EBS 스토리지의 볼륨 크기를 변경하고 스냅샷 기능 확인하기

 

EBS 볼륨 크기 변경하기

 

- 서버를 운영할 때 로그 파일을 저장하면서 문제가 발생할 수 있는데, 저장 공간 대부분을 로그 파일이 차지해서 특정 서비스 접근이 차단되어 장애로 이어지는 경우이다. 하지만 EBS 스토리지는 서버를 운영할 때 저장 공간 크기를 탄력적으로 조정하기 때문에 이런 서비스 장애에 대처할 수 있다. 

 

- 인스턴스(EC2-STG1)의 루트 볼륨을 확장하고 볼륨 유형을 변경한다. 

- AWS 관리 콘솔에서 서비스>EC2>EBS>볼륨을 차례로 선택한다. 

- 'EC2-STG1_Root_Volume'을 체크하고 작업 > 볼륨 수정을 선택하여 다음과 같이 설정을 변경한다. 

 

  • 볼륨 유형은 범용 SSD(gp3) 선택
  • 크기(GiB)는 '20' 입력
  • IOPS는 '3000' 입력
  • 처리량(MiB/s)은 '125' 입력
  • 수정 누르기 

 

- 볼륨 최적화(optimizing)를 시작하면 파일 시스템 크기를 조정할 수 있으므로 파티션 조정->파일 시스템 조정 순서로 파일 시스템을 확장한다. 

# STG1 SSH 터미널 접속
# 현재 루트
# 볼륨 상태 확인

lsblk

df -hT /dev/xvda1

# growpart 명령어로 파티션 확장(파티션 조정)

growpart /dev/xvda 1

# 변경된 루트 볼륨 파티션 상태 확인

lsblk

# xfs_growfs 명령어로 볼륨의 파일 시스템 확장(파일 시스템 조정)

xfs_growfs -d /

# 변경된 루트 볼륨의 파일 시스템 상태 확인

df -hT /dev/xvda1

 

 

EBS 스냅샷 기능 확인하기 

 

- 데이터 저장 크기를 지속적으로 확장하기는 쉽지 않으므로 백업으로 데이터를 분산 저장해야 한다. 이런 백업을 EBS에서는 스냅샷 기능으로 제공한다. 

 

- 실습을 위해 가상 파일을 10G 파일 크기로 만들어 테스트한다. 

# STG1 SSH 터미널 접속
# 가상 파일 생성 후 확인

fallocate -l 10G /home/10G.dummy
df -hT /dev/xvda1

 

- 인스턴스(EC2-STG1)의 루트 볼륨을 스냅샷으로 백업한다. 서비스>EC2>EBS>볼륨에서 'EC2-STG1_Root_Volume'에 체크하고 작업> 스냅샷 생성을 차례로 선택한다. 스냅샷 생성 페이지에서 설명에 ''FirstSnapshot'을 입력하고 스냅샷 생성을 누른다. 

 

- 서비스>EC2>EBS>스냅샷에 들어가 진행상황을 확인한다. 

 

- 스냅샷 기능은 증분백업하므로 실습을 위한 가상 파일을 추가로 생성해서 확인한다. 

(최초 백업은 볼륨 전체 백업이므로 다소 시간이 소요됨)

# STG1 SSH 터미널 접속
# 가상 파일을 생성한 후 확인

fallocate -l 5G /home/5G.dummy
df -hT /dev/xvda1

 

- SecondSnapshot 스냅샷 생성 

(증분 백업은 변경된 볼륨만 변경하므로 빠르게 진행됨)

 

 

 

4) EFS 스토리지 생성하고 사용하기 

 

- 가용 영역별 인스턴스가 파일 공유 스토리지를 사용하면 동일한 콘텐츠의 웹 서비스를 제공하는 효과를 얻을 수 있다. 

- 웹 서비스에 사용되는 루트 역할의 디렉터리를 EFS 스토리지로 마운트하고 다른 AZ에서도 같은 스토리지를 공유

 

- EFS 파일 시스템을 생성하기 위해 AWS 관리 콘솔의 서비스 > 스토리지 > EFS > 파일 시스템에서 파일 시스템 생성 > 사용자 지정을 선택한다. 

- 설정 화면이 뜨면 다음과 같이 설정한다. 

  • [일반] 이름에 'cloudneta' 입력
  • '자동 백업 활성화' 체크 해제
  • IA로 전환은 없음 선택
  • '유휴 시 데이터 암호화 활성화' 체크 해제 후 다음 누르기 
  • [네트워크 액세스] Virtual Private Cloud(VPC)는 CH5-VPC 선택
  • 보안 그룹에서 storagelab~(기존 default 제거) 선택 
  • 다음 누르기 -> 다음 누르기 -> 생성 누른 후 확인 

 

 

- 인스턴스 (EC2-STG1)에 생성된 EFS를 사용하도록 연결 

# STG1 SSH 터미널 접속

# 현재 리전별 웹 서버 동작 확인 (STG1)

curl localhost

# 현재 리전별 웹 서버 동작 확인 (STG2)

curl localhost

# efs 디렉터리 생성

mkdir /var/www/html/efs

# 자신의 EFS ID 확인 후 마운트 

EFS=fs-0458339af31a60450(자신의-EFS-ID) # 변수 지정, 반드시 자신의 파일 시스템 ID 확인 후 입력
mount -t efs -o tls $EFS:/ /var/www/html/efs

# EFS 마운트한 곳에 파일 생성 후 확인

echo "<html><h1>Hello from Amazon EFS</h1></html>" > /var/www/html/efs/index.html
curl localhost/efs/

# EFS Size 확인 - 사용자는 표시된 용량과 상관없이 실제 사용한 용량만큼 비용 지불

df -hT |grep efs

# EFS DNS 주소를 조회할 때 표시되는 IP는 각 AZ에 속한 인터페이스 IP 주소 (dig +short 자신의-EFS-ID.efs.ap-northeast-2.amazonaws.com)

dig +short $EFS.efs.ap-northeast-2.amazonaws.com

 

 

 

- 인스턴스(EC2-STG2)에 EFS를 사용하도록 설정 

# STG2 SSH 터미널 접속
# efs 디렉터리 생성

mkdir /var/www/html/efs

# 자신의 EFS ID 확인 후 마운트(mount -t efs -o tls 자신의-EFS-ID:/ /var/www/html/efs)

EFS=fs-0458339af31a60450(자신의-EFS-ID) # 변수 지정, 반드시 자신의 파일 시스템 ID 확인 후 입력
mount -t efs -o tls $EFS:/ /var/www/html/efs

# EFS 마운트 확인

curl localhost/efs/

# EFS Size 확인 - 사용자는 표시된 용량에 상관없이 실제 사용한 용량만큼 비용 지불

df -hT |grep efs

# EFS DNS 주소를 조회할 때 표시되는 IP는 각 AZ에 속한 인터페이스 IP 주소(dig +short 자신의-EFS-ID.efs.ap-northeast-2.amazonaws.com)

dig +short $EFS.efs.ap-northeast-2.amazonaws.com

 

 

- EFS 주소를 조회할 때 다른 IP로 표시되는 이유는 'EFS는 AZ당 하나의 Mount Target(네트워크 인터페이스)을 사용'하기 때문이다. 

 

- EFS를 이용하여 각 인스턴스의 파일을 공유한다. 

# STG1 SSH 터미널 접속
# 인스턴스 STG1에서 파일 생성

for i in {1..100}; do touch /var/www/html/efs/deleteme.$i; done;

# STG2 SSH 터미널 접속
# 인스턴스 STG2에서 파일 생성

ls /var/www/html/efs

...

# 인스턴스 STG2에서 생성된 파일 삭제

rm -rf /var/www/html/efs/deleteme*.*

# STG1 SSH 터미널 접속
# 인스턴스 STG1에서 삭제된 파일 확인

ls /var/www/html/efs

 

- EFS 스토리지는 여러 가용 영역에 걸쳐 실행되는 웹 서비스에 정적 및 동적 콘텐츠를 공유하고, 새로운 파일이나 변경된 콘텐츠를 즉시 반영하여 사용해야 할 때 매우 유용하다. 

 

 

5) Public S3 스토리지로 외부 접근 확인하기 

 

- S3는 객체 스토리지 서비스로, 설정에 따라 OS 없이 자체적인 웹 서버로 사용되거나 API 방식을 이용한 데이터 백업 및 공유를 할 수 있다. 

- 공개된 S3 스토리지를 만들고 외부에서 접근을 이용한 정적 웹 서버로 사용되는 환경 만들기 

 

- AWS 관리 콘솔의 서비스 > 스토리지 > S3 > 버킷에서 버킷 만들기를 눌러 버킷을 생성 

- 설정 화면이 뜨면 다음과 같이 설정 

  • [일반 구성] 버킷 이름에 'cloudnet-juju' 입력
  • AWS 리전은 아시아 태평양(서울) ap-northeast-2 선택
  • [객체 소유권] ACL 활성화됨 선택
  • '현재 설정으로 인해 이 버킷과 그 안에 포함된 객체가 퍼블릭 상태가 될 수 있음을 알고 있습니다.' 에 체크
  • 버킷 만들기 누르기 

 

- 생성된 버킷을 선택한 후 업로드 > 파일 추가를 누르고, 임의의 테스트용 이미지 파일을 선택한 후 업로드를 누른다. 

업로드된 파일을 선택하면 객체 URL을 확인할 수 있다. 

 

 

 

- 업로드된 파일을 선택한 후 표시된 객체 URL로 웹에 접근하면 파일 정보가 표시되지 않는다. 버킷에 업로드된 파일은 기본적으로 외부에서 접근하는 것이 차단되어 있기 때문이다. 

 

- 외부에서 접근한 후 사용하려면 다음과 같은 설정이 추가로 필요하다. 업로드된 파일을 선택한 후 작업 > ACL을 사용해 퍼블릭으로 설정 > 퍼블릭으로 설정을 선택한다. 그리고 다시 객체 개요 페이지로 들어가 객체 URL을 클릭하여 웹으로 접근할 수 있는지 확인한다. 

 

 

 

- 인스턴스(EC2-STG1)에 웹 접근을 할 때 S3 스토리지에 업로드된 파일을 사용하도록 웹 서버의 index.html 파일을 다음과 같이 설정한다. 

 

# STG1 SSH 터미널 접속
# 인스턴스 STG1에서 index.html 파일 생성

cat <<EOF>> /var/www/html/index.html
<html>
<body>
<h1>CloundNeta S3 Storage<br>
// 앞서 업로드한 테스트 파일 객체 주소 입력
<img src="https://cloudneta-jungyo.s3.ap-northeast-2.amazonaws.com/%EC%8A%A4%ED%81%AC%EB%A6%B0%EC%83%B7+2023-10-30+162447.png">
</body>
</html>
EOF

# index.html 파일 생성 확인

cat /var/www/html/index.html

 

 

 

 

- 객체마다 추가 설정 없이도 외부에서 접근하면 자동으로 사용할 수 있도록 설정 

 

- 앞서 생성한 버킷을 선택하고 권한 탭을 클릭한다. 버킷 정책에서 편집을 누른 후 다음 정책을 추가하고 변경 사항 저장을 선택한다. 

 

# S3의 보안 정책을 이용하여 외부 접근을 허용하는 설정

{
	"Version": "2012-10-17",
	"Statement": [
		{
			"Sid": "PublicReadGetObject",
			"Effect": "Allow",
			"Principal": "*",
			"Action": "s3:GetObject",
			"Resource": "arn:aws:s3:::cloudnet-juju/*"
		}
	]
}

 

- 버킷 메뉴로 돌아와 테스트용 이미지 파일을 새롭게 업로드한 후 객체 URL을 클릭해보면 외부에서 별다른 설정 없이 접근할 수 있다. 

 

 

6) Private S3 스토리지의 제한된 접근 및 데이터 백업하기 

 

- S3 스토리지를 관리 콘솔이 아닌 AWS CLI에서 만들어 VPC 내부에서만 접근해서 사용할 수 있도록 Private S3 버킷을 생성

 

 

# STG1 SSH 터미널 접속
# 기존 S3 조회

aws s3 ls

# S3 버킷 생성(aws s3 mb s3://자신의 고유한 BUCKET_NAME) - 버킷 생성 후 S3 웹 콘솔에서 확인

aws s3 mb s3://cloudnet-juju-s3-private

# 버킷 이름을 변수에 지정(MyS3=버킷)

MyS3=cloudneta-jungyo-s3-private

# 파일 생성 후 S3에 업로드

echo "111" > /var/www/html/111.txt
aws s3 cp /var/www/html/111.txt s3://$MyS3
aws s3 ls s3://$MyS3

# 웹 디렉터리(하위 포함)를 S3 버킷에 업로드(수동 백업) 후 확인

aws s3 sync --delete /var/www/html s3://$MyS3
aws s3 ls s3://$MyS3 --recursive

 

- 다음 코드를 입력하여 파일을 업로드한 후 버킷을 조회하고 로그를 확인한다. 확인한 후에는 Ctrl+C를 눌러 빠져나온다. 

# STG1 SSH 터미널 접속
# crontab 내용 추가

cat <<EOF>> /etc/crontab
*/1 * * * * root aws s3 sync -delete /var/www/html s3://$MyS3
EOF

# crontab 내용 확인

cat /etc/crontab
...(생략)...

# 적용 및 추가 파일 생성

systemctl restart crond
echo "222" > /var/www/html/222.txt
echo "333" > /var/www/html/333.txt

# 실시간 버킷 조회 후 로그 확인

while true; do aws s3 ls s3://$MyS3; date; echo "---[S3 ls]---"; sleep 3; done
tail -f /var/log/cron

 

- 생성된 Private S3 버킷은 일반적으로 외부 접근이 불가능하지만 Pre-sign URL 기능을 이용하여 특정한 사용자에게 제한된 시간 동안 외부 접근을 허용할 수 있다. 

 

# STG1 SSH 터미널 접속
# 테스트 파일 생성 후 S3에 업로드

echo "presigned test" > /var/www/html/presigned.txt
aws s3 cp /var/www/html/presigned.txt s3://$MyS3

# 객체 URL로 직접 접근을 불가하나 Pre-sign URL 생성

aws s3 presign s3://$MyS3/presinged.txt --expires-in 120