오브젝트 스토리지 접근정책(ACL) 및 버킷정책(Bucket Policy)

| 2020년 10월 15일 | 0 Comments

 

오브젝트 스토리지 접근정책(ACL) 및 버킷정책(Bucket Policy)


 

※ 주의
오브젝트 스토리지 서비스는 계정이 활성화되어있으면 무료정책 이외에 발생하는 트래픽, 디스크사용량 등은 요금으로 청구됩니다.
더이상 서비스를 유지하지 않는다면 반드시 오브젝트 스토리지를 삭제(해지)하시기 바랍니다.
오브젝트 스토리지 삭제(해지)  https://help.iwinv.kr/manual/read.html?idx=772

 

iwinv 오브젝트 스토리지에는 객체를 공유하기 위한 두 가지 방법이 있습니다.
두 방법 모두 오브젝트 스토리지 리소스에 접근을 제한하고 부여하는 데 사용합니다.

  • 접근제어 (ACL/Access Control Lists)
  • 버킷정책 (Buckets Policy)

 

접근정책(ACL)과 버킷정책(Bucket Policy)


접근정책(ACL) 및 버킷정책(Bucket Policy)은 버킷에 대한 엑세스를 제한하거나 허용할 수 있습니다.
접근정책(ACL)은 개별 객체에 대한 엑세스를 제한하거나 허용할 수도 있지만, 버킷정책(Bucket Policy)만큼 세분화된 엑세스 모드를 제공하지 않습니다.

 

접근정책(ACL)과 버킷정책(Bucket Policy) 선택


사용 권한이 비슷한 오브젝트를 고유한 버킷으로 구성할 수 있다면 버킷정책(Bucket Policy)을 사용하는 것을 권장합니다.
이러한 방식으로 객체를 구성할 수 없는 경우에는 접근정책(ACL)을 이용하셔도 제어가 가능합니다.
그러나 접근정책(ACL)은 버킷정책을 통해 사용할 수 있는 권한보다 세부적인 제어를 제공하지 않습니다.

읽기 및 쓰기 엑세스 권한 이외의 세부 권한을 찾고 있는 경우 접근정책(ACL)을 통해 버킷정책(Bucket Policy)을 선택하여 구성이 가능합니다. 단, 버킷정책은 파일형태로 만들어 버킷에 적용하며 이 파일은 20KB를 초과할 수 없습니다.

 

※ 참고
접근정책(ACL)과 버킷정책(Bucket Policy)은 동시에 사용할 수 있습니다.
이 경우 오브젝트 저장소 리소스에 대한 엑세스를 제한하는 모든 규칙은 엑세스 권한을 부여하는 규칙을 재정의합니다.
예를 들어 접근정책(ACL)이 버킷에 대한 사용자 엑세스를 허용하지만, 버킷정책(Bucket Policy)이 해당 사용자 엑세스를 거부하는 경우 사용자는 해당 버킷에 접근할 수 없습니다.

 

접근정책 (ACL)


접근정책(ACL)은 오브젝트 저장소 리소스에 대한 엑세스를 정의하는 전통적인 방법입니다.
버킷 또는 특정 오브젝트에 접근정책(ACL)을 적용가능하며 “전체공개” 혹은 “공개 안함”의 두 가지 일반화된 엑세스 모드가 있습니다.

 

 

버킷정책(Policy)


 버킷정책은 사용자에게 보다 세부적인 제어를 제공합니다.

※ 주의
버킷 내의 모든 오브젝트에 대한 엑세스는 와일드카드로 정의합니다.
와일드카드 (*) 이러한 리소스는 버킷 리소스 자체를 대상으로 정의될 수 있지만 /* 리소스가 정의된 경우 이 규칙을 사용하여 정책을 생성하면 iwinv 관리콘솔 및 API등에서 버킷에 엑세스할 수 없게 됩니다.

 

버킷정책(Bucket Policy) 활성화


버킷정책를 사용하지 않는다면 버킷정책이 비어있거나 버킷정책이 존재하지 않는다는 메시지를 띄웁니다. 
오류 메세지는 환경에 따라 다를수 있습니다.

An error occurred (NoSuchBucketPolicy) when calling the GetBucketPolicy operation: The bucket policy does not exist

 

아래와 같이 s3 Client Tool을 활용하여 정책을 활성화 할 수 있습니다.
여기서는 Windows 환경에서 s3 browser, Linux 환경에서는 aws_cli를 활용하여 정책을 적용하고 있습니다.

 

# Windows s3 browser
s3 browser 접속 후 해당 버킷 클릭 – 상단 메뉴중 Buckets – Edit Bucket Policy 클릭

 

 

 

# Linux aws_cli 

# aws s3api put-bucket-policy –endpoint https://kr.object.iwinv.kr –profile produser –bucket <BucketName> –policy file://iwinv_policy.json

# aws s3api get-bucket-policy –endpoint https://kr.object.iwinv.kr –profile produser –bucket <BucketName>

# aws s3api delete-bucket-policy –endpoint https://kr.object.iwinv.kr –profile produser –bucket <BucketName>

 

아래는 JSON으로 작성된 버킷 정책의 예시입니다.

iwinv_policy.json

{
  “Version”: “2012-10-17”,
  “Statement”: [{
    “Effect”: “Allow”,
    “Principal”: “*”,
    “Action”: [
      “s3:PutObject”,
      “s3:GetObject”,
      “s3:ListBucket”
    ],
    “Resource”: [
      “arn:aws:s3:::iwinv_bucket/*
    ]
  }]
}

 

본 예시는 와일드카드(*)로 웹상에 모든 사용자에게 iwinv_bucket 에 PutObject, GetObject, ListObject 권한을 주고 있습니다.Effect, Principal, Action 등 버킷정책 필드는 쉼표(,) 로 구분하여 추가할수 있습니다.

  • Effect : 허용(Allow)과 거부(Deny)를 선택
  • Principle : 권한을 적용할 사용자이다. 웹(Everyone)에 공개할 것이라면 *를 입력
  • Action : 오브젝트 스토리지에서 제공하는 Action

    현재 iwinv 오브젝트 스토리지에서 지원하는 접근권한

    s3:AbortMultipartUpload
    s3:CreateBucket     버킷생성
    s3:DeleteBucketPolicy
    s3:DeleteBucket     버킷삭제
    s3:DeleteBucketWebsite
    s3:DeleteObject      버킷내 오브젝트 삭제

    s3:DeleteObjectVersion
    s3:DeleteReplicationConfiguration
    s3:GetAccelerateConfiguration
    s3:GetBucketAcl
    s3:GetBucketCORS
    s3:GetBucketLocation
    s3:GetBucketLogging
    s3:GetBucketNotification
    s3:GetBucketPolicy
    s3:GetBucketRequestPayment
    s3:GetBucketTagging
    s3:GetBucketVersioning
    s3:GetBucketWebsite
    s3:GetLifecycleConfiguration
    s3:GetObjectAcl
    s3:GetObject     버킷에서 오브젝트 검색
    s3:GetObjectTorrent
    s3:GetObjectVersionAcl
    s3:GetObjectVersion
    s3:GetObjectVersionTorrent
    s3:GetReplicationConfiguration
    s3:ListAllMyBuckets
    s3:ListBucketMultipartUploads
    s3:ListBucket     버킷의 내용을 나열
    s3:ListBucketVersions
    s3:ListMultipartUploadParts
    s3:PutAccelerateConfiguration
    s3:PutBucketAcl
    s3:PutBucketCORS
    s3:PutBucketLogging
    s3:PutBucketNotification
    s3:PutBucketPolicy
    s3:PutBucketRequestPayment
    s3:PutBucketTagging
    s3:PutBucketVersioning
    s3:PutBucketWebsite
    s3:PutLifecycleConfiguration
    s3:PutObjectAcl
    s3:PutObject     버킷에 오브젝트 업로드
    s3:PutObjectVersionAcl
    s3:PutReplicationConfiguration
    s3:RestoreObject

 

하위 디렉토리 엑세스


버킷정책 규칙을 사용하여 버킷의 디렉터리 구조에 대한 엑세스 수준을 보다 세부적으로 제어할 수 있습니다.
아래의 예시는 모든 객체에 대해 iwinv_bucket 버킷목록을 볼 수 있는 권한을 부여하고 iwinv_bucket 버킷 내에 iwinv_dir1, iwinv_dir2  디렉토리내 오브젝트들을 가져오지(Get) 못하도록 제한(Deny)하는 접근 권한을 부여하는 방법입니다. 

iwinv_subdir_access.json
 # 접근정책(ACL) -> 전체공개 

 {
  “Version”:  “2012-10-17”,
  “Statement”:  [
    {
      “Effect”:  “Allow”,
      “Principal”: “*”,
      “Action”:  [
        “s3:ListBucket”
      ],
      “Resource”:  [
        “arn:aws:s3:::iwinv_bucket
      ]
    },
    {
      “Effect”:  “Deny”,
      “Principal”: “*”,
      “Action”:  [
        “s3:GetObject”
      ],
      “Resource”:  [
        “arn:aws:s3:::iwinv_bucket/iwinv_dir1/*“,
        “arn:aws:s3:::iwinv_bucket/iwinv_dir2/*
      ]
    }
  ]
}

 

추가로 버킷 접근시 object 리스트 출력되지 않으려면 아래와 같은 형식으로 정의할수 있습니다.
# 접근정책(ACL) -> 공개안함

{
  “Version”: “2012-10-17”,
  “Statement”: [
    {
    “Action”: [
      “s3:GetObject”
    ],
    “Effect”:”Allow”,
    “Principal”: “*”,
    “Resource”: [
      “arn:aws:s3:::iwinv_bucket/*
      ]
    }
  ]
}

 

IP 접근 허용


IP 주소를 기준으로 리소스 및 접근허용 아이피들을 관리할 수 있습니다.
세부적인 내용은 아래 링크를 참고하시기 바랍니다.
https://help.iwinv.kr/manual/read.html?idx=821

 

조합규칙


한 번에 하나의 정책 파일만 사용할 수 있기에 위의 규칙 중 여러가지를 함께 정의하려면 한 번에 하나씩 활성화 하는 대신, 각 규칙이 다음에 항목으로 나열된 하나의 파일로 결합할 필요가 있습니다.
단 버킷정책을 위한 파일은 20KB를 초과할 수 없으니 유의하시기 바랍니다. 

 

iwinv_combine_policy.json

{
  “Version”: “2012-10-17”,
  “Statement”: [{
    “Effect”: “Allow”,
    “Principal”: “*”,
    “Action”: [
      “s3:PutObject”,
      “s3:GetObject”,
      “s3:ListBucket”
    ],
    “Resource”: [
      “arn:aws:s3:::iwinv_bucket/*
    ]
  },
  {
    “Effect”: “Allow”,
    “Principal”: “*”,
    “Action”: [
      “s3:ListBucket”
    ],
    “Resource”: [
      “arn:aws:s3:::*”
    ]
  },
  {
    “Effect”: “Deny”,
    “Principal”: “*”,
    “Action”: [
      “s3:GetObject”
    ],
    “Resource”: [
      “arn:aws:s3:::iwinv_bucket/iwinv_dir1/*“,
      “arn:aws:s3:::iwinv_bucket/iwinv_dir2/*
    ]
  },
  {
    “Effect”: “Deny”,
    “Principal”: “*”,
    “Action”: “s3:*”,
    “Resource”: “arn:aws:s3:::iwinv_bucket/*“,
    “Condition”: {
      “NotIpAddress”: {
        “aws:SourceIp”: “172.16.100.4”
      }
    }
  }]
}

 

 

좀더 세부적인 사용방법은 AWS Bucket Policy 페이지를 참고하시기 바랍니다.
https://docs.aws.amazon.com/ko_kr/AmazonS3/latest/dev/example-bucket-policies.html

AWS Policy Generator
https://awspolicygen.s3.amazonaws.com/policygen.html

 

Tags: , , , , ,

Category: LINUX, WINDOWS, 가상화/클라우드, 서버보안, 서버호스팅&코로케이션

이 경현

About the Author ()

https://www.cloudv.kr https://www.iwinv.kr (주)스마일서브 IaaS 연구소