CloudFront 서비스를 구축하기 위해 S3 저장소를 원본을 이용하기로 하였다. 압축파일, 이미지과 같은 컨텐츠용만 서비스 하기 때문에, 버킷정책을 이용하여 필요한 확장자만 업로드할 수 있도록 세팅한다. 보안적으로는 화이트리스트 기반의 업로드 제약조건 세팅이며, 어플리케이션 (Java, Python, .Net ) 에서 사용자에게 오픈 되어있는 확장자를 제약할 수 있다. |
S3 버킷 정책 세팅
특정 확장자만 접근할 수 있도록 허용한다. ( 물론 CloudFront 등 다른 정책도 포함되어 있지만 같이 기술하지 않는다 )
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "PutObjectDenyPolicy",
"Effect": "Deny",
"Principal": "*",
"Action": "s3:PutObject",
"NotResource": [
"arn:aws:s3:::<버킷이름>/*.zip",
"arn:aws:s3:::<버킷이름>/*.jpg",
"arn:aws:s3:::<버킷이름>/*.gif",
"arn:aws:s3:::<버킷이름>/*.png"
]
}
]
}
업로드 테스트
간단한 파이썬 코드로 테스트를 해본다.
html은 허용한 확장자가 아니기 때문에, 에러가 발생한다.
fileName = 'test.html'
try:
res = s3.upload_file(fileName, bucket, fileName)
print('정상 업로드')
except Exception as e:
print(e)
Result : Failed to upload test.html to 버킷명/test.html: An error occurred (AccessDenied) when calling the PutObject operation: Access Denied |
jpg는 허용한 확장자가 이기 때문에, 정상 업로드 된다.
fileName = 'test.jpg'
try:
res = s3.upload_file(fileName, bucket, fileName)
print('정상 업로드')
except Exception as e:
print(e)
Result : 정상 업로드 |
'AWS Infra' 카테고리의 다른 글
[ Python ] Python을 이용한 ElastiCache Redis Hash Data Export & Import (0) | 2023.02.28 |
---|---|
[ AWS ] Python boto3를 이용하여 값 CPUCreditBalance 구하기 (0) | 2023.02.02 |
[ AWS ] Python boto3를 이용하여 EC2 CPU 사용율 구하기 (0) | 2023.02.02 |
[ AWS ] Python Boto3를 이용한 CloudFront Invalidation (무효화) (0) | 2023.01.13 |
[ AWS ] Python boto3를 이용한 S3 파일 업로드 / 다운로드 (0) | 2022.12.28 |
[ AWS ] Amazon Linux nginx Install (0) | 2022.10.11 |
[ AWS ] boto3를 이용한 보안그룹 소스IP 체크 (0) | 2022.07.11 |
[ AWS ] RDS mysql Slow Query Monitoring ( Cloudwatch ) (0) | 2022.06.29 |