오브젝트스토리지

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

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


 

※ 주의

오브젝트 스토리지 서비스는 계정이 활성화되어있으면 무료정책 이외에 발생하는 트래픽, 디스크사용량 등은 요금으로 청구됩니다.

더이상 서비스를 유지하지 않는다면 반드시 오브젝트 스토리지를 삭제(해지)하시기 바랍니다.

오브젝트 스토리지 삭제(해지)  https://help.iwinv.kr/manual/read.html?idx=772

 

 

iwinv 오브젝트 스토리지에는 객체를 공유하기 위한 두 가지 방법이 있습니다.

두 방법 모두 오브젝트 스토리지 리소스에 접근을 제한하고 부여하는 데 사용합니다.

 

 

접근정책(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 --policy file://iwinv_policy.json

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

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

 

 

아래는 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 등 버킷정책 필드는 쉼표(,) 로 구분하여 추가할수 있습니다.

 

하위 디렉토리 엑세스


버킷정책 규칙을 사용하여 버킷의 디렉터리 구조에 대한 엑세스 수준을 보다 세부적으로 제어할 수 있습니다.
 
아래의 예시는 모든 객체에 대해 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