JAWS DAYS 2022 - Satellites https://jaws-ug.doorkeeper.jp/events/140008
1© 2021 eureka, Inc. All Rights Reserved.CONFIDENTIAL INFORMATION: Not for Public Distribution - Do Not CopyAll Hands MeetingPairsにおけるEKSセキュリティの取り組みJAWS DAYS 20222022/10/08© 2021 eureka, Inc. All Rights Reserved.
View Slide
© 2021 eureka, Inc. All Rights Reserved.Takumi Ogawa (twitter: @_ogady_)- 株式会社エウレカ- SREチーム- SRE Lounge/SRE NEXT運営- 守備範囲- インフラ構築〜監視運用、セキュリティ対応、必要に応じてプログラムの修正やパフォーマンス最適化etc..- 最近は趣味で絵を書いてますAbout Me
© 2021 eureka, Inc. All Rights Reserved.Agenda- Pairsの紹介- PairsにおけるEKSセキュリティの取り組み- EKSセキュリティの概要- PairsのEKSセキュリティ- まとめ
© 2021 eureka, Inc. All Rights Reserved. 4恋活・婚活マッチングアプリ真剣な交際・結婚を望むすべての人向け日本で最も使われている恋活・婚活マッチングアプリ日本人特有の交際相手探し、恋愛に対する障壁を和らげる様々な自己紹介やコミュニケーション機能24時間365日オペレーターが待機し公的身分証明書の確認、お問い合わせ、パトロール監視に対応25歳~34歳が最多利用者年齢
© 2021 eureka, Inc. All Rights Reserved.ここから本題- PairsにおけるEKSセキュリティの取り組み -
© 2021 eureka, Inc. All Rights Reserved.話すこと- EKSクラスターに対するセキュリティプラクティス概要(後述)- Pairsで導入しているEKSセキュリティプラクティス話さないこと- EKSクラスター以外のセキュリティの詳細について- Container Image、Webアプリケーションの脆弱性対策など- セキュリティリスクとその評価ついて本セッションについて
© 2021 eureka, Inc. All Rights Reserved.EKSは複数のレイヤーごとにセキュリティの関心ごとがあり、どのレイヤーで何を守るのかの判断が難しい。- AWSセキュリティ- Kubernetesセキュリティ- Container セキュリティ- アプリケーションセキュリティ- etc…EKSセキュリティの概要
© 2021 eureka, Inc. All Rights Reserved.EKSセキュリティの概要具体的にどのようなセキュリティリスクがあってどう対策するべきなのか?- Kubernetesのセキュリティについては公式のドキュメントがあり、チェックリストなども用意されている- EKSに特化したものとして、AWSが作成しているEKS Best Practice Guideというドキュメントがある- 古くなっている記述も一部あるが、EKSのプラクティスが網羅的にまとまっているので目を通しておくと良い
© 2021 eureka, Inc. All Rights Reserved.PairsではEKS on EC2を使っているが、Worker Nodeの種類によって責任共有モデルが変わる。PairsではManaged Node Groupを採用しており、主にWorker Nodeのセキュリティ対策が必要。EKSの責任共有モデル(ref: EKS Best Practices Guides -Amazon EKS Best Practices Guide for Security-) © 2022 Amazon Web Services | Images are licensed under CC BY 4.0
© 2021 eureka, Inc. All Rights Reserved.Kubernetesのドキュメントではクラウド ネイティブセキュリティの4C(Cloud、Cluster、 Container、Code)として階層分けされている。Kubernetesのセキュリティ(ref: Overview of Cloud Native Security | Kubernetes) © 2022 The Kubernetes Authors | Images are licensed under CC BY 4.0 今回のセッションではClusterレイヤーに絞ってお話しします。
© 2021 eureka, Inc. All Rights Reserved.- Identity and Access Management- Pod Security- Runtime Security- Network Security- Multi-tenancy- Detective ControlsEKS Best Practice Guideに基づく、Managed Kubernetes Serviceを使用する際のセキュリティ領域EKSセキュリティ領域 - Infrastructure Security- Data Encryption and Secrets Management- Regulatory Compliance- Incident Response and Forensics- Image Security
© 2021 eureka, Inc. All Rights Reserved.今回セッションではPairsのEKSで導入しているものの内、EKSクラスターに関連する領域に絞って紹介します。今回ご紹介する内容 - Identity and Access Management- Pod Security- Runtime Security- Network Security- Multi-tenancy- Detective Controls- Infrastructure Security- Data Encryption and Secrets Management- Regulatory Compliance- Incident Response and Forensics- Image Security
© 2021 eureka, Inc. All Rights Reserved.Kubernetesには、ID管理とアクセスコントロール管理の仕組みが提供されている一方で、AWSレイヤーでも同様の機能としてIAMが存在し、この2つを協調させてセキュリティを担保する。認証/認可を適切に制御することで、認証情報を利用した不正操作の影響範囲を制限できる。EKS Best Practice Guideでは、- Controlling Access to EKS Clusters(EKSクラスターへの認証/認可管理)- Pods Identities(Podに付与する認証/認可管理)の二つに対してさまざまなプラクティスが紹介されている。Identity and Access Management
© 2021 eureka, Inc. All Rights Reserved.Identity and Access Managementに対して大きく二つの技術要素を採用。- aws-auth- 設定情報をaws-auth ConfigMapに記述し、AWS IAMをKubernetesのRBAC機構と連携できる- 主にControlling Access to EKS Clustersの文脈で使用- IRSA- AWS IAM ロールをKubernetesサービスアカウントにマッピングすることができる- AWSリソースに対してアプリケーションごとのアクセスコントロールが可能になる- クラスターのロールはあくまでNodeが動くために必要なものなので、Pod単位で固有の権限を割り当てたい- 主にPods Identitiesの文脈で使用Identity and Access Management - Pairsの事例 -
© 2021 eureka, Inc. All Rights Reserved.Controlling Access to EKS Clusters- AWS IAM Identity Center & Oktaに移譲する事で、ユーザー管理を一元化できる- Kubernetesでの単独認証は行なわず、aws-authのみを利用する事でAWS IAMでアクセスコントロール管理ができる- 各IAMには限られたスコープに限られた権限を付与する- また、EKSを作成したロールにデフォルトでsystem:masters が自動的に付与されるので専用のロールでEKSを作成するIdentity and Access Management - Pairsの事例 -
© 2021 eureka, Inc. All Rights Reserved.Pods Identities- AWSにアクセスするPodは一部のaws-nodeのようなEKS固有のコンポーネントを除き、IRSAを必ず利用する- IMDSv2 を使用する- サービス アカウントトークンの自動マウントを無効にするIdentity and Access Management - Pairsの事例 -
© 2021 eureka, Inc. All Rights Reserved.Pod Security Standerds(PSS)- Kubernetesの公式ドキュメントに、Pod Security Standards が定義されており、これを遵守することで推奨されるPodのセキュリティを担保できる- PSSに準拠することで、特権コンテナやHostPathマウントによるHost侵害、特権昇格から守ることができる。- PSSのProfileはPrivileged → Baseline → Restrictedの三段階存在する- aws-nodeや、ロギングエージェント用のPodなどは特権的アクセスが必要なのでPrivilegedで許容する- Pairsでは、サービスアプリケーションのPodに対して、始めはBaselineでPSSを導入し最終的にはRestrictedなApplyを目指す方針Pod Security
© 2021 eureka, Inc. All Rights Reserved.Pod Security Pod Securityに対して大きく二つの技術要素を採用- OPA/Conftest- OSSの汎用ポリシーエンジンであるOPAと、OPAを利用してJSON、YAMLなどをチェックできるConftestを使用することで、Kubernetes manifestsのCIチェックができる- Gatekeeper- Gatekeeperは、KubernetesのAdmission Controllerとして動作するカスタムコントローラー- OPAに設定されたPolicyに反するmanifestsのデプロイを禁止したり、動作中のアプリケーションのチェックが可能
© 2021 eureka, Inc. All Rights Reserved.Pod Security Standerds(PSS)チェック Code Scanning(Manifestsのチェック)- Policy as a Code (PaC)をOPA/Rego/Conftestを用いてCIに導入することでコードレベルでPSSを担保している- Aqua Securityが実装してくれているPSS Rego Policyを参考に実装Real Infra Check(実際に動いているPodのチェック)- Gatekeeperで監視/チェックする(Pod Security AdmissionはEKS version1.23からbetaなので見送り)- Code Scanningで使用しているOPA/ConftestのRego policyをkonstraintでGatekeeper用のConstraintTemplateに変換して共通利用する
© 2021 eureka, Inc. All Rights Reserved.Pod Security Standerds(PSS)チェック OPA/Conftest、Gatekeeperフロー図
© 2021 eureka, Inc. All Rights Reserved.従来のPairsではアプリログをHostPathから読み込んでいたため、PSS BaselineのHostPath Volumes禁止の項目を満たせていなかったが、application用のlog collectorを作成し、PSSに準拠する対応を行った。Pod Security - 実対応例 - PrivilegedBaselinePrivilegedBaseline not met
© 2021 eureka, Inc. All Rights Reserved.Network Securityに対して大きく二つの技術要素を採用。- Network Policy- デフォルトでは、所属するnamespaceに関わらず、Pod間が自由に通信可能な状態だが、NetworkPolicyを導入することでPod間通信を制御できる- Security groups for pods- Security groups for podsを使うことで、AWSのSecurity GroupとKubernetes Podを統合できる- マルチテナントクラスターで運用している場合、ALBやDBとの通信をアプリケーションごとに分離するためにSecurity groups for podsを使用する- 導入に必要な前提条件が多いのでよくチェックする(Instance Typeの制限、Calico Network Policyを使っている場合の設定値など)Network Security
© 2021 eureka, Inc. All Rights Reserved.Network Policy- Calico add-onを導入しNetwork Policyを有効化- 全てのIngress通信はホワイトリストで管理- クラスタ全体の関心ごとを持つものは、全ての名前空間へアクセス可能とする- その他は必要なアクセスだけを許容する(coreDNS, alb-controllerなどは別の名前空間からのアクセスが必要)- Egressの完全なホワイトリスト制御は現時点では行っていないNetwork Security
© 2021 eureka, Inc. All Rights Reserved.Security groups for pods- L3,L4レイヤーはSecurity Groupで守る- Network PolicyはあくまでもKubernetes内部の通信制御- 主にALB to Pod、Pod to Data Sourceのアクセスコントロールで利用- マルチテナントクラスターでもアプリケーション単位のアクセスコントロールが可能Network Security
© 2021 eureka, Inc. All Rights Reserved.Detective Controls監査ログ有効化や脅威検知ツールの導入により、脅威発生の早期段階で検知し対応可能な状態にする。- Kubernetes APIサーバー、コントローラーマネージャー、スケジューラのログ、監査ログ出力を有効化する- ref: Enabling and disabling control plane logs | Amazon EKS- GuardDutyのKubernetes Protectionを有効にする- ref: Kubernetes Protection in Amazon GuardDuty | Amazon GuardDuty- CloudTrailでIRSA経由のAWSリソースに対するAPI Callを検出する
© 2021 eureka, Inc. All Rights Reserved.Infrastructure Securityホストに対して直接行われる攻撃のリスクを軽減する。- EKS Optimized AMI を利用- Patch Managementについては、Optimized AMIのアップデートに追従する方針- エウレカではAWSの権限をRBACで管理しており、EKSワーカーノードへのアクセスはAWS IAMIdentity Center(旧AWS SSO) x AWS Systems Manager Session Managerで制御できている- CIS Benchmark準拠チェックはBridgecrewがSecurityチームによって導入されている- kube-benchなども選択肢としてあったが、弊社では元々Bridgecrewを他でも使用していたため今回はBridgecrewを採用
© 2021 eureka, Inc. All Rights Reserved.Data Encryptionデータ暗号化によって、復号権限を持たないものからのアクセスからデータを守ることができる。- worker node側のEBSはデフォルト暗号化設定を有効にしている- control plane側のetcdに格納されたSecretsはデフォルトだと暗号化されないので、KMSを使用してエンベロープ暗号化を行っている- ref: Amazon EKS が AWS KMS を使った Secrets のエンベロープ暗号化に対応Data Encryption and Secrets Management
© 2021 eureka, Inc. All Rights Reserved.Secrets ManagementSecrets管理を外部のSecrets Providerにすることで管理が容易になる。また、manifestsに記載する必要がなくなり漏洩リスクも軽減できる。- Podから読み込むSecretsはexternal secretsを使用して、AWS SSM parameterをKubernetesSecretsとして作成し、読み込む方式をとっている- ref: https://github.com/external-secrets/external-secretsData Encryption and Secrets Management
© 2021 eureka, Inc. All Rights Reserved.まとめ 今回紹介した内容をざっくり図示するとこんな感じ
© 2021 eureka, Inc. All Rights Reserved.さいごに セキュリティ対策と一言で言ってもプラクティスはたくさんあるので、体系立ったドキュメントを元に、各領域ごとに整理した上でできるところから始めていくと、導入を進めやすいと思います。今回紹介したものは比較的取り組みやすいものが多いので、悩んでる方の参考になれば幸いです。
© 2021 eureka, Inc. All Rights Reserved.参考文献/リファレンス - セキュリティ | Kubernetes: https://kubernetes.io/ja/docs/concepts/security/- Overview of Cloud Native Security | Kubernetes: https://kubernetes.io/docs/concepts/security/overview/- Amazon EKS Best Practices Guide: https://aws.github.io/aws-eks-best-practices- aws-auth | Amazon EKS: https://docs.aws.amazon.com/ja_jp/eks/latest/userguide/add-user-role.html- IRSA | Amazon EKS: https://docs.aws.amazon.com/ja_jp/eks/latest/userguide/iam-roles-for-service-accounts.html- Pod Security Standerds | Kubernetes: https://kubernetes.io/ja/docs/concepts/security/pod-security-standards/- Aqua Security(PSS Policy): https://github.com/aquasecurity/defsec/tree/master/internal/rules/kubernetes/policies/pss- konstraint: https://github.com/plexsystems/konstraint- Network Policy | Kubernetes: https://kubernetes.io/ja/docs/concepts/services-networking/network-policies/- Pod Security Group | Amazon EKS: https://docs.aws.amazon.com/ja_jp/eks/latest/userguide/security-groups-for-pods.html- Calico add-on | Amazon EKS: https://docs.aws.amazon.com/ja_jp/eks/latest/userguide/calico.html- Kubernetes Protection in Amazon GuardDuty | Amazon GuardDuty: https://docs.aws.amazon.com/guardduty/latest/ug/kubernetes-protection.html- Enabling and disabling control plane logs | Amazon EKS:https://docs.aws.amazon.com/eks/latest/userguide/control-plane-logs.html#enabling-control-plane-log-export
© 2021 eureka, Inc. All Rights Reserved.We’re hiring!エウレカではエンジニアを積極採用中! カジュアル面談もお待ちしております!
33© 2021 eureka, Inc. All Rights Reserved.