
kubeauditは、一般的なセキュリティ対策に照らしてKubernetesクラスターを監査するのに役立ちます。
Kubernetes 1.19 以降のクラスターでの実行が必須となりました。
未登録の
kubernetes.ioアノテーションを使用したオーバーライドラベルは非推奨になります。今後はkubeaudit.ioを使用することが必須となります。 詳細はこのディスカッションを参照してください。
Kubeaudit は 2024 年 10 月までに非推奨となる予定です。
このプロジェクトの管理を引き継ぐことに興味のあるメンテナを積極的に募集中です。開発とメンテナンスを継続することに情熱をお持ちの方は、ぜひご連絡ください。
代替品をお探しのユーザーには、同様の機能を提供し、活発にメンテナンスされている Kubebench への移行をお勧めします。
コミュニティの皆様のご貢献とご支援に感謝いたします。
kubeaudit は、Kubernetes クラスターをさまざまなセキュリティ上の懸念事項について監査するためのコマンドラインツールおよび Go パッケージです。例:
要約: kubeaudit は安全なコンテナをデプロイすることを保証します!
kubeaudit を Go パッケージとして使用するには、パッケージドキュメントを参照してください。
この README の残りの部分では、kubeaudit をコマンドラインツールとして使用する方法に焦点を当てます。
brew install kubeaudit
Kubeaudit には、正式にリリースされた安定版があります: 公式リリース
main ブランチには、安定版リリースよりも新しい機能が含まれている場合があります。リリースに含まれていない新しい機能が必要な場合は、最新の Go を使用していることを確認し、以下を実行してください:
go get -v github.com/Shopify/kubeaudit
kubeaudit の使用を開始するには、クイックスタートを参照するか、サポートされているコマンドをすべてご覧ください。
前提条件: kubectl v1.12.0 以降
kubectl v1.12.0 で外部関数の簡単なプラグイン機能が導入されたことにより、kubeaudit は以下の方法で kubectl audit として呼び出すことができます。
make plugin を実行し、$GOPATH/bin を PATH に含める。または
kubectl-audit に変更し、PATH に配置する。Docker Hub が Free Team 組織を廃止したため、Docker Hub へのイメージの公開は行わなくなりました。当面は 古いイメージ が引き続き利用可能ですが、いつでも利用できなくなる可能性があります。まもなく Github Container registry へのイメージ公開を開始する予定です。
クラスター内でジョブとして kubeaudit を実行するには、クラスター内での kubeaudit の実行 を参照してください。
kubeaudit には 3 つのモードがあります:
-f/--manifest フラグを使用して Kubernetes マニフェストファイルが指定された場合、kubeaudit はそのマニフェストファイルを監査します。
コマンド例:
kubeaudit all -f "/path/to/manifest.yml"
出力例:
$ kubeaudit all -f "internal/test/fixtures/all_resources/deployment-apps-v1.yml"
---------------- Results for ---------------
apiVersion: apps/v1
kind: Deployment
metadata:
name: deployment
namespace: deployment-apps-v1
--------------------------------------------
-- [error] AppArmorAnnotationMissing
Message: AppArmor annotation missing. The annotation 'container.apparmor.security.beta.kubernetes.io/container' should be added.
Metadata:
Container: container
MissingAnnotation: container.apparmor.security.beta.kubernetes.io/container
-- [error] AutomountServiceAccountTokenTrueAndDefaultSA
Message: Default service account with token mounted. automountServiceAccountToken should be set to 'false' or a non-default service account should be used.
-- [error] CapabilityShouldDropAll
Message: Capability not set to ALL. Ideally, you should drop ALL capabilities and add the specific ones you need to the add list.
Metadata:
Container: container
Capability: AUDIT_WRITE
...
指定された最小重大度のエラーが見つからなかった場合、以下が返されます:
All checks completed. 0 high-risk vulnerabilities found
マニフェストモードは、autofix コマンドを使用してすべてのセキュリティ問題を自動修正することもサポートしています:
kubeaudit autofix -f "/path/to/manifest.yml"
修正されたマニフェストをソースファイルの代わりに新しいファイルに書き込むには、-o/--output フラグを使用します。
kubeaudit autofix -f "/path/to/manifest.yml" -o "/path/to/fixed"
kubeaudit 設定ファイルで指定されたカスタムルールに基づいてマニフェストを修正するには、-k/--kconfig フラグを使用します。
kubeaudit autofix -k "/path/to/kubeaudit-config.yml" -f "/path/to/manifest.yml" -o "/path/to/fixed"
Kubeaudit は、クラスター内のコンテナ内で実行されているかどうかを検出できます。その場合、そのクラスター内のすべての Kubernetes リソースを監査しようとします:
kubeaudit all
Kubeaudit は、ローカルの kubeconfig ファイル ($HOME/.kube/config) を使用してクラスターへの接続を試みます。別の kubeconfig の場所は --kubeconfig フラグで指定できます。kubeconfig のコンテキストを指定するには、-c/--context フラグを使用します。
kubeaudit all --kubeconfig "/path/to/config" --context my_cluster
Kubernetes 設定ファイルの詳細については、https://kubernetes.io/docs/concepts/configuration/organize-cluster-access-kubeconfig/ を参照してください。
Kubeaudit は、3 つのレベルの重大度で結果を生成します:
Error: セキュリティ問題または無効な Kubernetes 設定Warning: ベストプラクティスの推奨事項Info: 情報提供、アクションは不要。これにはオーバーライドされた結果が含まれます。最小重大度レベルは --minSeverity/-m フラグを使用して設定できます。
デフォルトでは、kubeaudit は人間が読みやすい形式で結果を出力します。出力をさらに処理する場合は、--format json フラグを使用して JSON で出力するように設定できます。結果をログとして出力するには (以前のデフォルト)、--format logrus を使用します。一部の出力形式では、端末で結果を読みやすくするために色が含まれています。色を無効にするには (出力をテキストファイルに送信する場合など)、--no-color フラグを使用できます。
--format sarif フラグを使用して、SARIF 形式で kubeaudit レポートを生成できます。SARIF 結果をファイルに書き込むには、> で出力をリダイレクトします。例:
kubeaudit all -f path-to-my-file.yaml --format="sarif" > example.sarif
重大度レベル error の結果がある場合、kubeaudit は終了コード 2 で終了します。これは --exitcode/-e フラグを使用して変更できます。
kubeaudit をカスタマイズするすべての方法については、グローバルフラグ を参照してください。
監査人は個別に実行することもできます。
kubeaudit 設定は 2 つの目的に使用できます:
個々の監査人にフラグを使用して指定できる設定はすべて、設定を使用して表現できます。
設定の形式は次のとおりです:
enabledAuditors:
# 監査人は明示的に "false" に設定されていない限り、デフォルトで有効になります
apparmor: false
asat: false
capabilities: true
deprecatedapis: true
hostns: true
image: true
limits: true
mounts: true
netpols: true
nonroot: true
privesc: true
privileged: true
rootfs: true
seccomp: true
auditors:
capabilities:
# 追加リストに必要なケーパビリティを追加すると、kubeaudit はエラーを報告しなくなります
allowAddList: ['AUDIT_WRITE', 'CHOWN']
deprecatedapis:
# バージョンが指定されておらず、'deprecatedapis' 監査人が有効な場合、非推奨の API で定義されたリソースに対して WARN 結果が生成されます。
currentVersion: '1.22'
targetedVersion: '1.25'
image:
# イメージが指定されておらず、'image' 監査人が有効な場合、タグなしのイメージを使用しているコンテナに対して WARN 結果が生成されます
image: 'myimage:mytag'
limits:
# 制限が指定されておらず、'limits' 監査人が有効な場合、cpu またはメモリ制限が指定されていないコンテナに対して WARN 結果が生成されます
cpu: '750m'
memory: '500m'
各監査人の詳細については、設定内の監査人固有の説明を含め、監査人ドキュメントを参照してください。
注意: kubeaudit 設定は、--kubeconfig フラグで指定される kubeconfig ファイル (Kubernetes 設定ファイルを指します。ローカルモードを参照) とは異なります。また、kubeaudit 設定をサポートしているのは all および autofix コマンドのみであることに注意してください。他のコマンドでは機能しません。
注意: フラグと設定ファイルを組み合わせて使用する場合、フラグが優先されます。
特定のコンテナや Pod に対して、オーバーライドラベルを追加することでセキュリティ問題を無視できます。これにより、監査人は error 結果の代わりに info 結果を生成し、監査結果名に Allowed が追加されます。ラベルは各監査人のドキュメントに記載されていますが、オーバーライドをサポートする監査人の一般的な形式は次のとおりです:
オーバーライドラベルは key と value で構成されます。
key は、オーバーライドタイプ (コンテナまたは Pod) と各監査人に固有の オーバーライド識別子 の組み合わせです (key の形式については、各監査人のドキュメントを参照してください)。key はオーバーライドタイプに応じて 2 つの形式のいずれかを取ります:
container.kubeaudit.io/[コンテナ名].[オーバーライド識別子]
kubeaudit.io/[オーバーライド識別子]
value が空でない文字列に設定されている場合、OverrideReason として info 結果に表示されます:
$ kubeaudit asat -f "auditors/asat/fixtures/service-account-token-true-allowed.yml"
---------------- Results for ---------------
apiVersion: v1
kind: ReplicationController
metadata:
name: replicationcontroller
namespace: service-account-token-true-allowed
--------------------------------------------
-- [info] AutomountServiceAccountTokenTrueAndDefaultSAAllowed
Message: Audit result overridden: Default service account with token mounted. automountServiceAccountToken should be set to 'false' or a non-default service account should be used.
Metadata:
OverrideReason: SomeReason
Kubernetes 仕様に従い、value は 63 文字以下で、空であるか、英数字 ([a-z0-9A-Z]) で始まり、英数字で終わり、間にダッシュ (-)、アンダースコア (_)、ドット (.) を含む必要があります。
複数のオーバーライドラベル (複数の監査人用) を同じリソースに追加できます。
例については、オーバーライドしたい監査人の特定の監査人ドキュメントを参照してください。
ラベルの詳細については、https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/ を参照してください。
バグの修正、機能の提供、タイプミスの修正など、ぜひご協力ください。行動規範に従っていただくようお願いいたします。
go get github.com/Shopify/kubeauditcd $GOPATH/src/github.com/Shopify/kubeauditgit remote add fork https://github.com/you-are-awesome/kubeauditgit checkout -b awesome-new-featureUSE_KIND=true make test (Kind なしでテストを実行する場合: make test)git commit -am 'Adds awesome feature'git push forkPR を開く前に CLA に署名していなかった場合は、PR に "I've signed the CLA!" とコメントを追加することでチェックを再実行できることに注意してください。
| コマンド | 説明 | ドキュメント |
|---|
all | 利用可能なすべての監査人を実行、または kubeaudit 設定で指定されたものを実行します。 | docs |
autofix | セキュリティ問題を自動的に修正します。 | docs |
version | 現在の kubeaudit バージョンを表示します。 |
| コマンド | 説明 | ドキュメント |
|---|
apparmor | AppArmor なしで実行されているコンテナを見つけます。 | docs |
asat | 自動的にマウントされたデフォルトサービスアカウントを使用している Pod を見つけます。 | docs |
capabilities | 推奨されるケーパビリティを削除していない、または新しいケーパビリティを追加しているコンテナを見つけます。 | docs |
deprecatedapis | 非推奨の API バージョンで定義されたリソースを見つけます。 | docs |
hostns | HostPID、HostIPC、または HostNetwork が有効になっているコンテナを見つけます。 | docs |
image | 希望するバージョンのイメージ (タグ経由) を使用していない、またはタグなしのイメージを使用しているコンテナを見つけます。 | docs |
limits | 指定された CPU およびメモリ制限を超えている、または制限を指定していないコンテナを見つけます。 | docs |
mounts | 機密性の高いホストパスがマウントされているコンテナを見つけます。 | docs |
netpols | デフォルト拒否ネットワークポリシーを持たない名前空間を見つけます。 | docs |
nonroot | root として実行されているコンテナを見つけます。 | docs |
privesc | 権限昇格を許可しているコンテナを見つけます。 | docs |
privileged | 特権モードで実行されているコンテナを見つけます。 | docs |
rootfs | 読み取り専用ファイルシステムを持っていないコンテナを見つけます。 | docs |
seccomp | Seccomp なしで実行されているコンテナを見つけます。 | docs |
| 短縮 | 長い | 説明 |
|---|
| --format | 使用する出力形式 ("sarif", "pretty", "logrus", "json" のいずれか) (デフォルトは "pretty") | |
| --kubeconfig | ローカルの Kubernetes 設定ファイルへのパス。ローカルモードでのみ使用されます (デフォルトは $HOME/.kube/config) | |
| -c | --context | 使用する kubeconfig コンテキストの名前 |
| -f | --manifest | 監査する yaml 設定へのパス。マニフェストモードでのみ使用されます。標準入力から読み取るには - を使用できます。 |
| -n | --namespace | 指定された名前空間のリソースのみを監査します。マニフェストモードでは現在サポートされていません。 |
| -g | --includegenerated | スキャンに生成されたリソース (デプロイメントによって生成された Pod など) を含めます。生成されたリソースに対して kubeaudit が結果を生成するようにしたい場合 (カスタムリソースがある場合や、所有者リソースが存在しなくなった孤立リソースをキャッチしたい場合など) にこのフラグを使用できます。 |
| -m | --minseverity | 報告する最小の重大度レベルを設定します ("error", "warning", "info" のいずれか) (デフォルトは "info") |
| -e | --exitcode | 重大度 "error" の結果がある場合に使用する終了コード。慣例として、0 は成功、0 以外はエラーを示します (デフォルトは 2)。 |
| --no-color | 出力で色を使用しません (デフォルトは false) |