devops

AWS Storage Bucket, Object 개념 S3와 정책 정리 본문

DevOps/AWS

AWS Storage Bucket, Object 개념 S3와 정책 정리

vata500 2022. 5. 19. 13:42
반응형

AWS 스토리지 종류

thecustomizewindows.com/2019/01/difference-between-object-storage-and-block-storage/

1. 객체 스토리지(Object)

객체는 문서, 이미지, 비디오 등 단순한 구조에 메타데이터를 포함하는 데이터를 의미한다. 인터넷으로 연결된 API를 통해서 데이터를 application에 제공한다.

2. 블록 스토리지(Block)

블록 스토리지의 데이터는 서버 인스턴스에 디스크 볼륨 형태로 제공되는 데이터를 의미한다. EC2 인스턴스에 포함된 볼륨에 고속 접근이 가능하다. 대표적으로 Elastic Block Store(EBS)는 EC2 인스턴스를 위한 부트 볼륨과 DB로 사용된다.

3. 파일 스토리지(File)

서버 인스턴스에 파일 시스템 인터페이스 방식으로 제공되는 데이터를 의미한다. 서버 인스턴스에 파일 스토리지를 추가하면 로컬 파일 시스템처럼 작동한다. 대표적인 EFS(Elastic File System)은 다수의 EC2 인스턴스를 통해 데이터에 접근할 수 있도록 한다.

Simple Storage Service(S3)

AWS의 대표 스토리지 서비스, S3는 객체 스토리지로 Data 백업, 정적 웹 호스팅, 어플리케이션 호스팅, 재난 복구 컨텐츠 배포 및 데이터 레이크, 프라이빗 저장소에 활용된다.

Bucket과 Object

버킷(bucket)

버킷은 객체를 저장하는 '컨테이너'다. PC로 비유하면 파일을 담는 폴더 역할을 한다. 그래서 한 버킷 내에 여러 폴더를 생성할 수 있따.

버킷 생성시 주의해야할 것은 버킷 이름을 붙일 때 여러 리전에서 구분이 가능한 고유 이름을 사용해야한다. 그래야 사용자가 버킷 URL을 통해서 데이터에 접근가능하다.

버킷은 어떤 Region에서 생성이 가능하며, 복제작업을 수행하지 않으면 다른 리전에서 특정 버킷의 데이터가 복제되지 않는다. S3 버킷은 버전 부여 기능을 제공하기 때문에 객체가 버킷에 추가될 때마다 해당 객체에 유일한 ID가 할당된다.

객체(object)

문서, 이미지, 비디오 등 단순한 구조의 메타데이터를 포함하는 데이터로 버킷에 저장한 모든 것을 객체라고 부른다. 각 객체는 데이터와 메타데이터를 가진다. 메타데이터는 해당 객체를 설명하는 이름-값 쌍으로 표시, 여기에는 최종 수정일, 타입 등 정보가 기록된다.

객체는 이름, key, 버전 ID로 식별이 가능하다. 키를 통해 버킷에서 유일한 것으로 식별한다. 버킷에 존재하는 모든 객체는 단 하나의 키를 가진다.


접근성 통제(Access Control)

S3 버킷에 누가 어떻게 접근하도록 할 것인지를 정의한다. 주로 JSON을 이용해 작성된 정책으로 이루어진다. 

접근 정책, 버킷 정책, 접근 제어 목록의 방식을 사용한다.

  • ID : 정책의 ID 값. UUID 사용을 권장
  • SID : Statement ID로 statement를 구분하기 위해 사용
  • Effect : 정책의 효과를 의미, 허용과 거부를 선택
  • Principal : 대상과 주체를 지정. User, Services 등
  • Action : 정책을 통해 승인과 거절의 액션을 의미
  • Resource : 액션이 영향을 주는 리소스 리스트를 지정
  • Condition : 조건이 충족되는 경우 해당 정책을 적용

하나의 Statement에 하나의 Permisision 정보가 포함된다. 정책에 포함된 다수의 statement는 논리합(OR) 관계를 맺는다.

정책은 그룹, 롤에 할당된 IAM 정책 Identity-based policies와 S3 버킷, SES Queue 등 AWS 자원에 할당되는 정책인 Resource-based Policies로 나뉘어 작성된다.

접근 정책

IAM 신분 및 접근 관리 정책으로 S3의 객체를 매우 세분화하여 통제가능하다.

  {
       "Version":"2012-10-17",
       "Statement":[
          {
             "Effect":"Allow",
             "Action": "s3:ListAllMyBuckets",
             "Resource":"*"
          },
          {
             "Effect":"Allow",
             "Action":["s3:ListBucket","s3:GetBucketLocation"],
             "Resource":"arn:aws:s3:::awsexamplebucket1"
          },
          {
             "Effect":"Allow",
             "Action":[
                "s3:PutObject",
                "s3:PutObjectAcl",
                "s3:GetObject",
                "s3:GetObjectAcl",
                "s3:DeleteObject"
             ],
             "Resource":"arn:aws:s3:::awsexamplebucket1/*"
          }
       ]
    }

먼저 유저, 그룹, 롤 등 IAM 정책을 정의한다. IAM과 S3를 이용하면 특정 IAM 유저와 공유된 버킷 선택하여 특정 유저가 버킷에 접근하도록 허용한다. 버킷 내용을 회원과 일부 회원이 열람하거나, 고객 또는 파트너가 객체를 추가하는 것도 허용할 수 있다..


버킷 정책

버킷 레벨에서 생성한 정책이다. S3 버킷을 세분화된 방식으로 제어할 수 있다.

대표적으로 특정 버킷에 있는 객체에 대한 익명의 사용자로부터 Read Only 접근을 허용하는 것이다. 이것은 S3 리소스기반의 정적 웹 사이트를 운영하거나 웹으로 불특정다수의 접근을 허용할 때 자주 사용된다.

   {
      "Version":"2012-10-17",
      "Statement":[
        {
          "Sid":"PublicRead",
          "Effect":"Allow",
          "Principal": "*",
          "Action":["s3:GetObject"],
          "Resource":["arn:aws:s3:::devopslove/*"]
        }
      ]
    }

버킷에 GetObject 액세스 권한을 부여하면 된다. 위는 'devopslove'라는 버킷의 모든 리소스를 GetObject 작업으로 누구나 접근할 수 있음을 Pricipal의 * 필드값으로 확인할 수 있다.

S3 보안의 Best Practice

- 보통 S3 버킷에 대한 퍼블릭 액세스를 허용하면 안된다.
- 최소한의 접근 권한 전략을 사용한다. 
- 다중인증(Multifactor Authentication) 시스템을 활용한다.

 

 

반응형
Comments