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

Kubernetesのセキュリティのベストプラクティス

 Kubernetesのセキュリティのベストプラクティス

Ian Lewis

March 08, 2018
Tweet

More Decks by Ian Lewis

Other Decks in Technology

Transcript

  1. Guestbookアプリ • Web Frontend ◦ ウェブアプリ ◦ HTML/JS/CSS • Message

    ◦ メッセージを 保存・閲覧 • NGWord ◦ NG ワードを 検出する Kubernetes Cluster Web Frontend Redis NGWord message
  2. Kubernetes API Server 1. フロントエンド Pod から トークンを取得 2. トークンを利用し、

    API サーバーを攻撃 3. シークレットなどを取得 し、さらに サービスを攻撃 Kubernetes Cluster Web Frontend Redis NGWord message ① ② ③
  3. Mitigate 1 & 2: RBAC • Role Based Access Control

    • ユーザーやサービスアカウントへロールを付与 • ロールが権限を持つ ◦ get secrets ◦ update configmap ◦ etc. • RBAC 設定はネームスプペース範囲 • GKE では IAM と連携
  4. Mitigate 2: API Server Firewall • API サーバーへのアクセスを IP アドレスに制限

    • GKE: ◦ gcloud container clusters create --enable-master-authorized-networks --master-authorized-networks=....
  5. Mitigate 3: Network Policy • データベースへのアクセスを必要のある Pod に制限 • ラブルセレクターで

    Pod を選択 • ネットワークプラグインで実装されてる : Calico, Weave, etc.
  6. NetworkPolicy kind: NetworkPolicy apiVersion: networking.k8s.io/v1 metadata: name: redis spec: podSelector:

    matchLabels: name: redis ingress: - from: - podSelector: matchLabels: name: guestbook
  7. Mitigate 1: 組み合わせ apiVersion: v1 kind: Pod metadata: name: security-context-demo

    spec: securityContext: runAsUser: 1000 readOnlyRootFilesystem: true allowPrivilegeEscalation: false
  8. SELinux apiVersion: v1 kind: Pod metadata: name: mypod spec: securityContext:

    seLinuxOptions: level: "s0:c123,c456" containers: - name: hello ...
  9. Mitigate 2 & 3: Kubeletの権限を制限する • RBAC for Kubelet: ◦

    --authorization-mode=RBAC,Node --admission-control=...,NodeRestriction • Rotate Kubelet certs: ◦ kubelet … --rotate-certificates
  10. Unsecured Pods • You follow the rules but others don't

    Kubernetes Cluster Web Frontend Redis NGWord message
  11. Mitigate: PodSecurityPolicy apiVersion: extensions/v1beta1 kind: PodSecurityPolicy metadata: name: example spec:

    privileged: false # Don't allow privileged pods! # The rest fills in some required fields. seLinux: rule: RunAsAny supplementalGroups: rule: RunAsAny runAsUser: rule: 1000 fsGroup: rule: RunAsAny volumes: - '*'
  12. istio 1. サービス間の プロクシー 2. 暗号化 3. 証明書の自動更新 4. ポリシーが

    セントラルサーバで集 中して管理する Kubernetes Cluster Web Frontend Redis NGWord message