데이터 마스킹 및 숨기기

이 페이지는 ApigeeApigee Hybrid에 적용됩니다.

Apigee Edge 문서 보기

Apigee에서 API 호출을 디버깅할 때 콘텐츠에는 마스킹해야 하는 신용카드 또는 개인 식별 건강 정보(PHI)와 같은 민감한 정보가 포함될 수 있습니다.

Apigee는 Trace 및 디버그 세션의 민감한 정보를 마스킹하거나 숨기는 다양한 방법을 제공합니다.

민감한 정보 마스킹

Apigee를 사용하면 마스크 구성을 정의하여 trace 및 디버그 세션에서 특정 데이터를 마스킹할 수 있습니다. 데이터가 마스킹되면 데이터는 trace 출력에서 별표로 대체됩니다. 민감한 정보는 마스킹하고 민감하지 않은 정보는 변경하지 않고 유지할 수 있습니다. 예를 들면 다음과 같습니다.

<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"

$TOKENOAuth 2.0 액세스 토큰 가져오기에 설명된 대로 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"
     ]
   }'

$TOKENOAuth 2.0 액세스 토큰 가져오기에 설명된 대로 OAuth 2.0 액세스 토큰으로 설정합니다. 이 예시에서 사용된 curl 옵션에 대한 자세한 내용은 curl 사용을 참조하세요. 사용된 환경 변수에 대한 설명은 Apigee API 요청에 대한 환경 변수 설정을 참조하세요.

네임스페이스 범위 XML 마스킹

XML 데이터를 마스킹하려고 하는데 해당 데이터가 XML 네임스페이스를 사용하는 경우 마스크 구성에서 namespaces 요소를 사용하여 이러한 네임스페이스를 참조해야 합니다. XML 페이로드가 기본 네임스페이스를 사용하든 네임스페이스 프리픽스를 사용하든 마찬가지입니다.

예를 들어 요청 페이로드에서 직원 이름을 마스킹하려 하고 XML에 XML 네임스페이스가 사용되지 않는다고 가정해보겠습니다.

<employee>
  <name>Shanmu Tharman</name>
  <age>50</age>
</employee>

따라서 debugmask 구성에는 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 요소가 포함되어야 합니다. debugmask 구성에서 유효한 네임스페이스 프리픽스를 선택할 수 있습니다. debugmask 구성의 네임스페이스 프리픽스는 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>

여전히 debugmask 구성은 기본 네임스페이스에 해당하는 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 정책에서 요청 및 응답 메시지의 변수 이름을 지정한 다음 debugmask의 variables 섹션에서 이러한 변수를 지정해야 합니다. 예를 들어 ServiceCallout 정책에서 다음을 사용하는 경우:

    <ServiceCallout name='SC-1'>
      <Request variable='rbacRequest'>
        <Set>
          <Payload contentType='application/json'>{ ... }</Payload>
           ...
    

    debugmask 구성을 위해 variables 요소에 rbacRequest.content를 포함해야 합니다.

    {
      ...
      "variables": [
        "request.content",
        "response.content",
        "rbacRequest.content"
      ]
    }

민감한 정보 숨기기

마스킹 외에도 커스텀 변수에 private.으로 시작하는 이름을 선택하여 Trace 도구 및 디버그 세션에 민감한 정보가 표시되지 않도록 할 수 있습니다.

예를 들어 키 값 맵 작업 정책을 사용할 때 키 값 맵에서 값을 검색하려면 다음과 같이 변수 이름을 선택하여 값이 Trace 또는 디버그 세션에 값이 나타나지 않도록 할 수 있습니다.

<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. 프리픽스가 없는 변수는 Trace 및 디버그 세션에서 일반 텍스트로 표시됩니다. 이러한 값을 마스킹하려면 마스킹을 사용합니다.