
pii-shield v2.2.0
์ฝ๋ ์๋ K8s ์ฌ์ด๋์นด๋ก ๋ก๊ทธ๋ฅผ ์ ํํฉ๋๋ค. ์ํธ๋กํผ ๋ถ์์ ํตํด ๋น๋ฐ์ ๊ฐ์งํ๊ณ , JSON ๋ฌด๊ฒฐ์ฑ์ ์ ์งํ๋ฉฐ, PII๋ฅผ ๊ฒฐ์ ๋ก ์ ์ผ๋ก ๊ฐ๋ฆฝ๋๋ค. ๐ก๏ธ
PII-Shield ๐ก๏ธ
Kubernetes๋ฅผ ์ํ ์ ๋ก ์ฝ๋ ๋ก๊ทธ ์ ์ ์ฌ์ด๋์นด. ๋ก๊ทธ๊ฐ ํ๋(pod)๋ฅผ ๋ ๋๊ธฐ ์ ์ PII๋ฅผ ์ญ์ ํ์ฌ ๋ฐ์ดํฐ ์ ์ถ(GDPR/SOC2)์ ๋ฐฉ์งํฉ๋๋ค.
PII-Shield๋ ์ธํ๋ก์ธ์ค(in-process)๋ก ์คํ๋ฉ๋๋ค โ CLI, ์ฌ์ด๋์นด ๋๋ WASM. ํธ์คํ API๋ ์๊ณ ๋ฐ์ดํฐ๊ฐ ์ ์ก๋๋ ์๋ฒ๋ ์์ต๋๋ค.
๊ฐ์ ์ด๋ฆ, ๋ค๋ฅธ ํ๋ก์ ํธ. ์ด๊ฒ์ Microsoft ๊ฐ๋ฐ์ ์ปค๋ฎค๋ํฐ ๋ธ๋ก๊ทธ(2026๋ 5์, vikasgautam18/pii-shield)์ PII Shield ํ๋ผ์ด๋ฒ์ ํ๋ก์๊ฐ ์๋๋ฉฐ, piishield.ai ๋๋ piishield.com์ ํ๋กฌํํธ ์ญ์ ์ ํ๋ ์๋๊ณ , Intellirim์ PyPI
pii-shieldํจํค์ง๋ ์๋๋๋ค. ์ ํฌ ํจํค์ง๋ PyPI์pii-shield-wasi์ npm์@aragossa/pii-shield-wasi์ด๋ฉฐ, ๋ฌธ์์์๋ ์ด ํ๋ก์ ํธ๋ฅผ PII-Shield ์ฌ์ด๋์นด๋ผ๊ณ ๋ถ๋ฆ ๋๋ค.
"PII๊ฐ AI ๋ชจ๋ธ์ ์ค์ผ์ํค๋๋ก ๋์ง ๋ง์ธ์." PII-Shield๋ ๋ฏผ๊ฐํ ๋ฐ์ดํฐ๊ฐ ํ์ต ๋ฐ์ดํฐ์ ์ ๋๋ฌํ์ง ์๋๋ก ๋ณด์ฅํ์ฌ GDPR๋ก ์ธํ ๋ชจ๋ธ ์ฌํ์ต์ ํผํ ์ ์๊ฒ ํด์ค๋๋ค.
[!WARNING] v2.0.0์ผ๋ก ์ ๊ทธ๋ ์ด๋ํ์๋์? ์ต์ข ์ฌ์ฉ์ ๋ฐฐํฌ๋ฅผ Helm ๊ธฐ๋ฐ ์ค์น์ Distroless ๋ค์ดํฐ๋ธ ์ฌ์ด๋์นด๋ก ์ด์ ํ์ต๋๋ค. Kustomize๋ ๋ ์ด์ ํ๋ก๋์ ์ฌ์ฉ์๋ฅผ ์ํ ์ง์๋๋ ๋ฆด๋ฆฌ์ค ์ค์น ๊ฒฝ๋ก๊ฐ ์๋์ง๋ง, ์ด์์(operator) ์ ์ฅ์๋ ๋ก์ปฌ ๊ฐ๋ฐ ๋ฐ ๋งค๋ํ์คํธ ์์ฑ์ ์ํ Kustomize ์ค์บํด๋ฉ์ ์ฌ์ ํ ์ ์งํฉ๋๋ค. PII-Shield ์ฌ์ด๋์นด ๋ด๋ถ์
/bin/sh์ ๊ทผ์ ๋ ์ด์ ์ง์๋์ง ์์ต๋๋ค. ๋ง์ด๊ทธ๋ ์ด์ ๊ฐ์ด๋๋ฅผ ์ฝ์ด๋ณด์ธ์.
๋ ๊ฐ์ง ๋ฐฐํฌ ๋ชจ๋ธ
PII-Shield๋ ์คํ์ ํตํฉํ๋ ๋ ๊ฐ์ง ๋๋ ทํ ๋ฐฉ๋ฒ์ ์ ๊ณตํฉ๋๋ค:
- Kubernetes Operator (์ ๋ก ์ฝ๋): ์ ํฌ์ ๋ํ ๋ฐฐํฌ ๋ชจ๋ธ์ ๋๋ค. ๊ณ ๋๋ก ์์ ํ Distroless ์ฌ์ด๋์นด๋ฅผ ํ๋์ ์ฃผ์ ํ์ฌ ๋ก๊ทธ๋ฅผ ์ค์๊ฐ์ผ๋ก ๊ฐ๋ก์ฑ๊ณ ์ ์ ํ๋ ์์ ์๋ํ๋ K8s Operator์ ๋๋ค.
- ์ธํ๋ก์ธ์ค WASM (ํต์ฌ ํตํฉ์ฉ): ๊ทนํ์ ์ฑ๋ฅ์ ์ํด ํต์ฌ ์์ง์ WASM์ ํตํด ์ง์ ์๋ฒ ๋ํ ์ ์์ผ๋ฉฐ, ๋คํธ์ํฌ ํ ์์ด
<1ms์ง์ฐ ์๊ฐ์ ์ ๊ณตํฉ๋๋ค.
ํ๋ก์ ํธ ์ํ ๋ฐ ๋ก๋๋งต
PII-Shield๋ ํ๋ก๋์ ๊ฐํ ๋จ๊ณ์ ์๋ ํ๋ฐํ ๊ฐ๋ฐ ์ค์ธ ์คํ์์ค ๋ณด์ ๋๊ตฌ์ ๋๋ค. v2.x ๋ฆด๋ฆฌ์ค ๋ผ์ธ์ ์ฌ์ฉ ๊ฐ๋ฅํ CLI, ์ปจํ ์ด๋, Helm/operator ๋ฐ WASM SDK ์ํฐํฉํธ๋ฅผ ์ ๊ณตํฉ๋๋ค. ํต์ฌ ์ญ์ ๊ฒฝ๋ก๋ ํต์ ๋ ๋ฐฐํฌ์ ์ฌ์ฉํ ์ค๋น๊ฐ ๋์ด ์์ง๋ง, ์ผ๋ถ Kubernetes ๋ฐฐํฌ ๋ชจ๋์ ๊ณต๊ธ๋ง ๋ณด์ฅ์ ์์ง ์์ ํ ์ค์ ๋๋ค.
| ๊ตฌ์ฑ ์์ | ์ํ |
|---|---|
| ํต์ฌ ์ค์บ๋ | ๋ฆด๋ฆฌ์ค๋จ / ํต์ ๋ ๋ฐฐํฌ |
| CLI ์ฌ์ด๋์นด | ๋ฆด๋ฆฌ์ค๋จ / ํต์ ๋ ๋ฐฐํฌ |
| Kubernetes operator | ์์ ํ ๋จ๊ณ |
| WASM SDK | ๋ฆด๋ฆฌ์ค๋ ๋ฒ ํ |
| Proxy-Wasm ๊ฒ์ดํธ์จ์ด ํตํฉ | ๊ณํ๋ R&D |
| Control Plane UI | ๊ณํ๋ R&D |
| eBPF ๊ฐ๋ก์ฑ๊ธฐ | ์คํ์ R&D |
ํ์ฌ ํ๋ก๋์ ๊ฐํ ๊ฒฝ๊ณ์ ๋ํด์๋ KNOWN_LIMITATIONS.md๋ฅผ ์ฐธ์กฐํ์ธ์.
PII-Shield๋ฅผ ์ฌ์ฉํ๋ ์ด์
๊ฐ๋ฐ์๋ค์ ์ข ์ข ๋ฏผ๊ฐํ ๋ฐ์ดํฐ๋ฅผ ๋ง์คํนํ๋ ๊ฒ์ ์์ต๋๋ค. Fluentd/Logstash์ ์ ํต์ ์ธ ์ ๊ท์ ํํฐ๋ ๋๋ฆฌ๊ณ ์ ์ง ๊ด๋ฆฌ๊ฐ ์ด๋ ค์ฐ๋ฉฐ ๋ก๊ทธ ์ง๊ณ๊ธฐ์์ ๊ฐ๋น์ผ CPU๋ฅผ ์๋นํฉ๋๋ค.
PII-Shield๋ ์ ํ๋ฆฌ์ผ์ด์ ์ปจํ ์ด๋ ๋ฐ๋ก ์์ ์์นํฉ๋๋ค:
- ํ๋ก๋์ ๊ฐํ ํต์ฌ ์์ง: ํซ ํจ์ค์์ ๋ฎ์ ๋ฉ๋ชจ๋ฆฌ ํ ๋น๊ณผ ๊ฒฐ์ ๋ก ์ ์ ๊ท์ ๋งค์นญ์ผ๋ก Kubernetes ์ฌ์ด๋์นด์ ์ต์ ํ๋์ด ์์ต๋๋ค.
- ์ปจํ
์คํธ ์ธ์ ์ํธ๋กํผ ๋ถ์: ์ปจํ
์คํธ ํค์๋๋ฅผ ๋ถ์ํ์ฌ ํค ์์ด๋ ๊ณ ์ํธ๋กํผ ์ํฌ๋ฆฟ(์:
Error: ... 44saCk9...)์ ํ์งํฉ๋๋ค. - ์ฌ์ฉ์ ์ ์ ์ ๊ท์ ๊ท์น: ์๋ ค์ง ํจํด์ ๋ํด ์ํธ๋กํผ ๊ฒ์ฌ๋ฅผ ์ฌ์ ์ํ๋ ๊ตฌ์กฐํ๋ ๋ฐ์ดํฐ(UUID, ID)์ ๋ํ ๊ฒฐ์ ๋ก ์ ์ญ์ ๋ฅผ ์ ๊ณตํฉ๋๋ค.
- ๋ด์ฅ ์ํฌ๋ฆฟ ์๋ช
: ๋ฐ๊ธ์ ์ ๋์ฌ๊ฐ ๋ถ์ ์๊ฒฉ ์ฆ๋ช
โ AWS ๋ฐ Google API ํค, GitHub, Slack ๋ฐ Stripe ํ ํฐ, JWT,
Bearer์๊ฒฉ ์ฆ๋ช ๋ฐ PEM ๊ฐ์ธ ํค ๋ธ๋ก โ ์ ํ์์ ๋ฐ๋ผ ์ญ์ ๋๋ฏ๋ก, ๋ณธ๋ฌธ์ด ์ ์ํธ๋กํผ์ด๊ฑฐ๋ ์๊ณ๊ฐ์ด ๋์์ง ๊ฒฝ์ฐ์๋ ์ ํจํ ํค๊ฐ ์กํ๋๋ค. - ํํ ๊ธฐ๋ฐ ์ ํ๋ฒํธ:
+๊ฐ ์๋ ๊ตญ์ ๋ฒํธ, ๋ถ๋ฏธ(555) 234-5678ํ์, ๊ทธ๋ฆฌ๊ณ ์ ํ ๊ด๋ จ ํค(phone,mobile,wa_id, ...) ์๋์ ์ซ์๋ ์ซ์๋ง์ผ๋ก๋ ์ํฌ๋ฆฟ์ผ๋ก ์ ์ํ๋์ง ์์์๋ ์จ๊ฒจ์ง๋๋ค. - ํค ๊ธฐ๋ฐ ์ ์ ๋ฒํธ: ์ ์ ๋ฌธ์๋ฅผ ๋ช
๋ช
ํ๋ ํค(
idNumber,national_id,ssn,passport_number,tax_id, ...) ์๋์ ์ซ์๋ ์จ๊ฒจ์ง๋ฉฐ,user_id๋๋order_id์ ๊ฐ์ ๋ ์ฝ๋ ID๋ ์จ๊ฒจ์ง์ง ์์ต๋๋ค. - ํ๊ท ๋ฐ ํผ์ฆ ์ปค๋ฒ๋ฆฌ์ง: ๋ฐ์ด๋๋ฆฌ ๊ฐ๋น์ง, JSON ์ค์ฒฉ, ๋ค๊ตญ์ด ๋ก๊ทธ๋ฅผ ํฌํจํ ์คํธ๋ ์ค ์ผ์ด์ค์ ๋ํด ํ ์คํธ๋์์ต๋๋ค.
- ๊ฒฐ์ ๋ก ์ ํด์ฑ: ์ํฌ๋ฆฟ์ ๊ณ ์ ํ ํด์(์:
[HIDDEN:a1b2c])๋ก ๋์ฒดํ์ฌ QA๊ฐ ์์ ๋ฐ์ดํฐ๋ฅผ ๋ณด์ง ์๊ณ ๋ ์ค๋ฅ๋ฅผ ์๊ด์ํฌ ์ ์์ต๋๋ค. - ๋๋กญ์ธ: ์ฝ๋ ๋ณ๊ฒฝ์ด ํ์ํ์ง ์์ต๋๋ค. ๋ชจ๋ ์ธ์ด(Node, Python, Java, Go)์ ํจ๊ป ์๋ํฉ๋๋ค.
- ํ์ดํธ๋ฆฌ์คํธ ์ง์:
PII_SAFE_REGEX_LIST๋ฅผ ์ฌ์ฉํ์ฌ ์์ ํ ํจํด(์: git ํด์, ์์คํ ID)์ ๋ช ์์ ์ผ๋ก ํ์ฉํ์ฌ ์คํ์ ๋ฐฉ์งํฉ๋๋ค.
์์ญ ๊ฐ์ ํด๋ฌ์คํฐ์์ PII-Shield๋ฅผ ๊ด๋ฆฌํ์๋์?
์ค์ ์ง์ค์ ๊ท์น ๊ด๋ฆฌ, Slack ์๋ฆผ ๋ฐ ์ญ์ ๋ถ์ ๊ธฐ๋ฅ์ ๊ฐ์ถ ํธ์คํ
Control Plane์ ๊ตฌ์ถํ๊ณ ์์ต๋๋ค.
ํตํฉ
PII-Shield์ ์ธํ๋ก์ธ์ค WASM ๋น๋๋ ์คํ์์ค AI ์ฝ๋ ๊ฑฐ๋ฒ๋์ค GitHub Action์ธ GuardSpine Code ๋ด๋ถ์ ํฌํจ๋์ด ์์ผ๋ฉฐ, ์ด Action์ ๋ฐ์ด๋๋ฆฌ๋ฅผ ๋ฒค๋๋งํ๊ณ NOTICE์ ์ด๋ฅผ ๋ช
์ํฉ๋๋ค.
์ฑ๋ฅ ๊ณ ๋ ค ์ฌํญ
PII-Shield๋ ๊ณ ๋๋ก ์ต์ ํ๋์ด ์์ง๋ง, ๋ณต์กํ ๋ก๊ทธ์ ์ฌ์ธต ๊ฒ์ฌ์๋ ๊ตฌ์ฑ์ ๋ํ ์ธ์ฌํ ์ฃผ์๊ฐ ํ์ํฉ๋๋ค.
- ํ ์คํธ ๋ก๊ทธ: ๋งค์ฐ ๋น ๋ฆ(>100k ๋ผ์ธ/s).
- JSON ๋ก๊ทธ: ์ ๋ก ํ ๋น ํ์ฑ(
encoding/json์ค๋ฒํค๋ ์์). ์ค์บ๋๋ ๋ฉ๋ชจ๋ฆฌ ์คํ์ดํฌ ์์ด ๋์ ์ฒ๋ฆฌ๋(~7MB/s)์ ๋ณด์ฅํ๊ธฐ ์ํด JSON ๊ตฌ์กฐ๋ฅผ ์๋์ผ๋ก ํ์ฑํฉ๋๋ค. - ๊ถ์ฅ ์ฌํญ: ๋์ ์ฒ๋ฆฌ๋์์๋ ์ฌ์ฉ์ด ์์ ํฉ๋๋ค. ๊น๊ฒ ์ค์ฒฉ๋ JSON์์ ์คํ ์ค๋ฒํ๋ก๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํด ์ฌ๊ท ์์ ์ฅ์น๋ฅผ ์ฌ์ฉํฉ๋๋ค.
์ค์น
Helm Chart (Kubernetes Operator)
Kubernetes์์ PII-Shield๋ฅผ ๋ฐฐํฌํ๋ ๊ณต์์ ์ด๊ณ ๊ถ์ฅ๋๋ ๋ฐฉ๋ฒ์ ์์ ์๋ํ๋ Operator๋ฅผ ํตํ๋ ๊ฒ์ ๋๋ค:
helm repo add pii-shield https://pii-shield.github.io/pii-shield/
helm repo update
helm install pii-shield-operator pii-shield/pii-shield-operator -n operator-system --create-namespace
์ด๊ฒ์ PII-Shield Operator๋ฅผ ๋ฐฐํฌํ๋ฉฐ, ์ด Operator๋ ์ฝ๋๋ Dockerfile ๋ณ๊ฒฝ ์์ด ํ๋์ ๊ณ ๋๋ก ์์ ํ distroless ์ฌ์ด๋์นด๋ฅผ ์๋์ผ๋ก ์ฃผ์ ํฉ๋๋ค.
Docker
Docker Hub ๋๋ GHCR์์ ์ต์ ๊ฒฝ๋ ์ด๋ฏธ์ง๋ฅผ ๋ฐ์ผ์ธ์:
docker pull thelisdeep/pii-shield:2.2.7
# OR from GitHub Container Registry (Enterprise):
docker pull ghcr.io/pii-shield/pii-shield:2.2.7
์์ค์์ ๋น๋
์์ค ์ฝ๋์์ ์ง์ ๋ฐ์ด๋๋ฆฌ๋ฅผ ๋น๋ํ ์ ์์ต๋๋ค:
go build -o pii-shield ./cmd/cleaner
Go ๋ผ์ด๋ธ๋ฌ๋ฆฌ
์ค์บ๋๋ Go ํ๋ก๊ทธ๋จ ๋ด๋ถ์์ ์คํ๋ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด ๊ฐ ๋ ์ฝ๋๊ฐ ์์ฑ๋๊ธฐ ์ ์ ์ญ์ ํ๋ slog.Handler์์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ง ํ์ํฉ๋๋ค:
go get github.com/pii-shield/pii-shield/v2/pkg/scanner
import "github.com/pii-shield/pii-shield/v2/pkg/scanner"
clean := scanner.ScanAndRedact(line) // one line
cleanText := scanner.ScanAndRedactText(text) // several lines, line endings kept
์ด ํจํค์ง๋ ๋ก๋๋ ๋ CLI์ ๋์ผํ PII_* ํ๊ฒฝ ๋ณ์๋ฅผ ์ฝ์ต๋๋ค. v2.2.8 ์ด์ ๋ฆด๋ฆฌ์ค๋ ๋ชจ๋ ๊ฒฝ๋ก๋ฅผ /v2 ์์ด ์ ์ธํ๋ฏ๋ก go get์ด ์ด๋ฅผ ๊ฑฐ๋ถํฉ๋๋ค.
๊ตฌ์ฑ
ํ๊ฒฝ ๋ณ์์ ์ ์ฒด ๋ชฉ๋ก์ CONFIGURATION.md๋ฅผ ์ฐธ์กฐํ์ธ์:
PII_SALT: ์ฌ์ฉ์ ์ ์ HMAC ์ํธ(ํ๋ก๋์ ์ ํ์).PII_ADAPTIVE_THRESHOLD: ๋์ ์ํธ๋กํผ ๊ธฐ์ค์ ์ ํ์ฑํํฉ๋๋ค.PII_DISABLE_BIGRAM_CHECK: ๋น์์ด ๋ก๊ทธ์ ์ต์ ํํฉ๋๋ค.PII_CUSTOM_REGEX_LIST: ๊ฒฐ์ ๋ก ์ ์ญ์ ๋ฅผ ์ํ ์ฌ์ฉ์ ์ ์ ์ ๊ท์ ๊ท์น.PII_SAFE_REGEX_LIST: ๋ฌด์ํ ํ์ดํธ๋ฆฌ์คํธ ์ ๊ท์ ๊ท์น(์ผ์น ํญ๋ชฉ์ ๊ทธ๋๋ก ๋ฐํ๋จ).
์ํธ๋กํผ ๋ฏผ๊ฐ๋ ํ (๊ธฐ๋ณธ ์๊ณ๊ฐ: 3.6)
| ์ํธ๋กํผ | ๋ฐ์ดํฐ ์ ํ | ์์ |
|---|---|---|
| 0.0 - 3.0 | ์ผ๋ฐ ๋จ์ด, ๋ฐ๋ณต | password, admin, 111111 |
| 3.0 - 3.6 | CamelCase, ๋ถ๋ถ ํด์ | ProgramCampaignInstanceJob, 8f3a11b2c |
| 3.6 - 4.5 | ๊ฒฝ๋ก, UUID, ์ฝํ ๋น๋ฐ๋ฒํธ | /opt/application/runtime, P@ssw0rd2026! |
| 4.5 - 5.0 | ์ค๊ฐ ํ ํฐ | E8s9d_2kL1 |
| 5.0+ | ๊ณ ์ํธ๋กํผ ํค | (SHA-256, API Keys) |
๋น ๋ฅธ ์์
- ๋ก์ปฌ์์ ํ ์คํธ (CLI) ๋ชจ๋ ๋ก๊ทธ ์ถ๋ ฅ์ PII-Shield๋ฅผ ํตํด ํ์ดํํ์ฌ ์ฆ์ ์๋ํ๋ ๋ชจ์ต์ ๋ณผ ์ ์์ต๋๋ค:
# Emulate a log with a sensitive password
echo "Error: User password=MySecretPass123! failed login" | docker run -i --rm ghcr.io/pii-shield/pii-shield:2.2.7
# Output: Error: User password=[HIDDEN:8f3a11] failed login
- Kubernetes (์๋ํ๋ ์ฌ์ด๋์นด ์ฃผ์
)
PII-Shield Operator๊ฐ ์ค์น๋์ด ์์ผ๋ฉด, ์ ํ๋ฆฌ์ผ์ด์
์ ๋ณดํธํ๋ ๊ฒ์
PiiPolicy๋ฅผ ์์ฑํ๊ณ ํ๋์ ๋ ์ด๋ธ์ ์ง์ ํ๋ ๊ฒ๋งํผ ๊ฐ๋จํฉ๋๋ค.
์ ์ฑ ์์ฑ:
apiVersion: core.pii-shield.io/v1alpha1
kind: PiiPolicy
metadata:
name: strict-policy
namespace: default
spec:
injectionMode: "file"
Deployment์ ๋ ์ด๋ธ ์ง์ :
apiVersion: apps/v1
kind: Deployment
metadata:
name: secure-app
spec:
template:
metadata:
labels:
pii-shield.io/inject: "true"
annotations:
pii-shield.io/policy: "strict-policy"
# ...
Operator๋ Native Sidecar ํจํด(K8s 1.28+)์ ์ฌ์ฉํ์ฌ pii-shield-agent๋ฅผ ์๋์ผ๋ก ์ฃผ์
ํ๊ณ ๋ชจ๋ ๋ก๊ทธ๋ฅผ ์์ ํ๊ฒ ๋ง์คํนํฉ๋๋ค!
๐ ๋ฌด๋ฃ: 25๊ฐ ํญ๋ชฉ Kubernetes ๋ก๊ทธ PII ๊ฐ์ฌ ์ฒดํฌ๋ฆฌ์คํธ โ ํ๋์์ PII๊ฐ ์ ์ถ๋๋ ์์น, ์ด๋ค ๋ก๊ทธ ๊ฒฝ๋ก๊ฐ ํํฐ๋ฅผ ์ฐํํ๋์ง, ์ญ์ ๊ฐ ์ค์ ๋ก ์๋ํ๋์ง ํ์ธํ๋ ๋ฐฉ๋ฒ. ์ฒดํฌ๋ฆฌ์คํธ ๋ฐ๊ธฐ โ