提高微服务安全性的11个方法( 四 )


  • 创建Docker基本镜像的白名单,以在构建时进行检查
  • 确保你正在拉取的基础镜像有加密签名
  • 对推送的镜像的元数据进行签名,以便稍后进行检查
  • 在你的容器中,请使用软件包完整的linux发行版
  • 使用HTTPS拉取第三方依赖
  • 不允许在Dockerfile中,将敏感的主机路径指定为镜像中的存储卷
但是代码呢?
  • 针对已知的代码级安全漏洞在代码库上运行静态代码分析
  • 运行自动的依赖检查程序,以确保你使用的是最新,最安全的依赖版本
  • 启动服务,将自动渗透机器人指向正在运行的容器,然后看看会发生什么
有关代码扫描器,请参见OWASP的源代码分析工具 。
7.降低攻击者的速度如果有人尝试使用数百个用户名/密码组合,攻击你的API,那么他们可能需要一段时间才能成功完成身份验证 。如果你可以检测到此攻击并降低服务速度,则攻击者很可能会消失 。
你可以在代码中或API网关来实现速率限制 。Okta提供了API速率限制和电子邮件速率限制以帮助降低服务攻击 。
8.使用Docker Rootless模式Docker 19.03引入了Rootless模式,此功能,允许用户以主机上的非root用户身份运行Docker守护进程(包括容器) 。这样做的好处是,即使受到威胁,攻击者也将无法获得对主机的根访问权限 。
如果你正在生产中运行Docker守护程序,那么这绝对是你应该研究的东西 。但是,如果你让Kubernetes运行Docker容器,你需要在PodSecurityPolicy中配置runAsUser 。
9.使用基于时间的安全性基于时间的安全性背后的思想是,你的系统永远不会完全安全 。防止入侵者只是保护系统安全的一部分,异常检测和反应也是必不可少的 。
使用多因素身份验证可以减慢入侵者的速度,还可以帮助检测特权级别较高的人何时通过关键服务器进行身份验证 。如果你拥有诸如域控制器之类的组件,来控制网络流量,那么用户只要登录成功,就会向你的网络管理员团队发送警报 。
这只是尝试检测异常,并对异常做出快速反应的一个示例 。
10.扫描Docker和Kubernetes配置中的漏洞Docker容器在微服务架构中非常受欢迎 。Docker Image Security10个最佳实践建议:
  1. 优先选择基本镜像
  2. 使用USER指令,确保使用了最少特权
  3. 签名和验证镜像,以减少MITM攻击
  4. 查找,修复开源漏洞
  5. 不要将敏感信息泄漏到Docker镜像
  6. 使用固定标签实现不变性
  7. 使用COPY代替ADD
  8. 使用元数据标签,例如maintainer和securitytxt
  9. 使用多阶段构建来获取小而安全的镜像
  10. 使用像hadolint这样的 linter 检查工具
11.了解云和集群安全性如果你正在管理集群和云,那么你可能已经知道4C的Cloud Native Security了 。
提高微服务安全性的11个方法

文章插图
 
仅在代码级别解决安全问题,几乎不可能防范云,容器和代码中的安全漏洞 。但是,当你正确地处理这些问题时,就会为代码增加安全性,并将增强本已强大的基础设施 。
Kubernetes博客上有篇文章,标题为《防止攻击的11种方法》 。
  1. 随处使用TLS
  2. 启用具有最低权限的RBAC,禁用ABAC并使用审核日志记录
  3. 使用第三方身份验证程序(例如google,GitHub或Okta)
  4. 分布式部署你的etcd群集,并为其提供防火墙
  5. 旋转加密密钥(Rotate Encryption Keys)
  6. 使用Linux安全功能和受限制的 PodSecurityPolicy
  7. 静态分析YAML
  8. 以非root用户身份运行容器
  9. 使用网络策略(以限制Pod之间的流量)
  10. 扫描镜像并运行IDS(入侵检测系统)
  11. 运行服务网格
这篇文章虽然发布在2018年7月,但我认为,仍然适用于今天的云原生世界 。
总结这些安全模式,前面几点适用于开发人员 。
  1. 通过设计确保安全
  2. 扫描依存关系
  3. 使用HTTPS
  4. 使用访问令牌
  5. 加密和保护密钥
它们的其余部分似乎适用于DevOps人员,或更确切地说适用于DevSecOps 。
  1. 使用交付流水线验证安全性
  2. 降低攻击者的速度
  3. 使用Docker Rootless模式
  4. 使用基于时间的安全性
  5. 扫描Docker和Kubernetes配置中的漏洞
  6. 了解云和集群的安全性
所有这些模式都是重要的考虑因素,因此,组织应该确保开发人员和DevSecOps团队之间保持密切的关系 。实际上,如果你选择了微服务架构,那么这些人就不会在单独的团队中!


推荐阅读