March 19, 2019 · ARTS 本文字数: 1.5k 阅读时长:6 min 全站字数:361.8k

ARTS-001-容器安全-Java字节码工具-40岁程序员的职业生涯

  1. Algorithm
  2. Review
    1. 什么是容器和微服务
    2. 微服务化和容器化中的安全风险
    3. 最佳安全实践
  3. Tips
  4. Share

Algorithm

反转字符串

Review

英文文章microservice container security best practices.

这篇文章主要介绍了使用容器实现微服务化时, 为了达到一定的安全性,
所采取的最佳实践.

什么是容器和微服务

容器和微服务的定义可以参考美国NIST的定义.

Microservices: A microservice is a basic element that results from the
architectural decomposition of an application’s components into loosely coupled patterns
consisting of self-contained services that communicate with each other using
a standard communications protocol and a set of well-defined APIs, independent of any vendor, product or
technology.

Microservices are built around capabilities as opposed to services, builds
on SOA and is implemented using Agile techniques. Microservices are typically deployed
inside Application Containers.

微服务是将应用架构分解成为松散耦合, 自包含的服务,
这些服务之间通过标准通信协议进行交互. 微服务现在通常在容器中运行.

微服务和容器的结合可以获取的优势有以下几点:

  1. 服务快速部署. 代码构建,打包为容器镜像.
  2. 提升了服务的独立性.
  3. 快速启动, 按需扩容.

微服务化和容器化中的安全风险

  1. 运行的服务众多。带来可维护性和安全性的同时,也很容易被攻击
  2. 通信风险。微服务之间的通信会带来通信速度和安全挑战。
  3. 容器技术本身的安全风险。如攻击者构造镜像来获取应用的数据文件,或者通过恶意代码感染一个容器后,再以此为跳板,攻击其他容器,甚至是宿主机。
  4. 多人可以获取代码权限。修改代码影响整个分布式工作环境。

最佳安全实践

这些安全实践主要来自Apriorit团队以及微服务的实践者, 工业标准文档如:

  1. NIST Special Publication 800-180, NIST Definition of Microservices, Application Containers and System Virtual Machines
  2. NIST Special Publication 800-190,Application Container Security Guide
  3. NISTIR 8176, Security Assurance Requirements for Linux Application Container Deployments
  4. DWP Security Policies and Standards, Security Standard - Microservices Architecture (SS-028)

最佳安全实践的主要内容:

  1. 创建不可变容器。禁止开启容器的shell访问,调试和访问要通过运行时API或者创建宿主机的远程shell。数据要存储在外面。
  2. 只用可信任的官方镜像。检查镜像签名。
  3. 加强镜像仓库的安全性。基于角色的授权访问(系统运维,操作容器或者编排容器),只接受安全可信任的官方镜像,定期修复安全漏洞,标记有安全问题的容器
  4. 每个宿主机部署一个微服务。一个微服务的所有容器使用相同的操作系统内核。不同的微服务不同的系统内核。
  5. 加强宿主机的安全性。NIST建议使用容器定制的宿主机,去除无用功能,减少攻击面。防火墙或者路由器控制出口的流量。控制容器在宿主机的权限, 容器引擎运内核空间,那是容器运行在用户空间。使用linux的安全能力,如 Linux namespaces, Seccomp, Cgroups, SELinux, and Linux capabilities.
  6. 构建多层防护网。过滤通信流,验证和授权对微服务的访问,使用加密技术。内部和外部环境的隔离。使用私有网络管理容器,使用私有的镜像仓库。
  7. 加入自动化的安全测试用例到构建和CI流程中。
  8. 使用容器的原生监控工具。如Docker Security Scanner其他一些安全工具。监控首先收集容器的事件,然后应用安全规则。静态规则可以定义可以运行的容器以及可以请求外部HTTP的容器。动态规则可以创建基线,通知可能的网络嗅探和异常的流量。
  9. 使用微服务编排引擎。1) 使用API 网关作为编排层; 2)将编排作为一个单独的微服务。编排服务拉取容器镜像,部署容器,管理容器的运行。自动化部署以及提升容器的安全性。
  10. 控制微服务的API访问权限。

Tips

Java的字节码查看工具javap, 将Class文件反编译为可读的格式.

一般使用javap -v <Class>即可, 具体可以查看帮助javap --help

Share

关于40+程序员的职业生涯问题的文章.

Old coders never die, they just become middle managers.

In 2007, Mark Zuckerberg, then 22, said out loud what many in the software
industry think: “Young people are just smarter.”

“I’m always surprised when older programmers keep up on technology.”

Despite his decades of experience, he was rejected for all other positions

40+程序员的职业问题。这个问题极少有人关注,无法获得相关数据。整个软件行业的是年龄分布是比较年轻的。Google和Amazon的中位数是30.
而美国工作人员的中位数是42.

2018年Stack Overflow的对100,000程序员的调查,75%是在35岁之下。在Hacker News会周期性的出现老的开发者怎么办的问题。

According to a 2018 research paper, skills change faster in science,
technology, engineering, and mathematics (STEM) jobs than in other industries,
and the headlong rate of change for programmers is especially severe

需要不断更新自己的技能, 解决难题, 通过写作,演讲,指导, 提升技术领导力.
将自身的经验, 如安全风险的把控能力应用到新的项目中.

Kadeem L. Noray, one of the paper’s authors, says that “STEM is more
skills-oriented that other fields,” valuing short-lived competencies over
durable wisdom. For each skill a STEM professional learns, another becomes
obsolete, leaving little chance for accumulating skills and increasing salary.

而有些人是内向的, 或者无法通过他人来完成工作, 所以也不适合当管理者.

在大公司虽然有Individual Contributor Track, 但是相比管理线的晋升,
还是有很多缺点. 如晋升速度慢, 级别之间定义模糊.

Proven engineers who occupy the most senior roles should be deployed to solve
the hardest problems on the most critical projects. Their roles should
emphasize technical leadership through writing, speaking, and mentoring.

Because of their deep knowledge and broad experience, older programmers are able
to translate their knowledge into ordinary terms, which puts them in a position
to act as ambassadors to the nonprogramming world

in a society increasingly governed by software and algorithms, programmers
must gain some wisdom to match their power.

Cultivating lifelong coders will ensure that the lessons learned today are
still remembered 50 years from now.