AWS 可公开暴露的资源
本仓库的目标是维护一份所有可以公开暴露的 AWS 资源列表,并最终收录那些可以与不受信任的账户共享的资源(该部分仍在开发中,尚未包含在此处)。
以下概念适用于本列表:
- 通过其他资源间接暴露的资源不在收录范围内。例如,CloudTrail 日志可以被发送到一个公开的 S3 存储桶,但这是 S3 存储桶配置错误导致的,因此 CloudTrail 不会被视为可公开的资源。
- 某些资源可能需要同时配置多个条件才能被视为公开。例如,一个用 KMS 加密的 Secrets Manager 密钥,需要同时公开密钥策略和 KMS 密钥策略才能访问该密钥。在此列表中,我只考虑密钥资源策略。类似地,对于托管型 ElasticSearch 集群,需要资源策略允许公开访问,并且具有非 VPC IP。我只考虑资源策略。对于 EC2,你可以创建一个带有公有 IP 的 EC2 实例,但为其关联一个受限的安全组,而该安全组稍后可能被打开以允许公开访问。我将创建带有公有 IP 的 EC2 实例视为关键操作,而不是修改安全组。
路线图
我希望这个仓库最终包含以下内容:
- 创建私有和公有资源的示例 CLI 命令
- 这两个事件对应的 CloudTrail 日志样本,以便你构建和测试监控方案。例如,你可以在此处查看 StreamAlert 的示例 CloudTrail 事件
- 对这些资源的相关 Describe 调用,展示资源公开时的表现形式。例如,你可以在 CloudMapper 的测试数据此处查看示例 JSON 响应。
可通过资源策略公开的资源
ECR 仓库
操作:
Lambda
允许调用函数
操作:
Lambda 层
操作:
Serverless Application Repository
操作:
Backup
文档
操作:
EFS
TODO: 需要确认是否真的可以与其他账户共享。某些文档的措辞让我认为这可能只能与账户内的主体共享。
操作:
Glacier
操作:
S3
S3 存储桶可以通过策略和 ACL 公开。S3 对象可以通过 ACL 公开。ACL 可以在创建存储桶或对象时设置。
操作:
IAM 角色
操作:
KMS 密钥
操作:
Secrets Manager
操作:
CloudWatch Logs
操作:
EventBridge
仅允许向账户内发送数据
操作:
文档
操作:
ElasticSearch
操作:
Glue
操作:
SNS
操作:
SQS
操作:
SES
文档
操作:
可通过共享 API 公开的资源
AMI
操作:
FPGA 映像
操作:
EBS 快照
操作:
RDS 快照
操作:
RDS 数据库集群快照
操作:
可通过网络访问公开的资源
API Gateway
存在关联的资源策略(参见此处),这可能使得该资源属于多个类别?
操作:
CloudFront
操作:
Redshift
操作:
RDS
操作:
EC2
操作:
弹性 IP
操作:
ECS
操作:
Global Accelerator
操作:
ELB
操作:
Lightsail
操作:
Neptune
操作:
ElastiCache
操作:
EMR
操作: