Container Service for Kubernetes (ACK) は、API サーバー、Ingress、コントロールプレーンコンポーネント、および Kubernetes の重大なイベントなど、さまざまな Kubernetes コンポーネントからログと監査イベントを収集・分析します。この機能により、セキュリティインシデントやクラスターの問題が発生した際の根本原因分析とトレーサビリティが可能になります。
クラスター監査機能の使用
Kubernetes クラスターにおいて、API サーバーの監査ログは、クラスター管理者がさまざまなユーザーによって実行される日々の操作を記録し、追跡するのに役立ちます。この機能は、クラスターのセキュリティ運用とメンテナンスに不可欠です。Simple Log Service (SLS) を使用した監査ログの収集と分析、監査ログのカスタムアラルールの設定、およびクラスター監査機能の無効化については、「クラスター API サーバー監査機能の使用」をご参照ください。
Container Service for Kubernetes (ACK) の監査ポリシーは以下の通りです:
監査ログのフィールド説明について詳しくは、「audit-k8s-io-v1-Event」をご参照ください。
apiVersion: audit.k8s.io/v1beta1 # This is required.
kind: Policy
# Do not generate audit events for all requests in the RequestReceived stage.
omitStages:
- "RequestReceived"
rules:
# The following requests are manually identified as high-volume and low-risk. Therefore, cancel these requests.
- level: None
users: ["system:kube-proxy"]
verbs: ["watch"]
resources:
- group: "" # core
resources: ["endpoints", "services"]
- level: None
users: ["system:unsecured"]
namespaces: ["kube-system"]
verbs: ["get"]
resources:
- group: "" # core
resources: ["configmaps"]
- level: None
users: ["kubelet"] # legacy kubelet identity
verbs: ["get"]
resources:
- group: "" # core
resources: ["nodes"]
- level: None
userGroups: ["system:nodes"]
verbs: ["get"]
resources:
- group: "" # core
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: "" # core
resources: ["endpoints"]
- level: None
users: ["system:apiserver"]
verbs: ["get"]
resources:
- group: "" # core
resources: ["namespaces"]
# Do not log these read-only URLs.
- level: None
nonResourceURLs:
- /healthz*
- /version
- /swagger*
# Do not log event requests.
- level: None
resources:
- group: "" # core
resources: ["events"]
# Secrets, ConfigMaps, and TokenReviews can contain sensitive and binary data,
# so log them only at the metadata level.
- level: Metadata
resources:
- group: "" # core
resources: ["secrets", "configmaps"]
- group: authentication.k8s.io
resources: ["tokenreviews"]
- level: Request
verbs: ["get", "list", "watch"]
resources:
- group: "" # core
- 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"
# Default level for known APIs.
- level: RequestResponse
resources:
- group: "" # core
- 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"
# Default level for all other requests.
- level: Metadataクラスター監査ログルールのカスタマイズ
ACK では、カスタムルールを追加することで、クラスター監査ログの機能を拡張できます。これらのルールは、kube-apiserver の設定ページにある auditPolicyRules で設定します。以下の例でその方法を示します。

# Rules must be defined in YAML list format
- 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レベルで記録します。監査の削減:
system:nodesグループの kubelet コンポーネントからのハートビートなどのノードおよび Pod のステータス更新の記録をスキップします。これにより、不要なログボリュームを最小限に抑えます。
監査ログルールの定義に関する詳細については、「監査」をご参照ください。
カスタムルールを設定する際は、以下の点にご注意ください:
ルールの範囲:入力ボックスは、完全な監査ポリシー (
Policy) オブジェクトではなく、監査ルールのリスト (rules) を受け入れます。ルールの優先度:クラスターの監査セキュリティベースラインを維持するため、Container Service のデフォルト監査ルールで定義されているリクエストのログレベルは変更できません。
ルールの有効性: コンテナサービスは、追加されたルールを policies.audit.k8s.io の rules フィールド定義に照らして検証します。 公式コミュニティドキュメント Kubernetes Audit で説明されているように、有効な監査ルールのみを追加してください。 重要: 不適切なログフォーマットは、apiserver が正常に機能しなくなる可能性があります。
exec コンテナ内部アクティビティ監査の有効化
攻撃者はしばしば exec コマンドを使用してコンテナに侵入し、ラテラルアタックを仕掛けます。デフォルトでは、クラスター API サーバーの監査ログは、攻撃者がコンテナへのアクセス権を取得した後に実行されたコマンドをキャプチャしません。コンテナ内部操作監査機能を使用すると、セキュリティ運用保守エンジニアは、攻撃者がコンテナインスタンス内で開始したコマンドの監査レコードを取得できます。これにより、セキュリティイベントのトレーサビリティと即時修正が可能になります。
監査メタデータの使用
Kubernetes の監査ログには、リクエストが承認されたかどうかを示すauthorization.k8s.io/decisionと、その決定理由を示すauthorization.k8s.io/reasonという 2 つのアノテーションが含まれています。これらのフィールドを使用して、特定の API 呼び出しが許可された理由を判断します。
NPD と SLS Kubernetes イベントセンターを使用した不審なクラスターイベントの監視
NPD (Node Problem Detector) は、Alibaba Cloud の ACK がメンテナンスする Kubernetes ノード診断ツールです。Docker Engine のハング、Linux カーネルのハング、ネットワーク出力の失敗、ファイルディスクリプタの枯渇といったノードの異常を検出し、それらをノードイベントに変換します。kube-eventer と併用することで、エンドツーエンドのノードイベントアラートが可能になります。NPD によって検出されるリアルタイムのノード問題に加えて、Kubernetes クラスターは、Pod のエビクションやイメージのプル失敗などの状態変化によってもイベントを生成します。さらに、Simple Log Service (SLS) の Kubernetes イベントセンターは、一般ユーザーが exec を使用して特定のコンテナにアクセスするなどの不審な操作を含む、すべての Kubernetes イベントをリアルタイムで集約します。ストレージ、クエリ、分析、可視化、およびアラート機能を提供し、セキュリティ運用保守担当者がクラスターの安定性に対するリスクを迅速に特定するのに役立ちます。詳細については、「イベント監視」をご参照ください。
Ingress ダッシュボードモニタリングの有効化
Alibaba Cloud の Ingress コンポーネントは、すべての HTTP リクエストを標準出力に記録します。Alibaba Cloud は、このアクセスログサービスを SLS と統合し、ログ分析およびモニタリングダッシュボードを迅速に構築できるようにします。Ingress 可視化ダッシュボードには、PV、UV、トラフィック、レスポンスレイテンシー、Top URL 統計などの主要なメトリクスが表示されるため、サービストラフィックの動態をリアルタイムで監視し、不正アクセスや DoS (Denial of Service) 攻撃を迅速に検出できます。詳細については、「Ingress ダッシュボードモニタリング」をご参照ください。
CoreDNS ログの有効化
Alibaba Cloud の ACK は、クラスターの DNS サーバーとして CoreDNS をデプロイします。CoreDNS のログを確認することで、DNS 名前解決の遅延や高リスクのドメイン名へのアクセスなどの問題をトラブルシューティングできます。SLS ダッシュボードは CoreDNS のログ分析レポートを提供し、不審なドメイン名リクエストを迅速に特定するのに役立ちます。詳細については、「CoreDNS ログの分析と監視」をご参照ください。