the world as code

EKS Best Practices Guide for Security を読んだ

Amazon EKS Best Practices Guide for Security を読んだ。今年5月に公開された比較的新しい文書で、いわゆる docs.aws.amazon.com の中に収録されておらず、単独で github.io にホストされている。ともすると、 UI からは AWS official な文書なのかわかりにくいのだが、以下の通り、 official でアナウンスされている。

EKS と銘打たれている通り、 Kubernetes ではなく EKS にフォーカスした記述は少なくない。例えば暗号化についての項では、 Nitro におけるトラフィックのデフォルト暗号化に触れていたりする。しかし大半は Kubernetes あるいは Docker そのもののプラクティスになっていて、 EKS に限らずとも、 Kubernetes 使用者にとって学べることは多い。内容は Identity and Access Management に始まり、 Pod や Network 、 Runtime といった各要素のセキュリティプラクティスを俯瞰し、 PCI DSS のようなコンプライアンス関係についても少し記述を割いている、かなり包括的な内容となっている。

すべてオープンソースでの公開となっており、 https://github.com/aws/aws-eks-best-practices から issue や Pull Request を出すこともできる。また、 for Security と銘打っている以上、他にも for XXX が続くのではないかと期待されるところだが、レポジトリに GitHub Project が設けられており、そこから Performance 、 Reliability 、 Cost Optimization などが計画されていることが垣間見える。つい先日は for Cluster Autoscaler が追加された。個人的に、 AWS のドキュメントを読んで組めるのは「とりあえず使える Kubernetes」であり、そこからプラスアルファで行うべきプラクティスは非常に多く、なかなか捉えどころも難しいように感じている。何年か前の状況に置き換えると、 EC2 で nginx と Rails を動かすだけならそれなりに簡単だけど、セキュリティグループや LB をきちんと扱えているか、 Scaling をどうするのかといった非機能的要件になると話が変わってくるようなイメージだ。それがオフィシャルな Best Practices としてまとまり、さらにオープンに編集可能というのは非常に嬉しいことだなと感じている。

以下、自分が読んだ中でメモした箇所をいくつか挙げておく。

  • Pod Security
    • コンテナイメージに shell を入れるべきではない
      • sh ぐらいは入れていることがあるので、そこまで徹底出来る方が確かに好ましそう
    • Pod Security Policy
      • https://kubernetes.io/docs/concepts/policy/pod-security-policy/
      • root での起動を許可しないなどいくつかルールを定め、そのルールに従った Pod 以外は起動できなくするもの
      • まだ beta だが使ってみたいところ
  • Multi-tenancy
  • Detective Controls
    • audit log の解析や監視
    • 同様に CloudTrail log も
    • 地力で監視するのはどう考えても大変なので自動化して何か考えたいが。。
  • Infrastructure Security
  • Incident response and forensics
    • 実際にセキュリティインシデントが発生したら、どう対処するか
      • Network Policy を使った通信の遮断
      • 該当 node に対して cordon を実施
      • 問題のある node や pod に label を付与してわかりやすくしてから対処する
      • などなど
  • Image Security