오브젝트 스토리지 접근정책(ACL) 및 버킷정책(Bucket Policy)
오브젝트 스토리지 접근정책(ACL) 및 버킷정책(Bucket Policy)
※ 주의 |
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)
접근정책(ACL)은 오브젝트 저장소 리소스에 대한 엑세스를 정의하는 전통적인 방법입니다.
버킷 또는 특정 오브젝트에 접근정책(ACL)을 적용가능하며 “전체공개” 혹은 “공개 안함”의 두 가지 일반화된 엑세스 모드가 있습니다.
버킷정책(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 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
Category: LINUX, WINDOWS, 가상화/클라우드, 서버보안, 서버호스팅&코로케이션
