ブログ

K3s + Sysdig:クラスターのデプロイとセキュリティ確保...8分以内で!

K3s + Sysdig:クラスターのデプロイとセキュリティ確保...8分以内で!

本文の内容は、2020年10月13日にDan Papandreaが投稿したブログ(https://sysdig.com/blog/k3s-sysdig-falco/)を元に日本語に翻訳・再構成した内容となっております。

Kubernetesが世界を食っている今、Rancherのウィザードによって作成されるK3sと呼ばれる代替の認定Kubernetesオファリングを見つけてください。

K3sは、その簡単なデプロイ、ローフットプリントのバイナリー、そしてフルKubernetesでは高度すぎるかもしれない特定のユースケースに使用できることから、コミュニティで多くの関心を集めています。K3s は完全に CNCF (Cloud Native Computing Foundation) 認定の Kubernetes オファリングです。これは、通常のKubernetesに対して動作するようにYAMLを書くことができ、それらはk3sクラスタ上で全く同じように動作することを意味します。

このブログ記事では、k3sのデプロイをウォークスルーします。その後、Falco OSS(オープンソースのランタイムエンジンとそのルールとアラートがk3sでどのように動作するかを理解したい方のために)とSysdig Essentialsをインストールして、k3sのセキュリティと可視性を素早くウォークスルーし、k3sの凄さをより多くの凄さで強化していきます。8分以内に安全で完全に監視可能なクラスタを作成する方法を、ステップとスクリプトを提供します。

その前に....

k3sとは?

0.png

軽量なKubernetes:本番環境に対応、インストールが簡単、メモリが半分、すべて100MB以下のバイナリーであり、Edge、IoT、CI、開発、その他多くの方法で、小さくて強力なパッケージにk8sの機能を埋め込むのに便利です。

Ranchers自身のgitpageの言葉を借りれば、次のようになります:

k3s は完全に準拠したプロダクションレディの Kubernetes ディストリビューションであり、以下の変更点があります:

  1. 単一のバイナリとしてパッケージ化されています。
  2. デフォルトのストレージバックエンドとして sqlite3 のサポートが追加されました。デフォルトのストレージバックエンドとして sqlite3 のサポートが追加されています。
  3. Kubernetes とその他のコンポーネントを単一のシンプルなランチャーにまとめています。
  4. 軽量環境向けの合理的なデフォルトでセキュアです。
  5. OS への依存は最小限からゼロです(まともなカーネルと cgroup のマウントが必要なだけです)。
  6. Websocketトンネルを介してKubernetesコントロールプレーンノードにこのAPIを公開することで、kubelet APIのためにKubernetesワーカーノードのポートを公開する必要がなくなります。

どのような仕組みになっているのか?(図。絵は千の言葉を語ることもあるので) この図は、k3sのコンポーネントがバニラのKubernetesディストリビューションのものと似ていることを示していますが、本質的には似ているだけです。

1.png

k3sクラスタをデプロイしましょう (1-3分)

3つのノードを持つk3sクラスタを迅速にデプロイするために、以下の3つのオプションを提供します。Terraform 設定を更新するか、プロバイダースクリプトでノードを追加することで、ノードを追加することができます。

A. Rancherデフォルトスクリプト

  1. k3sの最新リリースをダウンロードしてください。免責事項:Sysdig/FalcoではARMは未対応です。
  2. サーバを実行します。
sudo k3s server &
# Kubeconfig is written to /etc/rancher/k3s/k3s.yaml
sudo k3s kubectl get node

別のノードで、以下を実行します。node_token は /var/lib/rancher/k3s/server/node-token から来ています。

# on your server
sudo k3s agent --server https://myserver:6443 --token ${NODE_TOKEN}

B. k3sup

k3sup は、ローカルまたはリモートの VM 上で k3s を使ってゼロから KUBECONFIG にアクセスするための軽量なユーティリティです (Alex Ellis による)。必要なのは ssh アクセスで、k3sup バイナリを実行し、すぐに kubectl アクセスを得ることができます。

GKEやAWSで3つのノードをプロビジョニングし、その上でk3sをk3supでデプロイするTerraformスクリプトをいくつか用意しました。また、ノードの IP アドレスと ssh 鍵を調整する必要がありますが、さらに簡単にするために k3sup.sh スクリプトも作成しました。

2.png

C. マネージドk3sクラスター

Civo Cloudは、世界初のk3sを搭載したマネージドKubernetesサービスです。マネージドサービスを利用すれば、数回クリックするだけでクラスターの準備ができます。

Falcoをインストールしよう! (3~4分) (OSS)

Falcoはオープンソースのランタイムセキュリティツールです。元々はSysdig, Inc.によって構築され、CNCFに寄付され、現在はCNCFのインキュベーションプロジェクトとなっています。Falcoは実行時にカーネルからのLinuxシステムコールを解析し、強力なルールエンジンに対してストリームをアサートします。ルールに違反した場合、Falcoのアラートがトリガーされ、多くの便利なメカニズムに送ることができます(このブログの後の方にリストアップしています)。

これは @krisnova さんがまとめてくれた、Falco がどのように動作するかを示す素晴らしい図で、k3s を表示するために修正しました。

3.png

Falcoのデフォルトルールセット

デフォルトでは、Falco には、以下のようなカーネルの異常な動作をチェックする成熟したルールのセットが同梱されています。

  • 特権コンテナを使った特権のエスカレーション
  • setns のようなツールを使ったネームスペースの変更
  • etc, /usr/bin, /usr/sbin などのよく知られたディレクトリへの読み込み/書き込み
  • シンボリックリンクの作成
  • 所有権とモードの変更
  • 予期しないネットワーク接続またはソケットの突然変異
  • execve を使用してスポーンされたプロセス
  • sh, bash, csh, zsh などのシェルバイナリの実行
  • ssh, scp, sftp などの SSH バイナリの実行
  • Linux coreutils の実行ファイルを変異させる
  • ログインバイナリの変異

shadowutilやpasswdの実行ファイルを変異させる

  • shadowconfig
  • pwck
  • chpasswd
  • getpasswd
  • change
  • useradd
  • 等々

Falcoアラート

Falcoは、1つ以上のチャンネルにアラートを送信することができます。

  • 標準出力
  • ファイル
  • Syslog
  • スポーンされたプログラム
  • HTTP[s] エンドポイント
  • gRPC API経由のクライアント

Falcoのインストール

Falco とは何か、何をするのかがわかったので、k3s クラスタで Falco を実行するための手順を説明します。

1. k3s script、k3sup、またはcivo cloudのいずれかの方法でクラスタをデプロイします。

4.png

2. オプションで、次のようにしてネームスペースを作成します: kubectl create ns falco。

3. helm install falco falcosecurity/falco を実行します。GCP またはそれ以降のカーネルを使用している場合は、次のようにしてみてください:helm install falco falcosecurity/falco -set ebpf.enabled=true.

5.png

Falcoのアクション

ここでは、ルール違反の例と、Falcoからの結果の出力(標準出力)を示します。

Falcoのルール:ネットワークツールがコンテナ内で起動しました。

6.png
この画像のalt属性が入力されていません

アタック

7.png

結果:カーネルの速度でSTDOUTに通知され、JSONや他の形式で送信することができます!

Falcoルールの詳細やインストールの詳細については、falco.orgをチェックしてみてください。

Sysdigをインストールしよう! (商用ツール、分数3~8)

新しいSysdigのオンボーディングを使えば、5分もかからずに設定できます。

1. 無料トライアルにサインアップしてください。

8.png

2. 当社の "Get Started" curlスクリプトを介してインストールします。

9.png
  • アクセスキーとクラスタ名を必要とするcurl文が提供されます。今回は sysdg-k3s を使用しました。
  • K3s は containerd ランタイムに標準ではない場所を使用しています。これをcurl文の最後に追加する必要があります。
  • -cd unix:///run/k3s/containerd/containerd.sock -cv /run/k3s/containerd

k3sを動かすためのSysdig:5つの必須ワークフロー

インストールが完了したので、Sysdig がもたらすものを見てみましょう。

10.png

それでは、作成したばかりの k3s クラスタで、5 つの重要なワークフローを実際に見てみましょう。イメージスキャンから始めて、全体的な可視性に至るまでを見ていきます。セキュリティイベント中に何が発生しているかを理解することは非常に重要です。

1. イメージスキャン

11.png

この例では、busyboxイメージをk3sポッドとしてデプロイしています。Sysdigのイメージスキャナは、インライン(CI/CDパイプライン内のローカル)とレジストリからのフェッチの両方でイメージを解析できます。

Sysdigは、イメージスキャンのベストプラクティスに従うのに役立ちます。例えば、インラインスキャンでセキュリティをシフトレフトさせ、パイプラインの早い段階でセキュリティ問題を検出し、レジストリにプッシュされる脆弱なイメージをブロックすることができます。

必要なのはイメージだけ・・・あとは私たちにお任せください。

2. ランタイムセキュリティ:Falcoルールエンジン...PLUS+

Falcoの例で使用したのと同じルールをSysdig Secureでも使用できます。しかし、今回はコンテナを停止して監査証跡を残すことができました。

12.png

Sysdig Activity Auditには、k3s cluster/pod/process/containerで実行された他のすべてのコマンドとともに、ncatコマンドの実行が表示されます。

13.png

私たちのUIで見ることができる豊富なコンテキストのすべては、下流のSIEMに抽出することができ、セキュリティを組み込んだKubernetesを追求し、パワーアップさせることができます。

3. コンプライアンス

14.png

現在のところk3sのCISベンチマークはありませんが、通常のkubernetesホストやlinuxホストの規約は機能します。これにより、インスタンスレベルでk3sクラスタのコンプライアンスを調整し、確実にすることができます。

環境全体のコンプライアンススコアをSysdig内のダッシュボードとして可視化することができます。

4. Kubernetesとコンテナの監視

15.png

k3sクラスタの利用率、可用性、全体的なキャパシティを理解することは非常に重要です。この重要な情報は、リソースを追加したり削除したり、それに応じてサイズを変更したりするのに役立ちます。リソースをより良く管理することで、コストを節約することができます。

5. アプリケーションとクラウドサービスの監視

16.png

Sysdigが提供するダッシュボードは、最も一般的なクラウドサービスを監視するのに役立ちます。これらはゴールデンシグナルの原則に沿っており、最終的なユーザーから見たアプリケーションの健全性とパフォーマンスの非常に良いアイデアを提供してくれます。

SysdigはKubernetesモニタリングのデファクトスタンダードであるPrometheusと完全に互換性があります。つまり、開発者はPromCatのようなリポジトリから様々なリソースにアクセスしながら、お馴染みのツールを使い続けることができます。

まとめ

今日は何を学んだのでしょうか?K3sは優秀で、シンプルなバイナリでKubernetesのデプロイのしやすさと機能を手に入れることができます。

Sysdigを加えれば、それは間違いありません。インスタンス上でK3を実行し、DevOpsに不可欠な5つのワークフローと合わせて、すべてを8分以内に完了させることができます。

今すぐk3sクラスタを導入して、FalcoとSysdigで安全に運用しましょう。

役立つリンク

Darren Shepherd氏とRancherチームの皆様、斬新な発想でk3を作成してくれたことに感謝します。

ご質問・お問い合わせはこちら

top