注: このプロダクトの一部の機能はベータ版です。ハイブリッド インストール オプションは一般提供です。ベータ版プログラムに参加するには、Apigee の担当者にお問い合わせください。

データのマスキングと非表示

Apigee で API 呼び出しをデバッグする場合、コンテンツには、マスクする必要のあるクレジット カードや個人を特定できる医療情報(PHI)などの機密データが含まれることがあります。

Apigee には、トレース セッションやデバッグ セッションでセンシティブ データのマスキングや非表示に関するさまざまな方法が用意されています。

機密データのマスキング

Apigee では、トレース セッションやデバッグ セッションで特定のデータをマスクするためのマスク構成を定義できます。データがマスクされると、トレース出力でアスタリスクに置き換えられます。例:

<description>**********</description>

マスク構成は、環境レベルで定義するシングルトン リソースです。デフォルトでは、データのマスキングは有効になりません。

マスク構成の構造

マスク構成は JSON 形式のファイルで、次のソースの機密データを識別できます。

  • XML ペイロード: XPath を使用して、リクエストまたはレスポンス メッセージ ペイロードから除外される XML 要素を識別します。
  • JSON ペイロード: JSONPath を使用して、リクエストまたはレスポンス メッセージ ペイロードから除外する JSON プロパティを指定します。
  • フロー変数: デバッグ出力でマスクする必要がある変数のリストを指定できます。request.contentresponse.content、または message.content フロー変数を指定すると、リクエストの本文/レスポンスの本文もマスクされます。

JSON 形式のマスク構成の基本構造の例を次に示します。例に示すマスク構成フィールドの詳細については、DebugMask をご覧ください。

{
  "namespaces": {
    "myco": "http://example.com"
  },
  "requestXPaths": [
    "/myco:Greeting/myco:User"
  ],
  "responseXPaths": [
    "/myco:Greeting/myco:User"
  ],
  "faultXPaths": [
    "/myco:Greeting/myco:User"
  ],
  "requestJSONPaths": [
    "$.store.book[*].author"
  ],
  "responseJSONPaths": [
    "$.store.book[*].author"
  ],
  "faultJSONPaths": [
    "$.store.book[*].author"
  ],
  "variables": [
    "request.header.user-agent",
    "request.formparam.password"
  ]
}

API を使用して環境内のマスク構成を表示する

環境内のマスク構成を表示するには、次のリソースに GET を発行します。

/organizations/{org}/environments/{env}/debugmask

例:

curl "https://apigee.googleapis.com/v1/organizations/myorg/environments/test/debugmask" \
  -X GET \
  -H "Authorization: Bearer $TOKEN"

ここで、OAuth 2.0 アクセス トークンの取得の説明に従って、$TOKEN が OAuth 2.0 アクセス トークンに設定されます。この例で使用されている curl オプションの詳細については、curl を使用するをご覧ください。使用される環境変数の説明については、Apigee API リクエストの環境変数の設定をご覧ください。

レスポンスの例を次に示します。

{
  "name": "organizations/myorg/environments/test/debugmask"
  "namespaces": {
    "myco": "http://example.com"
  },
  "requestXPaths": [
    "/myco:Greeting/myco:User"
  ],
  "responseXPaths": [
    "/myco:Greeting/myco:User"
  ]
}

API を使用して環境内のマスク構成を更新する

環境内のマスク構成シングルトン リソースを更新するには、次のリソースに PATCH を発行します。

/organizations/{org}/environments/{env}/debugmask/{debugmask}

必要に応じて、次のクエリ パラメータを渡すことができます。

  • updateMask クエリ パラメータを設定して、デバッグマスク内のフィールドの完全修飾された名前を含むフィールド マスクを指定します。例: "requestJSONPaths"
  • 更新時にデバッグ マスクの既存の値を置換するかどうかを指定するには、replaceRepeatedFields クエリ パラメータを設定します。デフォルトで、値が付加されます(false)。

次に例を示します。

curl "https://apigee.googleapis.com/v1/organizations/myorg/environments/test/debugmask/{debugmask}" \
  -X PATCH \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-type: application/json" \
  -d \
  '{
    "requestXPaths": [
      "/myco:employee/myco:name"
    ]
   }'

ここで、OAuth 2.0 アクセス トークンの取得の説明に従って、$TOKEN が OAuth 2.0 アクセス トークンに設定されます。この例で使用されている curl オプションの詳細については、curl を使用するをご覧ください。使用される環境変数の説明については、Apigee API リクエストの環境変数の設定をご覧ください。

XML 名前空間のマスキング

マスク構成では、XML ペイロードに名前空間が定義されない限り、XPATH 定義に <Namespace> 要素は必要ありません。これは、XML ペイロードがデフォルトの名前空間を使用する場合も同様です。

たとえば、XML ペイロードは名前空間を定義しません。

<employee>
    <name>abc</name>
    <age>50</age>
</employee>

したがって、マスク構成には <Namespace> 要素は必要ありません。

{
  "requestXPaths": [
    "/employee/name"
  ]
}

XML ペイロードに名前空間と接頭辞が含まれている場合:

<employee xmlns:myco="http://example.com">
    <myco:name>xyz</myco:name>
    <myco:age>50</myco:age>
</myco:employee>

その場合、マスク構成定義に <Namespace> 要素を含める必要があります。

{
  "namespaces": {
    "myco": "http://example.com"
  },
  "requestXPaths": [
    "/myco:employee/myco:name"
  ]
}

XML ペイロードに名前空間があるものの接頭辞がない場合、つまりデフォルトの名前空間の場合:

<employee xmlns="http://example.com">
    <name>xyz</name>
    <age>50</age>
</employee>

その場合、マスク構成には <Namespace> 要素を含める必要があります。

{
  "namespaces": {
    "myco": "http://example.com"
  },
  "requestXPaths": [
    "/myco:employee/myco:name"
  ]
}

機密データの非表示

private.」という接頭辞が付いたカスタム変数を作成することで、センシティブ データが Trace ツールとデバッグ セッションに表示されないようにできます。

たとえば、Key-Value Map Operations ポリシーを使用して、暗号化された Key-Value マップから値を取得する場合、トレース セッションまたはデバッグ セッションで値が表示されないようにするために、次のように変数名をフォーマットします。

<Get assignTo="private.hiddenData">

機密性の高い変数の非表示は、次に説明するデータ マスキングの代替手法です。非表示とマスキングの違いは、非表示の変数は一切表示されず、トレースとデバッグ セッションでマスクされた値はアスタリスクに置き換えられる点です。

接頭辞「private.」のない変数は、暗号化された Key-Value マップなどの暗号化されたデータストアからデータが取得された場合でも、トレース セッションとデバッグ セッションでクリアテキストで表示されます。これらの値をマスクするには、以下のマスキングを使用します。