S3 버킷 권한 관리 및 설정

문주은·2024년 2월 1일

1. S3 개념

s3에는 Bucket과 Object가 있다.

1-1. Object

데이터와 메타 데이터 구성하고 있는 저장 단위 (s3에 저장되는 데이터)

  • 각 object는 데이터(s3 버킷에 올리는 객체)와 메타데이터(최종 수정일, 파일 타입 등의 데이터)를 가짐

[Object 구성]

1) Key

  • 파일 이름
  • 버킷 내 객체의 고유한 식별자
  • 모든 객체는 정확히 하나의 키를 갖는다.

2) Value

  • 파일의 데이터
  • url로 /awsinaction/img/cloud.jpg 같이 구성

3) Version ID

  • 파일의 버전 아이디
  • 같은 파일이지만 다른 버전으로 올릴 수 있게 돕는 고유한 id
  • 이전과 같은 이름으로 업로드한 'cloud.jpg' 객체를 이전 버전으로 돌아가고 싶다면 version id를 통해 복원 가능

4) Meta Data

  • 파일의 정보를 담은 데이터
  • ex) 최종 수정일, 파일 타입, 파일 소유자, 사이즈 ... 등

5) ACL

  • 파일 권한에 대한 데이터(데이터에 대한 접근 및 수정)

1-2. Bucket

위에서 만든 객체를 저장하고 관리 (디렉토리/폴더 개념)

2. 실무에서 S3 버킷 생성 및 권한 관리

아래 내용들은 모두 Bucket Policy로 권한 관리한 내용입니다.

Bucket Policy VS ACL

  • Bucket Policy :
    • 버킷 전체에 대한 엑세스 권한 관리
    • 여러 객체에 대한 일관된 엑세스 제어 제공
    • Bucket Policy json 파일로 세밀한 권한 제어 가능
  • ACL:
    • 개별 객체 또는 버킷에 대한 엑세스 권한 설정
    • 객체마다 다른 엑세스 권한이 필요한 경우 유용
    • 상세한 권한 제어가 어려움으로 제어가 유연하지 못함

Step1. 일반 구성

버킷 이름 : 고유값으로 구성 ex) product_image
AWS region : ex) us-east-1

Step2. 객체 소유권

다른 AWS 계정에서도 소유권을 갖거나 접속 제어 가능 유무
현재 해당 사항 없으므로 ACL 비활성화됨(권장)

Step3. 이 버킷의 퍼블릭 엑세스 차단 설정

모든 퍼블릭 엑세스 차단

Step4. 버킷 버전 관리

활성화 : 변경 내용 추적 가능하지만 비용 조심

Step5. 기본 암호화

고객 데이터나 암호화가 필요한 데이터가 아니라는 정책으로 암호화는 하지 않음.
Disabled statement

Step6. 버킷 생성

Dashboard에서 버킷 생성

Step7. Bucket Policy 설정

product 데이터를 현재 Data(본인)팀에서 관리하고 같은 회사 내 다른 팀(마켓팅) or 다른 회사(외주 업체)에서도 추후 이용 가능한 환경일 때 Bucket Policy 설정입니다.

  • Data 팀 Policy(All permission)
    • Select Policy Type : S3 Bucket Policy
    • Effect : Allow
    • Principal : *
    • AWS Service : Amazon S3
    • Actions : All Actions
    {
      "Id": "Policy1649421058532", // 정책 ID
      "Version": "2024-02-01",
      "Statement": [
        {
          "Sid": "Stmt1649420985040", 
          "Action": [ // 버킷에 수행할 액션(행동)
             "s3:DeleteObjectVersion",
             "s3:RestoreObject",
             "s3:ListBucket",
             "s3:PutObjectLegalHold",
             "s3:GetBucketAcl",
             "s3:PutObject",
             "s3:GetObjectAcl",
             "s3:GetObject",
             "s3:PutObjectRetention",
             "s3:PutLifecycleConfiguration",
             "s3:GetObjectVersionAcl",
             "s3:GetObjectTagging",
             "s3:DeleteObject",
             "s3:GetObjectVersion",
             "s3:ListAllMyBuckets"
          ],
          "Effect": "Allow", // 정책 적용
          "Resource": "arn:aws:s3:::product_image/*", // product_image 버킷에 있는 모든 리소스(객체)
          "Principal": "*" // 정책 적용 대상 모두
        }
      ]
    }
  • 마켓팅 팀 Policy
    • Select Policy Type : S3 Bucket Policy
    • Effect : Allow
    • Principal : "arn:aws:iam::{ACCOUNT_ID}:user"
    • AWS Service : Amazon S3
    • Actions : GetObject
    {
      "Id": "Policy1649421058532", // 정책 ID
      "Version": "2024-02-01",
      "Statement": [
        {
          "Sid": "Stmt1649420985040", 
          "Action": [ // 버킷에 수행할 액션(행동)
             "s3:GetObject", // 객체 가져오기
          ],
          "Effect": "Allow", // 정책 적용
          "Resource": "arn:aws:s3:::product_image/*", // product_image 버킷에 있는 모든 리소스(객체)
          "Principal": "arn:aws:iam::{ACCOUNT_ID}:{user}" // IAM 설정된 aws계정 id값, 사용자명
        }
      ]
    }

IAM 정책 구조 Reference : https://inpa.tistory.com/entry/AWS-%F0%9F%93%9A-IAM-Policy-JSON-%EA%B5%AC%EC%A1%B0-ARN-%EB%AC%B8%EB%B2%95-%EC%A0%95%EB%A6%AC

3. CloudFront(CDN)

3-1. CloudFront 기본 개념

  • CloudFront는 기본적으로 public 권한으로 객체에 접근

  • Cloud Front (CDN service) 사용해야 하는 이유

    • 엣지 로케이션 접근으로 어느 지역에서든 이미지를 빠르게 로딩 가능
    • S3 부하 방지 가능
    • 원본 서버에 직접 접근하는 것을 방지.

3-2. CDN 연동

3-3. CloudFront Access Control

profile
Data Engineer

0개의 댓글