사용 사례: 결제
산업: 금융 서비스, 보안 및 규정 준수
제품: MongoDB Atlas, Queryable Encryption, 고객 키 관리를 사용한 미사용데이터 암호화, 비공개 엔드포인트, 데이터베이스 감사, PCI DSS 인증
파트너: Amazon Web Services
솔루션 개요
PCI DSS는 결제 계정 데이터를 보호하기 위한 참고 표준을 구성합니다.CHD를 저장, 프로세스 또는 전송하는 시스템에 대한 기술 및 운영 관행의 기준을 설정합니다. 결제 시스템을 보호하고 제어하는 방법에 대한 공통 점 팀에 제공합니다.
결제 데이터 보호에는 일반적으로 암호화 포함됩니다. 기존 접근 방식에서는 필드 암호화됨 되면 더 이상 값으로 검색할 수 없습니다. 결제 플랫폼의 경우 사기 조사는 고객의 이메일 , 전화 또는 계정 참조와 같은 민감한 필드를 검색해야 하기 때문에 이러한 제한은 실질적인 문제를 나타냅니다. 암호화됨 데이터를 검색 할 수 있는 방법이 없는 조사에서는 데이터를 대량으로 해독하여 노출 범위를 넓힐지, 아니면 오프라인 상태에서 속도가 느려지는 등 불편한 선택을 할 수 밖에 없습니다. 이 딜레마는 솔루션의 설계 질문으로 이어집니다.
결제 플랫폼이 미사용 데이터를 암호화됨 상태로 유지하면서 사기 분석가가 값으로 데이터를 검색 수 있도록 하려면 어떻게 해야 하나요?
PCI DSS는 결제 데이터 보호 방법에 대한 기준을 높입니다. 최신 버전인v.4 0 및 40v..1 는 지속적인 컴플라이언스, 특정 시점 감사에 더 많은 가중치를 부여하고, 범위 축소를 처리하여 서비스에 대한 평가 노력을 줄입니다. 제공합니다.
PCI DSS에서 컴플라이언스 공유 책임 모델을 따릅니다. 즉, MongoDB Atlas 호스팅하다 플랫폼의 운영 보안을 보장하고 고객은 배포의 구성 및 데이터 정책을 제어합니다.
분명히 말해서, MongoDB 사용한다고 해서 PCI DSS를 준수하는 솔루션이 되는 것은 아닙니다. 규정 준수는 제품, 제품의 프로세스 및 조직 포괄하는 특정 환경을 기준으로 평가됩니다. MongoDB Atlas 컴플라이언스 달성하기 위한 작업량을 줄이고 감사 범위를 축소하는 인증된 인프라와 데이터 계층 기능을 제공합니다. 여기서 값은 가속화 및 범위 축소이며 컴플라이언스 보장이 아닙니다.
PCI DSS의 모습과 계층 분할 위치
PCI 보안 표준 협의회는 PCI DSS를 유지 관리하고 제어 목표 아래에 그룹화된 요구 사항 설정하다 를 구성합니다.
목표 | 요구 사항: |
|---|---|
보안 네트워크 구축 및 유지 관리 |
|
계정 데이터 보호 |
|
취약점 관리 프로그램 유지 |
|
강력한 액세스 제어 구현 |
|
정기적으로 네트워크 모니터 및 테스트 |
|
정보 보안 정책 유지 |
|
공유 책임 모델에서는 이러한 요구 사항이 이러한 계층으로 분할 .
인프라 계층(제공자 책임): 물리적 보안, 네트워크 제어, 플랫폼 패치 및 기본 저장 의 미사용 데이터 암호화 로 구성됩니다. MongoDB Cloud는 PCI DSS 인증 서비스 제공자 이며,QSA인 Coalfire Systems의 검증을 받았습니다. MongoDB Cloud의 CHD 환경의 경우, QSA는 MongoDB 보안 센터 통해 요청 시 제공되는 MongoDB Cloud AOC를 사용할 수 있습니다. 이 사전 검증된 계층은 고객이 기본 인프라를 다시 감사할 필요가 없습니다.
애플리케이션 계층(고객의 책임): 제품이 CHD를 저장, 보호, 쿼리, 마스킹 및 감사하는 방법과 정보를 읽을 수 있는 사용자로 구성됩니다. 이 계층은 고객의 설계 결정으로 남아 있습니다.
그림 1. PCI DSS 분담 계층 모델
PSP 프로젝트 애플리케이션 계층을 채웁니다. 이는 참조 아키텍처와 설정하다 의 권장사항 으로 구성됩니다. MongoDB 사용하여 애플리케이션 계층을 저장된 데이터를 보호하고, 액세스 제한하고, 데이터를 모니터링 , 감사 범위를 줄이기 위한 PCI DSS 제어 목표에 맞추는 방법을 보여줍니다. 이 프로젝트 PCI DSS 채택을 가속화하기 위한 점 됩니다.
아키텍처 제안
PSP 프로젝트 PCI DSS에 부합하는 PSP 플랫폼입니다. MongoDB Atlas 의 결제 라이프사이클(카드 결제 및 권한 부여, 자동 사기 점수 산정, 다중 계층 분석가 조사)을 실행합니다. 분석가가 명확한 설계 철학을 가지고 암호화됨 데이터를 검색 할 수 있는 방법을 보여줍니다.
모든 것을 암호화합니다. 무엇이든 쿼리하세요. 키는 사용자의 것입니다.
Atlas 에서 상속된 인프라 계층(그림 1 참조)을 사용하면 나머지 작업은 애플리케이션 계층에서 이루어집니다. Atlas 이 작업을 지원 위해 Queryable Encryption 중심으로 다양한 기능을 제공합니다. 전체 기능 설정하다 는 MongoDB 기능 섹션에 나열되어 있습니다.
Queryable Encryption 에 중점을 둡니다.
기존의 접근 방식에서는 필드 일반 텍스트로 유지하여 검색할 수 있도록 하거나( 데이터베이스 액세스 있는 모든 사람이 읽을 수 있음), 보호되도록 암호화됨 (더 이상 검색할 수 없음) 보호합니다. Queryable Encryption 지원하는 쿼리 유형에 대해 해당 중 하나를 제거합니다.
그림 2. MongoDB 암호화 아키텍처: Queryable Encryption, 키 관리 및 데이터 보호 계층
동등성 검색 가능 필드 의 경우 흐름은 다음과 같이 진행됩니다.
운전자 필드의 DEK를 사용하여 클라이언트 사이드에서 검색 값을 암호화합니다.
서버 해당 암호화됨 값을 암호화됨 인덱스 와 일치시킵니다. 암호문을 암호문과 비교하고 필드 를 해독하지 않습니다.
일치하는 문서가 애플리케이션 프로세스 로 반환되면 운전자 메모리의 대상 필드를 해독합니다. MongoDB Atlas BSON 바이너리 하위 유형 06로 보관되는 암호 텍스트만 저장하고 처리합니다. 결과적으로 전체 클러스터 액세스 가진 데이터베이스 관리자는 불투명 바이트만 볼 수 있습니다.
PSP 프로젝트 의 구체적인 효과는 사기 분석가 암호화됨 이메일, 전화 또는 계정 참조를 통해 고객을 검색하고 기록 다시 가져오는 반면 일반 텍스트 값은 Atlas 도달하지 않는다는 것입니다. 이 역량 CDE를 확장하는 대량 암호 해독 없이 민감한 PII를 미사용 상태로 암호화됨 값에 따라 사용할 수 있도록 유지합니다.
보호는 필요하지만 검색 필요하지 않은 필드는 검색 불가 모드 사용하며, 승인되고 에스컬레이션된 요청 에 대해서만 해독됩니다. 데이터 모델 섹션에서는 모드와 해당 모드가 보호하는 필드를 모두 다룹니다.
애플리케이션 계층을 위한 MongoDB 기능
PSP 프로젝트 여러 MongoDB 와 Atlas 기능을 결합합니다. 각각은 PCI DSS 애플리케이션 계층 작업의 특정 부분에 매핑됩니다.
기능 | 프로젝트 내 역할 | PCI DSS 제어 목표 | MongoDB 문서 |
|---|---|---|---|
Queryable Encryption:equality | 암호화됨 PII(이메일, 전화, 계정 참조)를 정확한 일치 항목으로 검색합니다. 즉, 필드 는 클라이언트 사이드 암호화됨 데이터베이스 서버 암호텍스트만 저장하고 처리하고 일반 텍스트는 수신하지 않습니다. | 저장된 계정 데이터를 보호합니다. 액세스 제한합니다. | |
Queryable Encryption: 검색 불가 및 클라이언트 측 필드 레벨 암호화 | 해독된 클라이언트 사이드 에서 검색할 때만 고감도 필드( 주소, 정부 ID , 원시 게이트웨이 페이로드)를 암호화합니다. | Protect stored account data; restrict access. | |
고객 관리형 키 | 고객의 자체 키 관리 서비스에 고객 마스터 키 보관합니다. 마스터 키는 그대로 유지되고 MongoDB 마스터 키에 액세스 할 수 없지만 데이터 키는 마스터 키 아래에서 암호화됨 됩니다. | 저장된 계정 데이터를 보호합니다. | |
자동 암호화 공유 라이브러리: | 운전자/ 애플리케이션 프로세스 에서 암호화 및 암호 해독을 수행하여 암호화됨 필드의 일반 텍스트가 Atlas 로 전송되지 않도록 합니다. | 저장된 계정 데이터를 보호합니다. 전송 중 암호화. | |
RBAC 및 Identity Federation | 인증 위한 LDAC/Active Directory, OpenID Connect 및 워크포스 ID 페더레이션을 통해 데이터베이스 및 컬렉션 수준에서 세분화된 역할 기반 액세스 합니다. | 알아야 할 사항에 따라 액세스 제한합니다. 사용자 식별 및 인증. | |
2계층 데이터 암호화 키 계층 | 계층별 Atlas 역할 및 데이터베이스 사용자를 기반으로 최소 권한 필드 가시성을 암호화하여 적용합니다. | 알아야 할 사항별로 액세스 제한합니다. | |
비공개 네트워킹 | IP 허용 목록을 사용하여 비공개 엔드포인트 통해 클라우드 제공자 백본에 카드 소지자 데이터 트래픽을 유지하여 CDE 주위에 정의된 네트워크 경계를 형성합니다. | 보안 네트워크를 구축하고 유지 관리합니다. | |
Atlas 데이터베이스 감사 | 민감한 필드에 대한 액세스 감사 기록 으로 기록하고 검토 위해 감사 로그를 SIEM 시스템으로 전달합니다. | 모든 액세스 기록하고 모니터 . | |
Atlas 연결의 전송 계층 보안 1.3 | 모든 네트워크 홉에서 카드 소지자 데이터를 암호화합니다. | 전송 중인 데이터를 암호화합니다. | |
BIAN을사용한 문서 모델 - 정렬 스키마 | 카드, 트랜잭션 및 당사자 데이터를 모델링하여 카드 소지자 데이터를 격리하고 최소화할 수 있습니다. | 범위 지정 및 데이터 최소화를 지원합니다. |
인접 사용 사례
안정적인 API 경계, 필드 수준 Queryable Encryption 및 액세스 계층별 DEK 모델을 포함한 이 솔루션의 핵심 원칙은 다른 사용 사례에 적용될 수 있습니다.
개방형 금융: 고객이 승인한 필드(예: PSD2 및 소비자 데이터 권한)로 제3자를 제한하는 동의 범위의 데이터 액세스 .
의료: HIPAA에 따라 보호되는 건강 정보입니다.
보험 및 자산: GDPR 에 따라 정부 식별자 및 금융 계정 데이터를 처리하는 플랫폼입니다.
참조 아키텍처
PSP 프로젝트 표준 카드 결제 체인에서 결제 게이트웨이 위치입니다.
판매자 백엔드
결제 게이트웨이: 프로세서, 획득자, 카드 네트워크 및 발급자
이는 PCI DSS 범위 저장, 암호화 및 누가 어떤 카드 소유자 데이터 필드를 읽을 수 있는지를 제어하는 액세스 제어를 소유합니다. 카드 네트워크나 프로세서를 에뮬레이션하지 않습니다. 따라서 아키텍처는 데이터 보안 계층에 중점을 둡니다.
프로세서, 획득자, 카드 네트워크, 카드 발급자와 같은 다운스트림 행위자는 외부 하위 시스템으로, 제공자를 통해 접근합니다. 데모에서 각 제공자 프로젝트 독립적으로 유지하는 내장 모듈을 가지고 있지만 프로덕션 환경에서는 실제 외부 하위 시스템으로 대체할 수 있습니다. 카드 발급사는 이러한 제공자 하나입니다. 내장 모듈은 데모를 위해 내부에 카드 데이터를 저장하지만 프로덕션 환경에서는 해당 데이터가 외부 발급사에 저장됩니다.
그림 3. PSP 플랫폼 계층 아키텍처 및 외부 구성 요소
아키텍처 구성 요소
이 아키텍처는 다음 구성 요소를 사용합니다:
PSP 대시보드 (프론트엔드): 프레젠테이션 계층. 데이터베이스 와 직접 통신하지 않습니다. 체크아웃 시 PAN을 토큰화하여 전체 PAN이 PSP 코어에 의해 전송되거나 저장되지 않도록 합니다.
PSP API 게이트웨이(백엔드): 단일 진입 점 이자 보호된 필드를 해독할 수 있는 유일한 구성 요소입니다. Queryable Encryption 클라이언트 보유하고 호출자의 역할 해결하며 요청 에 따라 올바른 키 계층 선택합니다. 사용자 인터페이스, 서비스 계정 및 통합을 포함한 모든 호출자는 동일한 API 통과하며 동일한 RBAC 및 키 규칙의 적용을 받습니다.
Queryable Encryption 사용하는 MongoDB Atlas (M 이상):10 06모든 보호 필드 에 대해 암호 텍스트(이진 하위 유형)만 저장합니다. 전체 클러스터 액세스 있는 데이터베이스 관리자는 불투명 바이트를 볼 수 있습니다. TLS 은 1.3 전송 중인 모든 데이터를 보호합니다. PSP 프로젝트 프로덕션에서 지원되는 동등성 검색 에 의존합니다.
AWS KMS : 데이터 암호화 키를 래핑하고 래핑 해제하는 CMK 보유합니다. CMK KMS 에 유지되며 MongoDB 이에 액세스 할 수 없습니다. 로컬 키 제공자 데모의 오프라인 대체 수단으로 사용할 수 있습니다.
참고
접두사, 접미사 및 하위 문자열 쿼리에 대한 Queryable Encryption 지원 공개 미리 보기로 제공되며 MongoDB 8.2 이상이 필요합니다. Atlas cluster 와 crypt_shared 라이브러리 모두에서 MongoDB 8.2 이상을 사용하고 있는지 확인합니다. 동등성 및 범위 쿼리에는 8.2이(가) 필요하지 않습니다.
데이터 모델 접근 방식
PSP 프로젝트 데이터 모델 BIAN 서비스 도메인 명명 규칙을 따르므로 모든 컬렉션 과 필드 BIAN 표준에 정의된 서비스 도메인에 매핑됩니다. BIAN 외에도 MongoDB Queryable Encryption 필드 수준 보안 태세를 정의합니다.
쿼리 유형 및 프로젝트 적용 방법
MongoDB Queryable Encryption 서버 암호 텍스트를 쿼리 수 있도록 하면서 필드 클라이언트 사이드 암호화됨 유지합니다. PSP 프로젝트 다음과 같은 쿼리 유형을 사용합니다.
동등성(프로덕션): PCI DSS 범위 조회 키에 대한 검색 가능 모드 입니다. 운전자 쿼리 값을 암호화하고 암호화됨 인덱스 와 비교하여 서버 필드 를 해독하지 않도록 합니다. 이 기능 사용하면 사기 분석가 일반 텍스트를 노출하지 않고도 이메일 , 전화 또는 계정 참조를 통해 기록 찾을 수 있습니다.
쿼리 없음(검색 전용): 거주지 주소, 정부 식별자 및 원시 게이트웨이 페이로드를 포함하여 가장 민감한 필드에 대한 검색 불가능 모드 입니다. 권한이 부여된 클라이언트 이러한 필드를 JIT(Just-In-Time)로만 해독합니다.
범위(프로덕션): 금액 범위 별 필터링과 같은 값 밴드 조회에 사용됩니다. 금액을 암호화됨 로 유지합니다.
접두사, 접미사 및 하위 문자열(공개 미리 보기): 암호화됨 ID 필드에 대한 KYC 스타일 부분 일치 조회에 대해 시연되었습니다.
아래 PCI DSS 범위 카드 및 PII 필드의 경우 액세스 설계는 다음 범주로 축소됩니다.
필드 | 분류 | 암호화 모드 | 검색 |
|---|---|---|---|
| 계정 참조/PII |
| 예 |
| 계정 참조 |
| 예 |
| PII |
| 예 |
| PII |
| 예 |
| CHD |
| No |
| 높은 PII |
| No |
| High PII |
| No |
| 민감한 운영 |
| No |
| 네트워크 토큰 | 일반 텍스트 | 예 |
| 표시 전용 | Plaintext | No |
전체 PAN( | CHD | PSP 코어에 저장되지 않음 | 해당 사항 없음(PSP 코어의 경우) |
CVV 및 핀 | 민감한 인증 데이터 | 저장하지 않음 | N/A |
가능한 경우 카드 소지자 데이터를 범위에서 벗어나는 디자인 선택은 다음과 같습니다.
PAN 토큰화: 애플리케이션 전체 PAN을 대리
tok_<uuid>토큰으로 대체하고 표시 목적으로 마지막 4자리만 유지합니다.제로 SAD 캡처: 엔드포인트는 CVV 또는 핀과 같은 SAD를 캡처하지 않습니다.
세분화 및 토큰화를 통한 범위 축소
일반적인 PCI DSS 관행은 카드 소지자 데이터가 필요하지 않은 시스템에 카드 소지자 데이터를 보관하지 않으므로 대부분의 플랫폼이 CDE에 속하지 않습니다. 이러한 기술은 CDE를 시스템의 나머지 부분과 격리하는 세분화와 프라이머리 계정 번호를 전용 토큰화 볼트에 보관된 대리 토큰으로 대체하는 토큰화 적용 . 세분화는 PCI DSS 요구 사항은 아니지만 시스템을 범위에서 벗어나게 하고 평가 비용 절감합니다. 사용하는 경우 문서화하고, 정당화하고, 유효성을 검사해야 합니다.
PSP 프로젝트 이러한 기술을 데이터 계층에 적용합니다.
전체 PAN은 PSP 코어에 상주하지 않습니다: 코어는 서로게이트 토큰,BIN 및 마지막 4자리만 저장합니다. 대부분의 플랫폼은 카드 소지자 데이터를 전달하지 않으며 범위를 벗어납니다. 전체 PAN은 프로덕션 외부에 있는 카드 발급사 하위 시스템에 속합니다. 데모에서는 교체 가능한 내장 발급자 모듈이 역할을 하며 PAN을
QE:equality로 암호화됨 격리된 자체 볼트에 저장합니다. 이 필드 해독하지 않고도 정확한 조회 및 중복 감지를 위해 일치시킬 수 있습니다.PII는 중앙 집중식입니다: 이메일 또는 전화와 같은 ID13 필드는 계약, 카드 및 트랜잭션 기록을 참조하는 단일 BIAN SD- 당사자 컬렉션 에 있습니다. 데이터 주체 삭제 요청 한 곳에서 보호하고 프로세스 .
민감한 필드는 별도의 키 계층 뒤에 있습니다.
QE:none필드는 검색 가능한QE:equality필드와 다른 데이터 암호화 키 계층 사용하므로 민감한 데이터와 민감하지 않은 데이터 간의 경계는 키에 의해 적용됩니다.
이는 인증이 아닌 참조 패턴 입니다. CDE 정의와 해당 유효성 검사 여전히 고객의 책임이며 평가자는 확인해야 합니다.
애플리케이션 코드가 아닌 액세스 제어 적용 키
암호화 계층을 DEK 백으로 분리합니다.
조회 계층:
QE:equality인증된 모든 분석가 역할이 검색 위해 키를 사용할 수 있습니다.민감한 계층:
QE:none키는 유효하고 수명이 짧은 에스컬레이션 토큰을 보유한 레벨 2 조사자와 읽기 전용 보안 감사자만 사용할 수 있습니다.디자인 핵심: 레벨 1 클라이언트의 암호화된 필드 맵에서 민감한 키를 생략하므로 운전자 해당 필드를 해독할 수 없고 암호 텍스트로 반환합니다. 여기서 필드 수준 액세스 제어는 애플리케이션 코드의 프로젝션 아닌 암호화이므로 쿼리 버그를 통해 우발적인 유출 위험을 줄입니다. 분석가 사례를 에스컬레이션하고 레벨 2 조사관이 승인하면 조사관은 해당 요청 에 대해 민감한 계층 클라이언트 풀을 활성화하는 에스컬레이션 토큰을 받습니다.
솔루션 빌드
이 섹션은 솔루션을 실행 하고 평가하려는 팀을 위한 배포서버 가이드 입니다. 성공적인 배포서버 위해 중요한 구성 선택, 로컬에서 스택 실행 방법, 프로덕션을 위해 스택을 배포 방법을 다룹니다. 이 GitHub 리포지토리 사용하여 이 솔루션을 구현 .
전제 조건 설정
프로젝트 가 다음 요구 사항을 준수하는지 확인합니다.
Node.js 20 LTS 이상.
Docker 및 Docker Compose(전체 스택 실행 데 권장).
MongoDB Atlas cluster, M10 이상. Queryable Encryption 무료 계층 에서는 사용할 수 없습니다.
키 제공자(예: AWS KMS) 또는 오프라인 개발을 위한 로컬 제공자(
PSP_KMS_PROVIDER=local)입니다.자동 암호화 공유 라이브러리. MongoDB 엔터프라이즈
MONGODB_CRYPT_SHARED_LIB_PATH다운로드에서 다운로드하고 을(를) 점 . 백엔드 설정되지 않은 경우 일반 설치 경로로 대체됩니다.
키 관리 서비스 구성
데이터베이스 설정 명령 npm run setup:db을 사용하여 MongoDB 키 볼트를 프로비저닝합니다. CMK 로 래핑된 각 암호화됨 필드 에 DEK를 사용합니다. 이 단계는 멱등 있으므로 안전하게 다시 실행하여 기존 키를 재사용할 수 있습니다.
모든 프로덕션 또는 프로덕션과 유사한 배포서버 에는 AWS KMS 와 같은 managed KMS 사용합니다. CMK 조직의 자체 계정에 유지되며 MongoDB 이에 액세스 할 수 없습니다.
AWS KMS 의 경우 환경 변수를 통해 제공자 구성합니다.
PSP_KMS_PROVIDER=aws AWS_CMK_ARN=arn:aws:kms:<region>:<account-id>:key/<key-id> AWS_REGION=<region> AWS_ACCESS_KEY_ID=<access-key-id> AWS_SECRET_ACCESS_KEY=<secret-access-key> AWS_SESSION_TOKEN=<token> # optional, for temporary credentials
또는 마스터 키를 환경 변수에 보관하는 로컬 키 제공자 사용할 수도 있습니다. 이 설정 오프라인 데모 및 로컬 개발을 위한 해결 방법으로 작동하며 실제 카드 소지자 데이터에는 적합하지 않습니다.
오프라인 데모에 대해서만 로컬 KMS 해결 방법을 구성합니다.
PSP_KMS_PROVIDER=local PSP_KMS_LOCAL_MASTER_KEY=<96-byte base64 key> # generate with: npm run setup:key:master
로컬 제공자 96바이트 기본64 마스터 키가 필요합니다. MongoDB Queryable Encryption 로컬 제공자 에 대해 이 정도의 크기를 예상합니다.
이벤트 버스 구성
이 플랫폼은 이벤트 중심입니다. 비즈니스 및 컴플라이언스 이벤트는 이벤트 버스를 통해 흐릅니다. 엔진 EVENT_BUS_ENGINE에 의해 선택되며, 선택에 관계없이 동일한 게시자 및 소비자 코드가 실행됩니다.
프로덕션 또는 처리량이 많은 환경에 Kafka 사용하면 다른 시스템에서 이벤트를 지속형, 분할하며, 사용할 수 있습니다.
EVENT_BUS_ENGINE=kafka KAFKA_BROKERS=broker1:9092,broker2:9092 KAFKA_CLIENT_ID=pci-psp KAFKA_SSL=true KAFKA_SASL_MECHANISM=plain # or scram-sha-256 / scram-sha-512 KAFKA_SASL_USERNAME=<username> KAFKA_SASL_PASSWORD=<password> EVENT_BUS_TOPIC_PREFIX=pci.psp
로컬 개발, 데모 또는 소량 배포와 같이 덜 까다로운 환경에는 인프로세스 엔진 사용하세요.
EVENT_BUS_ENGINE=in-process
카드 데이터는 암호화됨 엔벨로프로 이동하므로 엔진 선택해도 PCI DSS 상태가 변경되지 않습니다.
추가 구성 설정
스택 시작하기 전에 루트 .env에 다음 값을 설정합니다.
MongoDB Atlas:
MONGODB_URI,MONGODB_DB_NAMEQE 공유 라이브러리:
MONGODB_CRYPT_SHARED_LIB_PATH인증:
PSP_JWT_SECRET,PSP_OAUTH_KEY_PROVIDER프론트엔드/판매자:
NEXT_PUBLIC_PSP_URL_BACKEND_PUBLIC,PSP_MERCHANT_OAUTH_CLIENT_ID,PSP_MERCHANT_OAUTH_CLIENT_SECRET,PSP_MERCHANT_SESSION_SECRET
리포지토리 에는 편집할 .env 파일 이 포함되어 있습니다. 전체 목록은 설치 위키 페이지를 참조하세요.
Docker Compose를 사용하여 로컬에서 데모 실행
종속성을 설치하고 데이터베이스 프로비저닝 및 시드한 다음 스택 시작합니다. Docker Compose는 첫 실행 에 권장되는 경로입니다. 백엔드, PSP 포털 및 판매자 앱 독립형 컨테이너화된 스택 으로 시작합니다.
npm run setup # install root + backend + frontend + merchant dependencies npm run setup:db # create QE collections, provision DEKs and indexes npm run setup:seed # insert synthetic BIAN demo data docker compose up # start the full stack
핫 리로드를 사용하는 로컬 개발의 경우 docker compose up 대신 npm run dev를 사용합니다.
실행 다음에서 서비스를 사용할 수 있습니다.
http://localhost:8081 }의 백엔드 API
OpenAPI/Swagger
/doc상태 확인:
/api/v1/system/health
그림 4. Leafy Pay 애플리케이션 데모 사용자 인터페이스
setup:db 에는 유효한 KMS 자격 증명 있는 라이브 M10 이상의 Atlas cluster 필요합니다. 데모는 합성 데이터만 사용합니다.
프로덕션용 배포
프로덕션 또는 공유 환경의 경우 단일 Docker Compose 호스팅하다 가 아닌 Kubernetes 에 배포 .
npm run deploy:kube # Kubernetes deploy via tools/kube.ts npm run deploy:docker # alternative: containerised deploy with docker compose
권장 프로덕션 설정:
키 제공자 와 Kafka 이벤트 버스에 AWS KMS 사용합니다.
계층별 QE 연결 문자열 및 자격 증명 Kubernetes 시크릿으로 제공합니다.
TLS를 통해 클라이언트 트래픽을 종료하고 사용 가능한 경우 비공개 엔드포인트 통해 Atlas 에 연결하세요.
AWS KMS 설치되면 백엔드 수평으로 확장합니다. 로컬 키 제공자 에서 실행 동안에만 단일 복제본 유지합니다.
주요 학습 사항
첫 날부터 책임 분담을 위한 설계: MongoDB Atlas의 PCI DSS 인증은 인프라 계층이 AOC를 통해 상속되도록 허용하지만, 애플리케이션 계층은 고객의 책임으로 남아 있습니다.
암호화 와 검색 가능성을 함께 활성화: Queryable Encryption 서버 복호화 없이 암호화됨 PII에 대한 정확한 일치 검색 지원하므로, "복호화하여 조사하기"를 쉽게 수행할 수 있습니다. 이는 PCI DSS 범위를 확장하는 경향이 있습니다.
코드뿐만 아니라 키로 액세스 제어 적용: 계층별 DEK 모델은 필드 수준 액세스 암호화합니다. 낮은 권한의 클라이언트 민감한 필드를 해독할 수 없으므로 쿼리 버그가 해당 필드를 유출할 가능성을 낮춥니다.
데이터를 보호하기 전에 범위 축소: PAN을 토큰화하고 마스킹된 마지막 4자리만 저장하면 대부분의 시스템이 카드 소지자 데이터 범위에서 제외됩니다. 범위를 벗어난 데이터는 암호화됨 되었지만 여전히 범위 내에 있는 데이터보다 제어가 덜 필요하므로 범위를 축소하면 감사 표면이 줄어듭니다.
키보다 오래 지속되는 감사 추적 설계: 추가 전용 액세스 로그 암호화되지 않은 상태로 유지하고 설명하는 데이터와 분리하여 키 순환 시에도 가독성을 유지하고 PCI DSS에서 예상하는 액세스 로깅 및 모니터링 지원합니다.
작성자
- Antonio Membrides Espinosa, MongoDB