데이터 마스킹 및 숨기기

현재 Apigee Edge 문서가 표시되고 있습니다.
Apigee X 문서로 이동
정보

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

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

민감한 정보 숨기기

'private.' 프리픽스가 추가된 커스텀 변수를 만들어 Trace 도구 및 디버그 세션에 민감한 정보가 표시되지 않도록 할 수 있습니다.

예를 들어 Key Value Map Operations 정책을 사용하여 암호화된 키 값 맵에서 값을 검색할 때 값이 Trace 또는 디버그 세션에 값이 나타나지 않도록 다음과 같이 변수 이름을 지정합니다.

<Get assignTo="private.hiddenData">

다음에 설명하는 데이터 마스킹을 사용하는 대신 민감한 변수를 숨길 수 있습니다. 숨김과 마스킹의 차이점은 숨겨진 변수는 전혀 표시되지 않고 마스킹된 값은 Trace 및 디버그 세션에서 별표로 대체된다는 점입니다.

데이터가 암호화된 키 값 맵과 같은 암호화된 데이터 저장소에서 제공된 경우에도 'private.' 프리픽스가 없는 변수는 Trace 및 디버그 세션에서 명확한 텍스트로 표시됩니다. 이러한 값을 마스킹하려면 마스킹(아래)을 사용합니다.

민감한 정보 마스킹

Edge를 사용하면 '마스크 구성'을 정의하여 트레이스 및 디버그 세션에서 특정 데이터를 마스킹할 수 있습니다. 마스킹 구성은 전역 (조직 수준) 또는 로컬 (API 프록시 수준)에서 설정할 수 있습니다.

데이터가 마스킹되면 데이터는 trace 출력에서 별표로 대체됩니다. 예를 들면 다음과 같습니다.

<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 요소의 값이 마스킹되는 결과로 이어집니다. N/A No
XPathsResponse 응답 경로에 있는 XML 페이로드 (있는 경우)에 대해 평가될 XPath 표현식 목록입니다. 성공적으로 확인되는 모든 XPath는 XML 요소의 값이 마스킹되는 결과로 이어집니다. N/A No
JSONPathsRequest 요청 경로에 있는 JSON 페이로드 (있는 경우)에 대해 평가할 JSONPath 표현식 목록입니다. 성공적으로 확인되는 JSONPath의 경우 JSON 속성 값이 마스킹됩니다. N/A No
JSONPathsResponse 응답 경로의 JSON 페이로드 (있는 경우)에 대해 평가할 JSONPath 표현식 목록입니다. 성공적으로 확인되는 JSONPath의 경우 JSON 속성 값이 마스킹됩니다. N/A No
XPathsFault 오류 흐름 (흐름의 어느 지점에서 오류가 발생하면 실행)의 XML 페이로드 (있는 경우)에 대해 평가할 XPath 표현식 목록입니다. 성공적으로 확인되는 모든 XPath는 XML 요소의 값이 마스킹되는 결과로 이어집니다. N/A No
JSONPathsFault 오류 흐름 (흐름의 어느 지점에서 오류가 발생하면 실행)의 JSON 페이로드 (있는 경우)에 대해 평가할 JSON 표현식 목록입니다. 성공적으로 확인되는 JSONPaths에서 JSON 속성 값이 마스킹됩니다. N/A No
변수

값을 마스킹할 변수 (사전 정의 또는 맞춤) 목록입니다. 기본 변수 목록은 변수 참조를 확인하세요.

N/A No

마스크 구성 API

마스크 구성은 RESTful 관리 API를 사용하여 업로드하고 다운로드하는 XML 또는 JSON 형식의 파일로 정의됩니다. 데이터 마스킹 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 네임스페이스 마스킹

XML 페이로드에 네임스페이스가 정의되지 않으면, 마스크 구성에는 XPATH 정의에 <Namespace> 요소가 필요하지 않습니다. 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>