데이터 보안 (Data Security)
클라이언트 라이브러리 또는 Agent를 구성해 trace에서 민감 데이터의 수집을 제어할 수 있어요.
출처: 문서
본문
개요 (Overview)
Datadog SDK는 계측된 애플리케이션에서 데이터를 수집해요. 이 데이터는 trace로 Datadog에 보내지며 개인 식별 정보(PII) 같은 민감 데이터를 포함할 수 있어요. 민감 데이터를 trace로 Datadog에 수집하고 있다면 수집 시점에 Sensitive Data Scanner로 보완책을 추가할 수 있어요. 또한 Datadog Agent나 SDK를 구성해 trace가 Datadog로 보내지기 전에 수집 시점에서 민감 데이터를 보완할 수도 있어요. Datadog의 도구와 정책은 PCI v4.0을 준수해요. 자세한 내용은 PCI DSS Compliance를 참고해요.
여기 설명된 구성이 규정 준수 요구 사항을 충족하지 못하면 Datadog 지원 팀에 문의해요.
trace 데이터의 개인 정보 (Personal information in trace data)
Datadog SDK는 애플리케이션에 대한 관련 옵저버빌리티 데이터를 수집해요. 이 SDK는 trace 데이터에서 수백 개의 고유 속성을 수집하므로, 이 페이지에서는 직원과 최종 사용자에 대한 개인 정보를 포함할 수 있는 속성에 초점을 맞춘 데이터 범주를 설명해요.
아래 표는 SDK가 제공하는 자동 계측이 수집하는 개인 데이터 범주와 몇 가지 일반적인 예시를 설명해요.
참고: 신용카드 번호는 Datadog Agent가 기본적으로 난독화해요.
| 범주 | 설명 |
|---|---|
| Name | 내부 사용자(직원) 또는 최종 사용자의 전체 이름. |
| 내부 사용자(직원) 또는 최종 사용자의 이메일 주소. | |
| Client IP | 수신 요청과 연결된 최종 사용자의 IP 주소 또는 발신 요청의 외부 IP 주소. |
| Credit card numbers | 금융 거래에 사용되는 Primary Account Number (PAN). |
| Database statements | 실행된 데이터베이스 문에 사용된 리터럴, 리터럴 시퀀스 또는 바인드 변수. |
| Geographic location | 개인이나 가구를 식별하는 데 사용할 수 있는 경도·위도 좌표. |
| URI parameters | URI 경로의 변수 부분 또는 URI 쿼리의 파라미터 값. |
| URI userinfo | 사용자 이름을 포함할 수 있는 URI의 userinfo 하위 구성 요소. |
| Login ID | 계정/사용자 ID, 이름 또는 이메일 주소를 포함할 수 있어요. |
다음 표는 각 언어 SDK의 데이터 범주 수집 여부와 기본 난독화 여부에 대한 기본 동작을 설명해요.
Java 참고: 데이터베이스 문은 기본적으로 수집되지 않으며 활성화해야 해요. 신용카드 번호는 Datadog Agent가 기본적으로 난독화해요.
| 범주 | 수집 | 난독화 |
|---|---|---|
| Name | 예 | |
| 예 | ||
| Client IP | 예 | 예 |
| Credit card numbers | 예 | |
| Database statements | 예 | |
| URI parameters | 예 | 예 |
| URI userinfo | ||
| Login ID | 예 |
Python 참고: Client IP, 지리적 위치, URI 파라미터는 기본적으로 수집되지 않으며 활성화해야 해요. 신용카드 번호는 Datadog Agent가 기본적으로 난독화해요.
| 범주 | 수집 | 난독화 |
|---|---|---|
| Name | 예 | |
| 예 | ||
| Client IP | 예 | |
| Credit card numbers | 예 | |
| Database statements | 예 | 예 |
| Geographic location | 예 | |
| URI parameters | 예 | 예 |
| Login ID | 예 |
Ruby 참고: Client IP는 기본적으로 수집되지 않으며 활성화해야 해요. 신용카드 번호는 Datadog Agent가 기본적으로 난독화해요.
| 범주 | 수집 | 난독화 |
|---|---|---|
| Name | 예 | |
| 예 | ||
| Client IP | 예 | |
| Credit card numbers | 예 | |
| Database statements | 예 | |
| URI parameters | 예 | 예 |
| Login ID | 예 |
Go 참고: Client IP는 기본적으로 수집되지 않으며 활성화해야 해요. 데이터베이스 문은 Datadog Agent가 난독화해요. 신용카드 번호는 Datadog Agent가 기본적으로 난독화해요.
| 범주 | 수집 | 난독화 |
|---|---|---|
| Client IP | 예 | |
| Credit card numbers | 예 | |
| Database statements | 예 | |
| Client URI path | 예 | |
| Client URI query string | 예 | |
| Server URI path | 예 | 예 |
| Server URI query string | 예 | 예 |
| HTTP body | 예 | 예 |
| HTTP cookies | 예 | 예 |
| HTTP headers | 예 | 예 |
| Login ID | 예 |
Nginx 참고: 신용카드 번호는 Datadog Agent가 기본적으로 난독화해요.
| 범주 | 수집 | 난독화 |
|---|---|---|
| Client IP | 예 | |
| Credit card numbers | 예 | |
| Client URI path | 예 | |
| Client URI query string | 예 | |
| Login ID | 예 |
Kong 참고: 신용카드 번호는 Datadog Agent가 기본적으로 난독화해요.
| 범주 | 수집 | 난독화 |
|---|---|---|
| Client IP | 예 | |
| Credit card numbers | 예 | |
| Client URI path | 예 | |
| Login ID | 예 |
Envoy 참고: 신용카드 번호는 Datadog Agent가 기본적으로 난독화해요.
| 범주 | 수집 | 난독화 |
|---|---|---|
| Client IP | 예 | |
| Credit card numbers | 예 | |
| Login ID | 예 |
Datadog App and API Protection (AAP)을 사용하면 SDK가 보안 trace의 특성을 이해하는 데 도움이 되도록 HTTP 요청 데이터를 수집해요. Datadog AAP는 특정 데이터를 자동으로 리덱션하며, 자체 탐지 규칙을 구성할 수도 있어요. 이러한 기본값과 구성 옵션에 대해 자세히 알아보려면 Datadog AAP data privacy 문서를 참고해요.
Agent
리소스 이름 (Resource names)
Datadog 스팬에는 민감 데이터를 포함할 수 있는 리소스 이름 속성이 있어요. Datadog Agent는 몇 가지 알려진 사례에 대해 리소스 이름 난독화를 구현해요:
- SQL 숫자 리터럴과 바인드 변수를 난독화해요: 예를 들어 다음 쿼리
SELECT data FROM table WHERE key=123 LIMIT 10은 쿼리 스팬의 리소스 이름을 설정하기 전에SELECT data FROM table WHERE key = ? LIMIT ?로 난독화돼요. - SQL 리터럴 문자열은 표준 ANSI SQL 따옴표로 식별돼요: 문자열은 작은따옴표(
')로 감싸야 한다는 뜻이에요. 일부 SQL 변형은 문자열에 큰따옴표(")를 선택적으로 지원하지만, 대부분은 큰따옴표로 묶인 것을 식별자로 취급해요. Datadog 난독화기는 이것을 문자열이 아닌 식별자로 취급하고 난독화하지 않아요. - Redis 쿼리는 명령 토큰만 선택해 양자화돼요: 예를 들어 다음 쿼리
MULTI\nSET k1 v1\nSET k2 v2는MULTI SET SET으로 양자화돼요.
trace 난독화 (Trace obfuscation)
Datadog Agent는 리소스 이름에 없는 민감한 trace 데이터도 난독화해요. 환경 변수 또는 datadog.yaml 구성 파일을 사용해 난독화 규칙을 구성할 수 있어요.
다음 메타데이터를 난독화할 수 있어요:
- MongoDB 쿼리
- ElasticSearch 요청 본문
- Redis 명령
- MemCached 명령
- HTTP URL
- 스택 트레이스
- 신용카드 번호
참고: 난독화는 시스템에 성능 영향을 주거나 민감하지 않은 중요한 정보를 리덱션할 수 있어요. 설정에 필요한 난독화를 고려하고 구성을 적절히 커스터마이즈해요.
참고: 여러 유형의 서비스에 대해 동시에 자동 스크러빙을 사용할 수 있어요. datadog.yaml 파일의 obfuscation 섹션에서 각각을 구성해요.
MongoDB — mongodb 유형의 스팬 내 MongoDB 쿼리는 기본적으로 난독화돼요.
apm_config:
enabled: true
## (...)
obfuscation:
mongodb:
## Configures obfuscation rules for spans of type "mongodb". Enabled by default.
enabled: true
keep_values:
- document_id
- template_id
obfuscate_sql_values:
- val1
이 기능은 환경 변수 DD_APM_OBFUSCATION_MONGODB_ENABLED=false로 비활성화할 수도 있어요.
keep_values또는 환경 변수DD_APM_OBFUSCATION_MONGODB_KEEP_VALUES— Datadog Agent trace 난독화에서 제외할 키 집합을 정의해요. 설정하지 않으면 모든 키가 난독화돼요.obfuscate_sql_values또는 환경 변수DD_APM_OBFUSCATION_MONGODB_OBFUSCATE_SQL_VALUES— Datadog Agent trace 난독화에 포함할 키 집합을 정의해요. 설정하지 않으면 모든 키가 난독화돼요.
ElasticSearch — elasticsearch 유형의 스팬 내 ElasticSearch 요청 본문은 기본적으로 난독화돼요.
apm_config:
enabled: true
## (...)
obfuscation:
elasticsearch:
## Configures obfuscation rules for spans of type "elasticsearch". Enabled by default.
enabled: true
keep_values:
- client_id
- product_id
obfuscate_sql_values:
- val1
이 기능은 환경 변수 DD_APM_OBFUSCATION_ELASTICSEARCH_ENABLED=false로 비활성화할 수도 있어요.
keep_values또는 환경 변수DD_APM_OBFUSCATION_ELASTICSEARCH_KEEP_VALUES— Datadog Agent trace 난독화에서 제외할 키 집합을 정의해요. 설정하지 않으면 모든 키가 난독화돼요.obfuscate_sql_values또는 환경 변수DD_APM_OBFUSCATION_ELASTICSEARCH_OBFUSCATE_SQL_VALUES— Datadog Agent trace 난독화에 포함할 키 집합을 정의해요. 설정하지 않으면 모든 키가 난독화돼요.
Redis — redis 유형의 스팬 내 Redis 명령은 기본적으로 난독화돼요.
apm_config:
enabled: true
## (...)
obfuscation:
## Configures obfuscation rules for spans of type "redis". Enabled by default.
redis:
enabled: true
remove_all_args: true
이 기능은 환경 변수 DD_APM_OBFUSCATION_REDIS_ENABLED=false로 비활성화할 수도 있어요.
remove_all_args또는 환경 변수DD_APM_OBFUSCATION_REDIS_REMOVE_ALL_ARGS— true면 redis 명령의 모든 인자를 단일 "?"로 교체해요. 기본적으로 비활성화돼요.
MemCached — memcached 유형의 스팬 내 MemCached 명령은 기본적으로 난독화돼요.
apm_config:
enabled: true
## (...)
obfuscation:
memcached:
## Configures obfuscation rules for spans of type "memcached". Enabled by default.
enabled: true
이 기능은 환경 변수 DD_APM_OBFUSCATION_MEMCACHED_ENABLED=false로 비활성화할 수도 있어요.
Http — http 또는 web 유형의 스팬 내 HTTP URL은 기본적으로 난독화되지 않아요.
참고: URL의 Userinfo에 있는 비밀번호는 Datadog가 수집하지 않아요.
apm_config:
enabled: true
## (...)
obfuscation:
http:
## Enables obfuscation of query strings in URLs. Disabled by default.
remove_query_string: true
remove_paths_with_digits: true
remove_query_string또는 환경 변수DD_APM_OBFUSCATION_HTTP_REMOVE_QUERY_STRING: true면 URL(http.url)의 쿼리 문자열을 난독화해요.remove_paths_with_digits또는 환경 변수DD_APM_OBFUSCATION_HTTP_REMOVE_PATHS_WITH_DIGITS: true면 하나 이상의 숫자를 포함하는 URL(http.url)의 경로 세그먼트를 "?"로 교체해요.
참고: Datadog Lambda Extension을 사용한다면 대신 DD_APM_CONFIG_OBFUSCATION_HTTP_REMOVE_QUERY_STRING과 DD_APM_CONFIG_OBFUSCATION_HTTP_REMOVE_PATHS_WITH_DIGITS를 설정해요.
Stack Traces — 기본적으로 비활성화돼요.
remove_stack_traces 파라미터를 true로 설정하면 스택 트레이스를 제거하고 ?로 교체해요.
apm_config:
enabled: true
## (...)
obfuscation:
## Enables removing stack traces to replace them with "?". Disabled by default.
remove_stack_traces: true # default false
이 기능은 환경 변수 DD_APM_OBFUSCATION_REMOVE_STACK_TRACES=true로 활성화할 수도 있어요.
Credit Card — 신용카드 번호로 보이는 숫자가 있는지 모든 스팬 메타데이터를 스캔해요. 일치하는 값은 ?로 교체돼요. 이 검사는 모든 스팬 유형에 영향을 주며 기본적으로 활성화돼요. 이 초기 스캔은 패턴 기반이므로 때로 다른 긴 숫자를 리덱션해 오탐(false positive)을 일으킬 수 있어요. 정확도를 높이려면 아래 설명된 credit_cards.luhn 옵션을 활성화할 수 있어요.
참고: 스캔은 정확히 신용카드 번호인 값(내부 공백 허용)을 찾아요. 메타값에 추가 문자열 데이터가 있으면 이 난독화기는 그 값이 신용카드 번호가 아니라고 판단해요. 예:
- 메타값
4111 1111 1111 1111은?로 리덱션돼요. - 메타값
CC-4111 1111 1111 1111은 리덱션되지 않아요.
apm_config:
enabled: true
## (...)
obfuscation:
credit_cards:
## Enable obfuscation of suspected credit card values in meta fields.
## Enabled by default.
enabled: true
## Enables a Luhn checksum check to reduce false positives.
## This option increases CPU usage.
luhn: false
## A list of known safe keys to skip obfuscation.
keep_values:
- some_key_to_keep
credit_cards.enabled: 이 난독화기를 비활성화하려면 false로 설정해요.- 환경 변수:
DD_APM_OBFUSCATION_CREDIT_CARDS_ENABLED
- 환경 변수:
credit_cards.luhn: 오탐을 제거하기 위해 숫자를 검증하는 Luhn 체크섬 검사를 활성화하려면 true로 설정해요. 이 검사의 CPU 사용량과 성능 비용이 증가해요.- 환경 변수:
DD_APM_OBFUSCATION_CREDIT_CARDS_LUHN
- 환경 변수:
credit_cards.keep_values: 신용카드 난독화를 건너뛸 알려진 안전 키 목록을 설정해요.- 환경 변수:
DD_APM_OBFUSCATION_CREDIT_CARDS_KEEP_VALUES
- 환경 변수:
태그 교체 (Replace tags)
스팬의 태그에서 민감 데이터를 스크럽하려면 datadog.yaml 구성 파일에서 replace_tags 설정을 사용하거나 DD_APM_REPLACE_TAGS 환경 변수를 사용해요. 설정 또는 환경 변수의 값은 태그의 민감 데이터를 교체하는 방법을 지정하는 파라미터 그룹 하나 이상의 목록이에요. 파라미터는 다음과 같아요:
name: 교체할 태그의 키. 모든 태그를 일치시키려면*를 사용해요. 리소스를 일치시키려면resource.name을 사용해요.pattern: 일치시킬 regexp 패턴.repl: 교체 문자열.
예:
datadog.yaml
apm_config:
replace_tags:
# Replace all characters starting at the `token/` string in the tag "http.url" with "?"
- name: "http.url"
pattern: "token/(.*)"
repl: "?"
# Remove trailing "/" character in resource names
- name: "resource.name"
pattern: "(.*)/$"
repl: "$1"
# Replace all the occurrences of "foo" in any tag with "bar"
- name: "*"
pattern: "foo"
repl: "bar"
# Remove all "error.stack" tag's value
- name: "error.stack"
pattern: "(?s).*"
# Replace series of numbers in error messages
- name: "error.message"
pattern: "[0-9]{10}"
repl: "[REDACTED]"
환경 변수
DD_APM_REPLACE_TAGS=[
{
"name": "http.url",
"pattern": "token/(.*)",
"repl": "?"
},
{
"name": "resource.name",
"pattern": "(.*)/$",
"repl": "$1"
},
{
"name": "*",
"pattern": "foo",
"repl": "bar"
},
{
"name": "error.stack",
"pattern": "(?s).*"
},
{
"name": "error.message",
"pattern": "[0-9]{10}",
"repl": "[REDACTED]"
}
]
Kubernetes — DD_APM_REPLACE_TAGS 환경 변수를 설정해요:
- Datadog Operator의 경우
datadog-agent.yaml의override.nodeAgent.env에서 - Helm의 경우
datadog-values.yaml의agents.containers.traceAgent.env에서 - 수동 구성의 경우 매니페스트의
trace-agent컨테이너 섹션에서
- name: DD_APM_REPLACE_TAGS
value: '[
{
"name": "http.url",
"pattern": "token/(.*)",
"repl": "?"
},
{
"name": "resource.name",
"pattern": "(.*)/$",
"repl": "$1"
},
{
"name": "*",
"pattern": "foo",
"repl": "bar"
},
{
"name": "error.stack",
"pattern": "(?s).*"
},
{
"name": "error.message",
"pattern": "[0-9]{10}",
"repl": "[REDACTED]"
}
]'
예시 (Examples) — Datadog Operator:
apiVersion: datadoghq.com/v2alpha1
kind: DatadogAgent
metadata:
name: datadog
spec:
override:
nodeAgent:
env:
- name: DD_APM_REPLACE_TAGS
value: '[
{
"name": "http.url",
# (...)
]'
Helm:
agents:
containers:
traceAgent:
env:
- name: DD_APM_REPLACE_TAGS
value: '[
{
"name": "http.url",
# (...)
]'
docker-compose
- DD_APM_REPLACE_TAGS=[{"name":"http.url","pattern":"token/(.*)","repl":"?"},{"name":"resource.name","pattern":"(.*)/$","repl":"$1"},{"name":"*","pattern":"foo","repl":"bar"},{"name":"error.stack","pattern":"(?s).*"},{"name":"error.message","pattern":"[0-9]{10}","repl":"[REDACTED]"}]
리소스 무시 (Ignore resources)
특정 리소스의 추적을 피하는 옵션에 대한 심층 개요는 Ignoring Unwanted Resources를 참고해요.
서비스에 헬스 체크 같은 시뮬레이션 트래픽이 포함되어 있다면, 서비스 메트릭이 프로덕션 트래픽과 일치하도록 이러한 trace를 수집에서 제외하고 싶을 수 있어요.
Agent는 Datadog로 보내는 trace에서 특정 리소스를 제외하도록 구성할 수 있어요. 특정 리소스의 제출을 방지하려면 datadog.yaml 파일의 ignore_resources 설정을 사용해요. 그런 다음 정규식 하나 이상의 목록을 만들어 Agent가 리소스 이름에 따라 필터링할 리소스를 지정해요.
컨테이너화된 환경에서 실행한다면 대신 Datadog Agent가 있는 컨테이너에 DD_APM_IGNORE_RESOURCES를 설정해요. 자세한 내용은 Docker APM Agent 환경 변수를 참고해요.
###### @param ignore_resources - list of strings - optional
###### A list of regular expressions can be provided to exclude certain traces based on their resource name.
###### All entries must be surrounded by double quotes and separated by commas.
###### ignore_resources: ["(GET|POST) /healthcheck","API::NotesController#index"]
라이브러리 (Library)
HTTP
Datadog는 SDK 전반에 걸쳐 span 태그 의미론을 표준화하고 있어요. HTTP 요청의 정보는 http. 접두사가 붙은 span 태그로 추가돼요. 라이브러리에는 HTTP 스팬에서 수집되는 민감 데이터를 제어하기 위한 다음 구성 옵션이 있어요.
쿼리 문자열 리덱션 (Redact query strings)
http.url 태그에는 쿼리 문자열을 포함한 전체 URL 값이 할당돼요. 쿼리 문자열에는 민감 데이터가 포함될 수 있으므로, 기본적으로 Datadog는 이를 파싱해 의심스러운 값을 리덱션해요. 이 리덱션 과정은 구성 가능해요. 리덱션에 사용되는 정규식을 수정하려면 DD_TRACE_OBFUSCATION_QUERY_STRING_REGEXP 환경 변수를 원하는 유효한 regex로 설정해요. 유효한 regex는 플랫폼별로 다르다는 점에 유의해요. regex가 의심스러운 키-값 쌍을 찾으면 <redacted>로 교체해요.
쿼리 문자열을 수집하지 않으려면 DD_HTTP_SERVER_TAG_QUERY_STRING 환경 변수를 false로 설정해요. 기본값은 true예요.
헤더 수집 (Collect headers)
trace 헤더 태그를 수집하려면 DD_TRACE_HEADER_TAGS 환경 변수를 대소문자 구분 없는 헤더 키와 태그 이름의 맵으로 설정해요. 라이브러리는 일치하는 헤더 값을 루트 스팬의 태그로 적용해요. 이 설정은 태그 이름을 지정하지 않은 항목도 허용해요. 예:
DD_TRACE_HEADER_TAGS=CASE-insensitive-Header:my-tag-name,User-ID:userId,My-Header-And-Tag-Name
처리 (Processing)
일부 SDK는 trace에서 수집된 민감 데이터를 수동으로 수정하거나 제거하기 위한 스팬 처리 인터페이스를 제공해요:
- Java: TraceInterceptor interface
- Ruby: Processing Pipeline
- Python: Trace Filtering
텔레메트리 수집 (Telemetry collection)
⚠️ app.ddog-gov.com, us2.ddog-gov.com Datadog 사이트 사용자분들께.
계측 텔레메트리는 {% placeholder "user-datadog-site-name" /%} 사이트에서 사용할 수 없지만 기본적으로 활성화돼 있어요. 오류를 피하기 위해 {% placeholder "user-datadog-site-name" /%} 사용자는 애플리케이션에서
DD_INSTRUMENTATION_TELEMETRY_ENABLED=false를, Agent에서DD_APM_TELEMETRY_ENABLED=false를 설정해 이 기능을 비활성화해야 해요.
Datadog는 처리 목적으로 SDK에 대한 환경 및 진단 정보를 수집할 수 있어요. 여기에는 애플리케이션을 실행하는 호스트, 운영 체제, 프로그래밍 언어와 런타임, 사용된 APM 통합, 애플리케이션 종속성에 대한 정보가 포함될 수 있어요. 또한 Datadog는 진단 로그, 난독화된 스택 트레이스가 있는 크래시 덤프, 다양한 시스템 성능 메트릭 같은 정보를 수집할 수 있어요.
다음 설정 중 하나를 사용해 이 텔레메트리 수집을 비활성화할 수 있어요:
datadog.yaml
apm_config:
telemetry:
enabled: false
환경 변수
export DD_APM_TELEMETRY_ENABLED=false