跳转到内容

入口、云资源与安全

用户打开一个网站时,请求会经过域名解析、网络连接、加密协商、边缘节点、负载均衡、反向代理,最后才到应用。云平台把这些环节拆成许多可配置资源。配置错误往往不会表现为“代码异常”,而是超时、证书错误、403、502、跨区延迟或悄悄公开的数据。

1. 一次外部请求的路径

跳转到“1. 一次外部请求的路径”
浏览器
→ DNS
→ 公网 IP / Anycast 边缘
→ TLS 终止
→ WAF / CDN
→ 负载均衡
→ 反向代理 / API 网关
→ 应用服务
→ 数据库 / 缓存 / 对象存储

每一层都可以健康,同时整条链路失败。排查时先确定请求停在哪里,不要从最底层代码开始猜。

DNS 把域名解析为 IP 或其他记录。常见记录:

记录 作用
A 域名到 IPv4 地址
AAAA 域名到 IPv6 地址
CNAME 域名别名到另一个域名
MX 邮件服务器
TXT 验证、SPF、DKIM 等文本信息
NS 该域由哪些名称服务器负责
浏览器/系统缓存
→ 本地递归解析器
→ 根服务器
→ 顶级域服务器
→ 权威名称服务器
→ 返回记录并缓存

TTL 决定缓存多久。修改记录后,旧值可能在 TTL 到期前继续存在。迁移服务时可以先降低 TTL,切换后再恢复。不要假设“保存 DNS 后全世界立刻生效”。

  • 记录值错误或缺少末尾的点。
  • CNAME 与其他记录冲突。
  • 域名过期、NS 配置错误。
  • 混合 IPv4/IPv6,客户端选到不可用路径。
  • 内网解析与公网解析不同。
  • 证书覆盖的域名与解析目标不一致。

TLS 解决三件事:确认服务器身份、协商密钥、加密传输。HTTPS 是 HTTP over TLS。

证书由受信任的证书颁发机构签发,把域名与公钥绑定。客户端验证:

  • 证书是否在有效期内。
  • 域名是否匹配。
  • 证书链是否能追溯到受信任根证书。
  • 签名是否正确。
  • 证书是否被吊销或存在其他策略问题。

证书过期、链不完整和域名不匹配是常见故障。自动续期和到期告警应纳入运维,不要等到浏览器报错。

现代 TLS 通常包含:

  1. 客户端与服务端协商协议版本和加密套件。
  2. 服务端提供证书。
  3. 客户端验证证书。
  4. 双方建立共享密钥。
  5. 后续应用数据加密传输。

TLS 1.3 简化了握手并默认更强的安全属性。旧协议和弱套件可能被合规或浏览器拒绝。证书可通过 SNI 为不同域名提供不同配置。

可以在 CDN、负载均衡、网关或应用终止 TLS。终止后内部可能仍使用 HTTP,需确保网络隔离和可信链路。若应用需要原始协议、客户端 IP 或端到端加密,要正确处理转发头或做二次加密。

4. 反向代理、负载均衡与网关

跳转到“4. 反向代理、负载均衡与网关”

反向代理代表服务器接收客户端请求,常见能力:

  • 路由到不同后端。
  • 终止 TLS。
  • 压缩、缓存、重写路径和头部。
  • 限制请求体、超时和并发。
  • 隐藏内部拓扑。

代理配置中的路径前缀、尾部斜杠和重写规则很容易出错。转发时还要保留或设置 Host、X-Forwarded-For、X-Forwarded-Proto 和请求 ID,并只信任来自已知代理的头部。

层 依据 特点
L4 IP、端口、连接 快,不理解 HTTP,适合 TCP/UDP
L7 路径、头部、Cookie 路由灵活,可做灰度与内容分流

常见算法:

  • 轮询:依次分配。
  • 加权轮询:按实例能力分配。
  • 最少连接:给当前连接较少的实例。
  • 一致性哈希:同一 key 尽量落到同一实例。

健康检查决定实例是否进入流量。检查太宽松会把流量送给故障实例,太严格会在依赖抖动时把所有实例摘掉。会话粘滞能简化有状态应用,但会降低均衡效果并增加故障影响。

API 网关集中处理认证、限流、路由、协议转换、日志和配额。它不应变成所有业务逻辑的堆积处。WAF 过滤常见 Web 攻击,但不能替代输入校验、权限和代码安全。

CDN 缓存静态内容并靠近用户。动态内容、个性化响应和敏感数据要谨慎缓存,缓存键必须包含语言、租户和身份相关维度。

5. 云平台的基本资源模型

跳转到“5. 云平台的基本资源模型”
资源 作用 关键问题
虚拟机 完整操作系统实例 补丁、扩缩容、启动时间
容器服务 运行和管理容器 网络、镜像、编排、权限
无服务器函数 按事件执行代码 冷启动、时长、连接、供应商绑定
托管数据库 数据库运维由平台承担 连接、备份、参数、版本、成本
对象存储 保存文件和静态资源 访问策略、生命周期、一致性
块存储 挂载给实例的磁盘 容量、IOPS、快照、可用区
消息队列 异步通信 重复、顺序、保留和积压
密钥服务 保存密钥和证书 权限、轮换、审计

区域是地理范围,可用区是区域内相对独立的设施。多可用区提高单机房故障容忍,多区域提高区域级容灾,但会带来跨区延迟、数据复制和成本。

不要把“部署在两个可用区”误解为“自动全局一致”。数据库、对象存储和缓存各有复制模型,需要分别确认。

云厂商负责物理设施、虚拟化层和部分托管服务的安全;用户负责身份、配置、数据、应用和访问策略。托管数据库不会自动替你设置最小权限,对象存储也不会因为“在云上”就默认安全。

虚拟私有云(VPC)提供隔离的地址空间。子网划分可用区与路由,安全组和网络 ACL 控制流量。

常见结构:

公网
→ 公网子网:负载均衡/入口
→ 私网子网:应用服务
→ 私有子网:数据库、缓存、内部服务

原则:

  • 数据库和缓存不直接暴露公网。
  • 只有必要的入口子网拥有公网路由。
  • 出站访问通过 NAT 或代理并受审计。
  • 管理端口通过堡垒机、VPN 或私有连接访问。
  • 安全组按最小端口和来源开放,不使用 0.0.0.0/0 图省事。
  • 内网服务之间也应有身份认证和授权,不能把“内网”当安全边界。

私有端点可以把托管服务接入 VPC,减少公网暴露。跨 VPC、跨账号和本地数据中心连接需要明确路由、DNS 和信任关系。

IAM(身份与访问管理)管理“谁可以对什么资源做什么操作”。核心概念通常包括:

  • 主体:用户、组、服务角色、外部身份。
  • 策略:允许或拒绝哪些操作。
  • 资源:被访问的存储桶、数据库、队列等。
  • 角色:可被临时承担的权限集合。

最小权限不是“只给只读”,而是根据任务给刚好需要的操作和资源范围。常见错误:

  • 应用使用管理员账号。
  • 开发和生产共用同一组凭据。
  • 密钥写进代码或镜像。
  • 权限策略使用通配符资源。
  • 离职或项目结束后权限不回收。

服务应使用工作负载身份或短期凭据,而不是长期静态密钥。角色权限按环境和任务拆分;敏感操作要求更严格的审批与审计。

云 IAM 往往同时存在账号级策略、资源策略、权限边界、组织策略和会话策略。最终权限不是只看一处。排查 403 时要确认:

  1. 调用者身份是否正确。
  2. 操作的准确名称是什么。
  3. 资源 ARN/路径是否匹配。
  4. 是否有显式拒绝。
  5. 是否缺少 KMS 解密、日志写入或跨服务授权。
  6. 临时凭据是否过期。

对象存储适合大文件和静态资源,但错误配置可能导致公开泄露。

检查项:

  • 默认阻止公共访问是否开启。
  • 桶策略是否只允许必要主体和操作。
  • 上传对象的所有者与 ACL 是否明确。
  • 静态网站托管是否误暴露私有文件。
  • 预签名 URL 是否有短有效期和最小权限。
  • 是否开启服务端加密、版本控制和访问日志。
  • 生命周期是否清理临时文件和旧版本。

CDN 缓存公开内容时,要防止把带身份信息的响应缓存给其他用户。缓存键、Vary、Cache-Control 和源站认证必须一起设计。

IaC 用代码描述云资源,常见工具包括 Terraform、CloudFormation、Pulumi 和 Kubernetes manifest。

好处:

  • 变更有版本、可审查、可回滚。
  • 环境可重复创建。
  • 资源关系能被工具分析。
  • 减少控制台手工漂移。

风险:

  • state 文件包含敏感信息和资源映射,必须加密和限制访问。
  • 手工修改会造成 drift,需要检测和收敛。
  • plan 与真实环境不符时可能误删资源。
  • provider 或模块升级可能改变行为。
  • 代码合并不等于资源已经安全应用。
代码修改 → 格式/校验 → plan → 审查差异
→ 应用 → 验证 → 记录状态与变更

生产环境应限制谁能应用变更,使用审批和审计。密钥、证书和数据库密码应通过密钥管理引用,不直接写在 state 或代码里。

现象 优先检查
域名无法解析 DNS 记录、NS、TTL、解析器缓存
证书错误 有效期、域名、证书链、SNI
连接超时 安全组、路由、NAT、目标端口、健康检查
403 身份、策略、资源策略、显式拒绝、KMS 权限
404 路由、路径重写、后端前缀、对象键
502/504 后端不可达、应用崩溃、超时、代理缓冲
CDN 返回旧内容 TTL、缓存键、刷新、源站缓存头
内网可访问但公网不行 子网路由、公网 IP、负载均衡监听
  • DNS 记录、TTL、IPv4/IPv6 与证书是否匹配。
  • TLS 证书是否自动续期,证书链和协议版本是否符合要求。
  • 代理与负载均衡是否正确传递主机、协议、客户端 IP 和请求 ID。
  • 健康检查是否能识别真实不可用,又不会因依赖抖动全量摘除。
  • 数据库、缓存和管理端口是否限制在私网。
  • 安全组是否最小开放,出站访问是否受控。
  • 应用是否使用短期身份和最小权限,而非管理员长期密钥。
  • 对象存储是否阻止公开访问,预签名 URL 是否短期有效。
  • IaC state 是否加密、锁定和限制访问,是否检测 drift。
  • 关键云资源是否有日志、告警、备份和恢复流程。