IT/Infra&Cloud

[aws] S3 Security — 2. Create S3 Bucket Policy

Hayley Shim 2023. 10. 29. 00:46

안녕하세요. 최근 CloudNet@ AWS Security Study를 진행하며 해당 내용을 이해하고 공유하기 위해 작성한 글입니다. 해당 내용은 ‘쉽게 적용하는 AWS 보안 레시피’ 책과 AWS Docs 내용을 기반으로 했습니다.

[aws] S3 Security — 1. S3 접근 제어 목록 생성편 다음으로 [aws] S3 Security — 2. S3 버킷 정책 생성에 대해 알아봅시다.

2. S3 버킷 정책 생성

  • 가능하면 ACL 대신 버킷 정책이나 IAM 정책을 사용하는 것이 좋습니다.

사전준비

  1. 동작 확인을 위한 S3 버킷 생성 및 이미지 파일 업로드
# S3 버킷 Suffix (접미사) 변수 지정
# S3suffix=<자신의 닉네임>
export S3suffix=hayley
echo $S3suffix# S3 버킷 생성
#aws s3 mb s3://버킷(유일한 이름) --region ap-northeast-2
aws s3 mb s3://cass-s3bucket-$S3suffix --region ap-northeast-2# 제임스웹 우주망원경이 찍은 사진 하나 다운로드
curl -s https://www.nasa.gov/sites/default/files/thumbnails/image/main_image_star-forming_region_carina_nircam_final-5mb.jpg -o jameswebb.jpg# 관리자 프로필로 이미지를 업로드하고, public-read ACL 적용
aws s3 cp jameswebb.jpg s3://cass-s3bucket-$S3suffix/jameswebb.jpg# S3 버킷 조회
aws s3 ls s3://cass-s3bucket-$S3suffix

2. 버킷 URL 접속 시도하여 차단 확인

# 버킷 URL 접속 시도하여 차단 확인 
curl -s https://cass-s3bucket-$S3suffix.s3.$AWS_REGION.amazonaws.com

3. IAM 사용자 준비 : awssecadmin(관리자), testuser(권한없음, CLI 가능)

2.1 콘솔에서 버킷 정책 적용

  1. S3 → 버킷 → 권한 → 버킷 정책 편집 ⇒ 오른쪽 상단에 정책 생성기 클릭

버킷 정책 생성

  • Resource 에 자신의 버킷 ARN 과 Condition에 EpochTime 설정
 

버킷 정책 적용

2. 버킷 URL 접속 확인 및 객체 다운로드 시도

# 버킷 URL 접속 확인
curl -s https://cass-s3bucket-$S3suffix.s3.$AWS_REGION.amazonaws.com

**# 객체 다운로드 시도
curl -v https://cass-s3bucket-$S3suffix.s3.$AWS_REGION.amazonaws.com/jameswebb.jpg -o jameswebb2.jpg

다운로드 실패

3. S3 → 버킷 → 권한 → 버킷 정책 편집 : 객체(파일)을 보기 위해서 Get Object로 Action을 변경하고, 특히 객체에 접근하는 동작 설정은 prefix(/)를 추가

 

4. 버킷 URL 접속 확인 및 객체 다운로드 시도

# 버킷 URL 접속 확인 **⇒ 어떻게 되나요?**
curl -s https://cass-s3bucket-$S3suffix.s3.$AWS_REGION.amazonaws.com

**# 객체 다운로드 시도 ⇒ 어떻게 되나요?**
curl -v https://cass-s3bucket-$S3suffix.s3.$AWS_REGION.amazonaws.com/jameswebb.jpg -o jameswebb2.jpg

# 객체 직접 링크를 웹 브라우저에서 접속 확인
echo -e "S3 URL = https://cass-s3bucket-$S3suffix.s3.$AWS_REGION.amazonaws.com/jameswebb.jpg"S3 URL = https://cass-s3bucket-hayley.s3..amazonaws.com/jameswebb.jpg

객체 확인 가능

5. CLI 실습을 위해 버킷 정책 삭제

2.2 CLI에서 버킷 정책 적용

  1. 정책 파일 생성 : testuser 사용자 계정으로 버킷 내용 나열
 

2. CLI로 정책 추가

# CLI로 정책을 추가  
aws s3api put-bucket-policy --bucket cass-s3bucket-$S3suffix --policy file://bucket-policy-allow-test-user.json --profile awssecadmin

3. 테스트 : testuser 사용자 계정으로 버킷 내용을 나열할 수 있는지 확인

# testuser 사용자 계정으로 버킷 내용을 나열 확인 
aws s3 ls cass-s3bucket-$S3suffix --profile testuser2022-08-14 23:56:44    5310371 jameswebb.jpg# testuser 사용자 계정으로 이미지 파일(객체) 다운로드(읽기) 
aws s3 cp s3://cass-s3bucket-$S3suffix/jameswebb.jpg jameswebb3.jpg --profile testuserfatal error: An error occurred (403) when calling the HeadObject operation: Forbidden# awssecadmin 사용자 계정으로 버킷 내용을 나열 확인 
aws s3 ls cass-s3bucket-$S3suffix --profile awssecadmin2022-08-14 23:56:44    5310371 jameswebb.jpg# awssecadmin 사용자 계정으로 이미지 파일(객체) 다운로드(읽기) 
aws s3 cp s3://cass-s3bucket-$S3suffix/jameswebb.jpg jameswebb3.jpg --profile awssecadmindownload: s3://cass-s3bucket-hayley/jameswebb.jpg to ./jameswebb3.jpg

4. 다음 실습을 위해 버킷 삭제

# 실습에 사용한 S3 버킷 삭제 
aws s3 rm s3://cass-s3bucket-$S3suffix --recursive delete: s3://cass-s3bucket-hayley/jameswebb.jpgaws s3 rb s3://cass-s3bucket-$S3suffix
remove_bucket: cass-s3bucket-hayley

 

 

blog migration project

written in 2022.8.15

https://medium.com/techblog-hayleyshim/aws-s3-security-s3-%EB%B2%84%ED%82%B7-%EC%A0%95%EC%B1%85-%EC%83%9D%EC%84%B1-12fb77985da