본문으로 건너뛰기

오브젝트 스토리지 보안조치

S3 Brower 설치 및 기본 사용 가이드

오브젝트 스토리지 사용 시 별도의 보안조치 없이 특정 파일이나 버킷을 공개(public)으로 사용하는 경우가 많습니다.
해당 정책은 접근을 단순화해 손쉽게 공유할 수 있으나 무방비한 보안으로 의도치 않은 데이터 노출이 발생할 수 있습니다.
이 글에서는 오브젝트 스토리지의 접근과 제한을 위한 보안조치에 대한 내용을 기술합니다.

데이터 관리

개인 정보가 포함된 문서, 이미지 혹은 계약서 등의 민감한 정보는 관리에 더욱 유의하여 블록 스토리지와 같은 다른 특성의 스토리지에 저장하거나 업로드 전 암호화(AES256/ZIP)와 같은 작업을 권장 드립니다.

  • 스토리지 특성에 맞는 데이터 저장
  • 민감한 정보가 포함된 데이터 업로드 시 암호화

인증키 관리

오브젝트 스토리지 인증키의 Access KeySecret Key의 유출에 주의하며, Access KeySecret Key를 주기적으로 교체하여 관리하는 것을 추천드립니다.
또한, 생성되어 있으나 미사용 중인 Key는 사용중지 후 사용/삭제로 관리하는 것을 추천드립니다.
임시 URL

정접 웹호스팅 주의

오브젝트 스토리지의 여러 기능 중 하나인 정적 웹사이트 구축 시 index.html과 같은 파일(css, js, 이미지) 등을 업로드해 사용 가능합니다.
이때, 해당 파일 내 내부 API KEY, IP 등이 포함되어 있는지 확인 후 유출에 주의 바랍니다.

Presigned URL 사용

지정한 시간 동안만 접근 가능한 임시 URL을 생성해 공유할 수 있습니다.
임시 URL
설정한 만료시간(60초) 후 Pre-signed 링크가 만료됩니다.

정보

보안을 위해 만료시간은 최소로 설정해 생성하는 것을 추천드립니다.

임시 URL생성

접근정책(ACL)

접근정책(ACL)은 오브젝트 저장소 리소스에 대한 액세스를 정의하는 전통적인 방법입니다.
버킷 또는 특정 오브젝트에 접근정책(ACL)을 적용 가능하며 "전체 공개" 혹은 "공개 안함" 의 두 가지 일반화된 액세스 모드가 있습니다.
이와 관련해 iwinv에서는 콘솔 페이지에서 버킷에 대한 해당 설정을 제공하며 아래의 링크를 통해 설정 가능합니다.
iwinv 콘솔에서 접근정책(ACL) 설정하기
[접근 정책 관리] 창에서 접근정책(ACL)전체 공개공개안함 중에서 설정할 수 있습니다.
접근정책 관리

정보

접근정책(ACL)는 단독으로 사용하면 접근이 모두 허용되거나 차단하는 설정만 사용이 가능한 점이 있습니다.
세부적으로 오브젝트 스토리지를 사용하기 위해서는 버킷정책(Bucket Policy)과 병행하여 사용하는 것을 권장합니다

버킷정책(Bucket Policy)

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

익명 읽기권한 부여

익명 사용자에게 읽기 권한을 부여합니다.

{
"Statement": [
{
"Sid": "AllowPublicRead",
"Effect": "Allow",
"Principal": "*",
"Action": [
"s3:GetObject"
],
"Resource": [
"arn:aws:s3:::iwinv_bucket/*"
]
}
]
}

위의 Bucket Policy는 가장 많이 사용하실 수 있는 iwinv_bucket내의 오브젝트에 대해 불특정 다수의 사용자에게 읽기권한만을 부여합니다.

파일 목록 제한

버킷안에 있는 파일의 이름까지 정확히 알아야 접근할 수 있게 제한합니다.

{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowGetObjectOnly",
"Effect": "Allow",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::iwinv_bucket/*"
},
{
"Sid": "DenyListBucket",
"Effect": "Deny",
"Principal": "*",
"Action": "s3:ListBucket",
"Resource": "arn:aws:s3:::iwinv_bucket"
}
]
}

위의 Bucket Policy익명 읽기권한 부여에서 iwinv_bucket내의 오브젝트에 대해 불특정 다수의 사용자에게 읽기권한만을 부여함과 동시에 해당 버킷의 파일명 까지 정확히 입력해야합니다.

아이피 제한

특정 IP에 원하는 권한만을 설정하거나, 접근을 제한하거나등의 IP단위의 접근 설정이 가능합니다.

{
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "*"
},
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::iwinv_bucket/*",
"Condition": {

}
},
{
"Effect": "Allow",
"Principal": {
"AWS": "*"
},
"Action": [
"s3:PutObject",
"s3:DeleteObject"
],
"Resource": "arn:aws:s3:::iwinv_bucket/*",
"Condition": {
"IpAddress": {
"aws:SourceIp": "192.168.21.13/32"
}
}
}
]
}

위의 Bucket Policy는 버킷 iwinv_bucket에 대해 특정 IP인 192.168.21.13에만 쓰기/삭제 권한을 부여하며, 그 외의 익명 사용자읽기만 가능하게 설정합니다.

Referer 제한

허용된 도메인으로부터의 접근만 허용, Referer 없는 (Direct URL) 요청 차단을 위해 특정 Referer로 제한된 접근을 설정합니다.
해당 설정은 허가받지 않은 익명의 사용자가 임의의 핫링크(오브젝트 스토리지 내의 링크)를 가지고 접속하는 상황을 제한합니다.

{
"Id": "preventHotLinking",
"Statement": [
{
"Sid": "1",
"Effect": "Allow",
"Principal": {
"AWS": "*"
},
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::iwinv_bucket/*",
"Condition": {
"StringLike": {
"aws:Referer": [
"http://yourwebsitename.com/*",
"http://www.yourwebsitename.com/*"
]
}
}
}
]
}

위의 Bucket Policy[iwinv_bucket] 이라는 이름의 버킷의 오브젝트가 허용된 특정 Referer인 "http://yourwebsitename.com/*""http://www.yourwebsitename.com/*" 를 통한 접근일 때만 허용토록 합니다.