ログマスキングプラグインは、データが Simple Log Service に送信される前に、HTTP リクエストおよびレスポンス内の機密情報をマスキングします。ヘッダー、クエリ、トークン、ボディなど、さまざまな場所に対してマスキングルールを設定できます。
1. 前提条件
-
専用インスタンスが使用されていること。
-
API Gateway が Simple Log Service にログを記録するように設定されていること。
-
ログマスキングプラグインをバインドする API が属する API グループに対して、HTTP リクエストとレスポンスのロギングが有効になっていること。詳細については「HTTP リクエストとレスポンスのロギングの設定」をご参照ください。
2. 概要
ログマスキングプラグインには、一連のマスキングルールが含まれています。API Gateway は、Simple Log Service にデータを配信する前にこれらのルールを適用します。各ルールには、次の属性があります:
-
名前:必須。ルールを区別するための名前です。
-
ポリシー:必須。マスキングパターンです。完全マスキングと部分マスキングをサポートし、さまざまな種類の機密情報に対応します。
-
場所:必須。マスキング対象のデータがリクエストまたはレスポンスのどこにあるか (ヘッダー、クエリ、トークン、ボディなど) を指定します。
-
パラメーター:場所がヘッダー、クエリ、またはトークンに設定されている場合に必須です。マスキングするパラメーター名を指定します。
-
MatchMode:場所がボディに設定されている場合に必須です。特定の長さの数値、メールアドレス、ID カード番号などの機密情報を照合するためのパターンです。MatchMode を使用する場合、パラメーターを指定する必要はありません。
3. 設定
マスキングルールでは、名前とパラメーターの値をカスタマイズできます。他の属性は、事前設定された値を使用する必要があります。そうしないと、ルールが有効にならない場合があります。
ポリシー属性には、次のオプションがあります:
-
ALL(デフォルト):すべての文字がマスキングされます。たとえば、123456 は **** のようにマスキングされます。 -
KEEP_LEFT:左から N 個の文字を保持し、残りをマスキングします。このオプションでは、保持する文字数を指定する追加の整数パラメーターが必要です。たとえば、KEEP_LEFT:3 と設定すると、文字列 123456 は 123* のようにマスキングされます。 -
KEEP_RIGHT:右から N 個の文字を保持し、残りをマスキングします。このオプションでは、保持する文字数を指定する追加の整数パラメーターが必要です。たとえば、KEEP_RIGHT:3 と設定すると、文字列 123456 は *456 のようにマスキングされます。 -
KEEP_CENTER:インデックス N から M 文字を保持し、残りをマスキングします。このオプションでは、開始位置と長さをコンマで区切った 2 つの追加の整数パラメーターが必要です。たとえば、KEEP_CENTER:2,2 と設定すると、文字列 123456 は **34** のようにマスキングされます。
場所属性には、次のオプションがあります:
-
REQUEST_HEADER:リクエストヘッダー。パラメーターと併用する必要があります。 -
REQUEST_QUERY:リクエストクエリ。パラメーターと併用する必要があります。 -
REQUEST_TOKEN:リクエストトークン、具体的には JSON Web トークン (JWT) 内のクレームを指します。パラメーターと併用する必要があります。 -
REQUEST_BODY:リクエストボディ。MatchMode と併用する必要があります。 -
RESPONSE_HEADER:レスポンスヘッダー。パラメーターと併用する必要があります。 -
RESPONSE_BODY:レスポンスボディ。MatchMode と併用する必要があります。
MatchMode 属性には、次のオプションがあります:
-
D:10 進数の数字に一致します。このオプションでは、一致させる桁数を指定する追加の整数パラメーターが必要です。たとえば、D:11 は 11 桁の数字に一致します。 -
HEX:16 進数の文字に一致します。文字は、大文字と小文字を区別しません。このオプションでは、一致させる文字数を指定する追加の整数パラメーターが必要です。たとえば、HEX:16 は 16 文字の 16 進数列に一致します。 -
C:文字のみの文字列に一致します。文字は、大文字と小文字を区別しません。このオプションでは、一致させる文字数を指定する追加の整数パラメーターが必要です。たとえば、C:18 は 18 文字のアルファベット列に一致します。 -
DC:文字と数字の組み合わせに一致します。文字は、大文字と小文字を区別しません。このオプションでは、一致させる文字数を指定する追加の整数パラメーターが必要です。たとえば、DC:15 は 15 文字の英数字列に一致します。 -
EMAIL:メールアドレスに一致します。 -
IDCARD:ID カード番号に一致します。
4. 設定例
ログマスキングプラグインは、JSON または YAML 形式で設定できます。2 つの形式は同じスキーマを共有し、相互に変換できます。次のテンプレートは YAML 形式です:
---
rules:
- name: maskRequestQuery # ルール名。
location: "REQUEST_QUERY" # マスキング対象のパラメーターの場所。
parameters: # マスキング対象のパラメーター。
- userid
- name
policy: "KEEP_LEFT:4" # マスキングポリシー。左から4文字を保持し、残りをマスキングします。
- name: maskRequestHeader # ルール名。
location: "REQUEST_HEADER" # マスキング対象のパラメーターの場所。
parameters: # マスキング対象のパラメーター。
- userid
- name
policy: "KEEP_CENTER:4,5" # マスキングポリシー。インデックス4から5文字を保持し、残りをマスキングします。
- name: maskRequestBody # ルール名。
location: "REQUEST_BODY" # マスキング対象の場所。
matchMode: HEX:10 # 一致モード。10文字の16進数文字列に一致します。
policy: "ALL" # マスキングポリシー。すべての文字がマスキングされます。
- name: maskResponseBody # ルール名。
location: "RESPONSE_BODY" # マスキング対象の場所。
matchMode: EMAIL # 一致モード。メールアドレスに一致します。
policy: "KEEP_RIGHT:7" # マスキングポリシー。右から7文字を保持し、残りをマスキングします。
上記の設定例では、次のルールが設定されています:
-
maskRequestQuery:リクエストクエリの userid と name パラメーターを、左から 4 文字を保持してマスキングします。
-
maskRequestHeader:リクエストヘッダーの userid と name パラメーターを、インデックス 4 から 5 文字を保持してマスキングします。
-
maskRequestBody:リクエストボディ内の 10 文字の 16 進数文字列をすべてマスキングします。
-
maskResponseBody:レスポンスボディ内のすべてのメールアドレスを、右から 7 文字を保持し、残りをマスキングします。
設定された 2 つのルールが競合する場合、API Gateway はルールリスト内の順序に基づいて両方のルールを適用します。
5. シナリオ例
次のスニペットは、HTTP リクエストのサンプルを示しています:
POST /sls?name=test HTTP/1.1
Accept-Encoding: gzip,deflate
X-Ca-Stage: RELEASE
X-Ca-Timestamp: 1713423308449
User-Agent: Apache-HttpClient/4.5.6 (Java/1.8.0_172)
Content-MD5: 9QxBgTbb7psVMovQUjXXXXX
X-Ca-Real-IP: 101.37.XX.XX
eagleeye-rpcid: 0.1
Authorization: sdhfcvisdhjnvkdf
X-Forwarded-Proto: http
x-ca-nonce: cb5e4526-b4e9-42f3-a365-a095f5c22ff9
Content-Length: 31
Content-Type: application/json
Host: eaa961f4c0184712bce440XXXX-cn-beijing.alicloudapi.com
{
"Body":"{"idcard":"11000019900702XXXX"}"
"userid":"3628756075"
}
次のスニペットは、対応する HTTP レスポンスを示しています (idcard は ID カード番号を示します):
Response:
200
Date: Thu, 18 Apr 2024 06:55:08 GMT
Content-Type: application/oct-stream
Content-Length: 854
Connection: keep-alive
X-Ca-Request-Id: 5FF51156-536B-4541-BED0-46A0C4D6929B
Content-Disposition: attachment; filename=ApiResponseForInnerDomain
{
"Body":"{"idcard":"11000019900702XXXX"}"
"userid":"3628756075"
}
5.1 リクエストとレスポンスのヘッダーおよびクエリセクションのパラメーターのマスキング
-
リクエストのヘッダーセクションの Authorization 値をマスキングします。インデックス 4 から 5 文字を保持するようにマスキングします。
-
リクエストクエリの name について、左から 2 文字を保持し、残りをマスキングします。
---
rules:
- name: request_query # ルール名。
location: "REQUEST_QUERY" # マスキング対象のパラメーターの場所。
parameters: # マスキング対象のパラメーター。
- name
policy: "KEEP_LEFT:2" # マスキングポリシー。左から2文字を保持し、残りをマスキングします。
- name: request_header # ルール名。
location: "REQUEST_HEADER" # マスキング対象のパラメーターの場所。
parameters: # マスキング対象のパラメーター。
- Authorization
policy: "KEEP_CENTER:4,5" # マスキングポリシー。インデックス4から5文字を保持し、残りをマスキングします。
ログでルールが有効になっていることを確認します:
requestHeaders: {"Authorization":"****cvisd*******"}requestQueryString: name=te**
5.2 リクエストとレスポンスのボディ内の情報のマスキング
-
リクエストとレスポンスのボディ内の ID カード番号をマスキングします。すべての文字がマスキングされます。
-
長さが 10 文字の 10 進数をマスキングします。右から 3 文字を保持し、残りをマスキングします。
--- rules: - name: request_body_IDCARD # ルール名。 location: "REQUEST_BODY" # マスキング対象の情報の場所。ID カード番号がリクエストボディ内でマスキングされます。 matchMode: IDCARD # 一致モード。IDカード番号に一致します。 policy: "ALL" # マスキングポリシー。すべての文字がマスキングされます。 - name: request_body_D # ルール名。 location: "REQUEST_BODY" # マスキング対象の場所。 matchMode: D:10 # 一致モード。10文字の10進数文字列に一致します。 policy: "KEEP_RIGHT:3" # マスキングポリシー。右から3文字を保持し、残りをマスキングします。 - name: response_body_IDCARD # ルール名。 location: "RESPONSE_BODY" # マスキング対象の情報の場所。ID カード番号がレスポンスボディ内でマスキングされます。 matchMode: IDCARD # 一致モード。IDカード番号に一致します。 policy: "ALL" # マスキングポリシー。すべての文字がマスキングされます。
ログでルールが有効になっていることを確認します:
requestBody: { "idcard":"******************", "userid":"*******075" }
responseBody: { "Body":"{\"idcard\":\"******************\"}", "userid":"3628756075" }
6. 制限事項
ログマスキングプラグインは、専用インスタンスでのみ利用可能です。
単一プラグインのメタデータのサイズは、50 KB を超えてはなりません。
2024 年 4 月 2 日より前に購入した専用インスタンスでプラグインが有効にならない場合は、チケットを起票してインスタンスバージョンをアップグレードしてください。