0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Falcoのインストール(helm)

Last updated at Posted at 2025-02-25

はじめに

これまではFalcoの仕組み、Falco Ruleの詳細について紹介しました。

本記事では、Helm や Kustomize を使用して Falco をインストールする方法について解説します。特に GitOps でFalcoをデプロイする際に、Falcoの大規模な ConfigMap を適切に管理できる Kustomize の Base/Overlay 構成について紹介します。

Helmコマンドによるインストール

Helmを使用すると、簡単にFalcoをKubernetes環境へ導入できます。

基本的には公式ドキュメントの手順に従います。

Helmリポジトリの追加

helm repo add falcosecurity https://falcosecurity.github.io/charts
helm repo update

Falcoのインストール

helm install --create-namespace falco falcosecurity/falco -n falco

カスタム設定の適用

values.yaml を編集し、カスタマイズした設定を適用できます。

helm upgrade --install falco falcosecurity/falco -n falco -f values.yaml

values.yamlのフォーマットはこちらです

Kustomize/GitOpsによるインストール

ArgoCD などの GitOps ツールを用いて Falco のデプロイを管理している場合、Kustomize を利用するケースが多いでしょう。

しかし、Kustomize + Helm を用いて Base/Overlay 構成で Falco を管理するのは困難です。
Helm Values をそのまま Base/Overlay 方式で置き換えようとすると、以下のエラーが発生する可能性があります。

merging from generator ... exists; behavior must be merge or replace

また、Kustomize Patch などのツールで replace を指定して修正することもできません。
その理由は、Falco の Helm Values の大半が ConfigMap 内の falco.yaml に格納されているためです。
この ConfigMap の特定の行だけを op: replace で変更するのは非常に難しいです。

そこで、Base を利用しない Kustomize の構成が解決策の 1 つとなります。

もし Base/Overlay 構成を利用したい場合は、HelmChartInflationGenerator を使用するのが最適です。

HelmChartInflationGeneratorの使用

HelmChartInflationGeneratorkustomization.yaml に記述できる helmCharts 項目のことです。
Falco Helm Values の内容を直接 Kustomization に記述するのではなく、まず HelmChartInflationGenerator を通して Base/Overlay 構成を構築し、最終的に Kustomization.yamlGenerator 設定をインポートします。

ファイル構成は以下となります。

.
├── base
│   └── falco
│       ├── generator
│       │   ├── falco.yaml
│       │   └── kustomization.yaml
│       └── kustomization.yaml
├── overlay
│   ├── dev
│   │   └── falco
│   │       ├── generator
│   │       │   ├── falco.yaml
│   │       │   └── kustomization.yaml
│   │       └── kustomization.yaml
│   └── prd
│       └── falco
│           ├── generator
│           │   ├── falco.yaml
│           │   └── kustomization.yaml
│           └── kustomization.yaml

Generatorの中身

base/falco/generator 以下の falco.yaml では、Falco の ServiceAccountAnnotationk8saudit-eks プラグインのパラメータ(EKSクラスター名)を設定します。

# base/falco/generator/falco.yaml
apiVersion: builtin
kind: HelmChartInflationGenerator
metadata:
  name: falco
releaseName: falco
name: falco
version: 4.19.0
repo: https://falcosecurity.github.io/charts
valuesInline:
  podPriorityClassName: system-cluster-critical
  serviceAccount:
    create: true
    annotations:
      eks.amazonaws.com/role-arn: "example-arn" # ここ
  falco:
    rules_files:
    - /etc/falco/falco_rules.yaml
    - /etc/falco/k8s_audit_rules.yaml
    - /etc/falco/rules.d
    load_plugins: [ k8saudit-eks, json ]
    plugins:
    - name: k8saudit-eks
      library_path: libk8saudit-eks.so
      init_config:
        shift: 10
        polling_interval: 10
        use_async: false
        buffer_size: 500
      open_params: "example_eks_cluster_name" # ここ
    - name: json
      library_path: libjson.so
      init_config: ""
  falcosidekick:
  # ...
---
# base/falco/kustomization.yaml
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization

resources:
- falco.yaml

overlay/dev/falco/generatorでは、環境に応じたHelm Valuesの上書きが可能です。

# overlay/dev/falco/generator/falco.yaml
apiVersion: builtin
kind: HelmChartInflationGenerator
metadata:
  name: falco
valuesInline:
  serviceAccount:
    create: true
    annotations:
      eks.amazonaws.com/role-arn: "arn:aws:iam::123456789012:role/dev-falco-role" # 置き換え
  falco:
    plugins:
      - name: k8saudit-eks # List一部のみの置き換えはできないため、残りの部分も書く必要があります
        library_path: libk8saudit-eks.so
        init_config:
          shift: 10
          polling_interval: 10
          use_async: false
          buffer_size: 500
        open_params: dev-eks-cluster # 置き換え
      - name: json # List一部のみの置き換えはできないため、残りの部分も書く必要があります
        library_path: libjson.so
        init_config: ""
---
# overlay/dev/falco/generator/kustomization.yaml
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization

namespace: falco

resources:
- ../../../../base/falco/generator

patchesStrategicMerge:
  - falco.yaml

Generatorの利用

base/falco/kustomization.yamlは、generatorをインポートする必要がありません。
通常のk8sリソースを追加すればいいです。

overlayの方は以下の設定が必要です

# overlay/dev/falco/kustomization.yaml
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization

namespace: falco

resources:
- ../../../base/falco

generators: # ここ
  - generator # 上記HelmChartInflationGeneratorの所在ディレクトリ名

GeneratorのディレクトリはOverlayの中のものを利用しているので、インポートする際に、base/falco/generatorの内容が読み込まれます。

Falco Helm.png

Custom Ruleの設定プラクティス

前回の記事では、Custom Ruleの適用方法について紹介しました。
今回は追加でCustom Ruleの各環境での置き換えのプラクティスについて紹介します。

1. 共通となる部分はgeneratorのbaseに置く

ファイル名は<rule_name>_common_override.yaml

# base/falco/generator/falco.yaml
apiVersion: builtin
kind: HelmChartInflationGenerator
metadata:
  name: falco
releaseName: falco
name: falco
version: 4.19.0
repo: https://falcosecurity.github.io/charts
valuesInline:
  # ...
  customRules:
    k8s_audit_rules_common_override.yaml: |-
      - rule: ****
        # ...
        override:
          condition: append
    falco_stable_common_override.yaml: |-
      - rule: ****
        # ...
        override:
          condition: append

2. 各環境で新規ファイルを作成する

ファイル名は<rule_name>_<env>_override.yaml
環境ごとにoverride用ファイルを作成し、環境固有のルールを定義できます。

# overlay/dev/falco/generator/falco.yaml
apiVersion: builtin
kind: HelmChartInflationGenerator
metadata:
  name: falco
valuesInline:
  customRules:
    k8s_audit_rules_dev_override.yaml: |-
      - rule: ****
        # ...
        override:
          condition: replace
    falco_stable_dev_override.yaml: |-
      - rule: ****
        # ...
        override:
          condition: replace

まとめ

本記事では、Helm と Kustomize を使用して Falco をインストールする方法を紹介しました。
特に GitOps で Falco を運用する場合、HelmChartInflationGenerator を活用することで、Base/Overlay 構成を維持しつつ Helm Values を柔軟に管理できます。環境ごとに異なるルールを適用する方法としても有効なので、ぜひ活用してみてください。

次回はFalcoの周辺ツールについて紹介します。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?