mcpField
S
securing-s3-buckets

securing-s3-buckets

github.com/aws安全3.3k7.0k 次安装1 天前更新
代码仓库

关于 securing-s3-buckets

securing-s3-buckets 是面向 AWS 用户的技能,用于保护、审计和维护 S3 存储桶。它将创建配置、问题修复、加密和监控组织为带有操作约束的工作流。

主要功能

  1. 01按顺序配置新存储桶安全项
  2. 02只读审计,不修改资源
  3. 03修复问题并重新检查控制项
  4. 04配置加密与监控
  5. 05安全处理存储桶策略变更

适用场景

  1. 01加固新建的 S3 存储桶
  2. 02检查现有存储桶的安全配置
  3. 03修复特定安全问题
  4. 04配置加密或监控

MCP 相关

连接后通过 AWS MCP 服务执行命令,以支持沙箱执行、审计日志和可观测性;否则使用 AWS CLI 或 shell。

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/aws/agent-toolkit-for-aws --skill securing-s3-buckets

安装后在 Claude Code 中输入/securing-s3-buckets确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

references/
audit-checklist.md
encryption.md
iam-permissions.md
remediation.md
workflows.md

详细介绍

概述

通过五种工作流实施分层的 S3 安全控制:保护新存储桶、审计现有配置、修复发现的问题、配置加密以及启用监控。遵循 AWS Well-Architected 安全最佳实践。

连接后,使用 AWS MCP 服务执行命令(沙盒化执行、审计日志记录、可观测性)。否则,使用 AWS CLI 或 shell。

常见任务

0. 验证依赖项

开始前检查所需工具。

约束:

  • 如果缺少所需工具,MUST 告知用户
  • SHOULD 使用 aws sts get-caller-identity 确认凭证

有关各工作流的 IAM 权限,请参阅 references/iam-permissions.md。

1. 对请求进行分类
用户意图工作流
保护新存储桶A:保护新存储桶
审计/检查现有存储桶B:审计现有存储桶
修复特定问题C:修复问题
配置加密D:配置加密
启用日志记录/监控E:启用监控

约束:

  • MUST 一次性询问所有必需参数
  • MUST 在执行任何写入操作前确认存储桶名称和区域
  • 如果用户上下文中明确说明了区域,MAY 推断区域
  • SHOULD 在写入操作前运行 aws iam simulate-principal-policy 验证权限
  • SHOULD 显示写入命令并等待确认后再执行
put-bucket-policy 安全规则

以下规则适用于所有调用 put-bucket-policy 的工作流:

  • MUST 先尝试获取现有策略(aws s3api get-bucket-policy)——put-bucket-policy 会替换整个策略
  • 如果策略存在,MUST 在修改前备份:aws s3api get-bucket-policy --bucket <name> --output text > backup-policy-$(date +%s).json
  • 如果返回 NoSuchBucketPolicy,则使用新策略继续——无需备份
  • MUST 将新的语句合并到现有策略的 Statement 数组中(如果存在)
  • MUST 在应用前验证合并后的 JSON 语法(例如:echo '<policy>' | python3 -m json.tool)
  • SHOULD 显示完整的 put-bucket-policy 命令并等待确认
2. 工作流 A — 保护新存储桶

完整 CLI 步骤请参阅 references/workflows.md。

必需步骤(按顺序执行,不得跳过):

  1. 使用 --bucket-namespace account-regional 创建存储桶
  2. 启用版本控制
  3. 启用加密(SSE-S3 + Bucket Keys + 阻止 SSE-C)
  4. 启用日志记录(询问用户选择哪种方式——条件步骤)
  5. 通过 DenyInsecureTransport 存储桶策略强制仅使用 HTTPS
  6. 启用 ABAC

约束:

  • 调用 create-bucket 时 MUST 传入 --bucket-namespace account-regional——这是必需项,不可省略。例如:

    aws s3api create-bucket --bucket <name> --bucket-namespace account-regional --region <region>
    
  • MUST NOT 更改 Block Public Access——S3 默认会为新存储桶启用该功能

  • MUST NOT 更改 ACL 所有权控制——S3 默认会禁用 ACL(BucketOwnerEnforced)

  • MUST 应用包含 DenyInsecureTransport 语句的存储桶策略:当 aws:SecureTransport 为 false 时拒绝 s3:*——这是必需项,不可省略。例如:

    aws s3api put-bucket-policy --bucket <name> --policy '{"Version":"2012-10-17","Statement":[{"Sid":"DenyInsecureTransport","Effect":"Deny","Principal":"*","Action":"s3:*","Resource":["arn:aws:s3:::<name>/*","arn:aws:s3:::<name>"],"Condition":{"Bool":{"aws:SecureTransport":"false"}}}]}'
    
  • 在步骤 4 之前,MUST 询问用户选择哪种日志记录方式

  • 步骤 4 和 5 MUST 遵循 put-bucket-policy 安全规则

  • SHOULD 确认每个步骤成功后再继续

3. 工作流 B — 审计现有存储桶

完整检查清单请参阅 references/audit-checklist.md。

约束:

  • MUST 运行所有只读审计命令后再报告发现的问题
  • 审计期间 MUST NOT 执行任何写入或修改命令
  • MUST 将每项控制报告为 PASS / FAIL / NOT CONFIGURED,并注明严重程度
  • 对于日志记录:如果启用了 S3 服务器访问日志或 CloudTrail 数据事件,则报告 PASS;只有两者都未启用时才报告 NOT CONFIGURED
4. 工作流 C — 修复问题

请参阅 references/remediation.md,了解按问题类型分类的修复命令。

约束:

  • 在应用任何修复之前,必须先确定问题类型
  • 修改策略时,必须遵循 put-bucket-policy 安全规则
  • 应用修复后,必须重新运行相关审计检查,以确认问题已解决
5. 工作流 D — 配置加密

请参阅 references/encryption.md,了解加密选项和命令。

约束:

  • 默认必须使用带 S3 Bucket Keys 的 SSE-S3,并阻止 SSE-C,除非用户明确要求使用 KMS
  • 使用 SSE-KMS 时,必须使用客户管理的密钥,绝不能使用 AWS 管理的 aws/s3 密钥
  • 指定客户管理的 KMS 密钥时,必须使用完整 ARN,而不是别名
  • 所有配置都必须包含 BucketKeyEnabled: true 和 BlockedEncryptionTypes: [SSE-C]
  • 注意:S3 API 接受 aws/s3 和别名且不会报错——这些限制由 Agent 强制执行。应用后,请使用 get-bucket-encryption 进行验证。
6. 工作流 E — 启用监控

有关完整 CLI 步骤,请参阅 references/workflows.md。

约束:

  • 创建 GuardDuty 检测器之前,必须检查是否已存在检测器
  • CloudTrail 命令必须使用跟踪的主区域,而不是存储桶所在区域
  • 应启用全部四项核心推荐 AWS Config 规则

故障排除

ObjectLockConfigurationNotFoundError — 未启用对象锁定。应视为未配置,而不是失败。

审计命令出现 AccessDenied — 检查 IAM 策略、存储桶策略、Block Public Access、VPC 端点策略以及 SCP/RCP。使用 aws iam simulate-principal-policy 进行诊断。

put-bucket-policy 静默移除了现有语句 — 请参阅 put-bucket-policy 安全规则。

GuardDuty 出现 BadRequestException: detector already exists — 先运行 aws guardduty list-detectors;仅在结果为空时调用 create-detector。

CloudTrail 更改未生效 — 确认使用的是 --region <trail-home-region>,而不是存储桶所在区域。使用 aws cloudtrail describe-trails --query 'trailList[*].[Name,HomeRegion]' 查找主区域。

其他资源

评论

支持 Markdown