AWS S3에 이미지 저장하기 - 1. S3 버킷 만들기

2025. 2. 19. 01:27AWS

오늘은 AWS S3를 이용하여 이미지를 저장하는 방법 그 첫번째 시간으로 S3 버킷부터 만들어 볼 것이다.

 

중간중간 각 설정에 대해 정리도 해놓는 거라 조금 정신 없어 보일 수도 있겠으나,

나중에도 두고두고 보면서 공부하기 위함이니 이해해주길 바란다!

 

AWS S3 기본 개념

1. 버킷 (Bucket)

  • 버킷은 S3에서 파일(객체)을 저장하는 컨테이너이다.
  • 하나의 AWS 계정당 100개의 버킷을 생성할 수 있다.
  • S3의 저장 공간을 논리적으로 분리하는 역할을 한다.

2. 객체 (Object)

  • 객체는 S3에 저장되는 파일 자체를 의미한다.
  • 객체는 파일 데이터 + 메타데이터(파일의 정보)로 구성된다.
  • S3의 객체는 키(Key)라는 고유한 식별자로 구분된다.

 

AWS S3 버킷 생성

 

S3를 사용하기 위해서는 가장 먼저 버킷을 만들어야 한다.

1. AWS S3 접속 > 버킷 만들기 선택

 

2. 버킷 이름 설정

먼저 이름을 설정한다.

 

2.  객체 소유권 선택 하기

객체 소유권을 선택한다. 

간단하게 말하자면 버킷에 올린 객체(파일)의 소유권을 버킷 소유자로 할지, 객체를 올린 사람으로 할지 정하는 것이다.

자세한 옵션의 내용은 아래를 참고해주길 바란다. 나는 팀프로젝트지만 거의 나 혼자 진행할 예정이라 ACL 비활성화로 선택했다.

 

 

📌  ACL(액세스 제어 목록) 옵션 차이

우선 ACL은 Access Control List의 약자로 액세스 제어 목록을 말한다.

풀어서 말하자면 파일(객체) 또는 버킷에 개별적으로 권한을 부여하는 방식이다.

누구한테 어떤 권한을 줄지 소유권은 누구한테 있는지 설정하는 것!

ACL 비활성화

  • 모든 객체의 소유권을 버킷 소유자로 설정
  • 객체를 업로드한 사용자와 관계없이 버킷 소유자가 자동으로 객체를 소유
  • 권장되는 방식 (Amazon 공식 가이드에서도 추천)
  • ACL을 사용하지 않고 IAM 정책을 통해 권한을 관리
  • 버킷 소유자(운영팀)가 모든 객체를 제어할 수 있도록 하고 싶을 때
  • 외부 사용자가 업로드한 파일이라도 버킷 소유자가 자동으로 관리하고 싶을 때

② ACL 활성화 - 버킷 소유자 선호

  • 파일을 업로드한 사람이 소유권을 가지지만, 버킷 소유자가 항상 제어할 수 있도록 설정
  • 즉, 버킷 소유자가 "업로드된 객체의 소유권을 가질 수 있다"
  • 다수의 외부 사용자가 파일을 업로드하는 환경이지만, 버킷 소유자가 최종적으로 파일을 제어해야 할 때

 

③ ACL활성화 - 객체 라이터

  • 객체를 업로드한 사람이 파일의 소유자
  • 업로드한 사용자가 객체의 소유권을 가질 수 있지만, 버킷 소유자가 항상 객체를 관리할 수 있도록 보장
  • 버킷 소유자는 객체에 대한 권한을 가지지 않는다
  • 파일을 업로드한 사람이 객체를 제어할 수 있다
  • 사용자가 자신의 객체를 직접 관리해야 하는 경우 (예: 외부 사용자 간의 파일 공유)
  • 버킷 소유자가 객체를 관리할 필요가 없을 때

 

3. 퍼블릭 액세스 차단 설정하기

퍼블릭 액세스는 외부에서의 공개 접근으로 어떤 수준의 공개 접근을 허용할 것인가, 즉 얼마만큼 차단 할 것인가를 설정하는 것이다.

아래에 아주 자세히 차이점을 적어놓았으니 읽어보길 바란다.

 

나는 웹사이트에서 누구나 볼 수 있는 프로필 이미지를 저장하는 용도이기 때문에 퍼블릭 액세스를 허용해주었다.

📌  퍼블릭 액세스 옵션 차이

① 모든 퍼블릭 액세스 차단

이 설정을 활성화하면 아래 4가지 설정이 모두 자동으로 활성화되며, 버킷과 객체가 퍼블릭으로 노출되지 않도록 강력하게 보호된다.

② 새 ACL(액세스 제어 목록)을 통해 부여된 버킷 및 객체에 대한 퍼블릭 액세스 차단

  • 기존에 퍼블릭 액세스 설정된 객체나 버킷은 영향 받지 않고! 새로운 파일을 업로드할 때, 퍼블릭으로 만들 수 없게 막아버리는 것
  • 기존에 있는 파일들 중 퍼블릭(인터넷에서 접근 가능)으로 설정된 파일그대로 유지된다.
  • 그러나 새로운 파일을 업로드 할 때 퍼블릭으로 설정하려고 해도 AWS가 막는다! ❌

③ 임의의 ACL(액세스 제어 목록)을 통해 부여된 버킷 및 객체에 대한 퍼블릭 액세스 차단

  • 기존에 있던 ACL을 통한 퍼블릭 파일은 그대로 유지된다. 여전히 예전 퍼블릭 파일에 퍼블릭으로 접근 가능하다.
  • 그러나 새로운 파일을 업로드할 때 ACL을 퍼블릭으로 설정하려고 하면 오류가 난다.
  • 또한 누군가 ACL을 이용해서 기존 퍼블릭 파일을 바꾸려고 하면 AWS가 차단한다. ❌

④ 새 퍼블릭 버킷 또는 액세스 지점 정책을 통해 부여된 버킷 및 객체에 대한 퍼블릭 액세스 차단

  • 기존에 있던 퍼블릭 접근 정책은 그대로 유지된다. 기존 정책이 퍼블릭을 허용하고 있었다면, 여전히 퍼블릭 접근 가능!
  • 하지만 새로운 퍼블릭 버킷 정책을 추가하려고 하면 오류 발생
  • ACL(파일(객체) 또는 버킷에 개별적으로 권한부여)뿐만 아니라 S3 버킷 정책(버킷 단위로 권한부여)을 이용한 퍼블릭 설정도 차단한다. 

⑤ 임의의 퍼블릭 버킷 또는 액세스 지점 정책을 통해 부여된 버킷 및 객체에 대한 퍼블릭 및 교차 계정 액세스 차단

  • 퍼블릭 설정뿐만 아니라, 다른 AWS 계정에서 이 버킷에 접근하는 것도 차단한다. 
  • 즉, 이 버킷은 오직 나만 사용할 수 있고, 다른 계정의 AWS 사용자도 접근 불가 
  • 다른 AWS 계정에서 내 버킷의 파일을 보려고 하면 오류 발생
  • 하지만 기존 퍼블릭 접근이 있으면 유지된다. 퍼블릭 접근 가능하다는 소리

 

4. 버킷 버전 관리 설정하기

S3 버킷에서 파일(객체)의 여러 버전을 유지할 수 있도록 해주는 기능이다.

나는 아직 버전 관리까지는 필요하지 않아서 비활성화를 선택했다.

📌  S3 버전 관리 활성화 vs. 비활성화 비교

파일 덮어쓰기 이전 버전 유지 새로운 파일로 덮어씌움 (기존 파일 삭제됨)
파일 삭제 삭제 마커가 생성됨, 이전 버전 유지 파일이 완전히 삭제됨
복구 가능 여부 가능 (이전 버전 복원) 불가능 (완전 삭제됨)
스토리지 비용 증가 (모든 버전 저장) 상대적으로 저렴 (최신 버전만 저장)
사용 예시 중요 데이터(로그, 백업, 문서 관리) 단순 정적 파일 저장(이미지, 영상)

 

 

5. 태그 및 기본 암호화 설정 하기

태그는 블로그의 태그 처럼 버킷에 태그를 붙여서 그룹화 할 수 있는 기능이다.

태그를 기반으로 모니터링하고 관리 할 수 있다. 나는 아직은 필요가 없기 때문에 추가하지 않고 그대로 두었다.

 

기본 암호화는 S3에 저장되는 데이터를 자동으로 암호화하는 기능이다.

데이터를 업로드할 때 AWS가 알아서 암호화하고 다운로드할 때 자동으로 복호화해 준다.

 

나는 기본 설정으로 두기로 했다.

📌  암호화 유형 옵션 차이

Amazon S3 관리형 키(SSE-S3)를 사용한 서버 측 암호화

  • AWS가 자체적으로 관리하는 AES-256 알고리즘을 사용하여 암호화한다.
  • 사용자가 직접 키를 관리할 필요가 없다.
  • 추가 비용이 없다.

② AWS Key Management Service(KMS) 키를 사용한 암호화(SSE-KMS)

  • AWS KMS(Key Management Service)를 이용한 암호화 방식.
  • 사용자가 직접 KMS 키를 생성 & 관리해야 함.

③ AWS Key Management Service 키를 사용한 이중 계층 서버 측 암호화(DSSE-KMS)

  • SSE-KMS보다 한 단계 더 강력한 보안 제공한다.
  • 두 개의 개별 암호화 계층을 사용하여 파일을 보호한다.

 

마지막으로 버킷 만들기를 선택하면 완료된다!

 

 

 

추가로 퍼블릭 액세스라는 말이 좀 처럼 와닿지 않아서 몇가지 더 공부한 내용을 정리해보겠다.

역시 AWS는 어렵다 🙄

 

퍼블릭 액세스이란?

객체(파일)에 대한 접근 권한을 의미한다.

S3에 직접 로그인해서 파일을 보거나 조작할 수 있다는 뜻은 아니다!

버킷 자체가 퍼블릭이면?

  • 버킷 안의 모든 파일이 외부에서 접근 가능하다
  • S3 버킷 URL을 입력하면 모든 파일을 볼 수 있다.
  • https://my-public-bucket.s3.amazonaws.com/ 이 URL을 열면 버킷에 있는 모든 파일 목록이 보일 수도 있다.

특정 파일만 퍼블릭이면?

  • 버킷은 비공개지만, 특정 파일만 인터넷에서 접근 가능함.
  • 예를 들어, example.jpg만 퍼블릭으로 설정하면                                                                                                                    https://my-bucket.s3.amazonaws.com/example.jpg 이 파일만 인터넷에서 열람 가능하지만 다른 파일들은 볼 수 없다.

 

S3 퍼블릭 액세스의 두 가지 주요 개념

1. 퍼블릭 읽기(Read) 권한

  • 누구나 인터넷에서 파일을 열어볼 수 있다!
  • 파일 URL을 브라우저에 입력하면 해당 파일을 볼 수 있다.
  • 사용 예: 웹사이트에서 공개적으로 사용할 이미지, 동영상, PDF 파일 등

예를 들어,  S3에 있는 example.jpg가 퍼블릭이면 https://my-bucket.s3.amazonaws.com/example.jpg 을 입력하면 누구든지 해당 이미지를 볼 수 있다. 물론 S3에 직접 접근하는 건 아니고 단순히 파일을 읽을 수 있는 것뿐이다.

 

2. 퍼블릭 쓰기(Write) 권한  → 아주 위험함!!

  • 누구나 내 S3 버킷에 파일을 추가하거나 기존 파일을 수정·삭제할 수 있다!!!
  • 인터넷 사용자들이 내 S3 버킷을 조작할 수 있다.
  • 보안상 절대 허용하면 안 되는 설정

예를 들어, 퍼블릭 쓰기 권한이 열려 있으면 이런 식으로 내 파일이 덮어쓰기 될 수 있다.

curl -X PUT --data "해킹된 내용" https://my-bucket.s3.amazonaws.com/example.jpg