AWS 노출 가능 리소스
이 저장소의 목표는 공개적으로 노출될 수 있는 모든 AWS 리소스 목록을 유지 관리하고, 궁극적으로는 신뢰할 수 없는 계정과 공유할 수 있는 리소스 목록도 포함하는 것입니다 (해당 섹션은 아직 개발 중이며 여기에 포함되지 않았습니다).
이 목록에는 다음 개념이 적용됩니다:
- 다른 리소스를 통해 간접적으로 노출될 수 있는 리소스는 포함되지 않습니다. 예를 들어, CloudTrail 로그는 공개된 S3 버킷으로 전송될 수 있지만, 잘못 구성된 것은 S3 버킷이므로 CloudTrail은 공개 가능한 리소스로 나열되지 않습니다.
- 일부 리소스는 공개로 간주되기 위해 여러 항목이 특정 방식으로 구성되어야 할 수 있습니다. 예를 들어, KMS로 암호화된 Secrets Manager 비밀은 Secret에 접근하려면 Secret과 KMS 키 모두 공개되어야 합니다. 이 목록의 목적상, Secret 리소스 정책만 고려합니다. 마찬가지로, Managed ElasticSearch 클러스터의 경우 공개 액세스를 허용하는 리소스 정책과 VPC IP가 아닌 IP가 모두 필요합니다. 저는 리소스 정책만 고려합니다. EC2의 경우, 공개 IP를 가진 EC2를 생성할 수 있지만, 제한된 보안 그룹을 연결했다가 나중에 공개 액세스를 허용하도록 열어둘 수 있습니다. 저는 보안 그룹의 수정이 아닌, 공개 IP를 가진 EC2 생성을 관심 있는 행동으로 봅니다.
로드맵
이 저장소에 최종적으로 다음이 포함되기를 바랍니다:
- 비공개 및 공개 리소스를 생성하기 위한 샘플 CLI 명령
- 이 두 이벤트에 대한 관련 CloudTrail 로그를 제공하여 모니터링 솔루션을 구축하고 테스트할 수 있습니다. 예를 들어, StreamAlert에 대한 CloudTrail 이벤트 샘플은 여기에서 확인할 수 있습니다.
- 리소스가 공개되었을 때의 모습을 보여주는 관련 Describe 호출. 예를 들어, CloudMapper의 테스트 데이터에서 JSON 응답 샘플을 여기에서 확인할 수 있습니다.
리소스 정책을 통해 공개할 수 있는 리소스
ECR Repository
작업:
Lambda
함수 호출을 허용합니다.
작업:
Lambda layer
작업:
Serverless Application Repository
작업:
Backup
문서
작업:
EFS
TODO: 이 항목이 실제로 다른 계정과 공유될 수 있는지 확인해야 합니다. 일부 문서의 표현으로 보아 계정 내의 보안 주체(principal)에게만 공유될 수 있을 것 같습니다.
작업:
Glacier
작업:
S3
S3 버킷은 정책 및 ACL을 통해 공개될 수 있습니다. S3 객체는 ACL을 통해 공개될 수 있습니다. ACL은 버킷 또는 객체 생성 시 설정할 수 있습니다.
작업:
IAM Role
작업:
KMS Keys
작업:
Secrets Manager
작업:
CloudWatch Logs
작업:
EventBridge
계정으로 데이터를 보내는 것만 허용합니다.
작업:
문서
작업:
ElasticSearch
작업:
Glue
작업:
SNS
작업:
SQS
작업:
SES
문서
작업:
공유 API를 통해 공개할 수 있는 리소스
AMI
작업:
FPGA image
작업:
EBS snapshot
작업:
RDS snapshot
작업:
RDS DB Cluster snapshot
작업:
네트워크 액세스를 통해 공개할 수 있는 리소스
API Gateway
관련 리소스 정책이 있어(자세한 내용은 여기 참조) 이것이 여러 카테고리에 속해야 할 수도 있습니다.
작업:
CloudFront
작업:
Redshift
작업:
RDS
작업:
EC2
작업:
Elastic IP
작업:
ECS
작업:
Global Accelerator
작업:
ELB
작업:
Lightsail
작업:
Neptune
작업:
ElasticCache
작업:
EMR
작업: