# Enclave 설치 및 실행

## 시스템 요구 사항

* 시스템/인프라 구성도

![](/files/dna0nnO882LH2caPJr3P)

* Enclave Server
  * CPU : 최소 2, 권장 4G
  * 메모리 : 최소 2G, 권장 4G
  * 스토리지 : 최소 8G, 권장 16G (도커, 컨테이너 포함)

## Enclave 서버 설치

* Enclave docker 이미지 다운로드

  * Enclave docker 이미지는 Private Registry에 있어, 관리자에게 Docker Hub Credential ID를 전달하여 권한을 받을 수 있습니다.
  * **<corporate-kr@verifyvasp.com>**&#xC73C;로 **Docker Hub ID를 전달**하여 주시면 다운로드 권한을 드리겠습니다.
  * 다운로드

  ```bash
  $ docker pull verifyvasp/enclave:v1.5.7
  ```

## Enclave 서버 환경 변수

| 환경 변수 명                                    | 기본 값       | 설명                                                                                                                                                                                                                                                                                                                 |
| ------------------------------------------ | ---------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| VEGA\_SERVER\_PORT                         | 21117      | Enclave 서버의 포트 번호.                                                                                                                                                                                                                                                                                                 |
| VEGA\_ENCLAVE\_PUBLIC\_ENDPOINT            |            | <p>VV central 서버에서 접근할 수 있는 enclave 서버의 공개 엔드포인트 URL. 반드시 HTTPS 프로토콜 사용해야 한다.</p><p>예) “<https://api.vasp.com/enclave”></p>                                                                                                                                                                                        |
| VEGA\_ALLIANCE\_ACCESS\_KEY                |            | accessKey part of the API-Key                                                                                                                                                                                                                                                                                      |
| VEGA\_ALLIANCE\_SECRET\_KEY                |            | secretKey part of the API-Key                                                                                                                                                                                                                                                                                      |
| VEGA\_DATABASE\_CLIENT                     | mysql2     | <p>데이터베이스의 종류.</p><p>데이터베이스 클라이언트에 맞는 값을 기입하면 된다. pg, mysql, mysql2, oracledb, mssql 값을 사용할 수 있다.</p>                                                                                                                                                                                                              |
| VEGA\_DATABASE\_USERNAME                   |            | Database user name                                                                                                                                                                                                                                                                                                 |
| VEGA\_DATABASE\_PASSWORD                   |            | Database password                                                                                                                                                                                                                                                                                                  |
| VEGA\_DATABASE\_HOST                       |            | Address to access database                                                                                                                                                                                                                                                                                         |
| VEGA\_DATABASE\_PORT                       | 3306       | Port number to access database                                                                                                                                                                                                                                                                                     |
| VEGA\_DATABASE\_DB                         | verifyvasp | Database name that enclave server uses                                                                                                                                                                                                                                                                             |
| VEGA\_DATABASE\_SEARCH\_PATH               | enclave    | Custom schema name for PostgreSQL                                                                                                                                                                                                                                                                                  |
| VEGA\_DATABASE\_POOL\_MIN                  | 0          | Minimum value of database connection pool                                                                                                                                                                                                                                                                          |
| VEGA\_DATABASE\_POOL\_MAX                  | 5          | Maximum value of database connection pool                                                                                                                                                                                                                                                                          |
| VEGA\_DATABASE\_SSL                        |            | 데이터베이스의 ssl 연결을 사용할지 여부 (true or false)                                                                                                                                                                                                                                                                            |
| VEGA\_DATABASE\_SSL\_CA                    |            | 서버 인증서를 검증하기 위한 인증기관(CA)의 인증서 파일 경로                                                                                                                                                                                                                                                                                |
| VEGA\_DATABASE\_SSL\_KEY                   |            | ssl 연결에 사용할 클라이언트 인증서 개인키 파일 경로                                                                                                                                                                                                                                                                                    |
| VEGA\_DATABASE\_SSL\_CERT                  |            | ssl 연결에 사용할 클라이언트 공개 인증서 파일 경로                                                                                                                                                                                                                                                                                     |
| VEGA\_DATABASE\_SSL\_CAPATH                |            | ca 인증서들이 저장되어 있는 디렉토리 경로                                                                                                                                                                                                                                                                                           |
| VEGA\_DATABASE\_SSL\_CIPHER                |            | 클라이언트와 서버간 사용할 수 있는 암호화 알고리즘을 지정                                                                                                                                                                                                                                                                                   |
| VEGA\_DATABASE\_SSL\_REJECT\_UNAUTHORIZED  |            | 서버의 인증서가 신뢰되지 않더라도 ssl 연결을 허용할지 여부 (true or false) pool                                                                                                                                                                                                                                                            |
| VEGA\_VERIFICATION\_API\_PATH              |            | 사용자 검증 API 엔드포인트 URL.                                                                                                                                                                                                                                                                                              |
| VEGA\_VERIFICATION\_ACCOUNT\_API\_PATH     |            | 사용자 계정 (지갑 주소 및 수취인 이름) 검증 API 엔드포인트 URL.                                                                                                                                                                                                                                                                          |
| VEGA\_VERIFICATION\_TRANSACTION\_API\_PATH |            | 트랜잭션 처리 상태 조회 API 엔드포인트 URL.                                                                                                                                                                                                                                                                                       |
| VEGA\_VERIFICATION\_CALLBACK\_API\_PATH    |            | 비동기 처리 결과를 받을 Callback API 엔드포인트 URL.                                                                                                                                                                                                                                                                              |
| VEGA\_VERIFICATION\_AUTHORIZATION\_TOKEN   |            | VASP 백엔드로 API를 호출할 때 사용할 인증 토큰. Enclave 서버가 VASP 백엔드로 API를 호출할 때, 헤더로 인증 토큰을 전달한다.                                                                                                                                                                                                                                 |
| VEGA\_VERIFICATION\_AUTHORIZATION\_KEY     |            | VASP 백엔드로 API를 호출할 때 인증 토큰을 전달할 헤더 키값. 설정하지 않으면 `Authorization` 헤더를 통해 인증 토큰을 전달한다.                                                                                                                                                                                                                                |
| VEGA\_API\_ENDPOINT                        |            | VerifyVASP central API server address. 앞서 말했듯이, 두 가지 환경을 제공하는데 목적에 맞게 사용하면 된다. 프로덕션 환경의 경우, `https://api-kr.vega-protocol.com`로 기입한다. 스테이징 환경의 경우, `https://api-kr.vega-protocol.xyz`로 기입하면 된다.                                                                                                                    |
| VEGA\_LOG\_LEVEL                           | info       | <p>Enclave 서버의 로그 레벨을 정할 수 있다.</p><p>none, error, warn, info, debug 값을 사용할 수 있다.</p>                                                                                                                                                                                                                               |
| VEGA\_PUBLIC\_KEY\_TTL                     | 1800000    | 종단 간 암호화에 사용할 상대방 VASP의 public key을 얼마나 오랫동안 캐싱 할 것인지 설정할 수 있다. 단위는 밀리초.                                                                                                                                                                                                                                           |
| VEGA\_ENCRYPTION\_KEY\_BASE64              |            | <p>개인정보 암호화에 사용할 암호화 키</p><p>아래 VEGA\_DECRYPT\_API\_ENDPOINT를 입력하지 않으면, VEGA\_ENCRYPTION\_KEY\_BASE64 환경 변수에 설정된 값이 그대로 데이터베이스의 암호화 키로 사용된다. (권장하지 않음) VEGA\_DECRYPT\_API\_ENDPOINT가 설정되어 있으면, VEGA\_ENCRYPTION\_KEY\_BASE64 환경 변숫값을 request body의 inputKey로 설정하여 해당 API를 호출하고 응답으로 받은 outputKey를 암호화 키로 사용한다.</p> |
| VEGA\_DECRYPT\_API\_ENDPOINT               |            | VEGA\_ENCRYPTION\_KEY\_BASE64에 설정된 암호화 키를 한 번 더 복호화 하기 위해 설정하는 외부 서비스 엔드포인트. HSM과 같은 암호화에 관련된 외부 서비스를 사용하기 위해 설정한다                                                                                                                                                                                                 |
| VEGA\_CHAINALYSIS\_SANCTION\_API\_KEY      |            | Chainalysis sanction API 연동 기능을 이용하여 상대방 지갑 주소를 screening 하고자 할 때, Chainalysis Sanction API Key를 설정한다.                                                                                                                                                                                                             |
| VEGA\_CHAINALYSIS\_KYT\_API\_KEY           |            | Chainalysis KYT API 연동 기능을 이용하여 상대방 지갑 주소나 자산 전송 트랜잭션의 위험 평가를 수행하고자 할 때, Chainalysis KYT API Key를 설정한다.                                                                                                                                                                                                            |
| VEGA\_REFINITIV\_WCO\_API\_KEY             |            | Refinitiv World Check One API 연동 기능을 이용하여 거래 상대방에 대한 위험 평가를 수행하고자 할 때, Refinitiv World Check One API Key를 설정한다.                                                                                                                                                                                                    |
| VEGA\_REFINITIV\_WCO\_API\_SECRET          |            | Refinitiv World Check One API 연동 기능을 이용하여 거래 상대방에 대한 위험 평가를 수행하고자 할 때, Refinitiv World Check One API Key 와 함께 발급된 Secret을 설정한다.                                                                                                                                                                                    |
| VEGA\_REFINITIV\_WCO\_GROUP\_ID            |            | Refinitiv World Check One API 연동 기능을 이용하여 거래 상대방에 대한 위험 평가를 수행하고자 할 때, Refinitiv console sit에서 생성한 group ID를 설정한다. 연동 기능을 통해 수행한 모든 screening case는 해당 그룹에 속한다.                                                                                                                                                    |

## Enclave 실행 방법

### 환경 변수를 파일에 적어 실행하는 방법.

* 환경 변수를 파일에 적어 실행합니다. (e.g. stg\_env)

```jsx
;Enclave 서버
VEGA_SERVER_PORT=21117
VEGA_ENCLAVE_PUBLIC_ENDPOINT=<Enclave Server endpoint URL>

;API Keys
VEGA_ALLIANCE_ACCESS_KEY=<issued accessKey>
VEGA_ALLIANCE_SECRET_KEY=<issued secretKey>

;DB Client
VEGA_DATABASE_CLIENT=mysql2
VEGA_DATABASE_USERNAME=vasp
VEGA_DATABASE_PASSWORD=1234
VEGA_DATABASE_HOST=<database endpoint URL>
VEGA_DATABASE_PORT=3306
VEGA_DATABASE_DB=vega
VEGA_DATABASE_POOL_MIN=0
VEGA_DATABASE_POOL_MAX=5

;VASP API
VEGA_VERIFICATION_API_PATH=<VerifyUser API endpoint URL>
VEGA_VERIFICATION_ACCOUNT_API_PATH=<VerifyAccount API endpoint URL>
VEGA_VERIFICATION_TRANSACTION_API_PATH=<Transaction processing state querying API endpoint URL>
VEGA_VERIFICATION_CALLBACK_API_PATH=<Callback API endpoint URL>
VEGA_VERIFICATION_AUTHORIZATION_TOKEN=<Auth Token>
VEGA_VERIFICATION_AUTHORIZATION_KEY=<Auth Token Header Key>

;VerifyVASP Central Server URL
VEGA_API_ENDPOINT=https://api-kr.vega-protocol.xyz

;Log
VEGA_LOG_LEVEL=info

;DB Encryption Key
VEGA_DECRYPT_API_ENDPOINT=<HSM URL>
VEGA_ENCRYPTION_KEY_BASE64=<Public Key on base64>

;Caching
VEGA_PUBLIC_KEY_TTL=1800000

;Risk Assessment
VEGA_CHAINALYSIS_SANCTION_API_KEY=<Chainalysis Public Sanction API Key>
VEGA_CHAINALYSIS_KYT_API_KEY=<Chainalysis KYT API Key>
VEGA_REFINITIV_WCO_API_KEY=<Refinitiv World Check One API Key>
VEGA_REFINITIV_WCO_API_SECRET=<Refinitiv World Check One API Secret>
VEGA_REFINITIV_WCO_GROUP_ID=<Refinitiv World Check One Group ID>
```

* 실행

```bash
$ docker run -d -p 21117:21117 --env-file=<환경 변수 파일 이름> --name=enclave verifyvasp/enclave:v1.5.7
```

### 환경 변수를 커맨드 명령어 직접 입력하여 실행하는 방법.

```bash
$ docker run -d -p 21117:21117 \\\\
-e VEGA_SERVER_PORT=21117 \\\\
-e VEGA_ENCLAVE_PUBLIC_ENDPOINT=<Enclave Server endpoint URL> \\\\
-e VEGA_ALLIANCE_ACCESS_KEY=<issued accessKey> \\\\
-e VEGA_ALLIANCE_SECRET_KEY=<issued secretKey> \\\\
-e VEGA_DATABASE_USERNAME=vasp \\\\
-e VEGA_DATABASE_PASSWORD=1234 \\\\
-e VEGA_DATABASE_HOST=<database endpoint URL> \\\\
-e VEGA_DATABASE_PORT=3306 \\\\
-e VEGA_DATABASE_DB=vega \\\\
-e VEGA_VERIFICATION_API_PATH=<VerifyUser API endpoint URL> \\\\
-e VEGA_VERIFICATION_ACCOUNT_API_PATH=<VerifyAccount API endpoint URL> \\\\
-e VEGA_VERIFICATION_TRANSACTION_API_PATH=<Transaction processing state querying API endpoint URL> \\\\
-e VEGA_VERIFICATION_CALLBACK_API_PATH=<Callback API endpoint URL> \\\\
-e VEGA_VERIFICATION_AUTHORIZATION_TOKEN=<Auth Token> \\\\
-e VEGA_VERIFICATION_AUTHORIZATION_KEY=<Auth Token Header Key> \\\\
-e VEGA_API_ENDPOINT=https://api-kr.vega-protocol.xyz \\\\
-e VEGA_LOG_LEVEL=info \\\\
-e VEGA_PUBLIC_KEY_TTL=1800000 \\\\
-e VEGA_DECRYPT_API_ENDPOINT=<HSM URL> \\\\
-e VEGA_ENCRYPTION_KEY_BASE64=<Public Key on base64> \\\\
-e VEGA_CHAINALYSIS_SANCTION_API_KEY=<Chainalysis Public Sanction API Key> \\\\
-e VEGA_CHAINALYSIS_KYT_API_KEY=<Chainalysis KYT API Key> \\\\
-e VEGA_REFINITIV_WCO_API_KEY=<Refinitiv World Check One API Key> \\\\
-e VEGA_REFINITIV_WCO_API_SECRET=<Refinitiv World Check One API Secret> \\\\
-e VEGA_REFINITIV_WCO_GROUP_ID=<Refinitiv World Check One Group ID> \\\\
verifyvasp/enclave:v1.5.7
```

## Enclave 서버 기동

### Enclave 서버 기동 및 기동 여부 확인

* enclave 서버가 완전히 잘 떴는지 확인하는 방법
  * docker log를 봤을 때 “Listening port at 21117” 와 같이 설정한 포트 번호로 listening 하고 있다는 메시지가 보여야 합니다.
  * (단, 뒤이어 다른 에러 로그가 없어야 합니다.)

### Enclave 서버 헬스 체크

* \<enclave endpoint>/healthcheck 경로로 GET 호출합니다.
* VV central 서버에서 주기적으로 (5\~10) 초에 한번 각 VASP enclave 서버의 health를 체크하고 있습니다.

### Enclave 서버 재기동

* Enclave docker가 동작을 멈추면 재기동 해야 합니다.
* 또는, Enclave docker log에 다음과 같은 로그가 찍히면 재기동 해야 합니다.
  * “Unhandled Rejection detect: \<error message>”
  * “Uncaught Exception detect: \<error message>”


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs-kr.verifyvasp.com/getting-started/install-and-run-enclave-server.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
