정책 관리 (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] 클릭
# 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"
}
}
}]
}