菜单

安全实践

相关源文件

本页面提供了与 DevOps 和云环境相关的安全实践的全面概述。它涵盖了基础安全概念、身份验证和授权机制、加密、基础设施安全、应用程序安全和威胁建模。有关云特定的安全实现,请参阅云平台,有关 Kubernetes 特定的安全实践,请参阅Kubernetes 管理

DevSecOps 基础

DevSecOps 代表了将安全实践集成到 DevOps 软件交付模型中。它建立了一种文化,让开发、运营和安全团队共同负责在整个 IT 生命周期中交付安全的软件。

DevSecOps 的核心原则

  1. 共同责任:安全是每个人的职责,而不仅仅是安全团队的职责
  2. 基础设施即代码:安全控制和策略被定义并作为代码进行管理
  3. 持续安全:在整个 CI/CD 管道中进行安全测试和验证
  4. 自动化安全:尽可能自动化安全任务以保持开发速度
  5. 最小权限原则:访问权限仅限于角色或功能所需的最低限度

来源:topics/security/README.md4-13

零信任模型

零信任是一种安全概念,其核心是“永不信任,始终验证”的原则。它要求对尝试访问资源的每个人和系统进行严格的身份验证,无论其是否在网络边界之内。

零信任的关键组成部分

  • 显式验证 - 始终根据所有可用数据点进行身份验证和授权
  • 使用最小权限访问 - 通过即时(Just-In-Time)和恰到好处(Just-Enough-Access)的访问限制用户访问
  • 假定泄露 - 最小化爆炸半径并分段访问,验证端到端加密,并使用分析来改进防御

来源:topics/security/README.md15-19

最小权限原则

最小权限原则是指为用户、角色和服务账户提供最少的权限,使其只能执行所需的功能。如果一个实体不需要访问权限,那么它就不应该拥有该权限。

优点

  • 减少攻击面
  • 限制意外错误的影响
  • 通过限制用户可以执行的操作来提高系统稳定性
  • 通过确保适当的访问控制来帮助实现监管合规

来源:topics/security/README.md21-25

认证与授权

认证机制

身份验证是验证用户、服务或应用程序身份的过程。各种方法都用于身份验证,其安全级别各不相同。

身份验证类型描述安全级别用例
基于密码用户提供用户名和密码基础传统系统,简单应用
基于证书使用数字证书来验证身份安全通信,服务器身份验证
多因素 (MFA)结合多种身份验证方法非常高关键系统,敏感数据访问
基于令牌使用临时令牌进行身份验证中高API 访问,Web 应用程序
生物识别使用物理特征(指纹等)物理访问,移动设备
SSO(单点登录)一组凭据用于多个系统可变企业环境

多因素身份验证 (MFA)

MFA 要求用户提供两个或多个验证因子

  • 您知道的(密码、PIN)
  • 您拥有的(安全密钥、智能手机)
  • 您是谁(生物识别)

这大大提高了安全性,因为仅凭一个因素的泄露不足以获得未经授权的访问。

来源:topics/security/README.md60-127

授权模型

授权确定身份验证的用户在系统中可以执行的操作。

基于角色的访问控制 (RBAC)

RBAC 是一种基于角色限制授权用户访问系统的方法。与直接将权限分配给用户不同,权限与角色相关联,然后将用户分配给相应的角色。

来源:topics/security/README.md49-55 topics/kubernetes/README.md60-66

加密与数据保护

加密类型

对称加密

对称加密使用相同的密钥进行加密和解密。虽然比非对称加密快,但共享密钥必须保密并安全分发。

示例:AES、DES、3DES

非对称加密

非对称加密使用一对密钥:公钥和私钥。用公钥加密的数据只能用相应的私钥解密,反之亦然。

示例:RSA、ECC、DSA

来源:topics/security/README.md215-225

传输层安全 (TLS)

TLS 是一种加密协议,用于在计算机网络上提供安全通信。它同时使用非对称和对称加密

  1. 非对称加密在初始握手期间用于交换密钥
  2. 然后使用对称加密进行实际数据传输以提高性能

TLS 提供

  • 身份验证(验证通信方的身份)
  • 保密性(保护交换数据免遭窃听)
  • 完整性(确保数据在传输过程中不被篡改)

来源:topics/security/README.md392-393 topics/security/README.md475-477

哈希

哈希是一种单向函数,它将任意大小的输入转换为固定大小的字符串。与加密不同,哈希不能被反向操作以获得原始输入。

在安全中的用途

  • 密码存储(切勿存储明文密码)
  • 数据完整性验证
  • 数字签名
  • 文件/数据标识

常用哈希算法:MD5(不安全)、SHA-1(已弃用)、SHA-256、SHA-3、bcrypt(用于密码)

密码加盐

密码加盐是在哈希密码之前添加随机数据(“盐”)的过程。这确保相同的密码会有不同的哈希值,从而防止

  • 彩虹表攻击
  • 字典攻击
  • 预计算哈希攻击

来源:topics/security/README.md251-260 topics/security/README.md165-170

基础设施安全

网络安全

网络安全侧重于保护基础设施免受未经授权的访问、滥用和修改。

关键组件

  • 防火墙(硬件和软件)
  • 入侵检测/防御系统 (IDS/IPS)
  • 网络分段
  • VPN 用于安全的远程访问
  • DDoS 防护

微隔离

微隔离是一种安全方法,它将网络划分为安全区域,并通过精细的控制来管理谁可以访问网络的各个部分。它在网络级别实施零信任原则。

优点

  • 减少攻击面
  • 更好的泄露遏制
  • 提高合规性
  • 精细的安全控制

来源:topics/security/README.md612-642

云安全

云安全包含保护云数据、应用程序和基础设施免受威胁的技术、策略、控制和服务。

AWS 安全服务

服务目的主要功能
IAM身份与访问管理用户管理、MFA、权限策略
安全组EC2 实例的虚拟防火墙控制入站和出站流量
WAFWeb 应用程序防火墙防止常见的 Web 漏洞
ShieldDDoS 防护保护 AWS 上的应用程序
GuardDuty威胁检测监控恶意活动
Inspector自动化安全评估识别应用程序中的漏洞
CloudTrail活动监控记录 API 调用以进行审计
KMS密钥管理服务创建和管理加密密钥

责任共担模型

责任共担模型界定了云提供商和客户之间的安全责任

  • 云提供商(AWS、Azure、GCP):负责云本身的安全
    • 物理安全、基础设施、虚拟化层
  • 客户:负责云内部的安全
    • 数据加密、身份管理、网络流量保护
    • 操作系统、应用程序、配置

来源:topics/aws/README.md571-581 certificates/aws-cloud-practitioner.md569-582

容器安全

容器安全涉及容器生态系统的保护,包括镜像、注册表、编排器和运行时环境。

重点关注领域

  1. 镜像安全

    • 扫描漏洞
    • 使用最小的基础镜像
    • 签名和验证镜像
  2. 注册表安全

    • 访问控制
    • 漏洞扫描
    • 镜像签名
  3. 运行时安全

    • 隔离和资源限制
    • 只读文件系统
    • 删除功能和权限
  4. 编排器安全(Kubernetes)

    • 用于访问控制的 RBAC
    • 用于分段的网络策略
    • 安全上下文和 Pod 安全策略

来源:topics/kubernetes/README.md60-66

应用程序安全

常见漏洞

OWASP Top 10

OWASP Top 10 是面向开发人员和 Web 应用程序安全性的标准意识文档,代表了对 Web 应用程序最关键安全风险的共识。

排序漏洞描述缓解
1注入SQL、NoSQL、OS、LDAP 注入使用参数化查询,验证输入
2身份验证失败弱身份验证,糟糕的会话管理实施 MFA,安全的会话处理
3敏感数据泄露未受保护的数据加密敏感数据,妥善的密钥管理
4XML 外部实体 (XXE)配置不当的 XML 处理器禁用 XXE 处理
5访问控制失败限制未正确执行实施访问控制,默认拒绝
6安全配置错误不安全的默认配置加固配置,移除不使用的功能
7跨站脚本 (XSS)不受信任的数据在浏览器中执行输入验证,输出编码
8不安全的反序列化不受信任的数据反序列化验证数据完整性,限制反序列化
9使用存在已知漏洞的组件过时的库库存依赖关系,补丁管理
10日志记录和监控不足缺乏检测/响应实施日志记录、监控、警报

来源:topics/security/README.md279-282

跨站脚本 (XSS)

XSS 是一种攻击,恶意脚本被注入到受信任的网站中。当用户访问这些受感染的页面时,恶意脚本会在他们的浏览器中执行,可能会窃取敏感信息或代表用户执行操作。

XSS 攻击类型

  • 存储型 XSS:恶意脚本存储在目标服务器上
  • 反射型 XSS:恶意脚本嵌入在 URL 中并反射到受害者的浏览器
  • DOM 型 XSS:漏洞存在于客户端代码中

防护措施

  • 输入验证和清理
  • 输出编码
  • 内容安全策略 (CSP)
  • 使用自动转义内容的现代框架

来源:topics/security/README.md285-289

SQL 注入

SQL 注入是一种攻击,恶意 SQL 语句被插入到输入字段中,由后端数据库执行,可能允许攻击者

  • 访问未经授权的数据
  • 修改数据库数据
  • 执行管理操作

防护措施

  • 使用参数化查询或准备好的语句
  • 应用输入验证和清理
  • 为数据库账户实施最小权限
  • 使用 ORM(对象关系映射)框架

来源:topics/security/README.md293-297

CSRF(跨站请求伪造)

CSRF(跨站请求伪造)是一种攻击,它会强制已通过身份验证的用户在其当前登录的 Web 应用程序中执行非预期的操作。攻击者会诱使用户执行他们不打算执行的操作。

防护措施

  • CSRF 令牌(每个用户会话唯一的、不可预测的令牌)
  • Same-site cookies(同站 cookie)
  • 自定义请求头(如 X-CSRF-Token)
  • 验证 Origin 和 Referrer 请求头

来源:topics/security/README.md396-401

威胁建模与风险评估

威胁建模是一种结构化方法,用于识别系统中的潜在威胁和漏洞,评估其风险,并确定适当的缓解措施。

威胁建模流程

常见的威胁建模方法

  • STRIDE(欺骗、篡改、否认、信息泄露、拒绝服务、权限提升)
  • PASTA(攻击模拟和威胁分析流程)
  • DREAD(损害、可复现性、可利用性、受影响用户、可发现性)
  • OCTAVE(操作关键威胁、资产和漏洞评估)

来源:topics/security/README.md268-276

中间人(MITM)攻击

中间人攻击发生在攻击者将自己插入用户与他们正在通信的系统之间时,通常是为了窃听通信或在传输过程中篡改数据。

防护措施

  • 对所有通信使用 HTTPS/TLS
  • 证书锁定
  • 双向 SSL/TLS 身份验证
  • 通过 VPN 进行敏感通信
  • 公钥基础设施 (PKI)

来源:topics/security/README.md334-335

DDoS 防护

分布式拒绝服务 (DDoS) 攻击试图通过海量互联网流量淹没目标或其周边基础设施,从而扰乱服务正常运行。

防护策略

  • 流量过滤和速率限制
  • 带有 DDoS 防护功能的 CDN 服务
  • 基于云的 DDoS 防护服务(AWS Shield、Cloudflare 等)
  • Anycast 网络扩散
  • 资源超配

来源:topics/security/README.md322-323

软件供应链安全

软件供应链安全专注于在整个开发和部署过程中保护代码和依赖项的完整性。随着现代应用程序经常包含大量第三方组件,这一点变得至关重要。

关键顾虑

  • 受损的依赖项
  • 恶意软件包
  • 未经授权的代码更改
  • 构建系统完整性

最佳实践

  • 维护依赖项清单
  • 使用依赖项扫描工具
  • 实施校验和和签名验证
  • 使用私有存储库获取经过验证的依赖项
  • 应用补丁管理流程

包管理安全

包管理的安全注意事项

  • 定期更新依赖项
  • 通过校验和验证软件包真实性
  • 使用锁定文件固定依赖项版本
  • 在 CI/CD 流水线中实现依赖项扫描
  • 控制您的组织可以使用的软件包

来源:topics/security/README.md514-533 topics/security/README.md543-584

安全编码实践

安全的编码实践对于构建能够抵御攻击和保护敏感数据的应用程序至关重要。

关键原则

  1. 输入验证 - 绝不信任用户输入
  2. 输出编码 - 防止注入攻击
  3. 身份验证和授权 - 正确实现
  4. 会话管理 - 安全处理会话
  5. 错误处理 - 不要暴露敏感信息
  6. 加密 - 使用强算法和正确的密钥管理
  7. 日志记录和监控 - 跟踪安全事件

实施安全的编码实践需要

  • 开发人员培训和意识
  • 注重安全的代码审查
  • 静态和动态应用程序安全测试
  • 设计阶段的安全要求

来源:topics/security/README.md323-326

结论

安全是现代 DevOps 实践的关键方面。通过在整个开发生命周期以及所有基础设施层中集成安全性,组织可以更好地保护其系统、数据和用户。本文档中概述的安全实践为实施强大的安全控制奠定了基础,但安全是一个持续的过程,需要不断的评估、改进和警惕。

请记住,安全最强大之处在于分层应用(纵深防御),并且安全考虑因素应从一开始就融入系统,而不是事后添加。始终了解新兴威胁和不断发展的最佳实践,以保持有效的安全态势。