AWS

Amazon S3

박현국 2024. 10. 19. 04:27
S3
  • S3 = Storage + Backup
  • 재해 복구 용도로도 쓰인다 ex) 리전이 다운되는 경우 여러분은 데이터를 다른 리전으로 이동시킬 것 이다.
  • Archive -> S3 에 파일을 아카이브 해두면 추후 매우 손 쉽게 검색할 수 있다.
  • Hybrid Cloud Storage -> 온프레미스 스토리지가 있지만, 클라우드로 확장하고자 한다면 S3 를 사용할 수 있다. 또한 애플리케이션을 호스팅하고 동영상 파일이나 이미지 등 미디어를 호스팅할 수 있다.
  • 데이터 레이크를 보유하여 다량의 데이터를 저장하고 빅데이터 분석을 수행하기 위해서도 사용된다
  • S3 는 파일을 버킷에 저장하는데, 버킷은 상위 레벨 디렉토리로 표시된다.
    • S3 버킷의 파일은 객체
    • 버킷은 계정 안에 생성되며, 버킷에는 전역적으로 고유한 이름이 있어야 하는데, 즉, 이름은 계정에 있는 모든 리전과 AWS 에 존재하는 모든 계정에서 고유해야 한다.
    • AWS 에서 전역적으로 고유한 단 하나의 이름이어야 한다.
    • 버킷은 리전 수준에서 정의된다. -> 버킷 이름이 모든 리전과 모든 계정에서 공유해도 버킷은 반드시 특정 AWS 리전에서 정의되어야 한다.
    • S3 는 전역 서비서처럼 보이지만 버킷을 사실상 리전에서 생성된다. 이것이 초보자들이 겪는 흔한 실수.
  • 객체나 파일에는 키가 있다. S3 키는 파일의 전체 경로이다.
  • ex.) s3://my-bucket/my_file.txt 
  • 폴더에 중첩하려는 경우, 키는 전체 경로가 된다.
  • S3 그 자체로는 디렉토리의 개념은 없다
  • S3 의 핵심은 Key
  • 객체란 무엇일까? -> Value : 본문의 내용 , 파일 등 원하는 것은 뭐든지 S3 로 업로드할 수 있는데, 최대 객체 크기는 5TB 이다.
  • 이때는 멀티파트 업로드를 사용해서 해당 파일을 여러 부분으로 나눠 업로드해야 한다.
  • 객체에는 메타데이터도 있는데, 키-값 쌍 리스트를 말한다.
  • 태그는 보안과 수명 주기에 유용하다.

S3 의 보안과 정책

  • 사용자에게는 IAM 정책이 있다면, S3 에는 버킷 정책이 있다.
    • 이 버킷 정책은 S3 콘솔에서 직접 할당할 수 있다. : 전체 버킷 규칙
    • 가령, 특정 사용자가 들어올 수 있게 하거나 다른 계정의 사용자를 허용할 수 있는데, 이를 S3 버킷에 액세스할 수 있는 교차 계정이라고 한다.
    • ACL (Object Access Control List) : 객체 액세스 제어 목록이며, 이 목록은 보다 세밀한 보안이며, 비활성화할 수 있는데, 버킷 수준에서 살펴보면 버킷 ACL 이 있는데, 훨씬 덜 일반적이다. 이 역시 비활성화가 가능하다.
  • 그렇다면 어떤 상황에서 IAM 원칙이 S3 객체에 액세스 할 수 있을까?
    • IAM 권한이 이를 허용하거나 리소스 정책이 이를 허용하는 경우가 된다. 이것이 작동할 때는 명백한 거부는 없다.
    • IAM 원칙이 특정 API 를 호출 시 S3 객체에 액세스 할 수 있다는 것

 

 

  • 암호키를 사용하여 객체를 암호화 하는 것
  • JSON 기반의 정책으로 활용된다.
    • Resource 블록 에서는 이 정책이 적용되는 버킷과 객체를 정책에 알려준다
    • 이것이 examplebucket 내에서 모든 객체에 적용되는 것을 볼 수 있다.
    • 허용 또는 거부라는 결과인데, 무엇을 허용하고 거부하는 것 일까?
    • 바로 작업을 거부한다. -> 우리가 허용하거나 거부할 수 있는 API 집합이 있는데, 해당 예시에서 우리가 허용한 작업은 GetObject 이다 이 원칙 덕분에 모든 사용자를 허용한다.
  • S3 버킷은 버킷 내 모든 객체에 대해 공개 읽기로 설정하고 있는데, 필요한 버킷 정책을 사용해서 버킷에 대한 공개 액세스를 허용할 수 있으며, 또는 업로드 시 객체를 강제로 암호화하거나 또 다른 계정으로의 액세스를 허용할 수도 있다.

버킷 정책 예시

 

 

 

  • 예시로 공개 액세스를 위한 버킷 정책이 있다고 가정하고, 사용자는 월드 와이드 웹에 있는데, 이 웹사이트 방문자는  S3 버킷 안에 있는 파일에 액세스하려고 한다. -> 필요한 버킷 정책을 첨부하여 공개 액세스를 허용할 것이고, 이것은 버킷 정책이 S3 버킷에 첨부되면 그 안에 잇는 모든 객체에 액세스할 수 있다.

공개 액세스 버킷 정책 예시

 

 

 

  • IAM 사용가 있는 경우 
  • 해당 사용자는 S3 에 액세스하고자 한다. 그럼 우리는 정책을 통해 이 사용자에게 IAM 권한을 할당할 수 있다.
  • 정책이 S3 버킷으로의 액세스를 허용하므로 해당 사용자는 지금 우리의 S3 버킷에 액세스할 수 있고, EC2 인스턴스가 있는 경우, EC2 인스턴스에서 S3 버킷으로 액세스를 제공할 수 있다.

 

 

 

  • 하지만. IAM 사용자는 적절하지 않으며, IAM Role을 사용해야한다.
    -> 올바른 IAM 권한을 통해 EC2 인스턴스 Role 을 생성하고, 이 EC2 는 S3 버킷에 액세스할 수 있을 것이다.
  • 여기서 교차 계정 액세스를 허용하려면 버킷 정책을 사용해야 하는데, 다른 계정에 IAM 사용자가 있다.
    -> 추가 버킷 정책을 생성해서 이 특정 IAM 사용자에게 교차 계정 액세스를 허용하려고 한다.
    -> 따라서 IAM 사용자는 S3 버킷으로 API 호출을 할 수 있게 된다.

 

  • 교차 계정 액세스를 허용하려면 버킷 정책을 사용해야 하는데, 다른 계정에 IAM 사용자가 있다.
  • 추가 버킷 정책을 생성해서 이 특정 IAM 사용자에게 교차 계정 액세스를 허용하려고 할때, IAM 사용자는 S3 버킷으로 API 를 호출할 수 있다
  • 블록 공개 액세스에 관한 버킷 설정: 버킷을 생성할 때 설정하는 것으로, 기업 데이터 유출을 방지하기 위한 추가 보안 계층으로서 AWS 가 개발하였다.
  • 이 버킷 정책을 설정하여 공개로 만들더라도 이 설정이 활성화되어 있다면, 버킷은 결코 공개되지 않을 것이다. 이렇게 데이터 유출을 방지할 수 있다.