[오브젝트 스토리지 활용] Bucket Policy로 IP 접근 제어하기
해당 메뉴얼은 Bucket Policy를 설정하여 버킷에 대해 특정 ip의 접근을 허용 · 제한하는 방법을 설명합니다.
특정 IP만 접근 허용하기
버킷에 대한 접근정책을 전체공개 (Public) 으로 설정 후 , Bucket Policy를 설정하여 특정 ip만 해당 버킷에 접근할 수 있도록 할 수 있습니다.
1. 버킷 생성 ( 접근정책 - 전체공개)
웹콘솔에서 해당 버킷의 오브젝트 목록 확인
2. 링크를 통해 접근 확인
웹콘솔의 상세정보 메뉴를 통해 해당 오브젝트의 링크를 확인 후 접속합니다.
이미지가 정상적으로 호출됩니다. ( 모든 ip에서 접근 가능 )
3. Bucket Policy 설정
해당 버킷에 특정 ip 주소만 접근을 허용하기 위해 Bucket Policy를 설정합니다.
# Windows s3 browser
s3 browser 접속
s3 browser 접속 후 해당 버킷 클릭 - 상단 메뉴 중 Buckets - Edit bucket policy 클릭
아래 링크를 참고하여 bucket policy 작성 ( Limiting Access to Specific IP Addresses 부분 참고 )
참고 링크 : https://docs.amazonaws.cn/en_us/AmazonS3/latest/dev/example-bucket-policies.html
{ "Version": "2012-10-17", "Id": "S3PolicyId1", "Statement": [ { "Sid": "IPAllow", "Effect": "Deny", "Principal": "*", "Action": "s3:*", "Resource": [ "arn:aws:s3:::<버킷명>", "arn:aws:s3:::<버킷명>/*" ], "Condition": { "NotIpAddress": { "aws:SourceIp": "<허용 IP>" } } } ] } |
S3 browser Bucket Policy 입력 예시
# iwin_test 자리에 해당 버킷명 입력
# 115.68.0.1 자리에 접근을 허용할 IP 입력 ( 네트워크 대역으로 입력 가능 [ex] 115.68.0.0/16 )
## 입력한 ip를 제외한 모든 ip에서 전체권한이 deny 됨으로 ip 입력시 신중하게 입력합니다.
# Linux aws_cli
policy.json 파일을 생성
{ "Version": "2012-10-17", "Id": "S3PolicyId1", "Statement": [ { "Sid": "IPAllow", "Effect": "Deny", "Principal": "*", "Action": "s3:*", "Resource": [ "arn:aws:s3:::<버킷명>", "arn:aws:s3:::<버킷명>/*" ], "Condition": { "NotIpAddress": { "aws:SourceIp": "<허용 IP>" } } } ] } |
put-bucket-policy 를 통해 Bucket Policy 설정
aws s3api put-bucket-policy --endpoint EndPoint --profile produser --bucket Bucket_Name --policy file://policy.json ex) aws s3api put-bucket-policy --endpoint https://kr.object.iwinv.kr --profile produser --bucket iwinv_test --policy file://policy.json |
get-bucket-policy 명령어로 Bucket Policy 확인
aws s3api get-bucket-policy --endpoint EndPoint --profile produser --bucket Bucket_Name ex) aws s3api get-bucket-policy --endpoint https://kr.object.iwinv.kr --profile produser --bucket iwinv_test
output { \"Deny\",\n \"Principal\": \"*\",\n \"Action\": \"s3:*\",\n \"Resource\": [\n \"arn:aws:s3:::iwinv_test\",\n \"arn:aws:s3:::iwinv_test/*\"\n ],\n \"Condition\": {\n \"NotIpAddress\": {\n \"aws:SourceIp\": \"115.68.0.1\"\n }\n }\n }\n ]\n}\n" |
delete-bucket-policy 명령어로 Bucket Policy 삭제 가능
aws s3api delete-bucket-policy --endpoint EndPoint --profile produser --bucket Bucket_Name ex) aws s3api delete-bucket-policy --endpoint https://kr.object.iwinv.kr --profile produser --bucket iwinv_test |
4. 접근 확인
bucket policy에서 허용한 ip로 위에서 확인했던 링크 접속시 ( 정상적으로 접근 가능 )
반면 , 허용ip 이외 ip로 링크 접속시 AccessDenied 되어있음을 확인 할 수 있습니다.
s3brower 사용시 해당 ip가 아닌곳에서 버킷 조회시 해당 문구 발생하며 조회 불가
특정 IP 접근 제한하기
버킷에 대한 접근정책을 전체공개 (Public) 으로 설정 후 , Bucket Policy를 설정하여 특정 ip의 버킷 접근을 차단합니다.
1. 버킷 생성 ( 접근정책 - 전체공개)
웹콘솔에서 해당 버킷의 오브젝트 목록 확인
2. 링크를 통해 접근 확인
웹콘솔의 상세정보 메뉴를 통해 해당 오브젝트의 링크를 확인 후 접속합니다.
이미지가 정상적으로 호출됩니다. ( 모든 ip에서 접근 가능 )
3. Bucket Policy 설정
해당 버킷에 특정 ip 주소의 접근을 차단하기 위해 Bucket Policy를 설정합니다.
# Windows s3 browser
s3 browser 접속
s3 browser 접속 후 해당 버킷 클릭 - 상단 메뉴 중 Buckets - Edit Bucket Policy 클릭
아래 링크를 참고하여 bucket policy 작성 ( Limiting Access to Specific IP Addresses 부분 참고 )
참고 링크 : https://docs.amazonaws.cn/en_us/AmazonS3/latest/dev/example-bucket-policies.html
{ "Version": "2012-10-17", "Id": "S3PolicyId1", "Statement": [ { "Sid": "IPAllow", "Effect": "Deny", "Principal": "*", "Action": "s3:*", "Resource": [ "arn:aws:s3:::<버킷명>", "arn:aws:s3:::<버킷명>/*" ], "Condition": { "IpAddress": { "aws:SourceIp": "<차단 IP>" } } } ] } |
S3 browser Buckey Policy 입력 예시
# iwin_test 자리에 해당 버킷명 입력
# 115.6.0.1 자리에 접근을 차단할 IP 입력 ( 네트워크 대역으로 입력 가능 [ex] 115.68.0.0/16 )
## 입력한 ip에서 전체권한이 deny됨으로 ip 입력시 신중하게 입력합니다.
# Linux aws_cli
policy.json 파일을 생성
{ "Version": "2012-10-17", "Id": "S3PolicyId1", "Statement": [ { "Sid": "IPAllow", "Effect": "Deny", "Principal": "*", "Action": "s3:*", "Resource": [ "arn:aws:s3:::<버킷명>", "arn:aws:s3:::<버킷명>/*" ], "Condition": { "IpAddress": { "aws:SourceIp": "<차단 IP>" } } } ] } |
put-bucket-policy 를 통해 Bucket Policy 설정
aws s3api put-bucket-policy --endpoint EndPoint --profile produser --bucket Bucket_Name --policy file://policy.json ex) aws s3api put-bucket-policy --endpoint https://kr.object.iwinv.kr --profile produser --bucket iwinv_test --policy file://policy.json |
get-bucket-policy 명령어로 Bucket Policy 확인
aws s3api get-bucket-policy --endpoint EndPoint --profile produser --bucket Bucket_Name ex) aws s3api get-bucket-policy --endpoint https://kr.object.iwinv.kr --profile produser --bucket iwinv_test
output { \"Deny\",\n \"Principal\": \"*\",\n \"Action\": \"s3:*\",\n \"Resource\": [\n \"arn:aws:s3:::iwinv_test\",\n \"arn:aws:s3:::iwinv_test/*\"\n ],\n \"Condition\": {\n \"IpAddress\": {\n \"aws:SourceIp\": \"115.68.0.1\"\n }\n }\n }\n ]\n}\n" |
delete-bucket-policy 명령어로 Bucket Policy 삭제 가능
aws s3api delete-bucket-policy --endpoint EndPoint --profile produser --bucket Bucket_Name ex) aws s3api delete-bucket-policy --endpoint https://kr.object.iwinv.kr --profile produser --bucket iwinv_test |
4. 접근 확인
bucket policy에서 차단한 ip로 위에서 확인했던 링크 접속시 ( AccessDenied )
반면 , 차단한 ip 이외 ip로 링크 접속시 ( 정상적으로 접근 가능 )