사용 사례: 결제
산업: 금융 서비스, 보안 및 컴플라이언스
제품: MongoDB Atlas, Queryable Encryption, 고객 키 관리를 이용한 미사용 데이터 암호화, 비공개 엔드포인트, 데이터베이스 감사, PCI DSS 인증
제휴하다: Amazon Web Services
솔루션 개요
PCI DSS는 결제 계정 데이터를 보호하기 위한 기준 표준입니다. 이는 CHD를 저장, 처리 또는 전송하는 시스템에 대한 기술 및 운영 사례의 기준을 제시합니다. 이것은 팀에게 결제 시스템을 어떻게 보안하고 제어해야 하는지에 대한 공통의 참조점을 제공합니다.
결제 데이터를 보호하려면 일반적으로 암호화가 필요합니다. 기존 방식에서는 필드가 암호화됨 더 이상 해당 값으로 검색할 수 없습니다. 결제 플랫폼의 경우 사기 조사는 고객의 이메일, 전화번호 또는 계정 참조와 같은 민감한 필드를 검색하는 데 의존하기 때문에 이러한 제한은 실질적인 문제가 됩니다. 암호화된 데이터를 검색할 방법이 없으면 조사를 위해 불편한 선택을 해야 합니다. 데이터를 대량으로 복호화하여 노출 범위를 넓히거나, 더 느리게 오프라인으로 작업해야 합니다. 이 딜레마는 솔루션 설계 질문으로 이어집니다.
결제 플랫폼이 데이터를 암호화된 상태로 유지하면서도 사기 분석가가 값으로 데이터를 검색할 수 있게 하려면 어떻게 해야 할까요?
PCI DSS는 결제 데이터 보호 기준을 높입니다. 최신 버전인 v4.0 및 v4.0.1는 지속적인 컴플라이언스와 특정 시점의 감사에 더 많은 비중을 두고, 서비스 제공자의 평가 노력을 줄이기 위해 범위 축소를 다룹니다.
PCI DSS에 따라 컴플라이언스는 공동 책임 모델을 따릅니다. MongoDB Atlas는 호스팅 플랫폼의 운영 보안을 보장하고, 고객은 배포서버의 구성 및 데이터 정책을 제어합니다.
간단히 말해서, MongoDB를 사용하는 것 그 자체만으로는 해결책이 PCI DSS 준수하도록 만들지 않습니다. 컴플라이언스는 제품, 프로세스 및 조직을 포괄하는 특정 환경을 기준으로 평가됩니다. MongoDB Atlas는 컴플라이언스 달성에 필요한 작업량을 줄여주고 감사 범위를 축소할 수 있는 인증된 인프라스트럭처 및 데이터 계층 기능을 제공합니다. 여기서 중요한 것은 컴플라이언스 보장이 아니라 가속화 및 범위 감소입니다.
PCI DSS의 모습과 계층이 분할되는 지점
PCI 보안 표준 위원회는 PCI DSS를 유지하고 제어 목표 하위에 그룹화된 일련의 요구 사항을 조직합니다:
목표 | 요구 사항: |
|---|---|
안전한 네트워크를 구축하고 유지 관리합니다. |
|
계정 데이터 보호 |
|
취약점 관리 프로그램을 유지하세요 |
|
강력한 액세스 제어 구현 |
|
정기적으로 네트워크를 모니터링하고 테스트합니다. |
|
정보 보안 정책 유지 |
|
공동 책임 모델 하에서 이러한 요구 사항은 다음 계층으로 분할됩니다.
인프라 계층 (제공자의 책임): 물리적 보안, 네트워크 제어, 플랫폼 패치 및 기본 저장의 미사용 데이터 암호화로 구성됩니다. MongoDB 클라우드는 PCI DSS 인증 서비스 제공자이며, QSA 인 콜파이어 시스템즈에 의해 유효성을 검증받았습니다. MongoDB 클라우드의 CHD 환경의 경우, QSA는 MongoDB 클라우드 AOC를 신뢰할 수 있으며, MongoDB 보안 센터를 통해 요청 시 사용할 수 있습니다. 이 사전 검증된 계층을 사용하면 고객이 기본 인프라를 다시 감사할 필요가 없습니다.
애플리케이션 계층(고객의 책임): 제품이 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에 도달하지 않습니다. 이 역량은 민감한 PII를 저장 시 암호화된 상태로 유지하고 값으로 사용할 수 있도록 하며, CDE를 확장하는 대량 복호화 없이 사용할 수 있습니다.
보호는 필요하지만 검색은 필요 없는 필드는 검색 불가능 모드를 사용하며, 승인된 권한 상승 요청에 한해서만 암호 해독됩니다. 데이터 모델 섹션에서는 두 모드 모두와 보호하는 필드를 다룩니다.
애플리케이션 계층을 위한 MongoDB 역량
PSP 프로젝트는 여러 MongoDB 및 Atlas 역량을 결합합니다. 각각은 PCI DSS 애플리케이션 계층 작업의 특정 부분에 매핑됩니다:
기능 | 프로젝트에서의 역할 | PCI DSS 제어 목표 | MongoDB 문서 |
|---|---|---|---|
Queryable Encryption:equality | 암호화된 PII(이메일, 전화번호, 계정 참조) 중 정확히 일치하는 항목을 검색합니다. 필드는 클라이언트 사이드에서 암호화되므로 데이터베이스 서버는 해당 암호문만 저장하고 처리하며 일반 텍스트는 수신하지 않습니다. | 저장된 계정 데이터를 보호하고, 접근을 제한하세요. | |
Queryable 암호화: 검색 불가 및 클라이언트 사이드 필드 레벨 암호화 | 주소, 정부 ID, 원시 게이트웨이 페이로드와 같은 민감도가 높은 필드를 암호화하여 검색 전용으로 사용하고 클라이언트 사이드에서 복호화합니다. | 저장된 계정 데이터를 보호하고, 접근을 제한하세요. | |
고객 managed 키 | 고객 마스터 키는 고객의 자체 Key Management Service에 보관됩니다. 마스터 키는 그곳에 보관됩니다. MongoDB는 액세스할 수 없습니다. 반면 데이터 키는 마스터 키로 암호화됨 상태입니다. | 저장된 계정 데이터 보호. | |
자동 암호화 공유 라이브러리: | 드라이버/애플리케이션 프로세스에서 암호화 및 복호화를 수행하여 암호화된 필드에 대한 평문이 Atlas로 와이어를 통해 전송되지 않도록 합니다. | 저장된 계정 데이터 보호; 전송 중 암호화됨. | |
RBAC 및 ID 연합 | 데이터베이스 및 컬렉션 수준에서의 세부적인 역할 기반 액세스 제어(인증을 위해 LDAC / 액티브 디렉토리, OpenID Connect 및 직원 신원 페더레이션 사용). | 알아야 할 필요에 따라 액세스를 제한합니다. 사용자를 식별하고 인증합니다. | |
2계층 데이터 암호화 키 계층 구조 | 최소 권한 필드 가시성을 암호화 방식으로 시행하며, 계층별 Atlas 역할 및 데이터베이스 사용자를 기반으로 합니다. | 알아야 할 필요성에 따라 액세스를 제한합니다. | |
비공개 네트워킹 | 카드 소유자 데이터 트래픽을 클라우드 공급자 백본의 비공개 엔드포인트를 통해 IP 허용 목록 지정과 함께 유지하여 CDE 주변에 정의된 네트워크 경계를 형성합니다. | 안전한 네트워크를 구축하고 유지합니다. | |
Atlas 데이터베이스 감사 | 민감한 필드에 대한 액세스를 감사 기록으로 기록하고, 감사 로그를 SIEM 시스템으로 전송하여 검토합니다. | 모든 액세스를 로그하고 모니터링합니다. | |
Atlas 연결에 대한 Transport Layer 보안 1.3 | 모든 네트워크 홉에서 카드 소유자 데이터를 암호화하십시오. | 전송 중 데이터를 암호화합니다. | |
document model이 BIAN에 정렬된 스키마를 가진 | 모델 카드, 트랜잭션 및 참여자 데이터를 통해 카드 소유자 데이터를 분리하고 최소화할 수 있도록 합니다. | 범위 지정 및 데이터 최소화를 지원합니다. |
인접한 사용 사례
안정적인 API 경계, 필드 수준 Queryable Encryption, 액세스 계층당 DEK 모델을 포함하여 이 솔루션의 핵심 원칙은 다른 사용 사례에 적용할 수 있습니다.
오픈 파이낸스: 제3자가 고객이 승인한 필드에만 액세스하도록 제한하는 동의 범위 내 데이터 액세스(PSD2 및 소비자 데이터 권한과 같은).
의료: HIPAA 에 따른 보호된 건강 정보.
보험 및 자산 관리: GDPR에 따라 정부 식별자 및 금융 계정 데이터를 처리하는 플랫폼.
참조 아키텍처
PSP 프로젝트는 표준 카드 결제 체인에서 결제 게이트 위치입니다.
판매자 백엔드
결제 게이트웨이: 처리자, 가맹점 은행, 카드 네트워크 및 발행자
이 서비스는 PCI DSS 범위의 저장, 암호화, 그리고 카드 소지자 데이터 필드를 읽을 수 있는 권한을 제어하는 액세스 제어를 담당합니다. 카드 네트워크나 프로세서를 에뮬레이션하지 않으므로 아키텍처는 데이터 보안 계층에 중점을 둡니다.
프로세서, 매입사, 카드 네트워크, 카드 발급사와 같은 다운스트림 행위자는 제공자를 통해 연결되는 외부 하위 시스템입니다. 데모에서 각 제공자에는 프로젝트를 독립적으로 유지하는 내장 모듈이 있지만, 프로덕션 환경에서는 실제 외부 하위 시스템으로 대체할 수 있습니다. 카드 발급사는 이러한 제공자 중 하나입니다. 내장 모듈은 데모를 위해 카드 데이터를 내부적으로 저장하지만, 프로덕션 환경에서는 해당 데이터가 외부 발급사에 저장됩니다.
그림 3. PSP 플랫폼 계층화 아키텍처 및 외부 구성 요소
아키텍처 구성 요소
이 아키텍처는 다음 구성 요소를 사용합니다:
PSP 대시보드(프론트엔드): 표시 계층입니다. 그것은 데이터베이스와 직접 통신하지 않습니다. 결제 시 PAN을 토큰화합니다. 그러므로 PSP 코어에서 전체 PAN이 전송되거나 저장되지 않습니다.
PSP API gateway (백엔드): 단일 진입점이자 보호된 필드를 복호화할 수 있는 유일한 구성 요소입니다. 이 구성 요소는 Queryable Encryption 클라이언트를 보유하고, 호출자의 역할을 확인하며, 요청당 올바른 키 계층을 선택합니다. 사용자 인터페이스, 서비스 계정, 통합을 포함한 모든 호출자는 동일한 API를 통과하며 동일한 RBAC 및 키 규칙의 적용을 받습니다.
Queryable Encryption이 포함된 MongoDB Atlas (M10 이상): 보호되는 모든 필드에 대해 암호 텍스트(바이너리 하위 유형 06)만 저장합니다. 전체 클러스터 액세스 권한이 있는 데이터베이스 관리자는 불투명한 바이트를 확인합니다. TLS 1.3은 전송 중인 모든 데이터를 보호합니다. PSP 프로젝트는 프로덕션에서 지원되는 동등 검색을 사용합니다.
AWS KMS: 데이터 암호화 키를 봉투화하고 봉투 해제하는 고객 마스터 키를 보관합니다. CMK는 KMS에 있으며, MongoDB는 여기에 접근할 수 없습니다. 지역 키 제공자는 데모용 오프라인 폴백 기능으로 제공됩니다.
참고
접두사, 접미사 및 하위 문자열 쿼리에 대한 Queryable Encryption 지원은 공개 미리 보기 상태이며 MongoDB 8.2 이상이 필요합니다. Atlas 클러스터와 crypt_shared 라이브러리 모두에서 MongoDB 8.2 이상을 사용하고 있는지 확인하세요. 동등성 및 범위 쿼리에는 8.2이 필요하지 않습니다.
데이터 모델 접근 방식
PSP 프로젝트 데이터 모델은 BIAN 서비스 도메인 명명 관례를 따릅니다. 따라서 모든 컬렉션과 필드가 BIAN 표준에 정의된 서비스 도메인에 매핑됩니다. BIAN 위에 MongoDB Queryable Encryption은 필드 수준 보안 자세를 정의합니다.
쿼리 유형 및 프로젝트가 이를 적용하는 방법
MongoDB Queryable Encryption은 필드를 클라이언트 사이드에서 암호화된 상태로 유지하면서 서버가 암호 텍스트를 쿼리할 수 있도록 합니다. PSP 프로젝트는 다음과 같은 쿼리 유형을 사용합니다.
동등 (생산): PCI DSS 범위에 적용되는 조회 키를 검색할 수 있는 모드입니다. 드라이버는 쿼리 값을 암호화하고 암호화된 인덱스와 일치시키므로 서버는 필드를 암호화 해제하지 않습니다. 이 기능은 사기 분석가가 일반 텍스트를 노출하지 않고 이메일, 전화 또는 계정 참조를 통해 기록을 찾을 수 있도록 합니다.
쿼리 없음(검색 전용): 거주지 주소, 정부 식별자, 원시 게이트웨이 페이로드를 포함하여가장 민감한 필드에 대한 검색 불가능 모드입니다. 권한이 있는 클라이언트는 이러한 필드를 적시에만 암호 해독합니다.
범위 (생산): 금액 범위로 필터링하는 것과 같은 값 번위 조회에 사용됩니다. 이것은 양을 암호화된 상태로 유지합니다.
접두사, 접미사 및 부분 문자열 (공개 미리 보기): 암호화된 신원 필드에 대한 KYC 스타일 부분 일치 검색에 사용됨.
아래의 PCI DSS 범위 내 카드 및 PII 필드의 경우, 액세스 설계는 다음 범주로 축소됩니다.
필드 | 분류 | 암호화 모드 | 검색 가능한 |
|---|---|---|---|
| 계정 참조 또는 개인 식별 정보 |
| 예 |
| 계정 참조 |
| 예 |
| PII |
| 예 |
| PII |
| 예 |
| CHD |
| No |
| 높은 PII |
| No |
| 높은 PII |
| No |
| 민감한 운영 |
| No |
| 네트워크 토큰 | 평문 | 예 |
| 표시 전용 | 평문 | No |
전체 PAN ( | CHD | PSP 코어에 의해 저장되지 않음 | PSP 코어에 해당 없음 |
CVV 및 PIN | 민감한 인증 데이터 | 절대 저장되지 않음 | N/A |
가능한 경우 카드 소유자 데이터가 범위 외에 있도록 하는 설계 선택은 다음과 같습니다:
PAN 토큰화: 애플리케이션은 전체 PAN을
tok_<uuid>대리 토큰으로 대체합니다. 그리고 표시 목적으로 마지막 4자리만 유지합니다.중요 인증 데이터(SAD) 캡처 없음: 엔드포인트는 CVV 또는 PIN 같은 SAD를 절대 캡처하지 않습니다.
세분화 및 토큰화를 통한 범위 축소
일반적인 PCI DSS 관행은 카드 소유자 데이터를 필요 없는 시스템에서 제외하여 대부분의 플랫폼이 CDE 외부에 있도록 합니다. 이러한 기법은 다른 시스템에서 CDE를 분리하는 세그멘테이션과 프라이머리 계좌 번호를 전용 토큰화 보관소에 저장된 대리 토큰으로 대체하는 토큰화를 적용합니다. 세그먼테이션은 PCI DSS 요구사항이 아닙니다. 하지만 시스템을 범위 외로 제외하고 평가 비용을 줄여줍니다. 사용할 경우 문서화되어야 하며 정당하고 유효성이 검증되어야 합니다.
PSP 프로젝트는 데이터 계층에서 이러한 기술을 적용합니다.
전체 PAN은 PSP 코어에 저장되지 않습니다. 코어에는 대리 토큰, BIN 및 마지막 4자리만 저장됩니다. 대부분의 플랫폼은 카드 소유자 데이터를 보유하지 않으며 범위에서 제외됩니다. 전체 PAN은 운영 환경에서 외부에 있는 카드 발급자 하위 시스템에 속합니다. 데모에서 교체 가능한 내장 발급자 모듈이 대신하여 PAN을 자체 격리된 볼트에
QE:equality로 암호화됨 저장합니다. 이 필드는 복호화되지 않고도 정확한 검색 및 중복 감지를 위해 일치시킬 수 있습니다.PII 중앙 집중화: 이메일 또는 전화번호와 같은 식별 필드는 동의, 카드 및 트랜잭션 기록이 참조하는 단일 BIAN SD-13 주체 컬렉션에 존재합니다. 데이터 주체 삭제 요청을 보호하고 처리할 수 있는 단 한 곳.
민감한 필드는 별도의 키 계층 뒤에 있습니다:
QE:none필드는 검색 가능한QE:equality필드와는 다른 데이터 암호화 키 계층을 사용하므로 민감한 데이터와 민감하지 않은 데이터 간의 경계가 키에 의해 적용됩니다.
이것은 참조 패턴이며 인증이 아닙니다. CDE 정의 및 유효성 검사는 고객의 책임이며 평가자가 확인해야 합니다.
접근 제어가 적용된 키, 애플리케이션 코드가 아닌
DEK를 암호화 계층으로 다시 분리합니다.
Lookup 계층:
QE:equality키는 검색을 위해 인증된 모든 분석가 역할에서 사용할 수 있습니다.민감한 계층:
QE:none키는 유효하고 단기적인 에스컬레이션 토큰을 소지한 레벨 2 조사관과 읽기 전용 보안 감사관만 사용할 수 있습니다.디자인 핵심: 레벨 1 클라이언트의 암호화된 필드 맵은 민감한 키를 생략하므로 드라이버가 해당 필드를 해독할 수 없으며 암호문으로 반환합니다. 여기서는 필드 수준 액세스 제어가 애플리케이션 코드의 프로젝션이 아니라 암호화되어 있으므로, 쿼리 버그를 통한 우연한 누출 위험을 줄여줍니다. 분석가가 사례를 에스칼레이트하고 레벨 2 조사가 승인하면, 조사는 해당 요청에 대한 민감 계층 클라이언트 푸를 활성화하는 에스칼레이션 토큰을 받습니다.
솔루션 빌드
이 섹션은 솔루션을 실행하고 평가하려는 팀을 위한 배포서버 가이드입니다. 성공적인 배포서버를 위해 중요한 구성 선택, 스택을 로컬에서 실행하는 방법, 프로덕션을 위해 배포하는 방법을 다룹니다. 이 솔루션을 구현하려면 이 Github 리포지토리를 사용하세요.
전제 조건 설정
프로젝트가 다음 요구 사항을 준수하는지 확인하세요.
Node.js 20 LTS 이상.
Docker 및 Docker Compose(전체 스택을 실행하는 데 권장됨).
M10 이상의 MongoDB Atlas 클러스터. 무료 클러스터에서는 Queryable Encryption을 사용할 수 없습니다.
키 제공자(예: Amazon Web Services KMS) 또는 오프라인 개발을 위한 로컬 제공자
PSP_KMS_PROVIDER=local자동 암호화 공유 라이브러리. MongoDB Enterprise 다운로드에서 다운로드하고
MONGODB_CRYPT_SHARED_LIB_PATH를 가리킵니다. 설정되지 않은 경우 백엔드는 일반 설치 경로로 돌아갑니다.
KMS 구성
데이터베이스 설정 명령 npm run setup:db을 사용하여 MongoDB 키 볼트를 프로비저닝합니다. CMK로 래핑된 각 암호화된 필드에 DEK를 사용합니다. 이 단계는 멱등이므로 기존 키를 재사용하기 위해 안전하게 다시 실행할 수 있습니다.
프로덕션 또는 프로덕션과 유사한 배포서버의 경우 Amazon Web Services KMS와 같은 managed KMS를 사용하십시오. CMK는 조직의 자체 계정에 유지되며 MongoDB는 이에 액세스할 수 없습니다.
Amazon Web Services KMS의 경우 환경 변수를 통해 제공자를 구성합니다.
PSP_KMS_PROVIDER=awsAWS_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=localPSP_KMS_LOCAL_MASTER_KEY=<96-byte base64 key> # generate with: npm run setup:key:master로컬 제공자에는 96바이트 base64 마스터 키가 필요합니다. MongoDB Queryable Encryption은 로컬 제공자에 대해 이 크기를 예상합니다.
이벤트 버스 구성
플랫포버는 이벤트 기반입니다. 비즈니스 및 컴플라이언스 이벤트는 이벤트 버스를 통해 흐릅니다. 엔진은 EVENT_BUS_ENGINE에 의해 선택됩며, 선택에 상관없이 동일한 게시자 및 소비자 코드가 실행됩니다.
프로덕션 또는 고처리량 환경에는 Kafka를 사용하여 이벤트가 지속형이고 파티션으로 나뉘며 다른 시스템에서 소비할 수 있도록 합니다.
EVENT_BUS_ENGINE=kafkaKAFKA_BROKERS=broker1:9092,broker2:9092KAFKA_CLIENT_ID=pci-pspKAFKA_SSL=trueKAFKA_SASL_MECHANISM=plain # or scram-sha-256 / scram-sha-512KAFKA_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
Docker Compose로 로컬에서 데모 실행하기
의존성을 설치하고, 데이터베이스를 프로비저닝 및 시드한 다음 스택을 시작합니다. Docker Compose는 첫 실행을 위한 권장 방식입니다. 백엔드, PSP 포털 및 상인 앱을 자체 포함된 컨테이너화된 스택으로 시작합니다.
npm run setup # install root + backend + frontend + merchant dependenciesnpm run setup:db # create QE collections, provision DEKs and indexesnpm run setup:seed # insert synthetic BIAN demo datadocker compose up # start the full stack핫 리로드를 사용하는 로컬 개발을 위해, docker compose up 대신에 npm run dev을 사용합니다.
실행되면 서비스는 다음 위치에서 접속할 수 있습니다.
http://localhost:8080의 PSP 포털
http://localhost:8082에 있는 판매자 앱
http://localhost:8081의 백엔드 API
OpenAPI/Swagger 에서
/doc상태 확인 위치:
/api/v1/system/health
그림 4. Leafy Pay 애플리케이션 데모 사용자 인터페이스
setup:db 유효한 KMS 자격 증명이 있는 활성 M10 이상 Atlas 클러스터가 필요합니다. 데모는 합성 데이터만 사용합니다.
프로덕션 환경에 배포
프로덕션 또는 공유 환경의 경우 단일 Docker Compose 호스트 대신 Kubernetes에 배포:
npm run deploy:kube # Kubernetes deploy via tools/kube.ts# npm run deploy:docker # alternative: containerised deploy with docker compose권장되는 프로덕션 설정:
키 제공자 및 Kafka 이벤트 버스에 Amazon Web Services KMS를 사용합니다.
QE 계층별 연결 문자열 및 자격 증명을 쿠버네티스 시크릿으로 제공합니다.
TLS를 통해 클라이언트 트래픽을 종료하고 가능한 경우 비공개 엔드포인트를 통해 Atlas에 도달합니다.
AWS KMS가 적용되면 백엔드를 수평으로 확장합니다. 로컬 키 제공자에서 실행하는 동안에는 단 하나의 복제본만 유지합니다.
주요 학습 사항
처음부터 공동 책임을 고려한 설계: MongoDB Atlas의 PCI DSS 인증으로 AOC를 통해 인프라 계층을 상속 받을 수 있지만, 애플리케이션 계층은 여전히 고객의 책임입니다.
암호화 및 검색 가능성 동시 활성화: Queryable Encryption은 서버가 암호화된 PII를 해독하지 않고도 정확히 일치하는 검색을 지원하므로 PCI DSS 범위가 넓어지는 경향이 있는 '조사를 위한 해독'이라는 절충안을 완화할 수 있습니다.
코드뿐만 아니라 키로 액세스 제어 시행: 계층별 DEK 모델은 필드 수준의 액세스를 암호화합니다. 권한이 낮은 클라이언트는 민감한 필드를 복호화할 수 없으므로 쿼리 버그로 인해 필드가 유출될 가능성이 줄어듭니다.
데이터 보호 전 범위 축소: PAN 토큰화 및 마스킹된 마지막 4자리만 저장하면 대부분의 시스템을 카드 소유자 데이터 범위 밖에서 유지할 수 있습니다. 범위 외 데이터는 암호화되었지만 여전히 범위 내에 있는 데이터보다 더 적은 제어가 필요하므로 범위 축소는 감사 표면을 줄입니다.
키보다 오래 지속되도록 감사 추적을 설계합니다: 추가 전용 액세스 로그를 암호화되지 않은 상태로 유지하고 설명하는 데이터와 분리하여 키 순환 중에도 읽을 수 있도록 하고 PCI DSS에서 요구하는 액세스 로깅 및 모니터링을 지원합니다.
작성자
- Antonio Membrides Espinosa, MongoDB