Container Service for Kubernetes (ACK) を使用すると、Kubernetesコンポーネントの監査ログ (APIサーバー、Ingress、コントロールプレーンコンポーネント、キーKubernetesイベントの監査ログなど) を収集して分析できます。 これにより、セキュリティの問題またはクラスターの問題がログデータで特定された場合に原因を特定できます。
クラスター監査の使用
KubernetesクラスターのAPIサーバーの監査ログは、管理者がさまざまなユーザーによって実行された操作を追跡するのに役立ちます。 監査は、クラスターセキュリティとクラスターO&Mにおいて重要な役割を果たします。Simple Log Serviceを使用して監査ログを収集および分析し、カスタムアラートルールを設定し、クラスター監査を無効にする方法の詳細については、「クラスター監査の操作」をご参照ください。
ACKは、次の監査ポリシーを提供します。
監査ログフィールドの説明の詳細については、「audit-k8s-io-v1-イベント」をご参照ください。
apiVersion: audit.k8s.io/v1beta1 # This is required.
kind: Policy
#Do not generate audit events for requests in the RequestReceived stage.
omitStages:
- "RequestReceived"
rules:
#Ignore the following requests because the requests are manually identified as high-volume and low-risk.
- 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 audit requests that are sent to the following read-only URLs.
- level: None
nonResourceURLs:
- /healthz*
- /version
- /swagger*
#Do not audit requests that generated upon audit events.
- level: None
resources:
- group: "" # core
resources: ["events"]
#Secrets, ConfigMaps, and token reviews can contain sensitive and binary data.
#Therefore, you can audit only the metadata of these resources.
- 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"
#The default audit level for known API requests and responses.
- 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"
#The default audit level for other requests.
- level: Metadata
execコンテナーの内部アクティビティ監査の有効化
通常、攻撃者はexecコマンドを実行してコンテナーにログインし、Kubernetesクラスターで横方向攻撃を開始します。 攻撃者がコンテナに正常にログオンすると、デフォルトのAPIサーバー監査ログは攻撃者によって開始されたコマンドを記録できません。 このシナリオでは、コンテナー内部アクティビティ監査を使用すると、O&Mエンジニアは、攻撃者がコンテナーにログオンした後に攻撃者によって開始されたコマンドの監査ログを取得できます。 これにより、セキュリティイベントの原因を特定し、ビジネスの損失を防ぐことができます。
監査ログメタデータの使用
Kubernetes監査ログには、authorization.k8s.io/decision
とauthorization.k8s.io/reason
の2つのアノテーションが含まれています。 authorization.k8s.io/decisionアノテーションは、リクエストが許可されているかどうかを示します。 アノテーションは、特定のAPI操作を呼び出すことができる理由を指定するために使用されます。
Simple Log ServiceのKubernetesイベントセンターでnode-problem-detectorを使用して、異常なクラスターイベントを特定する
node-problem-detectorは、Kubernetesノードを診断するためにACKによって維持されるツールです。 node-problem-detectorはノード例外を検出し、ノードイベントを生成し、kube-eventerと連携してこれらのイベントにアラートを生成し、アラートの閉ループ管理を有効にします。 node-problem-detectorは、Dockerエンジンのハング、Linuxカーネルのハング、アウトバウンドトラフィックの例外、およびファイル記述子の例外が検出されると、ノードイベントを生成します。 node-problem-detectorによって検出されたノードの問題と例外に加えて、Kubernetesクラスターは、クラスターのステータスが変化したときにイベントも生成します。 たとえば、Kubernetesクラスターは、ポッドが追い出され、クラスターがイメージのプルに失敗したときにイベントを生成します。 Simple Log ServiceのKubernetesイベントセンターは、Kubernetesクラスターで生成されたすべてのイベントを収集し、ストレージ、クエリ、分析、視覚化、アラート機能を提供します。 Kubernetesイベントセンターは、O&Mエンジニアがクラスターの安定性に影響を与える可能性のある問題や、execコマンドを実行している通常のユーザーが特定のコンテナーにログオンするなどの異常なイベントを特定するのに役立ちます。 詳細については、「イベントモニタリング」をご参照ください。
Ingressダッシュボードの有効化
ACKのIngressコントローラーを使用すると、すべてのHTTPリクエストログデータを標準出力にストリーミングできます。 ACKはSimple Log Serviceにも統合されています。 ダッシュボードを作成して、ログデータを監視および分析できます。 Ingressダッシュボードには、クラスター内のIngressのステータスに関する次の情報が表示されます。ページビュー (PV) の数、ユニークビジター (UV) の数、インバウンドとアウトバウンドトラフィック、平均レイテンシ、上位URLです。 これにより、サービストラフィックに関する洞察を得ることができ、悪意のあるトラフィックやDDoS攻撃をできるだけ早く検出することができます。 詳細については、「Ingressダッシュボード」をご参照ください。
CoreDNSのロギングを有効にする
CoreDNSはACKクラスターにデプロイされ、DNSサーバーとして機能します。 CoreDNSのログを確認して、DNS解決が遅い原因を特定したり、リスクの高いドメイン名のDNSクエリを分析したりできます。 Simple log ServiceダッシュボードでCoreDNSログの分析レポートを表示できます。 これにより、リスクの高いドメイン名のDNSクエリを特定できます。 詳細については、「CoreDNSログの収集と分析」をご参照ください。