S3 보안
User based
- IAM policies: 어떤 API 호출을 허용할 지에 대한 권한을 부여한다.
Resource Based
- Bucket Policies: S3 콘솔에서 정할 수 있는 버킷 정책으로, 교차 계정의 접근 허용 설정도 가능하다.
- Object Access Control List (ACL)
- Bucket Access Control List (ACL)
만약 유저의 IAM permissions가 S3 object에 대한 접근을 허용하거나 recource policy가 허용한다면 IAM 정책은 S3 object에 접근할 수 있는 것으로 간주한다.
- 이 경우, 명백한(explicit) 거부(DENY)는 없다.
S3 bucket policies
- S3 버킷 정책이 적용 가능한 예
- 퍼블릭 엑세스 허용
- 객체가 업로드 될 때 암호화 하도록 만들기
- 다른 계정의 접근 허용(교차 계정)
그 밖의 다른 S3 보안
- 네트워킹
- VPC Endpoints 지원: 인터넷 연결이 허용 되지 않은 인스턴스(private vpc)를 위한 지원
- 로깅과 감사(audit)
- S3 access 로그는 다른 S3 버킷에 저장 된다.
- API 호출은 AWS CloudTrail로 로그 기록을 남길 수 있다.
- 유저 보안
- MFA 삭제: 버저닝 되고 있는 버킷의 객체를 삭제할 때는 MFA가 필요하도록 설정할 수 있다.
- Pre-signed URL
- AWS의 인증서로 서명된 URL로, 한정된 시간 동안만 유효하다.
- 예를 들어, 로그인한 유저가 프리미엄 비디오 서비스를 구매한 경우 pre-signed URL이 필요하다.
실습
아래 정책은 S3 bucket > Permissions 탭 > Edit bucket Policy > Policy Generator에서 만들었다.
아래와 같이 정책을 생성한 후 만들어진 json을 Edit bucket Policy에다 붙여 넣으면 된다.
- Policy 1
- condition을 위와 같이 추가하면 'x-amz-server-side-encryption' header가 Null이면 Deny를 하고 어떤 종류의 암호화도 요구하지 않을 것이라는 뜻이다.
- Policy 2
- condition을 위와 같이 추가하면 파일이 업로드 되었고 헤더가 위와 같은 경우 헤더의 value가 AES256와 같지 않은 경우(SSE-S3) 거부한다는 뜻이다.
S3 Websites
- S3는 static websites를 호스팅 할 수 있으며 이를 www로 접근 가능하도록 만들 수 있다.
먼저 아래와 같이 Static website hosting 설정을 변경해야 한다.
그리고 미리 정한 index, error document를 설정한다.
그러면 아래와 같이 website hosting이 완료 된다.
그런데 그 전에 public access를 허용해 놓아야 한다.
그 다음, 아래와 같이 Resource로 GetObject action을 하는 것을 허용하는 정책 역시 추가해야 한다.