APIサーバーは監査ログを生成し、Kubernetes APIのリクエストとレスポンスを記録します。 Container Service for Kubernetes (ACK) を使用すると、クラスター管理者はAPIサーバーの監査ログを分析して、さまざまなユーザーがリソースに対して実行した操作を監査できます。 これにより、クラスター管理者はクラスター操作の履歴を追跡し、クラスター例外のトラブルシューティングを行うことができ、クラスターセキュリティのO&Mが大幅に簡素化されます。
使用上の注意
このトピックは、ACK管理クラスター、ACK専用クラスター、およびACKサーバーレスクラスターに適用されます。
登録済みクラスターでクラスター監査機能を使用する方法の詳細については、「クラスター監査の使用」をご参照ください。
課金
請求書の概要ページでは、監査ログデータに関する請求情報を表示できます。 詳細については、「請求書の表示」をご参照ください。 監査ログの課金方法の詳細については、「ペイバイ機能」をご参照ください。
手順1: クラスター監査の有効化
デフォルトでは、クラスターの作成時にLog Serviceの有効化が自動的に選択され、クラスター監査機能が有効になります。 クラスター監査機能が無効になっている場合は、次の手順を実行して有効にします。
ACKコンソールにログインします。 左側のナビゲーションウィンドウで、[クラスター] をクリックします。
[クラスター] ページで、管理するクラスターの名前をクリックします。 左側のウィンドウで、 を選択します。
クラスターログまたはクラスター監査機能を有効にしていない場合は、画面上の指示に従って、Simple log Serviceプロジェクトを手動で選択し、機能を有効にします。
Alibaba Cloudアカウント内の次のSimple Log Serviceクォータで十分であることを確認してください。 そうしないと、クラスター監査機能の有効化に失敗します。
Simple Log Serviceプロジェクトのクォータ。
各Simple Log ServiceプロジェクトのLogstoreのクォータ。
各Simple Log Serviceプロジェクトのダッシュボードのクォータ。
Simple Log Serviceクォータとクォータの調整方法の詳細については、「リソースクォータの調整」をご参照ください。
ステップ2: 監査ログレポートの表示
監査ログレポートは変更しないでください。 監査ログレポートをカスタマイズする場合は、Simple log Serviceコンソールにログインして新しいレポートを作成します。
ACKには、監査センターの概要、リソース操作の概要、リソース操作の詳細なリスト、および共通の脆弱性と公開 (CVE) の脆弱性のリストを提供する4つの組み込み監査ログレポートがあります。 [クラスター監査] ページでは、監査イベントを名前空間またはRAMユーザーでフィルタリングし、次のコンテンツをレポートに表示できます。
チャートの右上にあるアイコンをクリックして、チャートをフルスクリーンモードで表示したり、クエリステートメントをプレビューしたりするなど、他の操作を実行することもできます。
概要
このレポートには、現在のACKクラスター内のすべてのイベントと、RAMユーザーの操作、インターネットアクセス、コマンドの実行、リソースの削除、シークレットアクセス、Kubernetes CVEの脆弱性などの重要なイベントに関する詳細情報が表示されます。
操作の概要
このレポートは、クラスター内のコンピューティングリソース、ネットワークリソース、およびストレージリソースに関連する一般的な操作に関する統計を提供します。 操作には、リソースの作成、更新、削除、およびアクセスが含まれます。
コンピューティングリソース: Deployment、StatefulSet、CronJob、DaemonSet、Job、およびPod。
ネットワークリソース: サービスとIngress。
ストレージリソース: ConfigMap、Secret、およびPersistentVolumeClaim。
アクセス制御リソース: Role、ClusterRole、RoleBinding、およびClusterRoleBinding。
操作の詳細
このレポートは、リソースタイプに関する操作の詳細を提供します。 リソースタイプを選択または入力して、操作の詳細をリアルタイムで照会できます。 レポートには、操作の総数、名前空間の分布、操作の成功率、操作の経時的な傾向、およびその他の操作の詳細が表示されます。
Kubernetesに登録されているCustomResourceDefinition (CRD) リソースまたはレポートに記載されていないリソースに関連する操作をクエリするには、リソース名の複数形を入力します。 たとえば、AliyunLogConfig CRDに関連する操作をクエリするには、AliyunLogConfigs
と入力します。
CVEの脆弱性
このレポートには、現在のクラスターのKubernetes CVE脆弱性が表示されます。 RAMユーザーIDを選択または入力して、リアルタイムで情報を照会できます。 指定したRAMユーザーに関連するKubernetes CVEの脆弱性がレポートに表示されます。 CVEの脆弱性とソリューションの詳細については、「 [CVE証券] CVE脆弱性の修正」をご参照ください。
(オプション) ステップ3: 詳細なログデータを表示する
クエリをカスタマイズしたり、監査ログデータを分析したりするには、Simple log Serviceコンソールにログインし、詳細なログデータを表示します。
デフォルトでは、ACK管理クラスターのAPIサーバーの監査ログの保存期間は30日で、ACK専用クラスターのAPIサーバーの監査ログの保存期間は365日です。 デフォルトの保持期間を変更する方法の詳細については、「logstoreの管理」をご参照ください。
ACKコンソールにログインします。 左側のナビゲーションウィンドウで、[クラスター] をクリックします。
[クラスター] ページで、管理するクラスターの名前をクリックします。 左側のウィンドウで、[クラスター情報] をクリックします。
[基本情報] タブで、[Log Serviceプロジェクト] の横にあるプロジェクトIDをクリックします。 Logstoresリストで、audit-${clustered} という名前のLogstoreをクリックします。
クラスターの作成プロセス中に、
audit-${clustereid}
という名前のLogstoreがプロジェクトに自動的に作成されます。重要デフォルトでは、インデックスはLogstoreに設定されます。 レポートを生成できない場合は、インデックスを変更しないでください。
クエリステートメントを入力し、クエリする時間範囲 (15分など) を指定します。 次に、[検索と分析] をクリックしてクエリ結果を表示します。
次の方法で監査ログを照会できます。
RAMユーザーが実行した操作を照会するには、RAMユーザーIDを入力し、[検索と分析] をクリックします。
リソースに対して実行された操作をクエリするには、コンピューティング、ネットワーク、ストレージ、またはアクセス制御リソースの名前を入力し、[検索と分析] をクリックします。
システムコンポーネントに関連する操作を除外するには、
NO T user.us ername: node NO T user.us ername: serviceaccount NO T user.us ername: apiserver NO T user.us ername: kube-scheduler NO T user.us ername: kube-controller-manager
と入力し、[検索と分析] をクリックします。
ログデータのクエリ方法の詳細については、「クエリ方法」をご参照ください。
(オプション) 手順4: アラートの設定
特定のリソースで操作が実行されたときにリアルタイムでアラートを生成するようにSimple Log Serviceを設定できます。 サポートされているアラート通知方法
DingTalkチャットボット, カスタムwebhook、およびAlibaba Cloud Message Center。 詳細については、「Simple Log Serviceでのアラートルールの設定」をご参照ください。例1: コンテナーでコマンドを実行したときにアラートを生成する
企業は、ユーザーがコンテナにログオンしたり、コンテナでコマンドを実行したりすることを禁止します。 ユーザーがコンテナーでコマンドを実行すると、すぐにアラートが生成されます。 アラートメッセージには、コンテナー、コマンド、ユーザー、イベントID、時刻、および送信元IPアドレスに関する情報が含まれています。
サンプルクエリ文:
verb : create and objectRef.subresource:exec and stage: ResponseStarted | SELECT auditID as "Event ID", date_format(from_unixtime(__time__), '%Y-%m-%d %T' ) as "Time", regexp_extract("requestURI", '([^\?]*)/exec\?.*', 1)as "Resource", regexp_extract("requestURI", '\?(.*)', 1)as "Command" ,"responseStatus.code" as "Status code", CASE WHEN "user.username" != 'kubernetes-admin' then "user.username" WHEN "user.username" = 'kubernetes-admin' and regexp_like("annotations.authorization.k8s.io/reason", 'RoleBinding') then regexp_extract("annotations.authorization.k8s.io/reason", ' to User "(\w+)"', 1) ELSE 'kubernetes-admin' END as "User account", CASE WHEN json_array_length(sourceIPs) = 1 then json_format(json_array_get(sourceIPs, 0)) ELSE sourceIPs END as "Source IP address" order by "Time" desc limit 10000
条件式は
Event =~ ".*"
です。
例2: APIサーバーがインターネットにアクセスできないときにアラートを生成する
クラスターでインターネットアクセスが有効になっています。 攻撃を防ぐために、企業はインターネットアクセスの回数と失敗率を監視する必要があります。 インターネットアクセス回数が閾値 (10) に達し、失敗率が閾値 (50%) を超えると、直ちにアラートが生成される。 アラートメッセージには、送信元IPアドレスのリージョン、送信元IPアドレス、およびIPアドレスが危険かどうかに関する情報が含まれています。
サンプルクエリ文:
* | select ip as "Source IP address", total as "Number of times of Internet access", round(rate * 100, 2) as "Failure rate in percentage", failCount as "Number of times of illegal access", CASE when security_check_ip(ip) = 1 then 'yes' else 'no' end as "Whether the IP address is risky", ip_to_country(ip) as "Country", ip_to_province(ip) as "Province", ip_to_city(ip) as "City", ip_to_provider(ip) as "ISP" from (select CASE WHEN json_array_length(sourceIPs) = 1 then json_format(json_array_get(sourceIPs, 0)) ELSE sourceIPs END as ip, count(1) as total, sum(CASE WHEN "responseStatus.code" < 400 then 0 ELSE 1 END) * 1.0 / count(1) as rate, count_if("responseStatus.code" = 403) as failCount from log group by ip limit 10000) where ip_to_domain(ip) != 'intranet' and ip not LIKE '%,%' ORDER by "Number of times of Internet access" desc limit 10000
条件式は
ソースIPアドレス=~ ".*"
です。
次に何をすべきか
Simple Log Serviceプロジェクトの変更
監査ログを別のSimple Log Serviceプロジェクトに移行する場合は、クラスター監査でLog Serviceプロジェクトの変更機能を使用できます。
ACKコンソールにログインします。 左側のナビゲーションウィンドウで、[クラスター] をクリックします。
[クラスター] ページで、管理するクラスターの名前をクリックします。 左側のウィンドウで、 を選択します。
クラスター監査ページの右上隅にある [Log Serviceプロジェクトの変更] をクリックして、監査ログを別のSimple Log Serviceプロジェクトに移行します。
クラスター監査の無効化
クラスター監査を無効にするには、次の手順を実行します。
ACKコンソールにログインします。 左側のナビゲーションウィンドウで、[クラスター] をクリックします。
[クラスター] ページで、管理するクラスターの名前をクリックします。 左側のウィンドウで、 を選択します。
[クラスター監査] ページの右上隅で、[クラスター監査の無効化] をクリックします。
ACK専用クラスターでサードパーティのログサービスを使用する
監査ログの保存にはSimple Log Serviceを使用することを推奨します。 サードパーティのログサービスを使用するには、クラスターの作成時にSimple log serviceを使用しないことを選択し、サードパーティのログサービスを統合して監査ログを収集および取得します。 マスターノードの監査ログソースファイルは、/var/log/kubernetes/kubernetes.audit
パスで取得できます。 ファイルはJSON形式です。
ACK専用クラスターのクラスター監査設定の概要
ACK専用クラスターのクラスターコンポーネントを設定すると、コンソールはデフォルトでLog Serviceの有効化を選択してクラスター監査を有効にします。 イベントデータは、監査ポリシーに基づいて収集され、バックエンドに書き込まれます。
この機能には、kube-apiserver起動パラメーターの変更が含まれ、ACK専用クラスターにのみ適用されます。 ACK管理クラスターとACKサーバーレスクラスターのクラスター制御プレーンはACKで管理され、手動での変更はサポートされていません。
監査ポリシー
監査ポリシーは、監査設定とログ収集ルールを定義します。 異なる監査レベルのイベントログは、異なるログ収集ルールに基づいて収集されます。 次の表に、監査レベルを示します。
監査レベル | ログ収集ルール |
なし | ルールに一致するイベントは収集されません。 |
メタデータ | ユーザー情報やタイムスタンプなどのリクエストメタデータを収集します。 リクエスト本文とレスポンス本文は収集されません。 |
リクエスト | リクエストメタデータとリクエスト本文を収集します。 レスポンス本文は収集されません。 このルールは、リソース以外のリクエストには適用されません。 |
RequestResponse | リクエストメタデータ、リクエスト本文、レスポンス本文を収集します。 このルールは、リソース以外のリクエストには適用されません。 |
-- audit-policy-file
フラグを設定すると、次のYAMLファイルをAPIサーバーのブート構成として保存できます。 マスターノードにログインした後、/etc/kubernetes/audit-policy.yml
ディレクトリにある監査ポリシーファイルを表示できます。 次のYAMLファイルは、監査ポリシーのサンプルです。
リクエストの受信後すぐにはログは生成されません。 ログは、レスポンスヘッダーが送信された後にのみ生成されます。
システムは、kube-proxy watchリクエスト、kubeletおよびsystem:nodes
からノードに送信されるGETリクエスト、kube-system名前空間内のKubernetesコンポーネントによって実行されるエンドポイント操作、およびAPIサーバーから名前空間に送信されるGETリクエストを監査しません。
システムは、authentication
、rbac
、certificates
、autocaling
、およびstorage
APIの読み取りと書き込みに基づいて、リクエストボディとレスポンスボディを記録します。
監査バックエンド
収集された監査イベントは、JSON形式のログファイルとしてバックエンドログファイルシステムに保存されます。 APIサーバーのブート設定として、次のフラグを設定できます。
マスターノードにログインした後、/etc/kubernetes/manifests/kube-apiserver.yaml
ディレクトリにあるAPIサーバーの設定ファイルを表示できます。
フラグ | 説明 |
| 保存できる監査ログのシャードの最大数。 デフォルト値は 10 です。 |
| 個々の監査ログの最大メモリストレージ。 デフォルト値: 100 MB。 |
| 監査ログの出力パス。 デフォルト値: |
| 監査ログの保持期間 (日数) 。 デフォルト値 : 7 |
| 監査ポリシーファイルのパス。 デフォルト値: |
関連ドキュメント
kubectl exec
を使用してコンテナー内のコマンド実行を監査するには、「コンテナー監査の有効化」をご参照ください。エンタープライズセキュリティO&Mエンジニア向けのセキュリティのベストプラクティスの詳細については、「ベストセキュリティプラクティス」をご参照ください。