本页面适用于 Apigee 和 Apigee Hybrid。
查看 Apigee Edge 文档。
当您在 Apigee 中调试 API 调用时,相关内容有时可能包含必须遮盖的敏感数据,例如信用卡或个人健康信息 (PHI)。
Apigee 提供了遮盖或隐藏调试会话中的敏感数据的不同方式。如果您对调试会话中收集的数据使用遮盖,Apigee 会在网关节点中执行遮盖,然后再将调试会话数据传输到控制平面。
遮盖敏感数据
通过 Apigee,您可以定义
<ServiceRequest>
<request-id>B540A938-F551</request-id>
<customer-name>**********</customer-name>
</ServiceRequest>遮盖配置是您在环境级别定义的单例资源。 默认情况下不使用数据遮盖。
数据遮盖仅适用于 API 代理的调试会话中捕获的数据。数据遮盖不会影响发送到目标或客户端应用的数据。如果更改了数据遮盖配置,则必须启动新的调试会话才能看到更改的效果。
遮盖配置的结构
遮盖配置是 JSON 格式的文件,可让您标识以下来源中的敏感数据:
- XML 载荷:通过 XPath 标识要从请求或响应消息载荷中过滤的 XML 元素。
- JSON 载荷:通过 JSONPath 标识要从请求或响应消息载荷中过滤的 JSON 属性。
- 流变量:您可以指定应在调试输出中遮盖的变量列表。当您指定
request.content、response.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-name", "request.formparam.password", "myCustomVariable" ] }
使用 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您可以选择传递以下查询参数:
- 设置
updateMask查询参数以指定一个字段掩码,其中包含调试掩码中字段的完全限定名称的逗号分隔列表。例如:"requestJSONPaths" - 设置
replaceRepeatedFields查询参数以指定在更新时是否替换调试掩码中的现有值。默认情况下,系统会附加值 (false)
例如:
curl "https://apigee.googleapis.com/v1/organizations/myorg/environments/test/debugmask" \
-X PATCH \
-H "Authorization: Bearer $TOKEN" \
-H "Content-type: application/json" \
-d \
'{
"namespaces": {
"ns1": "http://example.com"
},
"requestXPaths": [
"/ns1:employee/ns1:name"
]
}'按照获取 OAuth 2.0 访问令牌中的说明,将 $TOKEN 设置为您的 OAuth 2.0 访问令牌。如需了解此示例中使用的 curl 选项,请参阅使用 curl。如需了解您可以使用的环境变量,请参阅为 Apigee API 请求设置环境变量。
遮盖命名空间范围的 XML
如果您要遮盖 XML 数据并且该数据使用 XML 命名空间,则遮盖配置必须使用 namespaces 元素引用这些命名空间。无论 XML 载荷使用默认命名空间还是命名空间前缀,都是如此。
例如,假设您要在请求载荷中遮盖员工姓名,并且 XML 不使用 XML 命名空间:
<employee>
<name>Shanmu Tharman</name>
<age>50</age>
</employee>因此,调试遮盖配置不需要 namespaces 元素:
{
"requestXPaths": [
"/employee/name"
]
}如果 XML 载荷使用带前缀的命名空间:
<cym:employee xmlns:cym="http://cymbalgroup.com" xmlns:id="http://cymbalgroup.com/identity">
<id:name>Shanmu Tharman</id:name>
<id:age>50</id:age>
</cym:employee>则遮盖配置应包含 namespaces 元素。您可以选择调试遮盖配置中任何有效的命名空间前缀;调试遮盖配置中的命名空间前缀可能与 XML 中使用的命名空间前缀相同,但这不是必需的。
{
"namespaces": {
"cym": "http://cymbalgroup.com",
"idns": "http://cymbalgroup.com/identity"
},
"requestXPaths": [
"/cym:employee/idns:name"
]
}如果 XML 载荷使用没有前缀的命名空间(即默认命名空间):
<employee xmlns="http://cymbalgroup.com" xmlns:id="http://cymbalgroup.com/identity">
<id:name>Shanmu Tharman</id:name>
<id:age>50</id:age>
</employee>则调试遮盖配置仍必须在与该默认命名空间对应的 namespaces 元素中定义前缀。您可以使用自己想要的任何唯一前缀。
{
"namespaces": {
"p1": "http://cymbalgroup.com",
"id": "http://cymbalgroup.com/identity"
},
"requestXPaths": [
"/p1:employee/id:name"
]
}其他配置说明
-
借助
*XPaths和*JSONPaths配置元素,您可以遮盖request、response或fault消息中显示的数据。但是,完整的消息内容也可以通过调试会话捕获。您可能还需要在variables部分中配置request.content或response.content,以防止显示敏感数据。 -
如果您使用 ServiceCallout 政策发出请求,则系统不会使用
requestXPaths或responseJSONPaths等配置元素遮盖该标注的请求和响应中的信息。如果您要遮盖该数据,则应在 ServiceCallout 政策中为请求和响应消息指定变量名称,然后在调试遮盖的variables部分中指定这些变量。例如,如果 ServiceCallout 政策使用:<ServiceCallout name='SC-1'> <Request variable='rbacRequest'> <Set> <Payload contentType='application/json'>{ ... }</Payload> ...则您应在调试遮盖配置的
variables元素中添加rbacRequest.content。{ ... "variables": [ "request.content", "response.content", "rbacRequest.content" ] }
隐藏敏感数据
除了遮盖之外,您还可以通过为自定义变量选择一个以 private. 开头的名称,防止敏感数据显示在跟踪工具和调试会话中。
例如,使用键值对映射操作政策从键值对映射中检索值时,您可以按如下所示选择变量名称,以确保该值不会显示在跟踪或调试会话中:
<KeyValueMapOperations name='KVM-Get-1'>
<Scope>environment</Scope>
<ExpiryTimeInSecs>300</ExpiryTimeInSecs>
<MapName>settings</MapName>
<Get assignTo='private.privatekey'>
<Key>
<Parameter>rsa_private_key</Parameter>
</Key>
</Get>
</KeyValueMapOperations>不带 private. 前缀的变量会以明文形式显示在跟踪和调试会话中,即使数据来自加密的数据存储区(例如键值对映射)也是如此。如果您想遮盖这些值,请使用遮盖。