당사의 서비스는 신용카드나 주민등록번호 등 민감한 항목일 가능성이 있다고 식별되는 마스크 번호 패턴을 자동으로 제공합니다.
추가 난독화가 필요한 경우 한 가지 옵션은 사용하는 클러스터 전달자(예: 당사 에이전트)의 설정을 조정하는 것입니다. 하지만 더 쉬운 옵션은 Data Plus 에서 제공되는 로그 난독화 기능을 사용하는 것입니다. 이를 통해 긴 수동 설정 없이 로그인 기능 관리 UI 에서 직접 또는 NerdGraph API 통해 로그인을 설정할 수 있습니다. 중요한 정보와 일치하는 정규식을 정의한 다음 해당 데이터를 난독화하는 규칙을 만듭니다. 민감한 정보를 마스킹하거나 해시하도록 선택할 수 있습니다.
정의
다음은 몇 가지 중요한 용어입니다.
Obfuscation rules
난독화 작업을 적용할 로그를 정의합니다.
Obfuscation rule actions
확인할 속성, 난독화할 텍스트, 난독화 방법(마스킹 또는 해싱을 통해)을 정의합니다.
Obfuscation expressions
난독화할 텍스트를 식별하는 정규 표현식으로 명명됩니다.
Masking
정보를 완전히 제거하여 X 문자로 바꿉니다. 이 작업이 완료되면 특정 값을 검색할 수 없습니다.
Hashing
정보를 숨깁니다. 해싱 도구를 사용하여 민감한 값의 해시를 가져온 다음 해당 해시가 포함된 로그를 검색할 수 있습니다.
난독화 작동 방식
다음 예에 표시된 JSON 개체는 NerdGraph API에서 사용되는 페이로드를 단순화한 것입니다. 이렇게 하면 다양한 API 작업을 상응하는 UI 작업과 더 잘 연관시키는 데 도움이 됩니다.
예: 난독화 전의 로그 기록
다음과 같은 로그 레코드가 있다고 상상해 보십시오.
{
"message":"The credit card number 4321-5678-9876-2345 belongs to user user@email.com (born on 01/02/2003) with SSN 123-12-1234",
"creditCardNumber":"4321-5678-9876-2345",
"ssn":"123-12-1234",
"department":"sales",
"serviceName":"loginService"
}
이 로그 레코드에는 몇 가지 민감한 데이터가 포함되어 있습니다. 이상적으로는 로그가 다음과 같이 끝나기를 바랍니다.
{
"message":"The credit card number 9aa9bc1528859aee1b1df75795f1ebd54beb2f0d26c8a1d4580a71a07189cdd5 belongs to user user@email.com (born on XXXXXXXXXX) with SSN 30e6897f76dc102e32ee1d781c43417d259e586eac15c963d75ab8b5187769da",
이 예에서 생년월일은 로그인 서비스의 일부입니다. 주변 단어 "(born on 01/02/2003)" 의 날짜 정보를 기반으로 난독화할 부분을 정의합니다.
{
"name":"Born date - loginService specific",
"regex":"born on (.*))"
}
각 난독화 표현식은 문자열에서 일부 민감한 정보를 캡처하는 방법(정규식 사용)을 정의하고 나중에 쉽게 식별할 수 있도록 이를 친숙한 이름과 연결합니다.
난독화 표현식은 재사용이 가능합니다 . 민감한 데이터가 포함된 로그 속성의 이름이 어떻게 지정되는지 전혀 알 수 없습니다. 대신 위에 정의된 사회보장 표현식은 ssn, socialSecurityNumber 또는 socSecNum 라는 로그인 속성에 적용될 수 있습니다.
로그 속성의 형식과 밀접하게 결합된 Born date (loginService specific) 과 같은 재사용이 불가능한 난독화 표현식을 생성할 수도 있습니다. 예를 들어, born on 및 before 뒤에 오는 것은 무엇이든 사용할 수 있습니다.
중첩된 정규식 캡처 그룹은 지원되지 않습니다.
이 기능의 주된 역할은 민감한 데이터를 쉽고 효과적인 방식으로 해시 또는 마스크로 바꾸는 것입니다. 캡처 그룹 내에서 서로 다른 일치 항목을 그룹화하려는 경우 비캡처 그룹 구문 (?:{EXPRESSION}) 을 사용하여 중첩된 캡처 그룹 생성을 방지해야 합니다. 예를 들어, (([A-Z]{12})|([a-z]{6})) 피하고 대신 ((?:[A-Z]{12})|((?:[a-z]{6})) 사용하세요.
민감한 데이터를 캡처하는 방법을 정의했으므로 이제 난독화해야 할 로그(로그인 서비스의 로그)와 방법(우리가 정의한 난독화 작업 사용)을 지정해야 합니다. 이를 달성하기 위해 우리는 난독화 규칙을 정의합니다.
{
"name":"Obfuscate Login Service Logs",
"filter":"serviceName = 'loginService' AND department = 'sales'",
"actions":[
{
"attributes":["message","creditCardNumber"],
"expression":{"name":"Credit Card Number"},
"method":"HASH_SHA256"
},
{
"attributes":["message"],
"expression":{"name":"Born date - loginService specific"},
"method":"MASK"
},
{
"attributes":["message","ssn"],
"expression":{"name":"Social Security Number"},
"method":"HASH_SHA256"
}
]
}
이 규칙에는 세 가지 주요 구성 요소가 포함됩니다.
난독화 규칙 구성요소
설명
이름
이름은 규칙이 수행하는 작업을 쉽게 식별하는 데 도움이 됩니다. 이 예에서 이 규칙은 로그인 서비스에서 오는 로그의 다양한 속성을 난독화하는 방법을 정의합니다.
필터
필터는 NRQL 형식을 사용하여 로그인 서비스에서 오는 대상 로그를 식별하는 방법을 시스템에 알려줍니다. 이 예시는 serviceName = loginService 및 department = sales 인 로그를 쿼리합니다.
행위
마지막으로 이 규칙은 필터와 일치하는 로그에 적용할 난독화 작업 세트를 정의합니다. 각 작업은 다음을 정의합니다.
각 속성 집합에서 민감한 정보를 추출하는 데 사용할 이전에 생성된 난독화 표현
이 데이터를 난독화하기 위해 적용할 난독화 방법( HASH_SHA256 또는 MASK )
NerdGraph를 통해 난독화 룰을 정의할 때 이름 대신 난독화 룰의 id 지정해야 합니다. 이전 예제를 더 쉽게 읽을 수 있도록 대신 난독화 표현식 이름을 사용했습니다.
마지막 예로서 serviceName = checkoutService 속성과 신용 카드 정보가 포함된 ccn 속성이 있는 "Checkout Service"라는 다른 서비스에서 오는 로그를 난독화해야 한다고 가정해 보겠습니다.
{
"message":"Order completed",
"ccn":"4321-5678-9876-2345",
"department":"sales",
"serviceName":"checkoutService"
}
이 서비스의 로그를 난독화하려면 이러한 특정 로그를 대상으로 하는 다른 난독화 규칙만 정의하면 되고 이전에 생성된 Credit card number 난독화 표현식을 재사용하면 됩니다.
{
"name":"Obfuscate Checkout Service Logs",
"filter":"serviceName = 'checkoutService' AND department = 'sales'",
"actions":[
{
"attributes":["ccn"],
"expression":{"name":"Credit Card Number"},
"method":"HASH_SHA256"
}
]
}
체크리스트: 로그를 난독화하는 단계
로그를 난독화하려면:
로그에 나타나는 민감한 데이터의 패턴을 식별하여 로그의 형태를 연구하십시오. 예를 들어:
모든 로그에 민감한 정보가 포함되어 있습니까? 아니면 좀 더 구체적으로 말씀해 주시겠습니까(서비스 A 또는 지역 B의 로그만)?
신용 카드 번호, 운전 면허증 번호, 주민등록번호, 생체 인식, 기타 값과 같은 민감한 정보가 포함되어 있습니까?
각각에 적용해야 하는 난독화 조치를 정의하십시오. 자문해 보십시오. 나중에 이 민감한 정보를 사용하여 내 로그를 쿼리해야 합니까( HASH 사용 고려), 아니면 이 정보를 내 로그에서 완전히 제거해야 하나요( MASK 사용 고려)?
팁
Logs obfuscation UI에는 알려진 값에서 해시를 찾아 복사하여 다른 표현식 및 규칙과 함께 사용할 수 있도록 Hashing tool 가 포함되어 있습니다.
CPU 제한
난독화에는 분당 CPU 제한이 있습니다. 계정이 이러한 리소스 제한에 도달하면 로그가 예상대로 난독화되지 않습니다. CPU 한도를 확인하려면 Data management UI의 시스템 Limits 페이지 로 이동하세요.
분당 난독화 CPU 한도를 초과하고 로그를 난독화할 수 없거나 이미 난독화 룰이 적용된 속성은 dropped 되고 속성이 삭제된 이유를 나타내는 텍스트로 대체됩니다. 예를 들어 난독화 규칙이 message 필드에 적용되고 분당 CPU 제한에 도달하면 결과 로그는 다음과 같습니다.
{
...
"message":"<OBFUSCATION> The account is over its obfuscation per-minute limit, attribute dropped",
...
}
이는 PII 또는 기타 민감한 데이터가 실수로 수집되는 것을 방지하기 위한 것입니다.
또한 다음 `NrIntegrationError'가 계정에 기록됩니다.
{
"category":"RateLimit",
"level":"error",
"limitName":"Log API obfuscation per account per minute",
"message":"You’ve exceeded our limit of per-account obfuscation time per-minute for the Log ingestion pipeline. Please reduce your usage or contact New Relic support.",
"name":"ObfuscationTimeLimitReached",
"newRelicFeature":"Logs",
"rateLimitType":"ObfuscationTimePerMinute",
"timestamp":1678819264283
}
난독화 룰이 얼마나 잘 작동하는지 평가하고 어느 것을 건너뛰고 있는지 확인하려면 Logs Obfuscation > Health 으로 이동하세요. 난독화 규칙은 CPU 집약적이므로 이 차트는 리소스 제한으로 인해 어떤 규칙이 가장 큰 영향을 받는지 결정하는 데 도움이 될 수 있습니다.
난독화 표현
New Relic UI를 사용하거나 GraphQL Explorer인 NerdGraph를 사용하여 난독화 표현식을 생성, 읽기, 업데이트 또는 삭제할 수 있습니다.
캡처하려는 민감한 데이터와 일치하는 정규식뿐만 아니라 새 난독화 규칙의 이름을 입력합니다. RE2 구문 을 사용합니다.
다음 예는 신용 카드 번호와 일치하는 기본 난독화 표현식을 보여줍니다.
Using NerdGraph:
logConfigurations 아래에서 logConfigurationsCreateObfuscationExpression 변형을 사용합니다. GraphiQL에 채워진 예제와 api.newrelic.com/graphiql 의 관련 문서를 참조하세요.
중요
NerdGraph에서 정규식을 사용할 때는 정규식을 이스케이프해야 합니다. 예를 들어: ((?:(?:4\\d{3})|(?:5[1-5]\\d{2})|6(?:011|5[0-9]{2}))(?:-?|\\040?)(?:\\d{4}(?:-?|\\040?)){3}|(?:3[4,7]\\d{2})(?:-?|\\040?)\\d{6}(?:-?|\\040?)\\d{5})
편집하려는 난독화 표현식 오른쪽에 있는 줄임표 아이콘 ... 을 클릭하고 Edit 클릭합니다.
필요에 따라 필드를 수정하고 Update 클릭합니다.
Using NerdGraph:
logConfigurations 아래에서 logConfigurationsUpdateObfuscationExpression 변형을 사용합니다. GraphiQL에 채워진 예제와 api.newrelic.com/graphiql 의 관련 문서를 참조하세요.
중요
NerdGraph에서 정규식을 사용할 때는 정규식을 이스케이프해야 합니다. 예를 들어: ((?:(?:4\\d{3})|(?:5[1-5]\\d{2})|6(?:011|5[0-9]{2}))(?:-?|\\040?)(?:\\d{4}(?:-?|\\040?)){3}|(?:3[4,7]\\d{2})(?:-?|\\040?)\\d{6}(?:-?|\\040?)\\d{5})
난독화 표현식을 업데이트할 때 모든 필드를 지정할 필요는 없으며 id(필수)와 수정하려는 필드만 지정할 수 있습니다.