당사의 서비스는 신용카드나 주민등록번호 등 민감한 항목일 가능성이 있다고 식별되는 마스크 번호 패턴을 자동으로 제공합니다.
추가 난독화가 필요한 경우 한 가지 옵션은 사용하는 클러스터 전달자(예: 당사 에이전트)의 설정을 조정하는 것입니다. 하지만 더 쉬운 옵션은 Data Plus 에서 제공되는 로그 난독화 기능을 사용하는 것입니다. 이를 통해 긴 수동 설정 없이 로그인 기능 관리 UI 에서 직접 또는 NerdGraph API 통해 로그인을 설정할 수 있습니다. 중요한 정보와 일치하는 정규식을 정의한 다음 해당 데이터를 난독화하는 규칙을 만듭니다. 민감한 정보를 마스킹하거나 해시하도록 선택할 수 있습니다.
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(필수)와 수정하려는 필드만 지정할 수 있습니다.