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


1 min read
Kubernetesのセキュリティのベストプラクティス by Ian Lewis

Japan Container Days v18.04で表題のセッションを聞いたので、まとめました。

スライド資料

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

APIサーバへの攻撃を防ぐ

RBACでPodに付与される権限を絞る

Podにはシークレットが自動でマウントされるため、不正アクセスにより読み込まれてしまうと危ない

FirewallでAPIサーバへのアクセスについてIP制限を付与する

いざ、シークレットが漏れた場合でも、APIサーバにアクセスされてしまわないように、ファイアウォールでIP制限をかけておくと良い

NetworkPolicyでDBへの接続が許可されるPodを制限する

大体の場合、重要なデータはDBに有るため、DBへのアクセスを絞ることで安全性を上げる

example:

kind: NetworkPolicy
apiVersion: networking.k8s.io/v1
metadata:    
  name: redis
spec:
  podSelector:    
    matchLabels:
      name: redis
  ingress:
  - from:
    - podSelector: 
      matchLabels:    
        name: guestBook

ホストへの攻撃を防ぐ

次の三つを併用すると良い

non-rootユーザでPodを実行する

example:

kind: Pod
apiVersion: v1
metadata:    
  name: security-context-demo
spec:
  securityContext:
    runAsUser: 1000

読み込み専用ファイルシステムを使用する

example:

kind: Pod
apiVersion: v1
metadata:
  name: security-context-demo
spec:
  securityContext:
    readOnlyRootFilesystem: true

no_new_privs

forkしたプロセスが強い権限を持てないようにする

example:

kind: Pod
apiVersion: v1
metadata:
  name: security-context-demo
spec:
  securityContext:
    allowPrivilegeEscalation: false

seccomp/AppArmor/SELinux

コンテナ自体若干のセキュリティ性能はあるが、ほぼないので、seccompとAppArmor/SELinuxを使用することで、壁を増やす

seccomp

seccomp: Linuxでプロセスのシステムコールの発行を制限する機能

dockerではseccompはデフォルトになってが、kubernetesではまだデフォルトになっていないため、dockerのポリシーを流用する

まだアルファだが、使った方が良い

example:

kind: Pod
apiVersion: v1
metadata:
  name: myPod
  annotations:
    seccomp.security.alpha.kubernetes.io/pod: runtime/default

AppArmor

AppArmor: Linux Security Modulesの一つで、ネットワークアクセス、Raw socket アクセス、ファイルへの読み書き実行などの機能を制限する機能

example:

kind: Pod
apiVersion: v1
metadata:
  name: myPod
  annotations:
    container.apparmor.security.beta.kubernetes.io/hello: runtime/default

SELinux

example:

kind: Pod
apiVersion: v1
metadata:
  name: myPod
spec:
  securityContext:
    seLinuxOptions:
      level: "s0:c123,c456"

kubeletの権限を制限する

  • RBACを設定する
    • --authorization-mode=RBAC,Node
    • --admission-control=...,NodeRestriction
  • kubeletの証明書をローテートする
    • --rotate-certificates

トラフィックの傍受を防ぐ

  • Istioを導入する
    • サービス間のプロキシ
    • 暗号化
    • 証明書の自動更新
    • ポリシーの中央管理

Raspberry PiのヘッドレスインストールでWi-Fiを設定する
Previous article

Raspberry PiのヘッドレスインストールでWi-Fiを設定する

uzullaさんがブログでこんなことを書いてた。 しかし…/boot/のどこかに起動後実行されるスクリプトがあれば楽なのにな…(そこで無理やりwifi情報を書き込めば良いわけで) ヘッドレスRaspberry Pi Zero w(h)のコンソールやネットワークなど初期設定についてメモ - uzullaがブログ 私も過去何度かRaspberry Pi Zeroのヘッドレスインストールをしてまして、実はヘッドレスインストールの時にWi-Fi情報を書き込めるファイルがあるのです。 /boot/wpa_supplicant.confというファイルで、ここにWi-Fiの設定を書き込んで起動すると、raspbianが/etc/wpa_

KubeCon + CloudNativeCon Europe 2018にいってきた
Next article

KubeCon + CloudNativeCon Europe 2018にいってきた

過ぎし5月1日〜5月6日、出張でKubeCon + CloudNativeCon Europe 2018に行ってきました! KubeConはKubernetes(k8s)のイベントで、Cloud Native Computing Foundation(CNCF)が主催するCloudNativeConと併せた開催でした。 今回の開催地はデンマークはコペンハーゲンのBella Centerで、実に4000人以上が参加したとのことです。 twitterハッシュタグは#kubeconで、一部#cloudnativeconも使われていたようです。 私個人としては初海外で、初日の移動で腰をぎっくりするなど、トラブルに見舞われながらも、


GO TOP

🎉 You've successfully subscribed to something tech.!
OK