Upgrade to Pro — share decks privately, control downloads, hide ads and more …

EC2からKubernetesへの移行をセキュリティから考える

Eiji Sugiura
February 23, 2019

 EC2からKubernetesへの移行をセキュリティから考える

JAWS DAYS 2019 E track 2019-02-23 14:10-14:40 の登壇資料です。

freeeが扱う情報の恐さを体験していただいたのち、Cyber Kill Chainフレームワークに沿って、EC2 instanceからKubernetesにサービスを移行する作業を、可能な限りの最高速でシステムを実装しつつセキュリティを担保するために、どう考えてきたかを紹介します。

後半の「EC2からKubernetesへの移行をモニタリングから考える」は、以下です。
https://speakerdeck.com/atk/freeeniokeru-kubernetesjian-shi-ji-pan

Eiji Sugiura

February 23, 2019
Tweet

More Decks by Eiji Sugiura

Other Decks in Technology

Transcript

  1. 創業からIPOまで、中小企業活性化のためのサービスを一気通貫で提供 freee会社概要 ❂ 納税する ↗ 育てる ↻ 運営する ✩ はじめる

    会社設立 freee 開業 freee クラウド会計ソフト freee 人事労務 freee (マイナンバー管理 freee 含む) クラウド申告 freee 161億603万円 (資本準備金等含む) 従業員数 事業内容 クラウド型バックオフィスサービスの開発・販売 資本金 設立年月日 2012年7月 505名(2019年1月末時点) 2017年「働きがいのある会社」 ランキング3位
  2. 会計・給与共に法人シェアNo.1 クラウド給与ソフト 市場 40% クラウド会計ソフト 市場 35.2% 100万 事業所 以上

    10万 事業所 以上 * BCN調べ * MM総研調べ * 2017年8月より、クラウド給与計算ソフト freeeは、機能を強化し、新たに 「人事労務 freee」というサービス名に変更しました。  
  3. 8 金融機関・ 各種サービス連携数 3,822 POSレジ 金融機関 ログイン・ 認証 業務システム ECサイト

    共有ツール 決済サービス ファイル取込 クラウド会計ソフト 業界最多の連携数を実現
  4. 1010001110110101010101 0100010110101001010100 0100010011010101010100 10100010110010111010100 1010001110110101010101 0100010110101001010100 0100010011010101010100 10100010110010111010100 機械学習を用い作業の自動化を促進 自動で経理

    -テキスト情報処理- 銀行やクレジットカードなど、お金の管理をするサービスと連 携。日々の入出金情報を自動取得、さらに人工知能が仕訳 を推測し、業務量を大幅に削減可能に。 連続取引登録 -画像情報処理- 紙として発生してしまう領収書などは、OCR技術で分析。画 像データから、日付や金額、勘定科目を推測し、手入力の負 担を削減可能に。 機械学習で仕訳を推測し ルール化 決済サービス 預金データ クレジット POS・レジ 各種データ 推測 推測 推測 =金額:1840円 =日付:3月15日 =電話番号:旅費交通費 画像から文字を推測し ルール化 機械学習で モレ・ダブリ・ミスを検知 AI月次監査 -異常検知- 試算表及び月次推移の閲覧・確認時に「処理モレ、仕訳のダ ブリ・記帳ミス」を自動的に発見し、対処事項をリコメンド。  
  5. security group 外部と内部からの侵入を想定 想定攻略経路/Cyber Kill Chain ELB web instances Amazon

    RDS Amazon S3 log intruder Office intruder 侵入 輸送 探索 潜伏 奪取
  6. Passive Defense/Active Defense 多層防御の考え方 Passive Defense Discover logをとる、履歴を残しておく Detect 異常値を検知する

    Active Defense Deny 止める : Firewall/IPS packet drop Disrupt 妨害する : AntiMalware Degrade 時間稼ぎ : Ratelimit Deceive 撹乱する : HoneyPot Destroy 破壊する : 警察に連絡
  7. Availability Zone 2 security group AWS中心の話 多層防御 with EC2 Auto

    Scaling group Availability Zone 1 ELB web instances Amazon RDS Amazon Redshift Amazon S3 secure.freee.co.jp log log GuardDuty users Multi Factor Authentication Risk Based Authentication Network Segmentation Address Space Layout Randomization Host Audit Application Log Access Log VPC Flow Log AWS WAF
  8. 多層防御 with EC2 攻略手順 Passive/Active Defense 輸送 Web access/Console access

    SecurityGroup WAF IPS 侵入 EC2 instance RAM access AccessLog PackageUpdate ASLR 潜伏 EC2 instance File access AuditLog AntiMalware FileACL 探索 VPC内の探索 VPC flow log NetworkSegmentation 奪取 RDSやS3からの情報略取 QueryLog ObjectLog SecurityGroup AWSが用意してくれるもの EC2 instanceを守るのは自分達
  9. インターネットからの攻略 HTTP request regex filter WAF ELB TCP port restriction

    IPS = HTTP request signature filter Ratelimit/session/URI Application Logic AntiMalware
  10. account B account A Management Console/awscliからの侵入 export AWS_ACCESS_KEY_ID=AK... export AWS_SECRET_ACCESS_KEY=....

    AWS CloudTrail user A user B user A user B Web Console awscli Username/Password Secretの文字列を渡してしまうと...
  11. Management Console/awscliからの侵入 SAML Assumed Role AWS CloudTrail admin account A

    user admin account B user MFA Web Console awscli Secretの文字列を渡さない
  12. [WIP]インターネットへの情報漏洩 DNS query virtual private cloud intruder NTP REST API

    JSON RPC SMTP security group CloudWatch VPC flow log Security GroupのOutbound any openしてませんか? Start/End Timestamp Src/Dst IP Src/Dst Port
  13. Incident Response Alert 調査/解析 修正 Triage 評価/予測 Event driven Intelligence

    driven deployの影響? 潜在bug発見? resource不足? 誤検知? 45 対処必要? Application Signature ACL 脅威検知 お客様 問い合わせ OSINT 定常監視
  14. AWS WAFの進化 Sample Log -> 2018-09 Full Log対応! managed signatureはblackbox

    payloadのどこが検知されたのかは、わ からない AWS WAF Amazon S3 ELB WafCharmはsignatureがwhitebox! Requestのどこを検知したかをFullLogから理 解することができる
  15. GuardDutyは、転ばぬ先の杖 Pros 外部からのPort Scan検知 内部からmalicious site A recordへのDNS Query検知 IAM

    Userの不審な動きの検知 Cons 検知までに数時間かかる、即時性は無い Stagingの運用を確認してから、Productionを建てること DNS query logは残っていない、自分たちで取っておかないと... GuardDuty
  16. Lock in? or vs. AWS WAF Amazon S3 ELB Amazon

    RDS CloudWatch い い とこどり
  17. Kubernetes on AWS (2018 ver.) Pod Worker Node Controller Node

    Cluster kube-aws helm helmfile Cluster
  18. kube-aws Pros Fargateとの違い Multi-AZ対応 既存VPN/Subnetにdeploy Public/Private Network etcd冗長化: 最低3台でclusterを組む Node

    Pool: Role別のOn-demand, Reserved, Spotの使い分け ClusterAutoScaling: 負荷に応じてNode ScaleOut/In
  19. security group 外部と内部からの侵入を想定 想定攻略経路/Cyber Kill Chain ELB web instances Amazon

    RDS Amazon S3 log intruder Office intruder 侵入 輸送 探索 潜伏 奪取
  20. 多層防御 with Kubernetes on EC2 攻撃 防御 輸送 Web access/Console

    access NetworkPolicy IPS 侵入 k8s pod/container RAM access AccessLog RollingUpdate ASLR 潜伏 k8s node File access AuditLog AntiMalware FileACL 探索 k8s namespacesの探索 SystemCallLog NamespaceIsolation 奪取 DBやS3からの情報略取 QueryLog ObjectLog NetworkPolicy なくなってしまったもの AWSが用意してくれるもの
  21. インターネットからの攻略 HTTP request regex filter WAF ELB TCP port restriction

    IPS = HTTP request signature filter Ratelimit/session/URI Application Logic AntiMalware
  22. k8s API Serverからの侵入 MFA IP restriction Office Login/Logout Remote copy

    restriction Amazon S3 Console logging 443/tcp経由で直接podに入れてしまう API server kubectl exec -it $POD /bin/bash
  23. Cluster : Namespace = 1 : N Namespaceの制御は、RBACやNetworkPolicyで行う Pod Worker

    Node Namespace Namespace Namespace Controller Node Cluster security group
  24. k8s <-> AWS Role mapping kiam k8s Pod -> EC2

    Instance Profile aws-iam-authenticator k8s Role -> IAM Role IAM
  25. 69 Kubernetes on AWS (2019 ver.) Pod Worker Node 2018-12-20

    Tokyo regionにやってきた! Managed Controller Node Cluster Cluster
  26. 72 AWS Session Managerの導入 MFA IP restriction Office Login/Logout Remote

    copy restriction Amazon S3 Console logging aws ssm-agent start-session -t i-XXXXXXXX Session Manager AWS CloudTrail Systems Manager
  27. 75 kubectlの嵐 aws eks create-cluster --name devel --role-arn arn:aws:iam::111122223333:role/eks-service-role-AWSServiceRoleForAmazonEKS-EXAMPLEBKZRQR --resources-vpc-config

    subnetIds=subnet-a9189fe2,subnet-50432629,securityGroupIds=sg-f5c54184 aws eks update-kubeconfig --name cluster_name curl -O https://amazon-eks.s3-us-west-2.amazonaws.com/cloudformation/2018-11-07/aws-auth-cm.yaml kubectl apply -f aws-auth-cm.yaml kubectl apply -f https://raw.githubusercontent.com/NVIDIA/k8s-device-plugin/v1.10/nvidia-device-plugin.yml kubectl apply -f https://raw.githubusercontent.com/kubernetes/kubernetes/v1.10.3/examples/guestbook-go/redis-master-controller.json kubectl apply -f https://raw.githubusercontent.com/kubernetes/kubernetes/v1.10.3/examples/guestbook-go/redis-master-service.json kubectl apply -f https://raw.githubusercontent.com/kubernetes/kubernetes/v1.10.3/examples/guestbook-go/redis-slave-controller.json kubectl apply -f https://raw.githubusercontent.com/kubernetes/kubernetes/v1.10.3/examples/guestbook-go/guestbook-controller.json kubectl apply -f https://raw.githubusercontent.com/kubernetes/kubernetes/v1.10.3/examples/guestbook-go/guestbook-service.json
  28. Cluster : Namespace = 1 : 1 Single Namespace Pod

    Worker Node Managed Controller Node Namespace Cluster security group Namespace Namespace