KubeAPI 操作監査機能は、ユーザーアクティビティを記録・追跡することで、Service Mesh (ASM) 内の KubeAPI 操作を監視・監査できます。監査概要、アカウント操作詳細、リソース固有の操作リストを表示して、主要なイベントの追跡、統計の分析を行い、メッシュのセキュリティとトレーサビリティを向上させることができます。
前提条件
背景情報
-
このトピックでは、リソースは Istio リソースを指し、VirtualService、Gateway、DestinationRule、EnvoyFilter、Sidecar、ServiceEntry が含まれます。
-
メッシュ監査機能を有効にすると、生成された監査ログに対して課金されます。課金の詳細については、「機能別課金」をご参照ください。
ステップ 1:KubeAPI 操作監査の有効化
新規 ASM インスタンス
ASM コンソール にログインします。左側のナビゲーションウィンドウで、 を選択します。
-
Mesh Management ページで、 Create ASM Instance をクリックします。[Enable Mesh Audit] を選択し、他のパラメーターを設定してから、 Create Service Mesh をクリックします。
パラメーターの詳細については、「ASM インスタンスの作成」をご参照ください。
説明デフォルトでは、ASM は監査ログ用に mesh-log-${Mesh-ID} という名前の Project と、ログを保存するためにこの Project 内に audit-${Mesh-ID} という名前の Logstore を作成します。
既存の ASM インスタンス
ASM コンソール にログインします。左側のナビゲーションウィンドウで、 を選択します。
[メッシュ管理] ページで、ASM インスタンスの名前をクリックします。左側のナビゲーションウィンドウで、 を選択します。
-
Mesh Audit ページで、 [Enable Mesh Audit] を選択し、 OK をクリックします。
ステップ 2:KubeAPI 監査レポートの表示
ASM コンソール にログインします。左側のナビゲーションウィンドウで、 を選択します。
[メッシュ管理] ページで、ASM インスタンスの名前をクリックします。左側のナビゲーションウィンドウで、 を選択します。
-
Mesh Audit ページで、 [API アクセス概要] または Operation Details タブをクリックして、レポートの詳細を表示します。
-
[API アクセス概要]:メッシュインスタンスの KubeAPI アクセス挙動に関する詳細情報を表示します。
[API アクセス概要] ページには、 [Access source distribution] 円グラフ、 [Unauthorized access attempts] パネル、 [Public network access list] テーブルが含まれます。パブリックネットワークアクセスリストには、 [Source IP address]、 [Access count]、 [Failure rate %]、 [Unauthorized access attempts]、 [High-risk IP]、 [Country]、 [Province]、 [City]、 [ISP] などの列が含まれます。
-
Operation Details:メッシュインスタンス内の指定されたリソースに対する操作の詳細なリストを表示します。
リソースタイプを選択または入力して、リアルタイムクエリを実行します。さまざまなイベントの総数、名前空間の分布、時系列トレンド、詳細な操作リストを表示できます。[Resource operations] タブの上部には、 [Resource type]、 [Namespace]、 [Status code] などのフィルターがあります。概要エリアには、オペレーター数、名前空間数、操作メソッド、成功率が表示されます。このエリアの下には、 [Operation trace] タイムライン、 [Create event namespace distribution]、 [Update event namespace distribution]、 [Access event namespace distribution]、 [Delete event namespace distribution] などのパネルがあります。
-
関連操作
詳細なログレコード
カスタムクエリを実行して監査ログを分析するには、Simple Log Service コンソールに移動して詳細なログレコードを表示してください。
-
Simple Log Service コンソール にログインします。
-
プロジェクト一覧 セクションで、mesh-log-${Mesh-ID} という名前の Project をクリックします。
-
audit-${Mesh-ID} という名前の Logstore を選択し、 検索と分析 をクリックして対応する監査ログを表示します。
説明-
メッシュ監査を有効にすると、生成された Project に audit-${Mesh-ID} という名前の Logstore が自動的に追加されます。
-
監査ログの Logstore には、デフォルトでインデックスが設定されています。インデックスは変更しないでください。変更すると、レポートが正常に機能しなくなる可能性があります。
-
デフォルトでは、Simple Log Service は ASM からの API Server 監査ログを 30 日間保存します。デフォルトの保持期間を変更するには、「Logstore の管理」をご参照ください。
監査ログの一般的な検索方法は次のとおりです:
-
特定の RAM ユーザーが実行した操作を照会するには、検索ボックスに RAM ユーザー ID を入力し、 検索と分析 をクリックします。
-
特定のリソースに対する操作を照会するには、検索ボックスにリソース名を入力し、 検索と分析 をクリックします。
-
システムコンポーネントによって実行された操作を除外するには、検索ボックスに
NOT user.username: node NOT user.username: serviceaccount NOT user.username: apiserver NOT user.username: kube-scheduler NOT user.username: kube-controller-managerを入力し、 検索と分析 をクリックします。
クエリと分析方法の詳細については、「クエリ概要」をご参照ください。
アラート
特定のリソースに対する操作に関するアラートをリアルタイムで受信するには、Simple Log Service のアラート機能を使用します。サポートされている通知チャネルには、SMS、DingTalk チャットボット、メール、カスタム Webhook、通知センターが含まれます。詳細については、「アラート」をご参照ください。
監査レポートのクエリステートメントを使用して監査ログを照会することもできます:
-
例 1:コンテナコマンド実行時のアラート
ある会社は、自社のメッシュインスタンスの使用に厳しい制限を設けており、ユーザーがコンテナにログインしたり、コマンドを実行したりすることを許可していません。ユーザーがコマンドを実行した場合、直ちにアラートがトリガーされる必要があります。アラートには、特定のコンテナ、実行されたコマンド、オペレーター、イベント ID、時刻、および送信元 IP アドレスなどの詳細を含める必要があります。
-
クエリステートメント:
verb : create and objectRef.subresource:exec and stage: ResponseStarted | SELECT auditID as "イベントID", date_format(from_unixtime(__time__), '%Y-%m-%d %T' ) as "操作時刻", regexp_extract("requestURI", '([^\?]*)/exec\?.*', 1)as "リソース", regexp_extract("requestURI", '\?(.*)', 1)as "コマンド" ,"responseStatus.code" as "ステータスコード", 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 "操作アカウント", CASE WHEN json_array_length(sourceIPs) = 1 then json_format(json_array_get(sourceIPs, 0)) ELSE sourceIPs END as "ソースアドレス" limit 100 -
条件式:
"イベントID" =~ ".*"
-
-
例 2:パブリックアクセス失敗時のアラート
あるメッシュインスタンスでは、パブリックアクセスが有効になっています。悪意のある攻撃を防ぐために、パブリックアクセスの試行回数と失敗率を監視する必要があります。IP アドレスからのアクセス試行回数がしきい値 (例:10 回) に達し、失敗率がしきい値 (例:50%) を超えた場合、直ちにアラートをトリガーする必要があります。アラートには、ユーザーの IP アドレスの地理的地域、ソース IP アドレス、およびそれが高リスク IP アドレスであるかどうかが含まれる必要があります。
-
クエリステートメント:
* | select ip as "ソースアドレス", total as "アクセス回数", round(rate * 100, 2) as "失敗率%", failCount as "不正アクセス回数", CASE when security_check_ip(ip) = 1 then 'yes' else 'no' end as "高リスクIPか", ip_to_country(ip) as "国", ip_to_province(ip) as "省", ip_to_city(ip) as "市", 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' having "アクセス回数" > 10 and "失敗率%" > 50 ORDER by "アクセス回数" desc limit 100 -
条件式:
"ソースアドレス" =~ ".*"
-
メッシュ監査の再構築
メッシュ監査用の Simple Log Service Project を誤って削除した場合は、機能を継続して使用するために再作成する必要があります。
ASM コンソール にログインします。左側のナビゲーションウィンドウで、 を選択します。
[メッシュ管理] ページで、ASM インスタンスの名前をクリックします。左側のナビゲーションウィンドウで、 を選択します。
-
Mesh Audit ページの Rebuild Mesh Audit ダイアログボックスで、 Recreate をクリックします。
再作成された Project の名前は、以前の Project 名にタイムスタンプが付加されたものになります。
-
関連ドキュメント
-
重要なリソースが変更されたときにタイムリーなアラート通知を連絡先に送信するには、「メッシュリソースに対する操作の監査アラートの設定」をご参照ください。
-
メッシュ内でワークロード ID、ピア認証、リクエスト認証、認可ポリシーを設定して、メッシュリソースをよりきめ細かく管理し、メッシュのセキュリティを向上させることができます。詳細については、「ゼロトラストセキュリティの概要」をご参照ください。