[AWS] S3와 정적 웹 호스팅
📌 들어가며
이번 글에서는 AWS의 S3(Simple Storage Service)를 정리한다. 파일을 객체(Object) 단위로 저장하는 스토리지로, 버킷 생성부터 IAM 역할을 통한 CLI 접근, 그리고 S3만으로 정적 웹사이트를 호스팅하는 것까지 실습한다.
S3란? 확장성·가용성·보안·성능을 제공하는 객체 스토리지 서비스. 웹사이트·백업·아카이브·빅데이터 등 다양한 용도로, 원하는 만큼 데이터를 저장하고 세부적인 접근 제어(퍼블릭/프라이빗)를 구성할 수 있다.
1. S3 핵심 개념
S3는 EBS·EFS와 달리 파일 시스템이 아니라 객체 스토리지다. 폴더 구조도 실제로는 이름의 구분자(/)로 흉내 낸 것이다.
| 개념 | 설명 |
|---|---|
| 버킷(Bucket) | 객체를 담는 최상위 컨테이너(이름은 전역 고유) |
| 객체(Object) | S3에 저장되는 파일 하나 (데이터 단위) |
| 키(Key) | 객체의 전체 경로 이름(folder/img.png) |
| ACL / 정책 | 퍼블릭/프라이빗 접근 제어 |
💡 폴더는 진짜 폴더가 아니다. S3에는 디렉터리 개념이 없고,
images/cat.png처럼 키 이름에/를 넣어 폴더처럼 보이게 할 뿐이다. 실제로는 평평한(flat) 키-값 저장소다.
2. 버킷 생성
S3 탭에서 버킷을 생성한다. 도메인으로 접속할 것이므로 리전+도메인 형태로 이름을 짓는다. 버전 관리는 활성화하고, 퍼블릭 액세스는 나중에 열 것이므로 일단 차단한다.
생성된 버킷에 다운로드용 파일(aws.tar)을 업로드한다. 이 파일의 URL을 인터넷에 입력해도 다운로드되지 않는데, ACL(퍼블릭 액세스)이 막혀 있기 때문이다.
Cloud9 인스턴스에서 aws s3 ls를 입력하면 방금 만든 버킷이 조회된다.
3. IAM 역할로 EC2에 S3 권한 부여
EC2에서 aws s3 명령을 쓰려면 S3 접근 권한이 필요하다. 액세스 키를 직접 넣는 대신 IAM 역할(Role)을 붙이는 것이 안전하다.
IAM → 역할 → 생성에서 유형을 EC2로 하고, 권한에 AmazonS3FullAccess를 체크해 역할을 만든다.
S3 권한이 없는 다른 인스턴스에 작업 → 보안 → IAM 역할 수정으로 이 역할을 연결하면, 그 인스턴스에서도 aws s3 명령이 동작한다.
⚠️ 액세스 키를 EC2에 직접 저장하지 말자. IAM 역할을 붙이면 임시 자격 증명이 자동 발급·교체되어 훨씬 안전하다. 키 파일이 유출될 위험이 없다.
4. S3 CLI 명령어
| 명령 | 역할 |
|---|---|
aws s3 ls | 버킷 리스트 확인 |
aws s3 cp <파일> s3://<버킷>/ | 파일 업로드/이동 |
aws s3 sync s3://<버킷> | 사본 동기화(복제) |
aws s3 rm s3://<버킷>/<파일> | 파일 삭제 |
aws s3 rm s3://<버킷>/<폴더> --recursive | 폴더·하위 항목 삭제 |
5. 퍼블릭 액세스 열기 (2단계)
정적 웹 호스팅을 하려면 차단했던 퍼블릭 액세스를 풀어야 한다. ①버킷 차단 해제 → ②객체 소유권(ACL 활성화) → ③객체를 퍼블릭으로 순으로 진행한다.
권한 탭 → 퍼블릭 액세스 차단 편집에서 차단 체크를 모두 해제한다.
객체 소유권 편집에서 ACL 활성화됨을 체크한다.
파일의 작업 → ACL을 사용하여 퍼블릭으로 설정을 누르면, 이제 URL로 다운로드가 된다. index.html과 images/도 동일하게 퍼블릭으로 연다.
⚠️ 퍼블릭으로 열면 누구나 접근할 수 있다. 정적 웹사이트처럼 공개가 목적일 때만 열고, 민감한 데이터는 절대 퍼블릭으로 두지 말자.
6. 정적 웹 호스팅 + Route53 연결
버킷 엔드포인트로 접속되지만 주소가 길고 가독성이 없다. 버킷 → 속성 → 정적 웹사이트 호스팅 편집에서 활성화하고, 인덱스 문서를 index.html로 지정한다.
주어진 웹사이트 엔드포인트를 Route53에서 별칭 레코드로 연결한다. 별칭을 체크하고 대상을 S3 엔드포인트로 지정하면, 도메인 주소로 접속할 수 있다.
📝 정리
1
2
3
4
5
S3 & 정적 웹 호스팅
├─ 개념 객체 스토리지(버킷/객체/키), 폴더는 흉내
├─ 권한 IAM 역할로 EC2에 S3 접근(키 저장 X)
├─ 공개 버킷 차단 해제 → ACL 활성화 → 객체 퍼블릭
└─ 호스팅 정적 웹 활성화 → Route53 별칭 레코드
| 개념 | 한 줄 정의 |
|---|---|
| S3 | 객체 스토리지 |
| IAM 역할 | 키 없이 EC2에 권한 부여 |
| 정적 웹 호스팅 | 서버 없이 S3로 웹사이트 제공 |
S3는 서버 없이도 파일 저장과 정적 웹사이트 호스팅을 가능케 한다. 핵심은 IAM 역할로 안전하게 접근하고, 퍼블릭 액세스를 단계적으로 열어 Route53과 연결하는 것이다. 다음 글에서는 여기에 CloudFront(CDN)를 붙여 응답 속도를 끌어올린다.

























Comments powered by Disqus.