안녕하세요!
S3 사용하시다보면 퍼블릭 액세스 Block이 왜 기본 설정일까 하는 생각이 들 수가 있습니다.
테스트에서야 보안에 민감하게 세팅하지 않아도 된다지만 왜 S3 보안도 신경써야 할까요?
왜냐하면 S3를 통해서 민감 정보가 유출될 우려가 있고, 혹은 악의적인 유저가 악용시 다운로드에 의해서
비용이 대량으로 발생할 수 있기 때문입니다.
- 조직 수준에서의 공개 S3 버킷 차단
- 최소 권한 액세스 구현
- 리소스에 특정 권한만을 설정하고, 정책 등의 세팅을 확인합니다.
와일드 카드(*)를 사용하는 버킷은 누구나 액세스 가능합니다.
참조 링크 - 버킷 정책 사용 : https://docs.aws.amazon.com/AmazonS3/latest/userguide/bucket-policies.html
- 모든 자격 증명 기반 정책이 와일드 카드를 사용하지 않는지 확인합니다.
- 가급적이면 리소스에 대한 부주의한 액세스를 방지하기 위해서 IAM 사용자 및 역할에 할당된 정책을
S3:*가 아니라 S3:GetObject / S3: PutObject와 같은 작업을 특정하거나 혹은
S3 특정 작업에 대한 IP를 지정할 수 있습니다.
- 예: IpAddress: { aws:SourceIP: “10.10.10.10”}
또한 읽기, 쓰기, 삭제 액세스를 분할을 고려하여,
S3에 데이터를 생성하고 쓰지만 객체를 읽거나 삭제할 필요가 없는 사용자 / 서비스에 대해서 쓰기 액세스만 허용하도록 합니다.
- S3의 데이터 암호화
클라이언트 측 및 서버측 옵션을 포함하여 S3 데이터 암호화를 가능케 하는 옵션 4가지가 있습니다.
서버측 암호화는 AWS 데이터 센터의 디스크에 데이터를 쓸 때 객체 수준의 데이터 암호화가 가능하고,
사용자가 액세스시 암호를 해독합니다.
- SSE-S3 : 관리형 암호화 키를 이용한 서버측 암호화
- SSE-KMS : AWS KMS에 저장된 고객 마스터 키를 사용한 서버측 암호화
- SSE-C :고객 제공키를 이용한 서버측 암호화
- 클라이언트 측 암호화 : AWS KMS에 저장된 CMK를 사용하거나 애플리케이션 내에 저장한 마스터키를 사용할 수 있음.
- S3 버전 관리 및 객체 잠금을 통해서 실수로 삭제되지 않도록 S3 데이터 보호
- S3 버전 관리를 통해서 동일 버킷에서 여러 버전의 객체를 보관하여 실수로 삭제 혹은 덮어쓸 경우 데이터를 복구할 수 있습니다.
(* 다만, 해당 기능에 대한 관련 비용은 발생할 수 있습니다.)
- CloudTrail 및 액세스 로깅을 통한 S3 로깅 활성화
- s3 콘솔 호출 및 s3 api call, api 호출을 포함한 데이터 캡처가 가능합니다.
5번의 s3 버전 관리와 마찬가지로, 대량의 데이터의 활동적인 S3 버킷의 경우 해당 내용을 활성화할 경우,
CloudTrail 비용이 발생할 수 있기 때문에 보안이 필요한 중요한 데이터가 있는 s3 버킷에만 추가 로깅을 활성화 하도록 합니다.
- S3에서 데이터 백업
교차 리전 복제(CRR)를 사용하면 원격 AWS 리전간 데이터를 복제하여 필요에 따라 다른 버킷간 객체를 비동기식으로 자동 복사할 수 있습니다. 중요한 백업데이터 혹은 민감 데이터를 저장하는 경우 CRR을 고려할 수 있습니다.
- Security Hub 및 CloudWatch Logs를 통한 S3 모니터링
Security Hub를 통해서 보안 상태를 확인하고 보안 업계 표준 및 모범 데이터를 확인하는데 도움이 됩니다.
AWS 기초 보안 모범 사례 표준(AWS Foundational Security Best Practices standard)는 AWS 계정 및 서비스, 지원되는 타사 파트너 제품의 데이터를 수집하고 분석하여 다음과 같은 내용들을 탐지하는 기능을 합니다.
IAM.1 : IAM 정책은 전체 "*" 관리 권한을 허용해서는 안 됩니다.
S3.1 : 퍼블릭 액세스 차단 설정이 활성화되어야 합니다.
S3.2 : S3 버킷이 퍼블릭 읽기 액세스를 금지 해야 합니다.
S3.3 : S3 버킷이 퍼블릭 쓰기 액세스를 금지해야 합니다.
S3.4 : S3 버킷에 서버 측 암호화가 활성화 되어 있어야 합니다.
S3.5 : S3 버킷은 보안 소켓 계층을 사용하도록 요청해야 합니다 .
S3.6 : 버킷 정책에서 다른 AWS 계정에 부여된 Amazon S3 권한은 제한되어야 합니다.
S3.8: S3 퍼블릭 액세스 차단 설정은 버킷 수준에서 활성화되어야 합니다.
자세한 내용은 다음의 링크를 통해서 확인 가능합니다.
Amazon S3에 대한 보안 모범 사례
: https://docs.aws.amazon.com/AmazonS3/latest/userguide/security-best-practices.html
Amazon S3의 데이터 보안을 위한 상위 10가지 보안 모범 사례
: https://aws.amazon.com/ko/blogs/security/top-10-security-best-practices-for-securing-data-in-amazon-s3/
버킷 정책 : https://docs.aws.amazon.com/AmazonS3/latest/userguide/bucket-policies.html (
ACL을 통한 액세스 관리 : https://docs.aws.amazon.com/AmazonS3/latest/userguide/acls.html
'IT > AWS' 카테고리의 다른 글
AWS EBS 스토리지 비용이 많이 발생하는 경우 팁 (0) | 2022.12.28 |
---|---|
Redshift CPU가 높을 경우 트러블 슈팅 방법 (0) | 2022.12.28 |
AWS 보안 그룹 인바운드룰 sdk / awscli를 통해 추가하기 (0) | 2022.07.15 |
EC2 CPU Steal (0) | 2022.02.25 |
Lambda vs Fargate (0) | 2022.02.15 |