Kubernetesの静的分析
Kubelinterは、Kubernetes Yamlファイルとヘルムチャートを分析し、生産の準備とセキュリティに焦点を当てて、さまざまなベストプラクティスに対してチェックします。
Kubelinterは、Kubernetes Yamlファイルとヘルムチャートに関する有用な情報を提供するように設計された賢明なデフォルトチェックを実行します。これは、チームがセキュリティの誤った不明瞭さを早期に、そして多くの場合、DevOpsのベストプラクティスをチェックするのを支援するためです。これらのいくつかの一般的な例には、非ルートユーザーとしてのコンテナの実行、最小限の特権の実施、秘密のみの機密情報を保存することが含まれます。
Kubelinterは構成可能なため、組織内で従うポリシーに応じて、チェックを有効にして無効にするだけでなく、独自のカスタムチェックを作成できます。
糸くずのチェックが失敗した場合、Kubelinterは潜在的な問題を解決する方法についての推奨事項を報告し、ゼロ以外の出口コードを返します。
https://docs.kubelinter.ioにアクセスして、Kubelinterのインストール、使用、構成に関する詳細なドキュメントをご覧ください。
kube-linterバイナリは、https://github.com/stackrox/kube-linter/releases/latestにあります
GOを使用してインストールするには、次のコマンドを実行します。
go install golang.stackrox.io/kube-linter/cmd/kube-linter@latestそれ以外の場合は、リリースから最新のバイナリをダウンロードして、パスに追加します。
HomeBrewまたはLinuxBrewを使用してインストールするには、次のコマンドを実行します。
brew install kube-linter nix-shell -p kube-linter
docker pull stackrox/kube-linter:latest
ソースからKubelinterをインストールすることは、これらの手順に従うのと同じくらい簡単です。
まず、Kubelinterリポジトリをクローンします。
git clone [email protected]:stackrox/kube-linter.git次に、ソースコードをコンパイルします。これにより、各プラットフォームのKube-Linterバイナリファイルが作成され、 .gobinフォルダーに配置されます。
make build最後に、Kubelinterの使用を開始する準備ができました。バージョンを確認して、Kubelinterを正常にインストールしたことを確認してください。
.gobin/kube-linter versionテストにはいくつかの層があります。各レイヤーは通過すると予想されます。
ユニットテストgo :
make testエンドツーエンドの統合テスト:
make e2e-testそして最後に、 bats-coreの統合テスト:
make e2e-batsKubelinter画像はCosignによって署名されています。画像を使用する前に確認することをお勧めします。
Cosignをインストールしたら、Kubelinter公開キーを使用して、Kubelinter画像を次のように確認できます。
cat kubelinter-cosign.pub
-----BEGIN PUBLIC KEY-----
MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEl0HCkCRzYv0qH5QiazoXeXe2qwFX
DmAszeH26g1s3OSsG/focPWkN88wEKQ5eiE95v+Z2snUQPl/mjPdvqpyjA==
-----END PUBLIC KEY-----
cosign verify --key kubelinter-cosign $IMAGE_NAMEKubelinterは、Cosignキーレス署名も提供します。
kubelinter画像を次のように確認できます。
# NOTE: Keyless signatures are NOT PRODUCTION ready.
COSIGN_EXPERIMENTAL=1 cosign verify $IMAGE_NAME Kubelinterを実行してYAMLファイルをリントするには、最も基本的な形式で2つのステップしか必要ありません。
セキュリティと生産準備のベストプラクティスをテストしたいYAMLファイルを見つけます。
次のコマンドを実行します。
kube-linter lint /path/to/your/yaml.yaml次のサンプルポッド仕様ファイルpod.yaml考えてみましょう。このファイルには、2つの生産準備の問題と1つのセキュリティの問題があります。
セキュリティの問題:
生産準備:
コンテナのメモリ制限は設定されていないため、過度のメモリを消費できる可能性があります
apiVersion : v1
kind : Pod
metadata :
name : security-context-demo
spec :
securityContext :
runAsUser : 1000
runAsGroup : 3000
fsGroup : 2000
volumes :
- name : sec-ctx-vol
emptyDir : {}
containers :
- name : sec-ctx-demo
image : busybox
resources :
requests :
memory : " 64Mi "
cpu : " 250m "
command : [ "sh", "-c", "sleep 1h" ]
volumeMounts :
- name : sec-ctx-vol
mountPath : /data/demo
securityContext :
allowPrivilegeEscalation : false上記のYAMLをpod.yamlにコピーし、次のコマンドを実行してこのファイルを並べます。
kube-linter lint pod.yamlKubelinterはデフォルトのチェックを実行し、推奨事項をレポートします。以下は、前のコマンドからの出力です。
pod.yaml: (object: <no namespace>/security-context-demo /v1, Kind=Pod) The container "sec-ctx-demo" is using an invalid container image, "busybox". Please use images that are not blocked by the `BlockList` criteria : [".*:(latest)$" "^[^:]*$" "(.*/[^:]+)$"] (check: latest-tag, remediation: Use a container image with a specific tag other than latest.)
pod.yaml: (object: <no namespace>/security-context-demo /v1, Kind=Pod) container "sec-ctx-demo" does not have a read-only root file system (check: no-read-only-root-fs, remediation: Set readOnlyRootFilesystem to true in the container securityContext.)
pod.yaml: (object: <no namespace>/security-context-demo /v1, Kind=Pod) container "sec-ctx-demo" has memory limit 0 (check: unset-memory-requirements, remediation: Set memory limits for your container based on its requirements. Refer to https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/#requests-and-limits for details.)
Error: found 3 lint errors
Kubelinterの使用と構成の詳細については、ドキュメントページをご覧ください。
以下は、ユーザーが書いたKubelinterのチュートリアルです。このリストに追加したい場合は、PRを送信してください!
メンテナーや他のユーザーを含むKubelinterコミュニティに参加したい場合は、こちらのSlack Workspaceに参加できます。
貢献するには、寄稿ガイドをご覧ください。
リマインダーとして、Kubelinterコミュニティへのすべての参加は、私たちの行動規範によって支配されています。
Kubelinterは開発の初期段階にあります。将来、コマンドの使用法、フラグ、および構成ファイル形式に変更が壊れている可能性があります。ただし、Kubelinterを使用して環境YAMLファイルをテストし、何が壊れているかを確認し、貢献することをお勧めします。
Kubelinterは、Apacheライセンス2.0に基づいてライセンスされています。
Kubelinterは、Stackroxによって❤️で作られています。
Kubelinter、または私たちが行う他のクールなことのいずれかに興味がある場合は、私たちが雇っていることを知ってください!オープンポジションをご覧ください。ご連絡をお待ちしております!