과제 - Top 10 security best practices for securing data in Amazon S3(AWS Blog 글 정리)
Amazon S3의 데이터 보안을 위한 10가지 보안 모범 사례
1. Block public S3 buckets at the organization level
2. Use bucket policies to verify all access granted is restricted and specific
3. Ensure that any identity-based policies don’t use wildcard actions
4. Enable S3 protection in GuardDuty to detect suspicious activities
5. Use Macie to scan for sensitive data outside of designated areas
6. Encrypt your data in S3
7. Protect data in S3 from accidental deletion using S3 Versioning and S3 Object Lock
8. Enable logging for S3 using CloudTrail and S3 server access logging
9. Backup your data in S3
10. Monitor S3 using Security Hub and CloudWatch Logs
1. 조직 수준에서 공개 S3 버킷 차단(Block public S3 buckets at the organization level)
1. Designate AWS accounts for public S3 use:
Public S3 Buckets을 사용할 수 있는 AWS 계정
Public S3 Buckets을 사용할 수 없는 AWS 계정
2. AWS Organizations내 AWS 계정에 대한 S3 정책 수립
AWS Organizations 콘솔로 이동하여, SCP(서비스 제어 정책)을 생성
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "s3:PutAccountPublicAccessBlock", "Resource": "*", "Condition": { "StringEquals": { "aws:PrincipalArn": [ "arn:aws:iam::PRD_ACCOUNT_ID:root", "arn:aws:iam::DEV_ACCOUNT_ID:root", "arn:aws:iam::STG_ACCOUNT_ID:root" ] } } }, { "Effect": "Deny", "Action": "s3:PutAccountPublicAccessBlock", "Resource": "*" } ] }
AWS Organization, SCP 관련 내용 - 링크
2. 버킷 정책을 사용하여 부여된 모든 액세스가 제한되고 특정한 것임을 확인하기 (Use bucket policies to verify all access granted is restricted and specific)
내용 | 설명 |
1. 특정 주체 지정 | 정책에서 액세스를 허용할 주체 (AWS principals, federated users, service principals, IP addresses, or VPC등)를 지정합니다. |
2. Principal “*” 주의 | Principal " * "과 같은 와일드카드Principal을 허용하는 버킷 정책은 누구나 접근할 수 있는 가능성이 있습니다. |
3. Action “*” 주의 | Action " * "과 같은 와일드카드 Action을 허용하는 버킷 정책은 사용자가 버킷 내에서 모든 작업을 수행할 수 있는 가능성이 있습니다. |
주의사항 강조 | 와일드카드 주체와 와일드카드 액션을 사용할 때 주의가 필요하며, 정책을 작성할 때는 최소한의 권한만을 부여하는 것이 중요합니다. |
추가 정보 | 버킷 정책 사용에 대한 자세한 정보는 관련 문서를 참조하십시오. |
- 장점: S3 버킷 정책을 사용하면 별도의 IAM 역할 및 정책을 관리하지 않고도 버킷 수준에서 직접 접근 제어를 할 수 있습니다.
- 단점: 복잡한 정책을 작성하는 것은 어려울 수 있으며, 정책이 복잡해질수록 오류 가능성도 높아질 수 있습니다.
3. identity-based polices이 와일드 카드 작업을 사용하지 않도록 하기 (Ensure that any identity-based policies don’t use wildcard actions)
내용 | 요약 정리 |
와일드카드 액션 사용 금지 | IAM 사용자 및 역할에 부여되는 정책은 최소한의 권한 원칙을 따라야 합니다. 와일드카드 액션 대신에 구체적인 작업 (예: S3:GetObject 또는 S3:PutObject)을 정의하여 우연한 액세스나 리소스 변경을 방지합니다. |
조건 키 사용 | AWS 전체 및 S3 특정 조건 키를 활용하여 특정 작업에 대한 추가적인 제어를 지정합니다. 예를 들어, 내부 IP 주소를 지정한 조건 키를 사용하여 특정 작업에 대한 액세스를 제어합니다. |
읽기, 쓰기, 삭제 액세스 분리 | 사용자나 서비스에 필요한 액세스만 허용하도록 읽기, 쓰기 및 삭제 액세스를 분리합니다. 일정에 따라 객체를 삭제하는 S3 라이프사이클 정책을 정의하여 삭제 작업을 관리하며, 삭제 작업을 정책에서 제외할 수 있습니다. |
IAM 정책 시뮬레이터 사용 | IAM 정책 시뮬레이터를 활용하여 정책을 테스트하고 검증합니다. 정책의 동작을 시뮬레이션하여 의도한대로 동작하는지 확인할 수 있습니다. |
IAM Access Analyzer 사용 | IAM Access Analyzer를 사용하여 외부에서 S3 리소스에 액세스를 부여하는 정책을 식별하고 검토합니다. 계정 외부에서의 액세스를 식별하여 보안을 강화하고 정책을 설계하는 데 도움을 줍니다. |
Action - WildCard (Best, Worst 예제)
Best
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:PutObject"
],
"Resource": "arn:aws:s3:::example-bucket/*"
}
]
}
Worst
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "s3:*",
"Resource": "*"
}
]
}
조건키 (Best, Worst 예제)
BEST
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::example-bucket/*",
"Condition": {
"IpAddress": {
"aws:SourceIp": "10.10.10.10"
}
}
}
]
}
Worst
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::example-bucket/*",
"Condition": {}
}
]
}
읽기, 쓰기, 삭제 액세스 분리
Best
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "s3:PutObject",
"Resource": "arn:aws:s3:::example-bucket/*"
}
]
}
Worst
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "s3:*",
"Resource": "arn:aws:s3:::example-bucket/*"
}
]
}
4. Amazon GuardDuty에서 S3 보호 활성화 (Enable S3 protection in GuardDuty to detect suspicious activities)
Amazon GuardDuty는 AWS 계정 및 리소스를 모니터링하고 위협을 탐지하는 서비스입니다.
GuardDuty는 다양한 데이터 소스를 사용하여 위협을 탐지합니다.
Amazon GuardDuty를 통한 S3 버킷 보호 기능 출시 (2020년 8월 3일) - 링크
Amazon GuardDuty에서 S3 보호를 활성화하면 다음과 같은 의심스러운 활동을 감지할 수 있습니다.
- 비정상적인 위치에서 S3 버킷에 대한 액세스
- 권한이 없는 사용자가 S3 버킷에 대한 액세스
- S3 버킷의 데이터를 훔치거나 삭제하려는 시도
AWS 계정의 S3 보호 활성화
5. Amazon Macie를 사용하여 지정된 영역 외부의 민감한 데이터를 검색(Use Macie to scan for sensitive data outside of designated areas)
Amazon Macie란?
데이터 보안 및 데이터 프라이버시 서비스로서, 기계 학습(ML) 및 패턴 일치를 활용하여
민감한 데이터를 검색하고 보호합니다.
링크
S3 버킷은 민감한 데이터를 저장하는 데에도 사용됩니다. 민감한 데이터는 비밀번호, 신용카드 번호, 의료 기록과 같은 데이터를 말합니다.
민감한 데이터는 지정된 영역 내부에 저장하는 것이 좋습니다. 지정된 영역은 S3 버킷의 특정 위치를 말합니다.
지정된 영역 내부에 저장된 민감한 데이터는 ACL(액세스 제어 목록)을 사용하여 보호할 수 있습니다.
그러나 때로는 민감한 데이터가 지정된 영역 외부에 저장될 수 있습니다. 예를 들어, 민감한 데이터를 임시로 저장하기 위해 지정된 영역 외부에 저장할 수 있습니다. 또는, 민감한 데이터를 다른 사용자와 공유하기 위해 지정된 영역 외부에 저장할 수 있습니다.
민감한 데이터가 지정된 영역 외부에 저장되면 보안 위험에 노출될 수 있습니다. 권한이 없는 사용자가 민감한 데이터에 액세스할 수 있기 때문입니다.
Amazon Macie는 Amazon S3 데이터를 모니터링하고 민감한 데이터를 식별하는 서비스입니다. Macie는 기계 학습 및 패턴 일치를 사용하여 민감한 데이터를 검색합니다.
How to use Amazon Macie to preview sensitive data in S3 buckets - 링크
6. Encrypt your data in S3
SSE-S3, SSE-KMS, SSE-C
SSE-S3 (AES-256)
SSE-KMS
SSE-C
추가 고민거리
- How to use KMS and IAM to enable independent security controls for encrypted data in S3 - 링크
7~10번은 토요일 주말중으로 정리하기
7. Protect data in S3 from accidental deletion using S3 Versioning and S3 Object Lock
8. Enable logging for S3 using CloudTrail and S3 server access logging
9. Backup your data in S3
10.Monitor S3 using Security Hub and CloudWatch Logs