2023.11.22 - [퍼블릭 클라우드(AWS)] - [AWS] S3 - 파일 업로드, AWS CLI로 백업, 백업 자동화
[AWS] S3 - 파일 업로드, AWS CLI로 백업, 백업 자동화
* Amazon S3(Simple Storage Services)Amazon S3은 무한대로 저장 가능하고 사용한 만큼만 지불하는 스토리지 서비스이다.버킷(Bucket)이라는 리전에서 영역을 생성하고 데이터를 키값 형식의 객체(Object)로 저
djjin02.tistory.com
* S3(Simple Storage Service)란 무엇인가

Amazon S3는 EC2와 더불어 가장 오래되고, 기본이 되는 객체 스토리지 서비스이다.
S3에 저장되는 데이터를 객체라고 하며, 이 객체 저장소를 버킷(Bucket)이라고 한다.
객체에 대한 입출력은 HTTP 프로토콜로 하며, REST API를 이용하여 명령이 전달된다.
S3의 가장 큰 특징은 높은 내구성이며, 데이터 손실을 최소화하도록 규정되어 있다.
또한 데이터 저장 공간이 거의 무제한에 가까워 특별한 용량 제한 없이 데이터를 저장할 수 있다.
S3의 객체는 기본적으로 웹 접속이 가능하기 때문에 간단한 정적 웹 콘텐츠를 S3에 올려 웹 서버의 도움 없이 바로 웹 서비스가 가능하다.
그리고 S3는 보안 규정 준수 및 감시 기능을 제공하고 있어 데이터가 안전하게 저장되고 인증된 사용자만 접근할 수 있도록 구성한다. 필요한 경우 접근 권한 정책을 이용하여 해당 객체의 접근을 제어할 수 있다.

1. Public S3 스토리지로 외부 접근
S3는 객체 스토리지 서비스로, 설정에 따라 OS 없이 자체적인 웹 서버로 사용되거나 API 방식을 이용한 데이터 백업 및 공유를 할 수 있다.
공개된 S3 스토리지를 만들고 외부에서 접근을 이용한 정적 웹 서버로 사용되는 환경을 만들어 보았다.

[버킷 만들기]


버킷 이름 지정, [ACL 활성화됨] 체크, [모든 퍼블릭 액세스 차단] 체크 해제하고 [버킷 만들기]

생성된 버킷을 선택한 후 [업로드]


[파일 추가]를 누르고 이미지 파일을 업로드한다.

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

웹 브라우저에서 객체 URL에 접속하면 이미지가 표시되지 않는다.
버킷에 업로드된 파일은 기본적으로 외부에서 접근하는 것이 차단되어 있다.


외부에서 접근하기 위해 [객체 작업] - [ACL을 사용하여 퍼블릭으로 설정] - [퍼블릭으로 설정]

퍼블릭으로 설정한 후 다시 URL에 접속하면 이미지가 보이는 것을 확인할 수 있다.

인스턴스 터미널에 접속하여 웹 접근을 할 때 S3 스토리지에 업로드된 파일을 사용하도록 웹서버의 index.html 파일을 위처럼 설정한다.

정상 동작한다.

이제 객체마다 추가 설정 없어도 외부에서 접근하면 자동으로 사용할 수 있도록 설정하겠다.
앞서 생성한 버킷을 생성하고 [권한]-[편집]을 누른 후,

{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "PublicReadGetObject",
"Effect": "Allow",
"Principal": "*",
"Action": [
"s3:GetObject"
],
"Resource": [
"arn:aws:s3:::kjr-cloudneta/*"
]
}
]
}
위 정책을 추가하고 저장한다.

새 객체 파일을 업로드하고, 객체 URL에 접속해 보면 이번엔 바로 접속되는 것을 확인할 수 있다.
2. Private S3 스토리지의 제한된 접근 및 데이터 백업
이번엔 S3 스토리지를 관리 콘솔이 아닌 AWS CLI에서 만들어 VPC 내부에서만 접근해서 사용할 수 있도록 Private S3를 구성해 보겠다.

기존 S3 조회

버킷 이름을 작성하여 S3 버킷 생성

버킷이 생성된 것을 확인

버킷 이름을 변수에 지정하고(MyS3=버킷),
echo 명령으로 파일 생성 후 S3에 업로드하고,
웹 디렉터리를 S3 버킷에 업로드하고 확인한다.


코드를 입력하여 파일을 업로드한 후 버킷을 조회하고 로그를 확인한다.
# crontab 내용 추가
cat <> letc/crontab
*/1 * * * * root aws 53 sync --delete /var/www/html s3://$MyS3
EOF
# crontab 내용 확인
cat letc/crontab
# 적용 및 추가 따일 생성
systemctl restart crond
echo "222" > /var/www/html/222.txt
echo "333" > /var/www/html/333.txt
# While문으로 실시간 버킷 조회 후 tail 명령으로 로그 확인

CLI에서 생성한 파일 확인

생성된 Private S3 버킷은 일반적으로 외부 접근이 불가능하지만 Pre-sign URL 기능을 이용하여 특정한 사용자에게 제한된 시간 동안 외부 접근을 허용할 수 있다.
# 테스트 파일 생성 후 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/presi gned.txt --expires-in 120
끝...
'퍼블릭 클라우드(AWS)' 카테고리의 다른 글
| [AWS] RDS(Relational Database Service) 배포 및 웹 서버 연동 (0) | 2025.11.19 |
|---|---|
| [AWS] EFS(Elastic File System) 스토리지 구성 (0) | 2025.11.17 |
| [AWS] EBS(Elastic Block Store) 스토리지 구성 (0) | 2025.11.17 |
| [AWS] ALB(Application Load Balancer), NLB(Network Load Balancer) - 로드밸런싱 구성 (0) | 2025.11.14 |
| [AWS] CloudFormation - 인프라 구성 자동화 (0) | 2025.11.14 |