remediating-s3-bucket-misconfiguration
本技能提供识别和修复 Amazon S3 存储桶错误配置(这些错误配置会将敏感数据暴露给未授权访问)的分步操作流程。涵盖在账户和存储桶级别启用 S3 阻止公开访问(Block Public Access)、审计存储桶策略和 ACL、强制加密、配置访问日志记录,以及使用 AWS Config 和 Lambda 部署自动化修复措施。
Best use case
remediating-s3-bucket-misconfiguration is best used when you need a repeatable AI agent workflow instead of a one-off prompt.
本技能提供识别和修复 Amazon S3 存储桶错误配置(这些错误配置会将敏感数据暴露给未授权访问)的分步操作流程。涵盖在账户和存储桶级别启用 S3 阻止公开访问(Block Public Access)、审计存储桶策略和 ACL、强制加密、配置访问日志记录,以及使用 AWS Config 和 Lambda 部署自动化修复措施。
Teams using remediating-s3-bucket-misconfiguration should expect a more consistent output, faster repeated execution, less prompt rewriting.
When to use this skill
- You want a reusable workflow that can be run more than once with consistent structure.
When not to use this skill
- You only need a quick one-off answer and do not need a reusable workflow.
- You cannot install or maintain the underlying files, dependencies, or repository context.
Installation
Claude Code / Cursor / Codex
Manual Installation
- Download SKILL.md from GitHub
- Place it in
.claude/skills/remediating-s3-bucket-misconfiguration/SKILL.mdinside your project - Restart your AI agent — it will auto-discover the skill
How remediating-s3-bucket-misconfiguration Compares
| Feature / Agent | remediating-s3-bucket-misconfiguration | Standard Approach |
|---|---|---|
| Platform Support | Not specified | Limited / Varies |
| Context Awareness | High | Baseline |
| Installation Complexity | Unknown | N/A |
Frequently Asked Questions
What does this skill do?
本技能提供识别和修复 Amazon S3 存储桶错误配置(这些错误配置会将敏感数据暴露给未授权访问)的分步操作流程。涵盖在账户和存储桶级别启用 S3 阻止公开访问(Block Public Access)、审计存储桶策略和 ACL、强制加密、配置访问日志记录,以及使用 AWS Config 和 Lambda 部署自动化修复措施。
Where can I find the source code?
You can find the source code on GitHub using the link provided at the top of the page.
SKILL.md Source
# 修复 S3 存储桶错误配置
## 适用场景
- 当 AWS Config 或 Security Hub 报告 S3 存储桶存在公开访问或缺少加密时
- 当安全扫描发现 S3 存储桶策略向 Principal "*"(所有人)授予访问权限时
- 当准备进行数据保护审计,需要存储安全控制证据时
- 当响应涉及公开可访问 S3 对象的数据泄露事件时
- 当为 AWS 组织中的新 S3 存储桶创建建立预防性控制时
**不适用于**:Azure Blob Storage 或 GCP Cloud Storage 错误配置修复、S3 数据分类(参见 implementing-cloud-dlp-policy),或与安全无关的 S3 访问模式分析。
## 前置条件
- 具有 S3 管理员权限的 AWS 账户(s3:*、s3-outposts:*)
- 已启用 AWS Config 以评估 S3 资源合规性
- 已启用 AWS CloudTrail 记录 S3 数据事件,用于访问审计
- 已启用 Macie 用于 S3 存储桶中的敏感数据发现
## 工作流程
### 步骤 1:识别所有公开和错误配置的存储桶
使用多种检测方法识别具有公开访问的 S3 存储桶。依赖 AWS Config 规则、S3 Access Analyzer 和 Macie,而非手动检查。
```bash
# 启用 S3 Access Analyzer 进行外部访问检测
aws accessanalyzer create-analyzer \
--analyzer-name s3-analyzer \
--type ACCOUNT
# 列出所有具有公开访问指标的 S3 存储桶
aws s3api list-buckets --query 'Buckets[*].Name' --output text | while read bucket; do
public_status=$(aws s3api get-public-access-block --bucket "$bucket" 2>/dev/null)
if [ $? -ne 0 ]; then
echo "未启用公开访问阻止: $bucket"
fi
done
# 检查存储桶策略中是否存在公开访问授权
aws s3api list-buckets --query 'Buckets[*].Name' --output text | while read bucket; do
policy=$(aws s3api get-bucket-policy --bucket "$bucket" 2>/dev/null)
if echo "$policy" | grep -q '"Principal":"*"' 2>/dev/null; then
echo "检测到公开策略: $bucket"
fi
done
# 使用 AWS Config 查找不合规的存储桶
aws configservice get-compliance-details-by-config-rule \
--config-rule-name s3-bucket-public-read-prohibited \
--compliance-types NON_COMPLIANT \
--query 'EvaluationResults[*].EvaluationResultIdentifier.EvaluationResultQualifier.ResourceId'
```
### 步骤 2:在账户级别启用 S3 阻止公开访问
在 AWS 账户级别应用四项阻止公开访问(Block Public Access)设置作为安全网。无论单个存储桶策略或 ACL 如何设置,都可防止账户中任何存储桶被设为公开。
```bash
# 启用账户级别阻止公开访问(全部四项设置)
aws s3control put-public-access-block \
--account-id 123456789012 \
--public-access-block-configuration '{
"BlockPublicAcls": true,
"IgnorePublicAcls": true,
"BlockPublicPolicy": true,
"RestrictPublicBuckets": true
}'
# 验证账户级别设置
aws s3control get-public-access-block --account-id 123456789012
# 在存储桶级别启用以实现纵深防御
aws s3api put-public-access-block \
--bucket production-data-bucket \
--public-access-block-configuration '{
"BlockPublicAcls": true,
"IgnorePublicAcls": true,
"BlockPublicPolicy": true,
"RestrictPublicBuckets": true
}'
```
### 步骤 3:审计并修复存储桶策略和 ACL
审查所有存储桶策略中过度宽松的 Principal 语句,并移除旧版 ACL。强制执行存储桶所有权控制以完全禁用 ACL。
```bash
# 删除公开存储桶策略
aws s3api delete-bucket-policy --bucket exposed-bucket
# 替换为限制性策略
aws s3api put-bucket-policy --bucket exposed-bucket --policy '{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "DenyUnencryptedTransport",
"Effect": "Deny",
"Principal": "*",
"Action": "s3:*",
"Resource": [
"arn:aws:s3:::exposed-bucket",
"arn:aws:s3:::exposed-bucket/*"
],
"Condition": {
"Bool": {"aws:SecureTransport": "false"}
}
},
{
"Sid": "AllowOnlyVPCEndpoint",
"Effect": "Deny",
"Principal": "*",
"Action": "s3:*",
"Resource": [
"arn:aws:s3:::exposed-bucket",
"arn:aws:s3:::exposed-bucket/*"
],
"Condition": {
"StringNotEquals": {"aws:SourceVpce": "vpce-0abc123def456"}
}
}
]
}'
# 强制存储桶所有者拥有所有对象(禁用 ACL)
aws s3api put-bucket-ownership-controls --bucket exposed-bucket \
--ownership-controls '{"Rules": [{"ObjectOwnership": "BucketOwnerEnforced"}]}'
```
### 步骤 4:强制执行默认加密
为所有存储桶启用使用 AWS KMS 或 AES-256 的默认服务器端加密(Server-Side Encryption)。添加拒绝未加密对象上传的存储桶策略。
```bash
# 启用默认 KMS 加密
aws s3api put-bucket-encryption --bucket production-data-bucket \
--server-side-encryption-configuration '{
"Rules": [{
"ApplyServerSideEncryptionByDefault": {
"SSEAlgorithm": "aws:kms",
"KMSMasterKeyID": "arn:aws:kms:us-east-1:123456789012:key/key-id"
},
"BucketKeyEnabled": true
}]
}'
# 通过存储桶策略拒绝未加密上传
aws s3api put-bucket-policy --bucket production-data-bucket --policy '{
"Version": "2012-10-17",
"Statement": [{
"Sid": "DenyUnencryptedUploads",
"Effect": "Deny",
"Principal": "*",
"Action": "s3:PutObject",
"Resource": "arn:aws:s3:::production-data-bucket/*",
"Condition": {
"StringNotEquals": {"s3:x-amz-server-side-encryption": ["aws:kms", "AES256"]}
}
}]
}'
```
### 步骤 5:启用访问日志记录和监控
配置 S3 服务器访问日志记录和 CloudTrail 数据事件,跟踪所有对象级别操作。设置 EventBridge 规则,对可疑访问模式发出告警。
```bash
# 启用服务器访问日志记录
aws s3api put-bucket-logging --bucket production-data-bucket \
--bucket-logging-status '{
"LoggingEnabled": {
"TargetBucket": "s3-access-logs-bucket",
"TargetPrefix": "production-data-bucket/"
}
}'
# 启用 CloudTrail S3 数据事件
aws cloudtrail put-event-selectors --trail-name management-trail \
--event-selectors '[{
"ReadWriteType": "All",
"DataResources": [{
"Type": "AWS::S3::Object",
"Values": ["arn:aws:s3:::production-data-bucket/"]
}]
}]'
```
### 步骤 6:使用 SCP 和 Config 部署预防性控制
使用服务控制策略(SCP)防止在整个组织中禁用阻止公开访问。部署具有自动修复功能的 AWS Config 规则。
```bash
# SCP 防止移除阻止公开访问配置
aws organizations create-policy \
--name PreventS3PublicAccess \
--type SERVICE_CONTROL_POLICY \
--content '{
"Version": "2012-10-17",
"Statement": [{
"Sid": "DenyRemovePublicAccessBlock",
"Effect": "Deny",
"Action": [
"s3:PutBucketPublicAccessBlock",
"s3:PutAccountPublicAccessBlock"
],
"Resource": "*",
"Condition": {
"StringNotLike": {"aws:PrincipalArn": "arn:aws:iam::*:role/SecurityAdmin"}
}
}]
}'
```
## 核心概念
| 术语 | 定义 |
|------|------|
| S3 阻止公开访问(S3 Block Public Access) | 四项账户级别和存储桶级别设置,可覆盖任何授予 S3 资源公开访问权限的策略或 ACL |
| 存储桶策略(Bucket Policy) | 附加到 S3 存储桶的基于 JSON 的资源策略,定义谁可以在什么条件下访问哪些对象 |
| ACL(访问控制列表) | 旧版 S3 访问机制,在存储桶或对象级别授予权限;应通过 BucketOwnerEnforced 禁用 |
| BucketOwnerEnforced | 所有权控制设置,禁用存储桶上的所有 ACL,使存储桶所有者成为访问控制的唯一授权方 |
| 服务器端加密(Server-Side Encryption) | 使用 AES-256(SSE-S3)、AWS KMS(SSE-KMS)或客户提供的密钥(SSE-C)自动加密静态对象 |
| VPC 端点(VPC Endpoint) | VPC 与 S3 之间的私有连接,将存储桶访问限制为来自 VPC 内部的流量 |
| S3 Access Analyzer | IAM Access Analyzer 功能,可识别与账户或组织外部实体共享的 S3 存储桶 |
## 工具与系统
- **AWS Config**:根据托管规则评估 S3 存储桶合规性,并为不合规资源触发自动修复
- **Amazon Macie**:发现并分类 S3 存储桶中的敏感数据,识别哪些错误配置会带来最高的数据泄露风险
- **IAM Access Analyzer**:识别具有向外部主体授予访问权限的策略或 ACL 的 S3 存储桶
- **S3 Storage Lens**:提供 S3 使用模式、访问指标和安全异常的组织级可见性
- **Prowler**:开源工具,对照 CIS Benchmark 和最佳实践检查 S3 安全配置
## 常见场景
### 场景:包含个人身份信息(PII)的公开可读 S3 存储桶导致数据泄露
**场景背景**:安全研究人员报告一个包含 273,000 份银行转账 PDF 的 S3 存储桶可被公开读取。该存储桶由需要与外部合作伙伴共享文件的开发者创建,并将 ACL 设置为 public-read。
**方法**:
1. 立即对特定存储桶启用阻止公开访问,以停止数据泄露
2. 通过设置 BucketOwnerEnforced 所有权控制,撤销所有公开 ACL
3. 审计 CloudTrail 和 S3 访问日志,确定哪些 IP 地址访问了暴露的对象
4. 在存储桶上运行 Macie,对暴露的 PII 类型进行分类,评估监管通知要求
5. 启用账户级别阻止公开访问,防止所有存储桶再次发生此问题
6. 部署 SCP,防止除 SecurityAdmin 以外的任何主体修改阻止公开访问设置
7. 为合法的合作伙伴共享用例创建预签名 URL 机制或 S3 Access Point
**常见陷阱**:在未通知设置公开访问的团队的情况下启用阻止公开访问会破坏其工作流程。在修复前未运行访问日志分析会丢失谁访问了暴露数据的证据。
## 输出格式
```
S3 存储桶安全修复报告
=======================================
账户: 123456789012
评估日期: 2025-02-23
扫描存储桶数: 156
账户级别控制:
阻止公开访问: 已启用(全部四项设置)
防止移除的 SCP: 已部署
严重发现(已修复):
[S3-001] production-uploads - 通过 ACL 公开读取
状态: 已修复 - 已应用 BucketOwnerEnforced
暴露对象数: 273,412
暴露持续时间: 47 天
访问的唯一外部 IP 数: 1,247
[S3-002] analytics-export - 公开存储桶策略(Principal: *)
状态: 已修复 - 策略已替换为 VPC 端点限制
敏感数据(Macie): 检测到 12,400 个含 PII 的对象
高危发现:
[S3-003] 14 个存储桶缺少默认加密
状态: 已修复 - 已启用 KMS 加密
[S3-004] 8 个存储桶未启用服务器访问日志记录
状态: 已修复 - 已启用日志记录到集中日志存储桶
摘要:
已修复存储桶: 24/156
加密覆盖率: 100%
访问日志记录覆盖率: 100%
阻止公开访问: 156/156 个存储桶
```Related Skills
testing-cors-misconfiguration
在安全评估期间,识别和利用跨源资源共享(CORS)错误配置,这些配置允许未经授权的跨域数据访问和凭证窃取。
performing-gcp-penetration-testing-with-gcpbucketbrute
使用 GCPBucketBrute 执行 GCP 安全测试,进行存储桶(Storage Bucket)枚举、gcloud IAM 权限提升路径分析和服务账号权限审计。
exploiting-oauth-misconfiguration
在安全评估期间识别并利用 OAuth 2.0 和 OpenID Connect 错误配置,包括重定向 URI 操纵、令牌泄漏和授权码窃取。
detecting-azure-storage-account-misconfigurations
使用 azure-mgmt-storage Python SDK 审计 Azure Blob 和 ADLS 存储账户的公开访问暴露、弱或长期 SAS 令牌、缺失的静态加密、禁用的仅 HTTPS 流量以及过时的 TLS 版本。
auditing-aws-s3-bucket-permissions
使用 AWS CLI、S3audit 和 Prowler,系统性审计 AWS S3 存储桶权限,识别可公开访问的存储桶、 过度宽松的 ACL、错误配置的存储桶策略和缺失的加密设置,以强制执行最小权限数据访问控制。
triaging-vulnerabilities-with-ssvc-framework
使用 CISA 的利益相关方特定漏洞分类(SSVC)决策树框架对漏洞进行分类和优先排序,产出可操作的修复优先级:Track、Track*、Attend 或 Act。
triaging-security-incident
使用 NIST SP 800-61r3 和 SANS PICERL 框架对安全事件进行初始分类,确定严重性、范围和所需响应行动。 按类型对事件分类,根据业务影响分配优先级,并路由到相应的响应团队。适用于事件分类、 安全告警分类、严重性评估、事件优先级排序或初始事件分析等请求场景。
triaging-security-incident-with-ir-playbook
使用结构化 IR Playbook 对安全事件进行分类和优先排序,确定严重性、分配响应团队并启动适当的响应程序。
triaging-security-alerts-in-splunk
在 Splunk Enterprise Security 中对安全告警进行分类,通过 SPL 查询和事件审查(Incident Review) 仪表板对重要事件进行严重性分类、调查、关联相关遥测并做出升级或关闭决策。 适用于 SOC 分析师需要处理关联搜索产生的告警队列、确定调查优先级, 或需要为交接给二/三级分析师记录分类决策时。
tracking-threat-actor-infrastructure
威胁行为者基础设施追踪涉及使用被动 DNS、证书透明度日志、Shodan/Censys 扫描、WHOIS 分析和网络指纹技术,对对手控制的 C2 服务器、钓鱼域名和暂存服务器等资产进行监控、映射和持续追踪
testing-websocket-api-security
测试 WebSocket API 实现中的安全漏洞,包括 WebSocket 升级时缺少身份认证、跨站 WebSocket 劫持(Cross-Site WebSocket Hijacking,CSWSH)、通过 WebSocket 消息进行的注入攻击、输入校验不足、通过消息泛洪实施拒绝服务,以及通过 WebSocket 帧造成的信息泄露。测试人员使用 Burp Suite 拦截 WebSocket 握手和消息,构造恶意 payload,并测试 WebSocket 通道上的授权绕过。适用于 WebSocket 安全测试、WS 渗透测试、CSWSH 攻击或实时 API 安全评估相关请求。
testing-oauth2-implementation-flaws
测试 OAuth 2.0 和 OpenID Connect 实现中的安全缺陷,包括授权码拦截、重定向 URI 操控、OAuth 流程中的 CSRF、令牌泄露、权限范围(scope)提升以及 PKCE 绕过。测试人员对授权服务器、客户端应用及令牌处理进行评估,发现可导致账户接管或未授权访问的常见错误配置。适用于 OAuth 安全测试、OIDC 漏洞评估、OAuth2 重定向绕过或授权码流程测试相关请求。