
KubernetesクラスターとIstioサービスメッシュ向けの自動セキュリティチェッカーで、OPAポリシーを通じてベストプラクティスを強制し、設定ミスに対する修復レポートを生成します。
Kubernetes サービスメッシュのセキュリティを強化しましょう!
mesh-kridik は、istio サービスメッシュを使用した Kubernetes クラスターに対してさまざまなセキュリティチェックを実行し、セキュリティレポートを出力するオープンソースのセキュリティチェッカーです。
セキュリティチェックテストは、istio セキュリティのベストプラクティス の完全な実装です。
セキュリティチェックは、istio サービスメッシュを使用した Kubernetes クラスターに対して実行され、OPA(Open Policy Agent)を活用してセキュリティルールを適用します。出力される監査レポートには、セキュリティ問題の根本原因と、その問題に対する推奨される修正方法が含まれます。

git clone https://github.com/chen-keinan/mesh-kridik
cd mesh-kridik
make build
フラグなしで Mesh-Kridik を実行すると、すべてのテストが実行されます。
./mesh-kridik
フラグを使用して mesh-kridik を実行すると、オンデマンドでテストが実行されます。
使用法: mesh-kridik [--version] [--help] <command> [<args>]
使用可能なコマンド:
-r , --report : セキュリティチェックを実行し、修正レポートを生成します。
-i , --include: 特定のセキュリティチェックのみを実行します。例: -i=1.1
-e , --exclude: 特定のセキュリティチェックを除外します。例: -e=1.1,2.0
テストを実行し、失敗したテストのレポートとその修正を生成します。
./mesh-kridik -r
Kube-kridik はユーザープラグイン用のフックを公開しています 例 :
go build -buildmode=plugin -o=~/<plugin フォルダ>/<plugin>.so ~/<plugin フォルダ>/<plugin>.go
cp ~/<plugin フォルダ>/<plugin>.so ~/.kube-kridik/plugins/compile/<plugin>.so
Kube-kridik は以下の仕様をサポートしており、簡単に拡張できます:
この仕様は、~/.mesh-kridik/security/mesh/istio フォルダ内の仕様ファイルを修正することで簡単に拡張できます。
| 名前 | 説明 | 影響 |
|---|---|---|
| Mutual TLS | Istio Mutual TLS プロキシはデフォルトで Permissive モードに設定されています。 | プロキシは Mutual TLS と平文トラフィックの両方を受け入れます。 |
| Istio の安全な認可ポリシーパターン | ALLOW-with-positive-matching または DENY-with-negative-match パターンを使用してください。 | これらの認可ポリシーパターンはより安全です。ポリシーの不一致が発生した場合、最悪の結果は予期しない 403 拒否であり、認可ポリシーのバイパスにはなりません。 |
| 認可ポリシーにおけるパス正規化 | 認可ポリシーの適用ポイントは、通常のバックエンドアプリケーションのリソースアクセスポイントではなく、Envoy プロキシです。 | 一致しない場合、予期しない拒否またはポリシーバイパスが発生する可能性があります。 |
| Egress トラフィックの TLS 生成 | Egress トラフィックの ServiceEntry に DestinationRule を使用します。 | 外部サービスへの Egress トラフィックに TLS 生成を使用しない場合、平文で送信されます。 |
| プロトコル検出 | サービスプロトコルを明示的に宣言します。 | 検出ミスにより、予期しないトラフィック動作が発生する可能性があります。 |
| CNI サポート | istio の透過的なトラフィックキャプチャ。 | すべてのネットワークトラフィックがキャプチャされない可能性があります。 |
| 過度に広いホスト | Gateway で過度に広いホスト設定を避けてください。 | 予期しないドメインが露出する可能性があります。 |
| Gateway 作成権限の制限 | Gateway リソースの作成を信頼できるクラスター管理者のみに制限します。 | 信頼できないユーザーによる Gateway 作成が発生する可能性があります。 |
| ダウンストリーム接続数の制限設定 | config map 内の global_downstream_max_connections を、デプロイメント内の個々の Gateway インスタンスが必要とする同時接続数に応じて更新します。制限に達すると、Envoy は TCP 接続を拒否し始めます。 | ダウンストリーム接続数に制限がないと、悪意のある攻撃者に悪用される可能性があります。 |
| サードパーティサービスアカウントトークンの設定 | ファーストパーティトークンのプロパティはセキュリティが低いため、サードパーティトークンを設定することを推奨します。 | ファーストパーティトークンのプロパティはセキュリティが低く、認証侵害を引き起こす可能性があります。 |
| コントロールプレーン | Istiod はデフォルトで、認証されていない平文ポートを利便性のためにいくつか公開します。 | XDS サービスポート 15010 とデバッグポート 8080 を、認証されていない平文で公開します。 |
| データプレーン | プロキシはさまざまなポートを公開します。 | プロキシと同じ Pod で実行されているアプリケーションはアクセス可能です。サイドカーとアプリケーションの間に信頼境界はありません。 |
| トラフィックキャプチャの制限を理解する | meshConfig.outboundTrafficPolicy.mode を設定して Egress トラフィックを保護します。 | 外部サービスへのアクセスが制御されなくなります。 |