0Pricing
Security+ Academy · 课时

云存储安全与数据暴露风险

了解配置错误的 S3 存储桶、Azure Blob 容器和 GCS 存储桶如何导致数据暴露,以及如何实施存储桶策略和访问控制。

云存储安全与数据暴露风险 是 CoddyKit 上的免费 Security+ Academy 课时。 这是第 2 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Security+ Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Security+ Academy 课程共包含 4 节课。

云对象存储基础

云对象存储——AWS S3、Azure Blob Storage 和 Google Cloud Storage (GCS)——将文件作为对象存储在称为 bucket 或容器的扁平命名空间中。与传统文件系统不同,它通过附加到 bucket 和对象的 policy 控制权限,而不是通过文件系统 ACL。对象存储非常适合大规模数据,但必须谨慎配置权限,因为一个配置错误的 bucket 就可能让数 TB 的敏感数据暴露在公共互联网中。

公开 bucket 配置错误

最常见的云存储漏洞是可公开访问的 bucket——其访问 policy 允许匿名读取(或写入)的存储 bucket。这种配置错误已经导致数十起重大数据泄露:Verizon(1400 万条客户记录)、FedEx(11.9 万本护照)和 Capital One(1 亿份信用卡申请)。攻击者会使用自动扫描器,根据所有已知的 AWS 账户命名模式发现公开 bucket,因此一旦存在配置错误,发现它就轻而易举。

# Check if S3 bucket is publicly accessible
aws s3api get-bucket-policy --bucket my-bucket
aws s3api get-bucket-acl --bucket my-bucket

# Block all public access (AWS recommended default)
aws s3api put-public-access-block \
  --bucket my-bucket \
  --public-access-block-configuration \
  'BlockPublicAcls=true,IgnorePublicAcls=true,BlockPublicPolicy=true,RestrictPublicBuckets=true'

Bucket policy 与 ACL

云存储使用两类可能相互冲突的访问控制。Bucket policy 是附加到 bucket 的 JSON 文档,用于定义哪些主体可以执行哪些操作。访问控制列表(ACL)是针对单个对象的传统权限授予方式。AWS 建议禁用 ACL,改用 bucket policy,以保持一致性。当两者同时存在时,权限最宽松的 policy 生效——这意味着,即使 bucket policy 限制了公开访问,权限过于宽泛的 ACL 仍可能授予公开访问权限。

# S3 bucket policy example — restrict to specific account
{
  'Version': '2012-10-17',
  'Statement': [{
    'Effect': 'Allow',
    'Principal': { 'AWS': 'arn:aws:iam::123456789012:root' },
    'Action': 's3:GetObject',
    'Resource': 'arn:aws:s3:::my-bucket/*'
  }]
}
# All other principals implicitly denied

对象存储中的静态加密

云存储提供商会为静态对象提供服务端加密。SSE-S3(AWS)会自动使用 AWS 管理的密钥。SSE-KMS 使用 AWS Key Management Service 中由客户管理的密钥,可提供更完善的审计轨迹(每次解密都会记录在 CloudTrail 中)以及密钥轮换控制。SSE-C 使用由客户提供的密钥,且客户完全在 AWS 之外管理这些密钥。对于敏感数据,使用客户管理密钥的 SSE-KMS 可提供最强的控制能力和合规证据。

# Enforce encryption on S3 bucket (deny unencrypted uploads)
{
  'Effect': 'Deny',
  'Principal': '*',
  'Action': 's3:PutObject',
  'Resource': 'arn:aws:s3:::my-secure-bucket/*',
  'Condition': {
    'StringNotEquals': {
      's3:x-amz-server-side-encryption': 'aws:kms'
    }
  }
}

传输中加密

即使静态数据已正确加密,如果通过未加密的信道传输,仍可能暴露。所有云存储 API 都应仅通过 HTTPS/TLS 访问。对于 S3,bucket policy 可以通过拒绝带有 aws:SecureTransport: false 的请求来强制使用 HTTPS。预签名 URL 是授予对象限时访问权限的临时身份验证 URL,应始终使用 HTTPS,并设置较短的过期时间,以便在 URL 被截获时缩小暴露窗口。

# S3 bucket policy — deny HTTP (require HTTPS)
{
  'Effect': 'Deny',
  'Principal': '*',
  'Action': 's3:*',
  'Resource': ['arn:aws:s3:::my-bucket', 'arn:aws:s3:::my-bucket/*'],
  'Condition': {
    'Bool': { 'aws:SecureTransport': 'false' }
  }
}

数据分类与存储层级

并非所有数据都需要相同级别的保护。敏感数据(PII、PHI、财务记录)必须存储在已加密、限制访问且启用审计日志的 bucket 中。敏感性较低的数据可以拥有更广泛的访问权限。应在创建对象时应用数据分类标签,并利用这些标签自动将数据路由到经过适当配置的存储中。根据分类标签自动将数据移至更安全存储的 policy,可以降低敏感数据落入低安全性 bucket 的可能性。

云存储访问的日志记录与监控

访问日志对于事后发现未授权访问以及开展合规审计至关重要。AWS S3 访问日志和CloudTrail 数据事件日志会记录每次对象级 API 调用——谁请求了对象、来自哪个 IP、请求发生在何时。Azure Blob 诊断日志和 GCS 审计日志也提供类似功能。如果没有这些日志,发现数据泄露时就没有取证证据,也就无法确定暴露范围。

# Enable S3 access logging
aws s3api put-bucket-logging \
  --bucket my-bucket \
  --bucket-logging-status '{
    "LoggingEnabled": {
      "TargetBucket": "my-access-logs-bucket",
      "TargetPrefix": "my-bucket-logs/"
    }
  }'

跨账户访问风险

云存储经常在多个账户之间共享(开发、预发布、生产和第三方合作伙伴)。粗心配置的跨账户访问可能授予过多权限。最佳实践包括:在 bucket policy 中使用明确的账户 ID,而不是通配符主体;使用AWS Organizations SCP 限制哪些外部账户可以获得访问权限;定期审计跨账户授权;以及对于账户间数据传输,优先使用 AWS PrivateLink,而不是公共互联网。

版本控制与删除保护

对象版本控制会保留对象的所有版本,包括已删除的版本。这可以防范意外删除、勒索软件加密对象以及内部人员威胁。对于关键数据,应将版本控制与Object Lock(相当于 S3 Glacier Vault Lock)结合使用——这是一种 WORM(写入一次,读取多次)policy,可在规定的保留期限内阻止任何删除或修改。Object Lock 可以满足金融和医疗行业对不可变记录的监管要求。

# Enable S3 versioning
aws s3api put-bucket-versioning \
  --bucket my-critical-bucket \
  --versioning-configuration Status=Enabled

# Enable Object Lock (immutable storage)
aws s3api put-object-lock-configuration \
  --bucket my-critical-bucket \
  --object-lock-configuration \
  'ObjectLockEnabled=Enabled,Rule={DefaultRetention={Mode=COMPLIANCE,Days=365}}'

CSPM 对存储配置错误的检测

云安全态势管理(CSPM)工具会根据安全基准自动扫描云存储配置。CSPM 检查包括:是否有 bucket 可公开访问?是否启用了静态加密?是否启用了日志记录?关键 bucket 是否启用了版本控制?bucket policy 是否权限过于宽泛?Prisma Cloud、Wiz 和 AWS Security Hub 等 CSPM 工具可持续监控合规性,并在攻击者首先发现配置漂移之前发出警报。

预签名 URL 与临时访问

预签名 URL可以授予对特定对象的限时访问权限,而无需接收者拥有 AWS 凭据。它们适合与外部人员共享文件。安全风险包括:过期时间过长,导致 URL 在预期共享窗口结束后仍然有效;接收者将 URL 转发给预期受众之外的人员;以及嵌入 URL 的令牌出现在服务器日志中。请始终设置可行的最短过期时间,并避免记录预签名 URL。

# Generate a pre-signed URL (expires in 3600 seconds)
aws s3 presign s3://my-bucket/report.pdf \
  --expires-in 3600

# Returns a URL valid for 1 hour
# After expiry, the URL returns 403 Forbidden
# Best practice: shortest expiry viable for the use case

快速检查

请测试您对本课 CompTIA Security+(SY0-701)概念的理解。

课程回顾

本课您学习了:公开 bucket 配置错误是云存储数据泄露最常见的原因;SSE-KMS 通过 CloudTrail 提供审计日志和最强的加密控制;以及对象版本控制结合 Object Lock 可以防范勒索软件和内部人员删除关键数据。接下来我们将探讨使用 IAM 角色和服务账户实现的云身份管理。

常见问题解答

「云存储安全与数据暴露风险」课时是免费的吗?

是的 — 「云存储安全与数据暴露风险」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Security+ Academy 课程的其余内容,请升级到 CoddyKit PRO。 Security+ Academy 课程共包含 4 节课。

「云存储安全与数据暴露风险」这节课中我会学到什么?

了解配置错误的 S3 存储桶、Azure Blob 容器和 GCS 存储桶如何导致数据暴露,以及如何实施存储桶策略和访问控制。 你通过在浏览器中直接运行的动手代码来练习 Security+ Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 Security+ Academy 需要有经验吗?

无需任何先前经验。CoddyKit 上的 Security+ Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 2 节课,共 4 节。

「云存储安全与数据暴露风险」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 Security+ Academy 课中编写并运行代码吗?

能。每节 Security+ Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. 共同责任模型:IaaS、PaaS、SaaS
  2. 云存储安全与数据暴露风险
  3. 云身份:IAM 角色与服务账户
  4. 云安全态势管理(CSPM)
← 返回 Security+ Academy