본문으로 건너뛰기

정책 관리 (ACL, Bucket Policy)

오브젝트 스토리지의 리소스에 접근을 제한하고 부여하는 접근 정책(ACL)버킷 정책(Bucket Policy)을 설정합니다.

경고

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

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

접근정책(ACL)버킷정책(Bucket Policy)은 버킷에 대한 엑세스를 제한하거나 허용할 수 있습니다.
접근정책(ACL)은 개별 객체에 대한 엑세스를 제한하거나 허용할 수도 있지만, 버킷정책(Bucket Policy)만큼 세분화된 엑세스 모드를 제공하지 않습니다.
사용 권한이 비슷한 오브젝트를 고유한 버킷으로 구성할 수 있다면 버킷정책(Bucket Policy)을 사용하는 것을 권장합니다.
읽기 및 쓰기 엑세스 권한 이외의 세부 권한을 찾고 있는 경우 접근정책(ACL)을 통해 버킷정책(Bucket Policy)을 선택하여 구성이 가능합니다.
단, 버킷정책(Bucket Policy)은 파일형태로 만들어 버킷에 적용하며 이 파일은 20KB를 초과할 수 없습니다.

정보

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

접근정책(ACL)

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

설정 방법

1. 접근정책(ACL)을 설정할 버킷 설정

오브젝트 스토리지 탭에 접근정책(ACL)을 설정할 버킷의 설정을 클릭합니다.
버킷 선택

2. 접근정책(ACL) 클릭

버킷의 상세정보 창에 [접근정책 설정] 버튼을 클릭합니다.
접근정책 설정 클릭

3. 접근정책(ACL) 설정

[접근 정책 관리] 창에서 접근정책(ACL)전체공개공개안함중에서 설정 할 수있습니다.
접근정책 관리

버킷정책(Bucket Policy)

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

경고

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

버킷정책(Bucket Policy) 활성화

버킷정책(Bucket Policy)을 사용하지 않는다면 버킷정책(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 Buckt Policy] 클릭
버킷정책 수정1
버킷정책 수정2

# 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": "20xx-xx-xx",
"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

하위 디렉토리 엑세스

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

iwinv_subdir_access.json

 {
"Version": "20xx-xx-xx",
"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": "20xx-xx-xx",
"Statement": [
{
"Action": [
"s3:GetObject"
],
"Effect":"Allow",
"Principal": "*",
"Resource": [
"arn:aws:s3:::iwinv_bucket/*"
]
}
]
}

조합규칙

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

{
"Version": "20xx-xx-xx",
"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"
}
}
}]
}