数据遮盖和隐藏

您正在查看 Apigee Edge 文档。
前往 Apigee X 文档。
信息

当您在 Edge 中调试 API 调用时,相关内容有时可能包含需要遮盖的敏感数据,例如信用卡或个人健康信息 (PHI)。

Edge 提供了遮盖或隐藏 Trace 和调试会话中的敏感数据的不同方式。

隐藏敏感数据

您可以创建前缀为“private.”的自定义变量,以防止敏感数据显示在 Trace 工具和调试会话中。

例如,在使用键值映射操作政策从已加密的键值映射中检索值时,请将变量名称设置为如下格式,以确保这些值不显示在跟踪或调试会话中:

<Get assignTo="private.hiddenData">

隐藏敏感变量是数据遮盖的一个替代方法,详见下文。隐藏和遮盖之间的区别在于,在跟踪和调试会话中,被隐藏的变量完全不显示,而被遮盖的值将替换为星号。

在跟踪和调试会话中,没有“private.”前缀的变量会以明文形式显示,即使数据来自加密的数据存储区(例如加密的键值映射)也是如此。如果您想遮盖这些值,请使用遮盖(下文)。

遮盖敏感数据

Edge 让您可以定义“遮盖配置”,以在跟踪和调试会话中遮盖特定数据。 遮盖配置可以全局设置(在组织级层),也可以本地设置(在 API 代理级层)。

遮盖数据后,这些数据会在跟踪记录输出中被替换为星号。例如:

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

使用掩膜配置

遮盖配置可让您标识以下来源中的敏感数据:
  • XML 载荷:通过 XPath 标识要从请求或响应消息载荷中过滤的 XML 元素。
  • JSON 载荷:通过 JSONPath 标识要从请求或响应消息载荷中过滤的 JSON 属性。
  • 流变量:您可以指定应在调试输出中遮盖的变量列表。当您指定 request.content、response.content 或 message.content 流变量时,请求/响应正文也会被遮盖。

以下 XML 表示形式展示了遮盖配置的基本结构:

<MaskDataConfiguration name="default">
    <Namespaces>
        <Namespace prefix="myco">http://example.com</Namespace>
    </Namespaces>
    <XPathsRequest>
        <XPathRequest>/myco:Greeting/myco:User</XPathRequest>
    </XPathsRequest>
    <XPathsResponse>
        <XPathResponse>/myco:Greeting/myco:User</XPathResponse>
    </XPathsResponse>
    <JSONPathsRequest>
        <JSONPathRequest>$.store.book[*].author</JSONPathRequest>
    </JSONPathsRequest>
    <JSONPathsResponse>
        <JSONPathResponse>$.store.book[*].author</JSONPathResponse>
    </JSONPathsResponse>
    <XPathsFault>
        <XPathFault>/myco:Greeting/myco:User</XPathFault>
    </XPathsFault>
    <JSONPathsFault>
        <JSONPathFault>$.store.book[*].author</JSONPathFault>
    </JSONPathsFault>
    <Variables>
        <Variable>request.header.user-agent</Variable>
        <Variable>request.formparam.password</Variable>
    </Variables>
</MaskDataConfiguration>

配置遮盖配置资源

使用以下元素定义遮盖配置。

字段名称 说明 默认值 是否必需?
XPathsRequest 将针对请求路径中的 XML 载荷(如有)进行评估的 XPath 表达式列表。成功解析的任何 XPath 都会导致 XML 元素的值被遮盖。 不适用 否
XPathsResponse XPath 表达式列表,将针对响应路径中的 XML 载荷(如有)进行评估。成功解析的任何 XPath 都会导致 XML 元素的值被遮盖。 不适用 否
JSONPathsRequest JSONPath 表达式列表,将根据请求路径中的 JSON 载荷(如有)进行评估。成功解析的任何 JSONPath 都会导致 JSON 属性的值被遮盖。 不适用 否
JSONPathsResponse JSONPath 表达式列表,将根据响应路径中的 JSON 载荷(如有)对这些表达式求值。成功解析的任何 JSONPath 都会导致 JSON 属性的值被遮盖。 不适用 否
XPathsFault 一个 XPath 表达式列表,将针对错误流程(如果在流程中的任何时间点抛出故障,则执行该流程)中的 XML 载荷(如果有)进行评估。成功解析的任何 XPath 都会导致 XML 元素的值被遮盖。 不适用 否
JSONPathsFault 一个 JSON 表达式列表,将针对错误流程(如果在流程中的任何时间点抛出故障,则执行该流程)中的 JSON 载荷(如果有)进行评估。成功解析的任何 JSONPath 都会导致 JSON 属性的值被遮盖。 不适用 否
变量

要屏蔽其值的变量(预定义变量或自定义变量)的列表。如需查看默认变量列表,请参阅变量参考文档。

不适用 否

遮盖配置 API

遮盖配置以 XML 或 JSON 格式的文件定义,您可以使用 RESTful 管理 API 上传和下载这些文件。如需查看数据遮盖 API 的完整列表,请参阅数据遮盖。

如需查看现有的遮盖配置,您只需在组织中调用 API 资源 /maskconfigs:

$ curl https://api.enterprise.apigee.com/v1/o/{org_name}/maskconfigs \
-u email

此示例展示了用于身份验证的基本语法。您或许可以使用其他类型的身份验证,例如 Oauth2 或 SAML。

如需查看为特定 API 代理定义的屏蔽配置,您可以调用 /maskconfigs API:

$ curl https://api.enterprise.apigee.com/v1/o/{org_name}/apis/{api_name}/maskconfigs \
-u email

如需查看特定遮盖配置,请指定遮盖的名称:

$ curl https://api.enterprise.apigee.com/v1/o/{org_name}/maskconfigs/default \
-u email
$ curl https://api.enterprise.apigee.com/v1/o/{org_name}/apis/{api_name}/maskconfigs/default \
-u email

如需创建遮盖配置,请使用 POST 动词提交定义遮盖配置的载荷:

$ curl -H "Content-type:text/xml" -X POST -d \
'<MaskDataConfiguration name="default">
    <Namespaces>
        <Namespace prefix="myco">http://example.com</Namespace>
    </Namespaces>
    <XPathsRequest>
        <XPathRequest>/myco:Greeting/myco:User</XPathRequest>
    </XPathsRequest>
    <XPathsResponse>
        <XPathResponse>/myco:Greeting/myco:User</XPathResponse>
    </XPathsResponse>
    <JSONPathsRequest>
        <JSONPathRequest>$.store.book[*].author</JSONPathRequest>
    </JSONPathsRequest>
    <JSONPathsResponse>
        <JSONPathResponse>$.store.book[*].author</JSONPathResponse>
    </JSONPathsResponse>
    <XPathsFault>
        <XPathFault>/myco:Greeting/myco:User</XPathFault>
    </XPathsFault>
    <JSONPathsFault>
        <JSONPathFault>$.store.book[*].author</JSONPathFault>
    </JSONPathsFault>
    <Variables>
        <Variable>request.header.user-agent</Variable>
        <Variable>request.formparam.password</Variable>
    </Variables>
</MaskDataConfiguration>' \
https://api.enterprise.apigee.com/v1/o/{org_name}/maskconfigs \
-u email
如需创建范围限定为特定 API 代理的遮盖配置,请执行以下操作:
$ curl -H "Content-type:text/xml" -X POST -d \
'<MaskDataConfiguration name="default">
    <Namespaces>
        <Namespace prefix="myco">http://example.com</Namespace>
    </Namespaces>
    <XPathsRequest>
        <XPathRequest>/myco:Greeting/myco:User</XPathRequest>
    </XPathsRequest>
    <XPathsResponse>
        <XPathResponse>/myco:Greeting/myco:User</XPathResponse>
    </XPathsResponse>
    <JSONPathsRequest>
        <JSONPathRequest>$.store.book[*].author</JSONPathRequest>
    </JSONPathsRequest>
    <JSONPathsResponse>
        <JSONPathResponse>$.store.book[*].author</JSONPathResponse>
    </JSONPathsResponse>
    <XPathsFault>
        <XPathFault>/myco:Greeting/myco:User</XPathFault>
    </XPathsFault>
    <JSONPathsFault>
        <JSONPathFault>$.store.book[*].author</JSONPathFault>
    </JSONPathsFault>
    <Variables>
        <Variable>request.header.user-agent</Variable>
        <Variable>request.formparam.password</Variable>
    </Variables>
</MaskDataConfiguration>' \
https://api.enterprise.apigee.com/v1/o/{org_name}/apis/{api_name}/maskconfigs \
-u email

您可以使用 DELETE 动词删除遮盖配置:

$ curl -X DELETE \
https://api.enterprise.apigee.com/v1/o/{org_name}/apis/{api_name}/maskconfigs/{maskconfig_name} \
-u email

此示例展示了用于身份验证的基本语法。您或许可以使用其他类型的身份验证,例如 Oauth2 或 SAML。

对 DELETE 操作的响应是 HTTP 代码 204,没有消息内容。

遮盖 XML 命名空间

遮盖配置在 XPATH 定义中不需要 <Namespace> 元素,除非在 XML 载荷中定义了命名空间。如果 XML 载荷使用了默认命名空间也是如此。

例如,XML 载荷不定义命名空间:

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

因此,遮盖配置不需要 <Namespace> 元素:

<MaskDataConfiguration>
    <XPathsRequest>
        <XPathRequest>/employee/name</XPathRequest>
    <XPathsRequest>
</MaskDataConfiguration>

如果 XML 载荷包含命名空间和前缀:

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

则遮盖配置定义应包含 <Namespace> 元素:

<MaskDataConfiguration>
    <Namespaces>
        <Namespace prefix="myco">http://example.com</Namespace>
    </Namespaces>
    <XPathsRequest>
        <XPathRequest>/myco:employee/myco:name</XPathRequest>
    <XPathsRequest>
</MaskDataConfiguration>

如果 XML 载荷具有命名空间,但没有前缀,即使用默认命名空间:

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

则遮盖配置仍应包含 <Namespace> 元素:

<MaskDataConfiguration>
    <Namespaces>
        <Namespace prefix="myco">http://example.com</Namespace>
    </Namespaces>
    <XPathsRequest>
        <XPathRequest>/myco:employee/myco:name</XPathRequest>
    <XPathsRequest>
</MaskDataConfiguration>