Container Service for Kubernetes (ACK) は、API サーバー、Ingress、コントロールプレーンコンポーネント、重要な Kubernetes イベントなど、さまざまな Kubernetes コンポーネントからログと監査データを収集および分析する機能を提供します。これにより、セキュリティやクラスターの問題が発生した際に、根本原因分析やアクティビティの追跡を行うことができます。
クラスター監査の使用
Kubernetes クラスターにおいて、API サーバーの監査ログはセキュリティと運用のための重要なツールであり、管理者がユーザーアクティビティを記録し、追跡に役立ちます。Log Service (SLS) を使用した監査ログの収集と分析、監査ログに対するカスタムアラートルールの設定、およびクラスター監査の無効化については、「クラスター監査の操作」をご参照ください。
ACK の監査ポリシーは次のとおりです:
監査ログのフィールドの詳細については、「audit.k8s.io/v1 Event」をご参照ください。
apiVersion: audit.k8s.io/v1beta1 # 必須です。
kind: Policy
# RequestReceived ステージのリクエストはログに記録しません。
omitStages:
- "RequestReceived"
rules:
# 以下のリクエストは、高頻度かつ低リスクであるため、ログに記録しません。
- level: None
users: ["system:kube-proxy"]
verbs: ["watch"]
resources:
- group: "" # コア
resources: ["endpoints", "services"]
- level: None
users: ["system:unsecured"]
namespaces: ["kube-system"]
verbs: ["get"]
resources:
- group: "" # コア
resources: ["configmaps"]
- level: None
users: ["kubelet"] # レガシーな kubelet ID
verbs: ["get"]
resources:
- group: "" # コア
resources: ["nodes"]
- level: None
userGroups: ["system:nodes"]
verbs: ["get"]
resources:
- group: "" # コア
resources: ["nodes"]
- level: None
users:
- system:kube-controller-manager
- system:kube-scheduler
- system:serviceaccount:kube-system:endpoint-controller
verbs: ["get", "update"]
namespaces: ["kube-system"]
resources:
- group: "" # コア
resources: ["endpoints"]
- level: None
users: ["system:apiserver"]
verbs: ["get"]
resources:
- group: "" # コア
resources: ["namespaces"]
# これらの読み取り専用 URL へのリクエストはログに記録しません。
- level: None
nonResourceURLs:
- /healthz*
- /version
- /swagger*
# イベントリクエストはログに記録しません。
- level: None
resources:
- group: "" # コア
resources: ["events"]
# Secret、ConfigMap、および TokenReview には機密データやバイナリデータが含まれる可能性があるため、
# メタデータレベルでのみログに記録します。
- level: Metadata
resources:
- group: "" # コア
resources: ["secrets", "configmaps"]
- group: authentication.k8s.io
resources: ["tokenreviews"]
- level: Request
verbs: ["get", "list", "watch"]
resources:
- group: "" # コア
- group: "admissionregistration.k8s.io"
- group: "apps"
- group: "authentication.k8s.io"
- group: "authorization.k8s.io"
- group: "autoscaling"
- group: "batch"
- group: "certificates.k8s.io"
- group: "extensions"
- group: "networking.k8s.io"
- group: "policy"
- group: "rbac.authorization.k8s.io"
- group: "settings.k8s.io"
- group: "storage.k8s.io"
# 既知の API のデフォルトレベル。
- level: RequestResponse
resources:
- group: "" # コア
- group: "admissionregistration.k8s.io"
- group: "apps"
- group: "authentication.k8s.io"
- group: "authorization.k8s.io"
- group: "autoscaling"
- group: "batch"
- group: "certificates.k8s.io"
- group: "extensions"
- group: "networking.k8s.io"
- group: "policy"
- group: "rbac.authorization.k8s.io"
- group: "settings.k8s.io"
- group: "storage.k8s.io"
- group: "autoscaling.alibabacloud.com"
# 他のすべてのリクエストのデフォルトレベル。
- level: Metadata
クラスター監査ログのルールのカスタマイズ
ACK では、カスタムルールを追加してクラスター監査機能を拡張できます。カスタムルールは、kube-apiserver の設定ページにある [auditPolicyRules] フィールドで設定できます。
# ルールは YAML 形式のリストとして定義する必要があります。
- level: RequestResponse
resources:
- group: "policy.alibabacloud.com"
resources: ["policies"]
- level: None
userGroups: ["system:nodes"]
verbs: ["update", "patch"]
resources:
- group: ""
resources: ["nodes/status", "pods/status"]
前述のルールは、2つの目的を実現します:
-
監査の強化:Container Service ポリシーテンプレート (
policies.policy.alibabacloud.com) に対するすべての操作をRequestResponseレベルでログに記録します。 -
ノイズの削減:kubelet コンポーネント (
system:nodesグループに属します) からのノードと Pod のステータス更新 (ハートビートなど) を無視して、不要なログエントリを削減します。
監査ログのルールの定義方法の詳細については、「Auditing」をご参照ください。
カスタムルールを設定する際は、次の点にご注意ください:
-
ルールの形式:入力フィールドには、完全な
Policyオブジェクトではなく、監査ルール (rules) のリストを追加します。 -
ルールの優先度:クラスターの基本的なセキュリティ監査レベルを確保するため、Container Service のデフォルトの監査ルールで定義されているリクエストのログレベルは変更できません。
-
ルールの検証:Container Service は、policies.audit.k8s.io の rules フィールドの定義に基づいて、追加されたルールを検証します。有効な監査ルールを追加するには、Kubernetes Audit に関する Kubernetes 公式ドキュメントをご参照ください。重要:不正な形式のルールは、API サーバーの起動を妨げる可能性があります。
コンテナ exec アクティビティ監査
Kubernetes クラスターにおける一般的な攻撃ベクトルとして、攻撃者が exec コマンドを使用してコンテナに侵入し、ラテラルアタックを仕掛けるケースがあります。攻撃者がコンテナにアクセスした後、デフォルトの API サーバー監査ログでは、実行されたコマンドを記録できません。このようなシナリオでは、コンテナ内部アクティビティ監査を使用できます。これにより、セキュリティおよび運用の担当者は、攻撃者がコンテナに侵入した後に実行したコマンドをキャプチャし、根本原因分析とセキュリティイベントの迅速な緩和に役立ちます。
監査メタデータの使用
Kubernetes 監査ログには、リクエストが承認されたかどうかを示す authorization.k8s.io/decision と、その決定理由を示す authorization.k8s.io/reason という 2 つの Annotation が含まれています。これらの属性を使用して、特定の API 呼び出しが許可された理由を判断できます。
NPD と SLS によるクラスターイベントの監視
node-problem-detector (NPD) は、Alibaba Cloud によってメンテナンスされている、Container Service for Kubernetes (ACK) のノードを診断するためのツールです。 NPD は、Docker エンジンのハング、Linux カーネルのハング、アウトバウンドネットワークの問題、ファイル記述子の枯渇などのノードの異常をノードイベントに変換します。 kube-eventer と併用することで、ノードイベントアラート用のクローズドループシステムを構築します。 NPD によって検出されるリアルタイムのノード問題に加えて、Kubernetes クラスターは、Pod のエビクションやイメージのプル失敗など、状態が変化するにつれてさまざまなイベントも生成します。 これらのイベントや、標準ユーザーが exec を使用してコンテナにアクセスするなどの不審なアクティビティに対して、Log Service (SLS) の Kubernetes イベントセンターは、クラスターからすべてのイベントをリアルタイムで収集します。 ストレージ、クエリ、分析、可視化、およびアラート機能を提供し、セキュリティおよび運用担当者がクラスターの安定性に対するリスクを迅速に特定するのに役立ちます。 詳細については、「イベントモニタリング」をご参照ください。
Ingress ダッシュボードの有効化
Alibaba Cloud Ingress コンポーネントを使用すると、すべての HTTP リクエストを標準出力に記録できます。また、Alibaba Cloud は Ingress コンポーネントを Log Service (SLS) と統合しているため、ログ分析およびモニタリング用のダッシュボードをすばやく作成できます。Ingress 可視化ダッシュボードでは、ページビュー (PV)、ユニークビジター (UV)、トラフィック、レイテンシー、上位の URL などの主要なメトリクスを含む、Ingress の全体的なステータスを簡単に表示できます。これにより、サービスのトラフィックをリアルタイムで監視し、悪意のあるアクセスや DoS 攻撃を迅速に検出できます。詳細については、「Ingress ダッシュボード」をご参照ください。
CoreDNS ログの有効化
Container Service for Kubernetes (ACK) クラスターは、内部 DNS サーバーとして CoreDNS を使用します。CoreDNS ログを分析することで、DNS 解決の遅延などの問題をトラブルシューティングしたり、高リスクドメインへのクエリを調査したりできます。SLS ダッシュボードは CoreDNS ログ分析レポートを提供しており、高リスクドメインへの不審なリクエストを迅速に特定するのに役立ちます。詳細については、「CoreDNS ログを分析および監視する」をご参照ください。