# 이미지 업로드를 위한 AWS S3 인프라 구성

## **S3의 기본 용어**

### **1. Buckets (버킷)**

- Amazon S3에서 생성되는 최상위 디렉토리이며, 객체(파일)의 컨테이너 역할을 한다.
- S3에 저장된 모든 객체는 **반드시 버킷에 포함**된다.

### **2. Objects (객체)**

- S3에 저장되는 최소 단위.
- 객체는 **데이터(파일)**와 **메타데이터(파일 타입, 수정일 등)**로 구성된다.

### **3. Keys (키, 객체 식별자)**

- 버킷 내에서 객체를 구별하는 **고유 식별자**.
- 일반적으로 `"디렉토리/파일명"` 형식으로 사용된다.

### **4. Regions (리전)**

- S3 버킷이 저장될 **위치(리전)**를 지정한다.
- **리전 간 객체 공유는 불가능**하며, 선택한 리전에 따라 지연 시간과 비용이 달라진다.

---

## **S3 버킷 생성 과정**

![버킷만들기.png](%EB%B2%84%ED%82%B7%EB%A7%8C%EB%93%A4%EA%B8%B0.png)

### **1. 버킷 생성하기**

![버켓 인스턴스 생성.png](%EB%B2%84%EC%BC%93_%EC%9D%B8%EC%8A%A4%ED%84%B4%EC%8A%A4_%EC%83%9D%EC%84%B1.png)

- 버킷을 **서버(인스턴스)처럼** 생각하면 된다.
- 적절한 **버킷 이름**을 입력하여 생성.

### **2. 객체 소유권 설정**

![객체 소유권.png](%EA%B0%9D%EC%B2%B4_%EC%86%8C%EC%9C%A0%EA%B6%8C.png)

- 이번 프로젝트는 **하나의 AWS 계정만 사용**할 것이므로 **ACL을 활성화하지 않음**.
- 필요하면 **나중에 변경 가능**.

### **3. 퍼블릭 액세스 설정**

![퍼블릭 액세스.png](%ED%8D%BC%EB%B8%94%EB%A6%AD_%EC%95%A1%EC%84%B8%EC%8A%A4.png)

- **모든 퍼블릭 액세스를 허용** (나중에 정책으로 관리할 예정).
- **외부에서 접근 가능하도록 설정할 경우**, "모든 퍼블릭 액세스 차단"을 **해제**.
- 만약 **IAM을 통해 접근**하려면, 키(Key) 인증을 사용하면 된다.

![버킷버전관리.png](%EB%B2%84%ED%82%B7%EB%B2%84%EC%A0%84%EA%B4%80%EB%A6%AC.png)

![기본 암호화.png](%EA%B8%B0%EB%B3%B8_%EC%95%94%ED%98%B8%ED%99%94.png)

![bucket0127생성.png](bucket0127%EC%83%9D%EC%84%B1.png)

### **4. 버킷 정책 설정**

![버킷정책.png](%EB%B2%84%ED%82%B7%EC%A0%95%EC%B1%85.png)

![버킷정책-리소스.png](%EB%B2%84%ED%82%B7%EC%A0%95%EC%B1%85-%EB%A6%AC%EC%86%8C%EC%8A%A4.png)

- **User가 버킷에 접근할 수 있도록 하는 방화벽 역할**.
- **JSON 문법**으로 작성해야 하지만, **AWS 정책 생성기**를 활용하면 쉽게 생성 가능.

### **테스트용 정책 설정**

- **Principal**: `` (모든 사용자)
- **Actions**: `All actions` (모든 작업 허용)
- **ARN**: 버킷의 **ARN 주소** 복사하여 입력

> 📌 주의:
> 
> - 실제 운영 환경에서는 **모든 사용자(*) 접근을 허용하면 보안 위험**이 크다.
> - 퍼블릭 정책을 사용할 경우 **정확한 접근 제어**를 해야 한다.

![버켓정책 편집 완료.png](%EB%B2%84%EC%BC%93%EC%A0%95%EC%B1%85_%ED%8E%B8%EC%A7%91_%EC%99%84%EB%A3%8C.png)

---

## **5.  [IAM] IAM S3 Access Key**

1. 사용자 추가
    - [AWS Console] > [IAM] > [사용자] > [사용자 추가] 선택합니다.
        
        ![IAM 역할생성.png](IAM_%EC%97%AD%ED%95%A0%EC%83%9D%EC%84%B1.png)
        
    - 1단계 생성할 사용자 이름을 입력합니다.
        
        ![1단계 사용자생성.png](1%EB%8B%A8%EA%B3%84_%EC%82%AC%EC%9A%A9%EC%9E%90%EC%83%9D%EC%84%B1.png)
        
2. 정책 연결
    - 직접 정책 연결에서 AmazonS3FullAccess 정책을 선택합니다.
        
        ![2단계 사용자 권한 설정.png](2%EB%8B%A8%EA%B3%84_%EC%82%AC%EC%9A%A9%EC%9E%90_%EA%B6%8C%ED%95%9C_%EC%84%A4%EC%A0%95.png)
        
    - 검토 후 사용자 생성합니다.
        
        ![3단계 사용자생성.png](3%EB%8B%A8%EA%B3%84_%EC%82%AC%EC%9A%A9%EC%9E%90%EC%83%9D%EC%84%B1.png)
        
3. 객체 소유권 편집 
    - 버켓 클릭 → 권한 으로 이동
        
        ![객체 소유권 편집 0.png](%EA%B0%9D%EC%B2%B4_%EC%86%8C%EC%9C%A0%EA%B6%8C_%ED%8E%B8%EC%A7%91_0.png)
        
    - 편집
        
        ![객체 소유권 편집.png](%EA%B0%9D%EC%B2%B4_%EC%86%8C%EC%9C%A0%EA%B6%8C_%ED%8E%B8%EC%A7%91.png)
        
4. 액세스 키 만들기
    - 사용자 클릭 → 보안 자격 증명 으로 이동
        
        ![액세스키 만들기.png](%EC%95%A1%EC%84%B8%EC%8A%A4%ED%82%A4_%EB%A7%8C%EB%93%A4%EA%B8%B0.png)
        
    - 1. **Command Line Interface (CLI)**
        - 1단계 액세스 키 모범 사례 및 대안
            
            ![1단계 액세스 키 모범 사례 및 대안.png](1%EB%8B%A8%EA%B3%84_%EC%95%A1%EC%84%B8%EC%8A%A4_%ED%82%A4_%EB%AA%A8%EB%B2%94_%EC%82%AC%EB%A1%80_%EB%B0%8F_%EB%8C%80%EC%95%88.png)
            
        - 2단계 설명 태그 설정
            
            ![2단계 액세스 설명 태그 설정.png](2%EB%8B%A8%EA%B3%84_%EC%95%A1%EC%84%B8%EC%8A%A4_%EC%84%A4%EB%AA%85_%ED%83%9C%EA%B7%B8_%EC%84%A4%EC%A0%95.png)
            
        - 3단계 액세스 키검색 -  csv 파일 다운로드 필요
            
            ![3단계 엑세스.png](3%EB%8B%A8%EA%B3%84_%EC%97%91%EC%84%B8%EC%8A%A4.png)
            
    - 2. **AWS 외부에서 실행되는 애플리케이션**
        - 1단계 액세스 키 모범 사례 및 대안
            
            ![1단계 액세스 키 모범 사례 및 대안 0.png](1%EB%8B%A8%EA%B3%84_%EC%95%A1%EC%84%B8%EC%8A%A4_%ED%82%A4_%EB%AA%A8%EB%B2%94_%EC%82%AC%EB%A1%80_%EB%B0%8F_%EB%8C%80%EC%95%88_0.png)
            
        - 2단계 설명 태그 설정
            
            ![2단계 액세스 설명 태그 설정.png](2%EB%8B%A8%EA%B3%84_%EC%95%A1%EC%84%B8%EC%8A%A4_%EC%84%A4%EB%AA%85_%ED%83%9C%EA%B7%B8_%EC%84%A4%EC%A0%95.png)
            
        - 3단계 액세스 키검색 -  csv 파일 다운로드 필요
            
            ![3단계 엑세스.png](3%EB%8B%A8%EA%B3%84_%EC%97%91%EC%84%B8%EC%8A%A4.png)
            

---

## **추가 작업 (향후 진행 예정)**

- **디렉토리 구조 설계** (예: `postimage/`, `storeimage/` 등)
- **세부 정책 수정 및 권한 관리**
- **Spring Boot와 S3 연동 후 테스트**