From 4826ae523de86ed28e26e76c7098702947abd4f3 Mon Sep 17 00:00:00 2001 From: JK Date: Wed, 18 Feb 2026 19:07:17 +0900 Subject: [PATCH 1/4] =?UTF-8?q?confluence-mdx:=20reverse-sync=20=ED=85=8C?= =?UTF-8?q?=EC=8A=A4=ED=8A=B8=20=ED=94=BD=EC=8A=A4=EC=B2=98=2010=EA=B1=B4?= =?UTF-8?q?=20original.mdx=20=EC=9E=AC=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 엉뚱한 Confluence 페이지의 MDX가 연결되어 있던 10건의 테스트 픽스처를 올바른 page_id의 page.xhtml에서 정방향 변환하여 original.mdx를 재생성합니다. pages.yaml의 mdx_path도 올바른 경로로 수정합니다. improved.mdx는 별도 검토 후 후속 커밋으로 추가 예정입니다. Co-Authored-By: Claude Opus 4.6 --- .../reverse-sync/1177321474/original.mdx | 374 +++------ .../reverse-sync/1297383451/original.mdx | 429 +++------- .../reverse-sync/1907294209/original.mdx | 778 ++---------------- .../tests/reverse-sync/544112846/original.mdx | 204 +---- .../tests/reverse-sync/544376183/original.mdx | 207 +---- .../tests/reverse-sync/544376265/original.mdx | 66 +- .../tests/reverse-sync/544379393/original.mdx | 71 +- .../tests/reverse-sync/568852692/original.mdx | 321 +------- .../tests/reverse-sync/862093313/original.mdx | 198 +++-- .../tests/reverse-sync/920944732/original.mdx | 205 ++--- confluence-mdx/tests/reverse-sync/pages.yaml | 20 +- 11 files changed, 692 insertions(+), 2181 deletions(-) diff --git a/confluence-mdx/tests/reverse-sync/1177321474/original.mdx b/confluence-mdx/tests/reverse-sync/1177321474/original.mdx index fc2c530ee..73e552417 100644 --- a/confluence-mdx/tests/reverse-sync/1177321474/original.mdx +++ b/confluence-mdx/tests/reverse-sync/1177321474/original.mdx @@ -1,19 +1,23 @@ --- -title: '설치 가이드 - 간단한 구성' -confluenceUrl: 'https://querypie.atlassian.net/wiki/spaces/QM/pages/964952065/-' +title: '설치 가이드 - setup.v2.sh' +confluenceUrl: 'https://querypie.atlassian.net/wiki/spaces/QM/pages/1177321474/-+setup.v2.sh' --- import { Callout } from 'nextra/components' -# 설치 가이드 - 간단한 구성 +# 설치 가이드 - setup.v2.sh ## 소개 -이 설치 가이드는 하나의 서버 컴퓨터에 QueryPie ACP 서버를 설치하는 간단한 구성의 설치 방법을 안내합니다. +이 설치 가이드는 하나의 서버 컴퓨터에 QueryPie 서버를 설치하는 간단한 구성의 설치 방법을 안내합니다. 간단한 구성으로 설치하더라도, 대부분의 쿼리파이 기능을 시험해 볼 수 있습니다. -그러나, 이 설치 방식은 실제 운영 환경에서 사용하기에는 적합하지 않습니다. +이 가이드에서 안내하는 setup.v2.sh 설치 프로그램은 기존의 설치 과정을 자동으로 수행합니다. +자동화된 설치 과정은 기존의 설치 과정과 주요 부분이 동일합니다. +기존 설치 과정은 이 문서를 참조하세요: [설치 가이드 - 간단한 구성](installation-guide-simple-configuration) + +이 설치 방식은 실제 운영 환경에서 사용하기에는 적합하지 않습니다. 실제 운영 환경에 사용하기에 적합한 설치 방법은 별도로 제공되는 [QueryPie Installation Guide]를 참고하십시오. @@ -36,265 +40,141 @@ QueryPie 10.3.0 또는 이후 버전을 대상으로 하는 PoC 용도의 설치 ## 설치 과정 -### setup.sh 실행 +### setup.v2.sh 실행 -QueryPie 설치를 간편하게 수행할 수 있는 `setup.sh` 스크립트를 내려받고, 실행합니다. +QueryPie 를 설치할 리눅스 서버의 shell 에서, `setup.v2.sh` 스크립트를 내려받고, 실행합니다. setup.sh 가 실제로 수행하는 명령은 실행 과정에서 확인할 수 있습니다. -아래의 “Manual steps replacing setup.sh” 항목은 `setup.sh` 가 실행하는 명령을 옮겨 놓은 것입니다. - -QueryPie Service를 위한 docker, docker-compose 를 설치하고, docker-compose.yml 등 설정파일을 설치합니다. - - -아래에 제시된 QP_VERSION, DOWNLOAD_VERSION 은 예시입니다. -설치할 버전은 [제품 버전](../product-versions) 문서를 참조하거나, 기술지원 담당자에게 확인받으시기 바랍니다. - -```bash -# Download and run ./setup.sh with required environment variables. -curl -L https://dl.querypie.com/releases/compose/setup.sh -o setup.sh -chmod +x setup.sh -export DOWNLOAD_VERSION=10.3.x -export QP_VERSION=10.3.0 -./setup.sh - -# Grant permission of docker group -sudo usermod -aG docker $USER - -# Please logout and ssh again to run docker command. -``` - -docker 를 처음 설치한 경우, 현재 shell 이 docker group 의 권한을 아직 갖고 있지 못합니다. -logout 이후, 다시 ssh 연결하세요. - - -OS 버전이나 종류에 따라 setup.sh 가 정상적으로 실행되지 않는 경우, 아래와 같이 설치합니다. - -
-Manual steps replacing setup.sh -```bash -# Install docker -curl -fsSL https://get.docker.com -o get-docker.sh -sudo sh ./get-docker.sh -sudo systemctl start docker -sudo usermod -aG docker $USER - -# Install docker-compose -curl -SL https://dl.querypie.com/releases/bin/v2.29.7/docker-compose-linux-x86_64 -o docker-compose -chmod +x docker-compose -sudo install -m 755 docker-compose /usr/local/bin/ - -# Install docker-compose.yml and config files -# NOTE: Please use the actual version number instead of '10.3.0'. -mkdir -p querypie/10.3.0 -cd querypie/10.3.0 -curl -L https://dl.querypie.com/releases/compose/10.3.x/package.tar.gz -o package.tar.gz -tar zxvf package.tar.gz - -# Install logrotate config for docker daemon -sudo cp logrotate /etc/logrotate.d/querypie -``` -
- - -### Harbor Login - -QueryPie Docker Image 를 내려받을 수 있도록, Harbor Docker Registry 에 로그인합니다. - - -최초 설치 시 고객사 하버 계정을 발급하여 사전에 전달드립니다. - ```bash -docker login harbor.chequer.io -Username: -Password: +$ # Download setup.v2.sh and execute it. +$ bash <(curl -s https://dl.querypie.com/setup.v2.sh) ``` -아래와 같은 메시지가 나타나는 경우, Harbor 에 정상적으로 로그인된 것입니다. +다음과 같이 `setup.v2.sh` 를 파일로 저장한 후, 실행하여도 됩니다. ```bash -WARNING! Your password will be stored unencrypted in /home/ubuntu/.docker/config.json. -Configure a credential helper to remove this warning. See -https://docs.docker.com/engine/reference/commandline/login/#credential-stores - -Login Succeeded +$ curl -s https://dl.querypie.com/setup.v2.sh -o setup.v2.sh +$ bash setup.v2.sh ``` +`setup.v2.sh` 는 제조사에서 권장하는 버전을 스스로 선택하여 설치합니다. +설치 가능한 버전은 이 문서를 참조하세요: [제품 버전](../product-versions) -### compose-env 설정 - -`./setup.sh` 스크립트를 실행하면, `querypie//` 디렉토리 안에 `docker-compose.yml`, `compose-env` 등 설정 파일을 생성하게 됩니다. -이 디렉토리 안으로 이동하여, `compose-env` 라는 이름의 설정 파일을 편집합니다. - -각 환경변수에 대한 설명은 다음 문서를 참조하여 주세요: [컨테이너 환경변수](../container-environment-variables) +특정한 버전을 지정하여 설치하려는 경우, 다음과 같은 명령을 사용할 수 있습니다. ```bash -# Version of QueryPie Docker Image to run: 10.3.0 or later. -VERSION=10.3.0 - -# Common -## Secret key for encrypting communication between QueryPie client agents and QueryPie over port 9000/tcp. -## Must be exactly 32 characters in length. -## Suggested: 32-char random string via `openssl rand -hex 16` -AGENT_SECRET= - -## Secret key used to encrypt sensitive information, such as database connection strings and SSH private keys. -## This key can be any string but is immutable once set. -## Suggested: 16-char random string via `openssl rand -hex 8` -KEY_ENCRYPTION_KEY= - -# DB -## Suggested: host.docker.internal -DB_HOST= -DB_PORT=3306 -DB_CATALOG=querypie -LOG_DB_CATALOG=querypie_log -ENG_DB_CATALOG=querypie_snapshot -## Suggested: querypie -DB_USERNAME= -## Suggested: 16-char random string via `openssl rand -hex 8` -DB_PASSWORD= -DB_MAX_CONNECTION_SIZE=20 -## If you’re using AWS Aurora, use the software.amazon.jdbc.Driver instead of org.mariadb.jdbc.Driver for automatic failover handling. -DB_DRIVER_CLASS=org.mariadb.jdbc.Driver - -# Redis -## REDIS_NODES should be specified as a “Host:Port” combination. -## In CLUSTER MODE, when specifying multiple nodes, separate each address with a comma. -## Example: Host1:6379,Host2:6379,Host3:6379 -## Suggested: host.docker.internal:6379 -REDIS_NODES= -## Suggested: 16-char random string via `openssl rand -hex 8` -REDIS_PASSWORD= - -DAC_SKIP_SQL_COMMAND_RULE_FILE=skip_command_config.json -``` - - -### MySQL / Redis 구동 - -Single machine 구성에서는, 하나의 VM 내에 QueryPie MySQL, QueryPie Redis 를 Container 방식으로 실행합니다. -다음의 명령으로, MySQL, Redis 를 실행합니다. -처음 실행하는 경우, `compose-env` 파일에서 정의한 Username, Password 를 적용하여, 기본 계정을 생성하게 됩니다. +$ bash setup.v2.sh --install 10.3.4 +$ bash setup.v2.sh --upgrade 11.0.1 +$ bash setup.v2.sh --help +#### setup.v2.sh - QueryPie Installer 25.08.8, /usr/bin/bash 4.4.20(1)-release on Linux x86_64 #### +setup.v2.sh 25.08.8, the QueryPie installation script. +Usage: setup.v2.sh [options] + or setup.v2.sh [options] --install + or setup.v2.sh [options] --install-container-engine + or setup.v2.sh [options] --install-compose-package + or setup.v2.sh [options] --upgrade + or setup.v2.sh [options] --uninstall + or setup.v2.sh [options] --help + +FOR AWS AMI BUILD MAINTAINER: + or setup.v2.sh [options] --install-partially-for-ami + or setup.v2.sh [options] --resume + or setup.v2.sh [options] --verify-installation + or setup.v2.sh [options] --verify-not-installed + or setup.v2.sh [options] --populate-env + or setup.v2.sh [options] --reset-credential + +ENVIRONMENT VARIABLES: + + DOCKER_REGISTRY Default: 'docker.io/querypie/' + The Docker registry to pull images from. + You may specify a private registry such as 'myregistry.example.com/querypie/'. + Note that the trailing slash is required, if you set this variable. + Actual image names will be like 'myregistry.example.com/querypie/querypie:11.1.1'. + +OPTIONS: + --yes Assume "yes" to all prompts and run non-interactively. + -V, --version Show the version of this script. + -x, --xtrace Print commands and their arguments as they are executed. + -h, --help Show this help message. +$ +``` + +### Podman 환경에서 QueryPie 설치하기 + +`setup.v2.sh` `25.08.8` 버전부터는 Podman + Docker Compose 조합의 실행환경을 지원합니다. + +다음의 리눅스 배포본에서는 Podman + Docker Compose 조합의 실행환경을 권장합니다. + +* Red Hat Enterprise Linux 8, 9, 10 +* Rocky 8, 9 + +자세한 설치 방법은 이 문서를 참조하세요: [Podman 으로 Rootless Mode 구성하기](../prerequisites/configuring-rootless-mode-with-podman) + +### setup.v2.sh 가 자동으로 수행하는 작업 + +`setup.v2.sh` 는 다음의 주요 설치 절차를 자동으로 진행합니다. + +1. `docker-compose.yml` , `.env` 등 Compose 를 위한 설정파일을 내려 받기 + * 기존의 `compose-env` 라는 환경변수 설정 파일의 이름이 `.env` 로 바뀌었습니다. `compose-env` 는 설정파일 생성을 위한 template 으로 사용됩니다. +2. `.env` 에 환경변수 값을 설정하기 + * 각 환경변수에 대한 설명은 [컨테이너 환경변수](../container-environment-variables) 문서를 참고해주세요. +3. docker image 내려받기 + * `docker.io/querypie/` registry 에서 image 를 내려받습니다. 따라서, Harbor login 과정이 필요하지 않습니다. +4. mysql, redis container 실행하기 +5. querypie-tools container 실행하고, migration 수행하기 +6. querypie-app container 실행하기 +7. `./querypie/current` 라는 심볼릭 링크를 생성하여, 현재 작동 중인 버전을 가리킵니다. + +`setup.v2.sh` 가 querypie-app container 를 정상적으로 기동하고 나면, 다음과 같은 실행 성공 안내 메시지를 만나게 됩니다. +``` ++ docker exec querypie-app-1 readyz +######################################################################## +# # +# ██████╗ ██╗ ██╗███████╗██████╗ ██╗ ██╗██████╗ ██╗███████╗ # +# ██╔═══██╗██║ ██║██╔════╝██╔══██╗╚██╗ ██╔╝██╔══██╗██║██╔════╝ # +# ██║ ██║██║ ██║█████╗ ██████╔╝ ╚████╔╝ ██████╔╝██║█████╗ # +# ██║▄▄ ██║██║ ██║██╔══╝ ██╔══██╗ ╚██╔╝ ██╔═══╝ ██║██╔══╝ # +# ╚██████╔╝╚██████╔╝███████╗██║ ██║ ██║ ██║ ██║███████╗ # +# ╚══▀▀═╝ ╚═════╝ ╚══════╝╚═╝ ╚═╝ ╚═╝ ╚═╝ ╚═╝╚══════╝ # +# # +######################################################################## +.--------------------------------------------------------. +| 🚀 QueryPie Server has been successfully started! 🚀 | +| Timestamp in UTC: Mon Jul 28 17:04:31 UTC 2025 | +| Timestamp in KST: Tue Jul 29 02:04:31 KST 2025 | +'--------------------------------------------------------' ++ popd +~ +## Create a symbolic link 'current' pointing to 11.0.1 ++ pushd ./querypie/ +~/querypie ~ ++ rm -f current ++ ln -s 11.0.1 current ++ popd +~ +### Installation completed successfully +### Access QueryPie at http://172.31.11.201:8000 or https://172.31.11.201:8443 in your browser +### Determine the public IP address of your host machine if needed +[ec2-user@ip-172-31-11-201 ~]$ ``` -docker-compose --env-file compose-env --profile database up -d -``` -``` -docker ps - -CONTAINER ID IMAGE ... NAMES -0b8d8b9b9486 harbor.chequer.io/querypie/mysql:8.0.39 ... querypie-mysql-1 -6d96b9cdc95e harbor.chequer.io/querypie/redis:7.4.2 ... querypie-redis-1 -``` - - -### Tools 구동 - -QueryPie Tools 는 설치 과정에서 사용되는 도구입니다. -QueryPie Tools 는 QueryPie MySQL 에 Table, Procedure 등을 생성하는 기능을 제공합니다. -MySQL 의 Database Table 등은 제품의 버전에 따라 그 내용이 바뀌게 되며, Flyway 라는 오픈소스 도구를 이용해, 형상을 관리합니다. -QueryPie Tools 는 제품의 라이선스를 설치하는 기능을 제공합니다. - -QueryPie Tools 는 TCP Port 8050 에서 요청을 받아들이는 API 서버 방식으로 작동합니다. - -#### Tools 실행 -다음의 명령을 수행하여, QueryPie Tools 를 실행합니다. -이후 `docker ps` 명령으로 Container 가 정상적으로 실행 중인지 확인할 수 있습니다. `docker logs -f querypie-tools-1` 명령으로 Container 의 로그를 확인할 수 있습니다. -``` -docker-compose --env-file compose-env --profile tools up -d -``` -``` -docker ps - -CONTAINER ID IMAGE ... NAMES -6e867d744acb harbor.chequer.io/querypie/querypie-tools:10.3.0 ... querypie-tools-1 -0b8d8b9b9486 harbor.chequer.io/querypie/mysql:8.0.39 ... querypie-mysql-1 -6d96b9cdc95e harbor.chequer.io/querypie/redis:7.4.2 ... querypie-redis-1 -``` - -#### Migration 실행 - -QueryPie 가 필요로 하는 MySQL Table, Procedure 등을 생성하는 작업을, Migration 이라고 부릅니다. -다음의 명령을 수행하여, Migration 을 실행합니다. -최초 설치의 경우, 수백건의 DB Table 을 생성하는 과정에서, 1~2분 가량 시간이 소요됩니다. -``` -docker exec -it querypie-tools-1 /app/script/migrate.sh runall -``` -``` -[2025-05-20 07:43:15] QueryPie migration is started. --------------------------------------------------------------------------------- -[2025-05-20 07:43:15] QueryPie `V67.11__9.10.0.11_workflow_rule_migration.sql` is started. -[2025-05-20 07:43:18] QueryPie `V67.11__9.10.0.11_workflow_rule_migration.sql` is finished. - -... -[2025-05-20 07:44:17] QueryPie Snapshot `V5.0__10.2.8.0_oven_diary_tables_alter_json_column_type.sql` is started. -[2025-05-20 07:44:17] QueryPie Snapshot `V5.0__10.2.8.0_oven_diary_tables_alter_json_column_type.sql` is finished. -[2025-05-20 07:44:17] QueryPie Snapshot migration is finished. --------------------------------------------------------------------------------- -``` - -#### License 실행 - -QueryPie Tools 에 license 파일을 설치하는 명령을 다음과 같이 수행할 수 있습니다. `license.crt` 라는 파일 이름은 예시입니다. -기술지원 담당자에게 전달 받은 라이선스 파일의 이름을 지정하면 됩니다. -라이선스 파일은 x509 형식의 인증서 파일로서, 텍스트 파일입니다. -``` -curl -XPOST 127.0.0.1:8050/license/upload -F file=@license.crt -``` -``` -[License] Upload: Success -``` - -#### Tools 종료 - -설치를 위한 중간 과정이 완료되었기에, QueryPie Tools 를 종료합니다. -``` -docker-compose --env-file compose-env --profile tools down -``` - -### QueryPie 구동 - -QueryPie Tools 를 이용해, MySQL Database Table 을 생성하고, License 를 설치하면, 기본적인 설치 과정이 거의 완료된 것입니다. -이제는 QueryPie Server Container 를 실행하여, QueryPie 를 사용할 수 있습니다. -다음의 명령을 실행하여, QueryPie Server Container 를 실행합니다. -``` -docker-compose --env-file compose-env --profile querypie up -d -``` +### 설치 완료 -일반적인 서버 환경에서 약 1분50초~2분10초 후에 QueryPie Container 가 실행됩니다. -``` -docker ps +수고하셨습니다. +이제 QueryPie 가 작동하는 모습을 볼 수 있습니다. -CONTAINER ID IMAGE ... NAMES -69353ab980d8 harbor.chequer.io/querypie/querypie:10.3.0 ... querypie-app-1 -0b8d8b9b9486 harbor.chequer.io/querypie/mysql:8.0.39 ... querypie-mysql-1 -6d96b9cdc95e harbor.chequer.io/querypie/redis:7.4.2 ... querypie-redis-1 -``` +`setup.v2.sh` 의 실행 마지막에 보이는 `http://172.31.11.201:8000` 와 같은 URL 에 접속을 시도하여 보십시오. +이 주소는 Local PC 에서 Linux Server 로 연결하기 위한 IP Address 를 사용합니다. +네트워크 연결 구성을 참조하여, Firewall, AWS Security Group 설정 등을 변경하여야 할 수 있습니다: [시스템 아키텍처와 네트워크 접근제어](../system-architecture-and-network-access-control) -QueryPie Container 의 프로세스들이 정상적으로 기동하고 나면, Container Log 에서, 다음과 같은 실행 성공 안내 메시지를 만나게 됩니다. -``` -docker logs -f querypie-app-1 - -.... -READYZ | ######################################################################## -READYZ | # # -READYZ | # ██████╗ ██╗ ██╗███████╗██████╗ ██╗ ██╗██████╗ ██╗███████╗ # -READYZ | # ██╔═══██╗██║ ██║██╔════╝██╔══██╗╚██╗ ██╔╝██╔══██╗██║██╔════╝ # -READYZ | # ██║ ██║██║ ██║█████╗ ██████╔╝ ╚████╔╝ ██████╔╝██║█████╗ # -READYZ | # ██║▄▄ ██║██║ ██║██╔══╝ ██╔══██╗ ╚██╔╝ ██╔═══╝ ██║██╔══╝ # -READYZ | # ╚██████╔╝╚██████╔╝███████╗██║ ██║ ██║ ██║ ██║███████╗ # -READYZ | # ╚══▀▀═╝ ╚═════╝ ╚══════╝╚═╝ ╚═╝ ╚═╝ ╚═╝ ╚═╝╚══════╝ # -READYZ | # # -READYZ | ######################################################################## -READYZ | .--------------------------------------------------------. -READYZ | | 🚀 QueryPie Server has been successfully started! 🚀 | -READYZ | | Timestamp in UTC: Sun Jan 26 15:00:56 UTC 2025 | -READYZ | | Timestamp in KST: Mon Jan 27 00:00:56 KST 2025 | -READYZ | '--------------------------------------------------------' -.... -``` +### License 입력하기 -### 설치 완료 +License 파일은 웹콘솔 화면에서 입력할 수 있습니다. -수고하셨습니다. -이제 QueryPie 가 작동하는 모습을 볼 수 있습니다. +
+Enter the license in PEM format. +
+Enter the license in PEM format. +
+
## 기본 설정 절차 diff --git a/confluence-mdx/tests/reverse-sync/1297383451/original.mdx b/confluence-mdx/tests/reverse-sync/1297383451/original.mdx index a4fd672ee..f7dc180e5 100644 --- a/confluence-mdx/tests/reverse-sync/1297383451/original.mdx +++ b/confluence-mdx/tests/reverse-sync/1297383451/original.mdx @@ -1,324 +1,127 @@ --- -title: '리눅스 배포본과 Docker, Podman 지원 현황' -confluenceUrl: 'https://querypie.atlassian.net/wiki/spaces/QM/pages/1298530305/Docker+Podman' +title: 'Podman 으로 Rootless Mode 구성하기' +confluenceUrl: 'https://querypie.atlassian.net/wiki/spaces/QM/pages/1297383451/Podman+Rootless+Mode' --- -import { Callout } from 'nextra/components' - -# 리눅스 배포본과 Docker, Podman 지원 현황 - -본 문서는 QueryPie Server의 컨테이너 기반 배포 및 운영 환경 선택을 위한 기술 가이드입니다. -QueryPie Server는 Docker와 Podman 컨테이너 엔진에서 검증되었으며, 다양한 Linux 배포본에서의 호환성과 권장 구성을 분석하여 최적의 운영 환경 선택을 지원합니다. -본 문서는 시스템 아키텍트와 인프라 엔지니어가 환경 설계 시 참고할 수 있는 기술적 근거와 실무 가이드라인을 제공합니다. - -설치 방법, 검증 스크립트, 운영 절차 등은 이 문서에서 다루지 않습니다. - -* 최종 업데이트: 2025년 08월 29일 -* 검증 기준일: 2025년 08월 29일 - -### 컨테이너 엔진과 Compose - -QueryPie Server는 컨테이너 기반으로 배포·운영되며, Docker와 Podman 두 컨테이너 엔진에서 기능 검증을 완료하고 기술지원을 제공합니다. - -Docker는 널리 사용되는 컨테이너 엔진으로, 엔진 자체와 도구 체인(Compose 등)을 포함하며, 커뮤니티 무료 버전과 상용 버전(Desktop)으로 제공됩니다. -Podman은 Docker와 유사한 명령체계와 워크플로우를 제공하면서도 루트리스(rootless) 실행을 기본으로 지원하는 오픈소스 컨테이너 엔진으로, 특히 RHEL 계열에서 표준으로 권장됩니다. - -Docker 와 Podman 은 Compose 와 함께 사용하여, 여러 Container 를 실행하고 관리할 수 있습니다. -Compose 는 단일 호스트에서 여러 Container 를 실행하여 소프트웨어를 구동, 운영하는데 적합합니다. -Compose 의 구현체로 Docker Compose 가 널리 사용되며, Docker, Podman, 모두 Docker Compose 와 함께 사용할 수 있습니다. -Docker Compose 는 하나의 실행파일로 구성되어 있고, 다른 패키지에 의존성이 없어, 설치가 간편합니다. -Podman 의 경우, Python 으로 구현된 Podman Compose 라는 구현체가 제공되기도 합니다. - -#### 권장하는 컨테이너 엔진과 Compose 구성 - -QueryPie는 운영 환경에서 **Docker + Docker Compose** 조합 또는 **Podman + Docker Compose** 조합을 1차 권장합니다. -권장 최소 버전은 Docker Engine 23.0 (23년 2월 출시) 이상, Docker Compose 2.29.0 (24년 7월 출시) 이상, Podman 4.9.0 (24년 1월 출시) 이상으로 검증되어 있습니다. - -Podman + Podman Compose 조합은 기술적으로 지원되나, Python 의존성과 추가 환경 설정이 필요하고 Docker Compose 대비 기능 제약이 있어 2차 권장 구성으로 분류됩니다. - - -리눅스 배포본에 따라, Docker, Podman 가운데 한가지만 지원되는 경우가 있습니다. -이에 따라, 두 컨테이너 엔진을 상황에 따라 적절히 선택하여 사용하여야 합니다. -특히, 많이 사용되는 Amazon Linux 2023 에서 Podman 을 지원하지 않는다는 것, 25년 출시된 Red Hat Enterprise Linux 10 에서 Docker 를 지원하지 않는다는 것에 유의하여 주세요. - - -### 리눅스 배포본의 현황 요약표 - -아래 표는 QueryPie 에서 공식적으로 기술지원을 제공하는 배포판과 Docker, Podman 지원 현황을 정리한 것입니다. -Docker, Podman 지원 현황은 QueryPie 를 실행, 관리하기 위한 버전을 제공되는지 여부를 기준으로 합니다. - -Podman 3.x 의 구버전, 신뢰할 수 있는 패키지가 제공되지 않는 경우, QueryPie 팀으로부터 기술지원되지 않으며, QueryPie 를 사용할 수 없는 조건이라고 분류합니다. - - ------ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-**배포판 / 버전** - -**출시일** - -**기술지원 종료일 (EOL/EOS)** - -**Docker, Podman 지원** -
-**Amazon Linux 2** - -2018년 6월 - -2026년 6월 30일 - -* Docker 기본 지원 -* Podman 지원 없음 ➖ -
-**Amazon Linux 2023** - -2023년 3월 - -Standard Support: 2027년 6월, Maintenance Support: 2029년 6월까지 - -* Docker 기본 지원 -* Podman 지원 없음 ➖ -
-**Red Hat Enterprise Linux 8** - -2019년 5월 - -Full Support: 2024년 5월,
Maintenance: 2029년까지 -
-* Podman 기본 지원 -* Docker 가능 -
-**Red Hat Enterprise Linux 9** - -2022년 5월 - -약 10년 (2032년까지) - -* Podman 기본 지원 -* Docker 가능 -
-**Red Hat Enterprise Linux 10** - -2025년 5월 - -약 10년 (2035년까지) - -* Podman 기본 지원 -* Docker 지원 없음 ➖ -
-**Ubuntu 22.04 LTS (Jammy)** - -2022년 4월 - -2027년 4월 (ESM 적용 시 최대 2032년) - -* Podman 사용 불가 ➖ 구버전 3.4.4 -* Docker 기본 지원 -
-**Ubuntu 24.04 LTS (Noble)** - -2024년 4월 - -2029년 4월 (ESM 적용 시 2036년) - -* Podman 기본 지원 -* Docker 기본 지원 -
-**Rocky Linux 8** - -2021년 6월 - -RHEL 8 과 동일 (2029년까지) - -RHEL 8 바이너리 호환 -
-**Rocky Linux 9** - -2022년 7월 - -RHEL 9 과 동일 (2032년까지) - -RHEL 9 바이너리 호환 -
-**CentOS Stream** - -2021년 이후 - -롤링 릴리스, EOS 없음 - -차기 RHEL 미리 반영, 안정성 낮음 -
- -### 리눅스 배포본의 특징 - -QueryPie 팀에서 기술지원을 제공하는 리눅스 배포본의 현황을 설명합니다. - -#### Amazon Linux 2 (2018년 6월 출시) - -Amazon Linux 2는 RHEL 7 계열을 기반으로 AWS가 EC2에 최적화하여 제공하는 배포판으로, 장기간의 안정적 운영을 위해 널리 사용되어왔습니다. -AWS의 공식 지원 정책에 따르면 Amazon Linux 2의 공식 보안·버그 패치 제공은 2026-06-30까지로 예정되어 있어(출처: [Amazon Linux 2 FAQs](https://aws.amazon.com/amazon-linux-2/faqs/)), 새로운 신규 서버 구축이나 장기 운영을 계획 중이라면 수명 주기가 더 긴 Amazon Linux 2023 또는 Ubuntu/RHEL 계열로의 이전을 검토하시기 바랍니다. - -컨테이너 관점에서 Amazon Linux 2는 amazon-linux-extras를 통해 Docker를 손쉽게 설치·운영할 수 있게 설계되어 있으며, 이 경로가 AWS 문서에서 일관되게 안내되는 표준 접근법입니다. -반면 Podman은 기본 저장소에서 제공되지 않으며, 제3자 리포지터리(COPR 등)를 통해 설치하는 비공식 경로가 존재하더라도 AWS의 패키지 관리·지원 체계 밖에 있기 때문에, 운영 체계와 지원 정책의 일관성을 중시하는 서버 워크로드에서는 Docker 사용이 현실적입니다. -Compose는 Docker Compose 플러그인(v2)을 함께 배포·업데이트할 수 있어, 단일 호스트 상의 멀티 컨테이너 서비스를 안정적으로 관리할 수 있습니다. - -* Docker, Docker Compose 조합을 사용하기에 적합합니다. -* **Podman 은 지원되지 않습니다** . - -#### Amazon Linux 2023 (2023년 3월 출시) - -Amazon Linux 2023(AL2023)은 Fedora를 상류(upstream)로 채택해 주기적 릴리스, 지원 일정을 명확히 한 차세대 AWS 리눅스입니다. -GA는 2023년 3월에 이뤄졌고, 표준 지원(Standard Support)은 2027년 6월 30일, 유지보수 지원(Maintenance Support)은 2029년 6월 30일까지 제공되는 5년 지원 모델을 따릅니다(출처: [Amazon Linux 2023 FAQs](https://aws.amazon.com/linux/amazon-linux-2023/faqs/)). - -AL2023은 패키지 관리가 dnf로 전환되며, Docker는 공식 문서에 따라 표준 절차로 설치·운영됩니다. -AWS가 제공하는 설치 가이드에서도 Docker 중심의 운영 모델이 제시되며, 현재 공식 저장소에 Podman 패키지는 포함되어 있지 않습니다. -결과적으로, QueryPie Server를 EC2에 배치한다면 AL2023에서는 Docker + Docker Compose 조합이 가장 간결하고 문서화가 잘 된 경로입니다. - -* Docker, Docker Compose 조합을 사용하기에 적합합니다. Amazon Linux 2023 의 dnf 패키지를 설치하는 경우, **Docker 25.0.8** 버전이 기본 설치됩니다. -* **Podman 은 지원되지 않습니다.** Amazon Linux 2023 은 Podman 설치가 어렵고, 검증된 설치 패키지가 제공되지 않습니다. 상당수 이용자가 Podman 을 배포본에 추가하기를 요청하였으나, AWS 에서 이를 완곡히 거절하고, Podman 에 대한 기술지원을 하지 않는 것으로 보입니다. - -#### Red Hat Enterprise Linux 8 (2019년 5월 출시) - -RHEL 8은 2019년 5월 7일 공개되었고, Full Support는 2024년 5월 31일에 종료되었으며, Maintenance Support는 2029년 5월 31일까지, 선택 시 Extended Life Cycle Support(ELS)는 2032년 5월 31일까지 이어집니다. -기업 현장에서 가장 널리 배포된 EL8 생태계의 중심으로, Red Hat은 Docker 엔진 대신 Podman을 기본 컨테이너 엔진으로 제공합니다. -Podman은 Docker와 호환되는 CLI와 REST API(패키지 podman-docker 등)를 통해 많은 도구가 기대하는 docker 명령·소켓과의 호환성을 제공합니다. -Docker 자체는 Red Hat의 기본 채널에서 제공·지원하지 않지만, Docker 공식 리포지터리를 추가해 설치하는 방식이 현장에서 사용됩니다. -Compose 측면에서는 Docker Compose(v2 플러그인)를 Docker 엔진과 함께 쓰거나, Podman과의 호환 계층을 사용해 docker-compose 기반 배포 파일을 그대로 활용하는 방식이 검증되어 있습니다. - -* Podman, Docker Compose 조합을 사용하기에 적합합니다. **Podman 4.9.4** 버전이 설치됩니다. -* Docker, Docker Compose 조합을 사용하기에 적합합니다. **Docker 최신 버전의 패키지가 제공** 됩니다. 25년 8월 현재 **28.3.3** 버전이 제공됩니다. - * [https://docs.docker.com/engine/install/rhel/](https://docs.docker.com/engine/install/rhel/) - -#### Red Hat Enterprise Linux 9 (2022년 5월 출시) - -RHEL 9는 2022년 5월 18일 릴리스되었고, Full Support는 2027년 5월 31일, Maintenance Support는 2032년 5월 31일, 선택 ELS는 2035년 5월 31일까지 제공됩니다. -운영 모델은 RHEL 8과 동일하게 Podman 중심이며, 루트리스 모드와 시스템 통합(systemd 유저 서비스 등)에서 성숙도가 높아졌습니다. -QueryPie Server는 Podman을 표준 엔진으로 사용해도 무리가 없고, podman-docker 호환 패키지를 더하면 기존 docker-compose.yml 자산을 큰 변경 없이 재사용할 수 있습니다. -Docker CE는 공식 RHEL 리포지터리의 지원 범위 밖이지만, Docker 측 리포지터리를 추가해 설치·운영하는 방식이 실무에서 널리 쓰입니다. - -* Podman, Docker Compose 조합을 사용하기에 적합합니다. **Podman 4.9.4** 버전이 설치됩니다. -* Docker, Docker Compose 조합을 사용하기에 적합합니다. **Docker 최신 버전의 패키지가 제공** 됩니다. 25년 8월 현재 **28.3.3** 버전이 제공됩니다. - * [https://docs.docker.com/engine/install/rhel/](https://docs.docker.com/engine/install/rhel/) - -#### Red Hat Enterprise Linux 10 (2025년 5월 출시) - -RHEL 10은 2025년 5월 20일에 공개되었으며, Red Hat의 표준 정책에 따라 Full Support는 2030년 5월 31일, Maintenance Support는 2035년 5월 31일, 선택 ELS는 2038년 5월 31일까지 이어지는 로드맵을 가집니다. -RHEL 10에서는 Docker 엔진과 docker 명령이 기본 제공에서 제거되었고, Red Hat의 공식 지원도 Podman에 한정됩니다. -Docker를 외부 업스트림에서 설치하는 것은 기술적으로 가능하더라도 RHEL 10 자체의 지원 범주 밖이며, Red Hat 문서 역시 이를 명시합니다. -따라서 RHEL 10에서 QueryPie Server를 운영할 때는 Podman을 1순위로 선택하고, Compose 파일은 Docker Compose 구문을 유지하되 Podman의 Docker API 호환 레이어를 통해 적용하는 구성이 가장 현실적입니다. - -* Podman, Docker Compose 조합을 사용하기에 적합합니다. **Podman 5.4.0** 버전이 설치됩니다. -* **Docker 패키지가 제공되지 않습니다** . (2025년 8월 현재) CentOS Stream 10 에서 Docker 패키지가 준비되어 있으나, 설치하여 실행할 때, 오류가 발생합니다. - -#### Ubuntu 22.04 LTS Jammy Jellyfish - -Ubuntu 22.04 LTS는 2022년 4월 21일 공개되었고, 표준 지원은 2027년 4월까지, Extended Security Maintenance(ESM)는 2032년 4월까지 제공됩니다. -Canonical은 서버·클라우드 환경에서 Docker와 Podman 모두를 공식 문서·저장소를 통해 제공하며, Docker는 Docker 공식 APT 리포지터리 또는 Ubuntu의 docker.io/플러그인 패키지로, Podman은 배포본 기본 저장소에서 설치할 수 있습니다. -Compose는 Docker Compose v2 플러그인으로 가장 수월하며, Podman 환경에서는 Docker API 호환을 통해 기존 Compose 파일을 재사용하는 구성이 실무에서 흔합니다. -Ubuntu 특유의 폭넓은 커뮤니티 생태계와 빠른 보안 패치 제공은 QueryPie Server 같은 컨테이너형 애플리케이션의 안정 운용에 유리합니다. - -* **Podman 을 사용하기에 적합하지 않습니다** . 기본 저장소에서 제공되는 Podman 3.4.4 버전은 Docker Compose와 호환되지 않아, 권장하지 않습니다. -* Docker, Docker Compose 조합을 사용하기에 적합합니다. **Docker 최신 버전의 패키지가 제공** 됩니다. 25년 8월 현재 **28.3.3** 버전이 제공됩니다. - * [https://docs.docker.com/engine/install/ubuntu/](https://docs.docker.com/engine/install/ubuntu/) - -#### Ubuntu 24.04 LTS Noble Numbat - -Ubuntu 24.04 LTS는 2024년 4월 25일 공개되었으며, 표준 지원은 2029년 4월까지, ESM은 2036년 4월까지 이어집니다. -최신 LTS답게 컨테이너 관련 툴체인의 버전이 상향되어 있으며, Docker는 Docker 공식 리포지터리와 Canonical 패키지 모두에서 최신 Compose 플러그인과 함께 배치할 수 있습니다. -Podman 역시 기본 저장소에서 제공되어 루트리스 실행과 사용자별 컨테이너 관리가 자연스럽고, CI/CD에서의 비대화형 실행이 매끄럽습니다. -장기 관점의 서버 표준화가 필요하다면, 24.04 LTS는 22.04 LTS 대비 더 긴 보안 업데이트 창구와 최신 커널·툴체인 기반을 동시에 확보할 수 있다는 점에서 장점이 있습니다. +# Podman 으로 Rootless Mode 구성하기 -* Podman, Docker Compose 조합을 사용하기에 적합합니다. **Podman 4.9.3** 버전이 설치됩니다. -* Docker, Docker Compose 조합을 사용하기에 적합합니다. **Docker 최신 버전의 패키지가 제공** 됩니다. 25년 8월 현재 **28.3.3** 버전이 제공됩니다. - * [https://docs.docker.com/engine/install/ubuntu/](https://docs.docker.com/engine/install/ubuntu/) +Podman 은 Docker 를 대체할 수 있는 컨테이너 엔진입니다. +QueryPie 는 Docker 와 Podman, 두 컨테이너 엔진 환경을 모두 지원합니다. +Podman 은 기본적인 설치 구성에서 Rootless Mode 로 작동합니다. +이에 따라, 고객사의 보안정책에 따라 Rootless Mode 환경을 구성해야 하는 경우, Podman 으로 구현하는 것을 권장합니다. -#### Rocky Linux 9 (2022년 7월 출시) +### Podman 을 간편하게 설치하기 -Rocky Linux 9 역시 RHEL 9과 동형의 릴리스 정책을 따르며, 유지보수 지원은 2032년 5월 31일까지 제공됩니다. -기본 컨테이너 스택은 Podman이며, 루트리스 실행과 cgroup, systemd 연계가 성숙해 복잡한 다중 컨테이너 서비스를 운영하기 용이합니다. -Docker CE는 Rocky 9에서도 공식(Red Hat) 채널이 아닌 Docker의 자체 리포지터리를 통해 설치하는 모델이 일반적이고, Compose 플러그인을 더해 배포 자동화를 단순화할 수 있습니다. -QueryPie Server는 두 엔진 모두에서 동등한 품질로 동작하도록 검증되었습니다. +setup.v2.sh 를 이용하면, Podman 을 간편하게 설치할 수 있습니다. +setup.v2.sh 가 자동으로 설치하는 Podman 은 Rootless Mode 를 기본으로 적용합니다. -* Podman, Docker Compose 조합을 사용하기에 적합합니다. **Podman 4.9.4** 버전이 설치됩니다. -* Docker, Docker Compose 조합을 사용하기에 적합합니다. **Docker 최신 버전의 패키지가 제공** 됩니다. 25년 8월 현재 **28.3.3** 버전이 제공됩니다. - * [https://docs.docker.com/engine/install/rhel/](https://docs.docker.com/engine/install/rhel/) +setup.v2.sh 를 이용하여 Podman 을 설치하는 방법은 다음과 같습니다. +```bash +$ bash <(curl -s https://dl.querypie.com/setup.v2.sh) --install-container-engine +``` -#### CentOS Stream (2021년 이후) +이 명령은 해당 서버의 리눅스 배포본을 자동으로 탐지하고, Podman이 원활하게 지원되는 경우 Podman을 설치합니다. +Podman을 설치하는 리눅스 배포본은 다음과 같습니다. -기존 CentOS 의 대체 배포판으로, RHEL 의 차기 릴리스를 미리 반영하는 롤링 업데이트 방식을 채택하고 있습니다. -안정성 면에서 RHEL 및 Amazon Linux 대비 변동성이 있으므로, 장기 운영보다는 개발 및 테스트 환경에 적합합니다. -QueryPie 운영 환경에 적합하지 않기에, 사용하지 않는 것을 권장합니다. +* Red Hat Enterprise Linux 8, 9, 10 +* Rocky 8, 9 +* Ubuntu 24.04 LTS + +Podman을 설치하지 않고 Docker를 설치하는 리눅스 배포본은 다음과 같습니다. +아래의 리눅스 배포본에서 Docker를 사용해야 하는 이유에 대해서는 이 문서를 참조하세요: [리눅스 배포본과 Docker, Podman 지원 현황](linux-distribution-and-docker-podman-support-status) + +* Amazon Linux 2, Amazon Linux 2023 +* Ubuntu 22.04 LTS + +### Rootless Mode Podman 을 수작업으로 설치하기 + +Red Hat Enterprise Linux, Rocky 에서는 다음 명령으로 Podman 을 수작업으로 직접 설치할 수 있습니다. +```bash +$ sudo dnf -y -q --best install podman podman-plugins podman-manpages podman-docker +$ systemctl --user enable --now podman.socket +``` + +`systemctl` 명령으로 `podman.socket` 서비스를 활성화해야 한다는 것에 주의해 주세요. `podman.socket` 서비스를 활성화해야 Docker Compose와 Podman을 함께 사용할 수 있습니다. + +`systemctl` 명령에서, `--user` 옵션을 사용하는 경우, Rootless Mode 로 설치됩니다. `--user` 옵션을 사용하지 않는 경우, Rootful Mode 로 설치됩니다. + +Ubuntu 24.04 LTS 에서는 다음 명령으로 Podman 을 수작업으로 직접 설치할 수 있습니다. +```bash +$ sudo apt -qq update +$ sudo apt-get -y -qq install podman podman-docker +$ systemctl --user enable --now podman.socket +``` + +### Rootless Mode Podman 에서 QueryPie 설치하기 + +setup.v2.sh 를 이용하면, Rootless Mode Podman 환경에서 QueryPie 를 간편하게 설치할 수 있습니다. + +QueryPie 를 처음 설치하는 경우, Compose package 를 설치할 리눅스 계정의 홈디렉토리에서, 다음의 명령을 수행합니다. +setup.v2.sh 가 권장하는 버전의 QueryPie 가 자동으로 설치됩니다. +```bash +$ bash <(curl -s https://dl.querypie.com/setup.v2.sh) +``` + +QueryPie 버전을 지정하여 설치하려는 경우, 다음과 같이 버전을 명시할 수 있습니다. +```bash +$ bash <(curl -s https://dl.querypie.com/setup.v2.sh) --install 11.0.1 +``` + +위의 명령을 실행하면, Compose 를 위한 package.tar.gz 설정, `.env` 환경변수 설정, Container 이미지 내려받기, Migration 실행하기, Container 실행하기, Rootless Mode Podman 을 위한 systemd service 등록 등 전체 설치 과정이 자동으로 수행됩니다. + +#### 리눅스 서버 재시작과 systemd service 등록 + +Rootless Mode Podman 의 경우, 리눅스 서버가 재시작하는 경우, 추가적인 설정을 하지 않으면, Container 가 자동으로 실행되지 않습니다. +이는 Rootless Mode Podman 의 특성입니다. + +리눅스 서버 재시작 때, Container 가 자동으로 실행되려면, `podman compose up -d` 명령을 수행하는 systemd service 를 등록하고 활성화하여야 합니다. +QueryPie 를 위한 systemd service 파일은 Compose 를 위한 package.tar.gz 에서 기본으로 제공됩니다. + +`setup.v2.sh` 를 이용하여 QueryPie 를 설치한 경우, 이러한 systemd service 등록, 활성화 과정을 자동으로 수행합니다. +따라서, 이용자가 이 부분을 직접 실행하지 않아도 됩니다. + +그러나, QueryPie 설치, 운영을 원활히 수행하려면 systemd service 등록, 활성화 과정에 대한 이해가 필요하고, 직접 systemd service를 제어하여 문제를 해결할 수 있어야 합니다. + +먼저, systemd user mode 의 service 가 자동으로 활성화되는 시스템 설정이 필요합니다. `loginctl` 명령으로 이 이용자에 대해 linger mode 를 켜야 합니다. +이 설정을 적용하지 않으면, 이용자가 리눅스 시스템에 로그인한 이후에야, systemd service 가 작동합니다. +이용자가 리눅스 서버에 로그인하지 않은 상태에서 자동으로 systemd service를 활성화하기 위해 linger mode를 켜 주세요. +```bash +$ sudo loginctl enable-linger $USER +``` + +systemd service 파일을 가리키는 심볼릭 링크를 `$HOME/.config/systemd/user/` 아래에 생성합니다. +```bash +$ systemctl --user link querypie/current/systemd/podman-querypie-database.service +Created symlink /home/ec2-user/.config/systemd/user/podman-querypie-database.service → /home/ec2-user/querypie/current/systemd/podman-querypie-database.service. +$ systemctl --user link querypie/current/systemd/podman-querypie-app.service +Created symlink /home/ec2-user/.config/systemd/user/podman-querypie-app.service → /home/ec2-user/querypie/current/systemd/podman-querypie-app.service. +``` + +systemd enable 명령으로 서비스를 작동시킵니다. +```bash +$ systemctl --user enable --now podman-querypie-database.service +Created symlink /home/ec2-user/.config/systemd/user/default.target.wants/podman-querypie-database.service → /home/ec2-user/querypie/11.1.1/systemd/podman-querypie-database.service. +$ systemctl --user enable --now podman-querypie-app.service +Created symlink /home/ec2-user/.config/systemd/user/default.target.wants/podman-querypie-app.service → /home/ec2-user/querypie/11.1.1/systemd/podman-querypie-app.service. +``` + +별도 구성된 MySQL 을 사용하는 경우 + +기본 제공되는 `./querypie//compose.yml` 을 이용해, 하나의 리눅스 서버에서 MySQL 를 실행하지 않고, 별도로 구성된 MySQL 을 사용하는 경우, systemd service 작동 범위를 변경하면 됩니다. + +`podman-querypie-database.service` 를 작동시키지 않으면 됩니다. +작동 중인 systemd service 를 다음의 명령으로 끌 수 있습니다. +```bash +$ systemctl --user disable podman-querypie-database.service +``` + +QueryPie를 원활히 운영하려면, `systemctl` 명령을 이용하여 systemd service를 관리하는 방법에 익숙해야 합니다. +그러나, 이 문서에서는 `systemctl` 명령을 이용하여 systemd service 를 관리하는 방법을 상세히 다루지 않습니다. + +### 참고자료 + +* Red Hat Enterprise Linux, Rootless Podman 환경에서 systemd service 를 이용해 container 를 자동으로 실행하기 + * [https://www.redhat.com/en/blog/container-systemd-persist-reboot](https://www.redhat.com/en/blog/container-systemd-persist-reboot) + * [https://docs.redhat.com/en/documentation/red_hat_enterprise_linux/8/html/building_running_and_managing_containers/assembly_porting-containers-to-systemd-using-podman_building-running-and-managing-containers](https://docs.redhat.com/en/documentation/red_hat_enterprise_linux/8/html/building_running_and_managing_containers/assembly_porting-containers-to-systemd-using-podman_building-running-and-managing-containers) diff --git a/confluence-mdx/tests/reverse-sync/1907294209/original.mdx b/confluence-mdx/tests/reverse-sync/1907294209/original.mdx index 67679bed9..43dbf2982 100644 --- a/confluence-mdx/tests/reverse-sync/1907294209/original.mdx +++ b/confluence-mdx/tests/reverse-sync/1907294209/original.mdx @@ -1,756 +1,126 @@ --- -title: 'AWS EKS 환경에서 설치하기' -confluenceUrl: 'https://querypie.atlassian.net/wiki/spaces/QM/pages/815235967/AWS+EKS' +title: '설치 후 초기 설정' +confluenceUrl: 'https://querypie.atlassian.net/wiki/spaces/QM/pages/1907294209' --- import { Callout } from 'nextra/components' -# AWS EKS 환경에서 설치하기 +# 설치 후 초기 설정 -### 1. 개요 +운영 환경에 따라 설치 이후 필수적으로 수행이 필요한 설정들을 안내합니다. -#### 1.1 목적 +### 공통 설정 -* AWS EKS 클러스터에 QueryPie를 설치하고 구성하는 전체 과정 안내 -* 안정적인 운영을 위한 설정 가이드 제공 +설치 직후 QueryPie 사용 시 필요한 공통 절차입니다. -#### 1.2 대상 독자 +#### QueryPie Web Base URL 설정 -* Kubernetes 기본 개념(Pod, Service, Deployment 등)을 이해하고 있는 엔지니어 -* AWS EKS 사용 경험이 있는 엔지니어 +> 설정 경로: Admin Page → General +Web Console 에 접근하기 위한 QueryPie 의 URL 주소입니다. +(예시. `https://querypie.customer.com`) 이 URL 은 QueryPie 의 Base URL 이라고 부르기도 합니다. -#### 1.3 예상 소요 시간 +이 URL 은 `/` 로 끝나지 않아야 합니다. `https://querypie.customer.com/` 와 같이 URL 의 마지막에 `/` 를 붙이지 않도록 주의하여 주세요. -* 전체 설치 과정: 약 1시간 -* 환경 구성: 15분 -* 기본 컴포넌트(MySQL, Redis) 설치: 15분 -* QueryPie 설치: 20분 -* 설치 검증 및 초기 설정: 10분 +이 URL 은 아래의 용도로 사용됩니다. -### 2. 사전 요구사항 +* SSO Integration 의 인증 과정에서, callback 주소로 사용됩니다. +* Web Console 에서 User Agent 를 내려받는 링크에 사용됩니다. +* 그 외 자세한 용도는, [QUERYPIE_WEB_URL](container-environment-variables/querypieweburl)를 참조하시기 바랍니다. -#### 2.1 인프라 요구사항 -* EKS 클러스터 - * 권장 노드 사양: m7i.xlarge (4 vCPU, 16GB RAM) - * Kubernetes 버전: 1.24 이상 - * 필요 노드 수: 최소 1개 (프로덕션 환경은 3개 이상 권장) +
+QueryPie Web Base URL 설정 화면 +
+QueryPie Web Base URL 설정 화면 +
+
-#### 2.2 로컬 환경 준비사항 +### 제품별 설정 -AWS CLI 설치 및 구성 -```bash -brew install awscli -aws configure # Requires Access Key and Secret Key -``` - -kubectl 설치 -```bash -brew install kubectl -``` - -Helm 설치 (버전 3.10.0 이상 필수) -```bash -brew install helm -``` - -선택적 도구 설치 (추천) -```bash -brew install kubectx # Context switching tool -brew install fzf # Command-line fuzzy finder -``` - -#### 2.3 접근 권한 요구사항 - -Container Registry 접근 권한 - -* Docker Hub: 인증 없이 공개 이미지 사용 가능 (`docker.io/querypie`) -* Harbor: 별도 계정 정보 필요 (`harbor.chequer.io`) - * 계정 정보 (Username/Password) - * QueryPie 이미지 접근 권한 - -#### 2.4 네트워크 요구사항 - -* 인터넷 연결 (이미지 다운로드용) -* EKS 클러스터 접근 가능한 네트워크 환경 -* LoadBalancer 사용 가능한 환경 (Ingress 구성용) - -### 3. 기본 컴포넌트 설치 - -시작하기 전에 QueryPie를 설치를 위해 namespaces를 만듭니다. -``` -kubectl create namespace querypie -``` - -#### 3.1 MetaDB(MySQL) 설치 - -MySQL은 QueryPie의 메타데이터를 저장하는 데이터베이스로 사용됩니다. - -##### 3.1.1 Persistent Volume 생성 - -아래 내용으로 `pv.yml` 파일을 생성합니다. -```yaml -apiVersion: v1 -kind: PersistentVolume -metadata: - name: local-pv - labels: - app: mysql -spec: - capacity: - storage: 50Gi - accessModes: - - ReadWriteOnce - hostPath: - path: /var/lib/mysql - type: DirectoryOrCreate -``` - -PV를 생성합니다. -```bash -kubectl apply -f pv.yml -``` - -##### 3.1.2 MySQL StatefulSet 배포 - -아래 내용으로 `mysql.yml` 파일을 생성합니다. `MYSQL_PASSWORD` 의 비밀번호는 고객사의 정책에 따라 다른 값을 지정합니다. -```yaml -apiVersion: apps/v1 -kind: StatefulSet -metadata: - name: mysql - namespace: querypie -spec: - selector: - matchLabels: - app: mysql - serviceName: mysql - replicas: 1 - template: - metadata: - labels: - app: mysql - spec: - containers: - - name: mysql - image: mysql:8.0 - env: - - name: MYSQL_ROOT_PASSWORD - value: querypie - - name: MYSQL_DATABASE - value: querypie - - name: MYSQL_USER - value: querypie - - name: MYSQL_PASSWORD - value: "{your-mysql-password}" - resources: - requests: - cpu: "0.5" - memory: "2Gi" - ports: - - containerPort: 3306 - name: mysql - volumeMounts: - - name: data - mountPath: /var/lib/mysql - volumeClaimTemplates: - - metadata: - name: data - spec: - accessModes: [ "ReadWriteOnce" ] - resources: - requests: - storage: 50Gi - storageClassName: "" - selector: - matchLabels: - app: mysql ---- -apiVersion: v1 -kind: Service -metadata: - name: mysql - namespace: querypie - labels: - app: mysql -spec: - type: ClusterIP - selector: - app: mysql - ports: - - port: 3306 - targetPort: 3306 - protocol: TCP - name: mysql -``` - -MySQL StatefulSet과 Service를 생성합니다. -```bash -kubectl apply -f mysql.yml -``` - -MySQL Pod가 정상적으로 실행될 때까지 기다립니다. -```bash -kubectl get pods -w -n querypie | grep mysql -``` - -##### 3.1.3 데이터베이스 초기화 - -MySQL에 접속합니다. -```bash -kubectl exec -it mysql-0 -n querypie -- mysql -u root -p -# The password is {your-mysql-password} in above example. -``` - -필요한 데이터베이스를 생성합니다. -```sql -DROP DATABASE IF EXISTS querypie; -DROP DATABASE IF EXISTS querypie_log; -DROP DATABASE IF EXISTS querypie_snapshot; - -CREATE database querypie CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci; -CREATE database querypie_log CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci; -CREATE database querypie_snapshot CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci; - -GRANT ALL privileges ON querypie.* TO querypie@'%'; -GRANT ALL privileges ON querypie_log.* TO querypie@'%'; -GRANT ALL privileges ON querypie_snapshot.* TO querypie@'%'; - -FLUSH PRIVILEGES; -``` - -MySQL을 종료합니다. -```sql -exit -``` - -#### 3.2 Redis 설치 - -Redis는 QueryPie의 세션 및 캐시 저장소로 사용됩니다. -아래 내용으로 `redis.yml` 파일을 생성합니다. `{your-redis-password}` 에는 고객사의 정책에 따라 다른 값을 지정합니다. -```yaml -apiVersion: apps/v1 -kind: Deployment -metadata: - name: redis - namespace: querypie - labels: - app: redis -spec: - selector: - matchLabels: - app: redis - template: - metadata: - labels: - app: redis - spec: - containers: - - name: redis - image: redis:7 - imagePullPolicy: IfNotPresent - args: ["--requirepass", "{your-redis-password}"] - ports: - - containerPort: 6379 - protocol: TCP - resources: - limits: - cpu: "0.1" - memory: "1Gi" - volumeMounts: - - name: redis-data - mountPath: /data - restartPolicy: Always - volumes: - - name: redis-data - emptyDir: {} - # Data is deleted on pod restart. It is OK for cache purposes. ---- -apiVersion: v1 -kind: Service -metadata: - name: redis - namespace: querypie - labels: - app: redis -spec: - type: ClusterIP - selector: - app: redis - ports: - - port: 6379 - targetPort: 6379 - protocol: TCP -``` - -Redis Deployment와 Service를 생성합니다. -```bash -kubectl apply -f redis.yml -``` - -Redis Pod가 정상적으로 실행될 때까지 기다립니다. -```bash -kubectl get pods -w -n querypie | grep redis -``` - -### 4. QueryPie 설치 - -#### 4.1 Secret 설정 - -##### 4.1.1 Container Registry 인증 정보 등록 - -**Docker Hub 사용 시** - -Docker Hub의 공개 이미지를 사용하는 경우, 이 단계를 건너뛰어도 됩니다. `values.yaml`에서 `registry: docker.io`로 설정하면 인증 없이 이미지를 다운로드할 수 있습니다. - -**Harbor 사용 시** - -Harbor 레지스트리를 사용하는 경우, 아래 명령으로 인증 정보를 등록합니다. -```bash -kubectl create secret docker-registry querypie-regcred \ - --docker-server=harbor.chequer.io \ - --docker-username='{harbor-id}' \ - --docker-password='{harbor-pw}' \ - -n querypie -``` - -##### 4.1.2 QueryPie 환경 설정 - -아래 내용으로 `querypie.env` 파일을 생성합니다. -환경변수에 대한 가이드를 참조하세요: [컨테이너 환경변수](../container-environment-variables) -```ini -# Agent Secret (32-character random string) -AGENT_SECRET=01234567890123456789012345678912 -KEK=querypie - -# QueryPie Meta DB connection info -DB_CATALOG=querypie -DB_HOST=mysql -DB_USERNAME=querypie -DB_PASSWORD={your-mysql-password} -DB_PORT=3306 - -# QueryPie Log DB connection info -LOG_DB_CATALOG=querypie_log -LOG_DB_HOST=mysql -LOG_DB_USERNAME=querypie -LOG_DB_PASSWORD={your-mysql-password} -LOG_DB_PORT=3306 - -# QueryPie Snapshot DB connection info -ENG_DB_CATALOG=querypie_snapshot -ENG_DB_HOST=mysql -ENG_DB_USERNAME=querypie -ENG_DB_PASSWORD={your-mysql-password} -ENG_DB_PORT=3306 - -# Redis connection info -REDIS_NODES=redis:6379 -REDIS_PASSWORD={your-redis-password} -``` - -환경 설정 파일을 Secret으로 등록합니다. -```bash -kubectl create secret generic querypie-secret --from-env-file=querypie.env -n querypie -``` - -#### 4.2 Helm Chart 설정 - -##### 4.2.1 Helm Repository 추가 - -```bash -# Add repository -helm repo add querypie https://chequer-io.github.io/querypie-deployment/helm-chart - -# Verify repository list -helm repo list -``` - -##### 4.2.2 values.yaml 설정 +#### DAC/SAC: Proxy 접속 주소 설정 -아래 내용으로 `values.yml` 파일을 생성합니다. +QueryPie Database 에 접속하여, DAC/SAC 의 Proxy 접속을 위한 주소를 등록합니다. -**참고** : 아래 예시는 Docker Hub를 사용하는 사례를 기준으로 합니다. -Harbor Registry 사용 시 `registry: harbor.chequer.io`로 변경하세요. -설치할 제품 버전은 [제품 버전](../product-versions) 문서를 참조하여 지정하세요. - -```yaml -# -- appVersion: QueryPie version to install. This is an example value. -# -- Please refer to the Product Versions document for available versions. -appVersion: &version 11.5.1 - -global: - image: - # -- Default registry used for all images - # For Docker Hub: docker.io - # For Harbor: harbor.chequer.io - registry: docker.io - # -- Default image tags used for all images - tag: *version - # -- Default image pull policy for all images - pullPolicy: IfNotPresent - # -- Default labels for all resources deployed by the chart - labels: {} - -# -- ServiceAccount for QueryPie and QueryPie tools pods -# It is created for authenticating private image registry and AWS API. -# @default -- {} -serviceAccount: - labels: {} - annotations: {} - # -- The name of the secret used for pulling the QueryPie image from the private registry. - # For Docker Hub: Set imagePullSecrets to an empty array ([]) or remove this section. - # For Harbor: Create the querypie-regcred secret and uncomment below. - imagePullSecrets: [] - # Uncomment below when using Harbor registry: - # imagePullSecrets: - # - name: querypie-regcred - -querypie: - # -- Labels used for QueryPie pods. - labels: {} - # -- Annotations used for QueryPie pods. - annotations: {} - tolerations: {} - # -- NodeSelector for QueryPie pods - nodeSelector: {} - replicas: 1 - # -- PodManagementPolicy for QueryPie pods. OrderedReady is fine for most cases, but Parallel is also good for large-scale deployments. - podManagementPolicy: Parallel - image: - # -- (string) Registry used for the QueryPie image. If not set, the global registry will be used. - registry: - # -- (string) Tag used for the QueryPie image. If not set, the global tag will be used. - tag: - # -- (string) PullPolicy used for the QueryPie image. If not set, the global pullPolicy will be used. - pullPolicy: - # -- Repository used for the QueryPie image. (required) - repository: querypie/querypie - ingress: - # -- (bool) If true, Ingress resource for QueryPie will be created. - enabled: true - labels: {} - # -- Annotations used for the Ingress resource. - # It is useful when you want to enable controller-specific feature for the Ingress resource. - annotations: {} - # -- (string) Class used for the Ingress resource. If not set, the default class will be used. - ingressClassName: "" - # -- Hostname used for the Ingress resource. If not set, every hostname will be accepted. - host: querypie.querypie.io # Replace with your actual URL - # -- Extra paths used for the Ingress resource. - # It is mostly used for redirecting HTTP to HTTPS if the ingress controller does not support redirect by default. - - proxyService: - # -- Create a service resource for QueryPie Agent connections. - # Basically, it opens 9000/tcp port for the QueryPie Agent, and 40000~/tcp for the Agentless connections. - enabled: true - labels: {} - # -- Annotations used for the Service resource. - # It is useful when you want to enable controller-specific feature for the Service resource. - annotations: {} - type: LoadBalancer - loadBalancerClass: "" - # -- Set the externalTrafficPolicy to Local is recommended for auditing the real client IP address. - externalTrafficPolicy: "Local" - # -- SessionAffinity is not required for the QueryPie. - sessionAffinity: "None" - updateStrategy: - # -- The strategy used for updating the QueryPie pods. - # It is generally recommended to use the RollingUpdate strategy. - # But if required, you can change it to OnDelete for manual operations. - type: RollingUpdate - resources: - requests: - cpu: "2000m" - memory: 16Gi - limits: - # -- More than 2 CPU cores are recommended. - cpu: "2000m" - # -- More than 16Gi memory is recommended. - memory: 16Gi - # -- Logrotator configuration - # Starting from version 11.3.0, log rotation is built into the main container. - # The logrotator image is only available on Harbor registry. - # When using Docker Hub, this must be disabled. - logrotator: - enabled: false - # Uncomment below and set enabled: true when using Harbor registry: - # image: - # repository: querypie/logrotate - # tag: latest - # -- External storage for the QueryPie Object Storage. - externalStorage: - # -- Type of the external storage. - # - none: No external storage. - # - persistentVolumeClaim: using a single Persistent Volume Claim for all QueryPie pods. - type: none - # -- Use a persistent volume claim for the external storage. It will be available if the type is persistentVolumeClaim. - persistentVolumeClaim: - # -- Use an existing Persistent Volume Claim for the external storage. - # If you set this to true, this helm chart will not create a new Persistent Volume Claim. - useExisting: false - # -- The name of the existing Persistent Volume Claim to be used. - claimName: "" - # -- Metadata of the Persistent Volume Claim. - metadata: - annotations: {} - labels: {} - # -- Spec of the Persistent Volume Claim. - spec: - storageClassName: "" - resources: - requests: - storage: 100Gi - # -- It is required to have ReadWriteMany access mode on production. - accessModes: - - ReadWriteMany - # -- Extra environment variables used for the QueryPie pods. - # This is useful for experimental features, debugging, workaround, and so on. - # for example: - # API_JVM_HEAPSIZE: '2g' will set the JVM heap size to 2GB. - extraEnvs: {} - -tools: - image: - # -- Registry used for the QueryPie tools image. If not set, the global registry will be used. - repository: querypie/querypie-tools - -config: - # -- External URL that users use to access the QueryPie via web. - # Specify the scheme, hostname, and port is required. - externalURL: "https://querypie.querypie.io" # Replace with your actual URL - secretName: "querypie-secret" - - database: - querypie: - # -- The maximum number of connections that QueryPie can use for "metastore" purposes. - connectionPoolSize: 20 - - dac: - # -- This setting is used to ignore simple queries sent by client tools such as DataGrip. - # Please refer to the commented-out example below. - skipCommandConfigData: "{}" - # skipCommandConfig: | - # { - # "mysql": [ - # "^(/\\*.*?\\*/)?\\s*SELECT\\s+@@session\\s*\\.\\s*\\w+\\s*$", - # "^(/\\*.*?\\*/)?\\s*SET\\s+session\\s+transaction\\s+\\w+(\\s+\\w+)*\\s*$", - # "^(/\\*.*?\\*/)?\\s*SET\\s+net_write_timeout\\s*=\\s*\\d+\\s*$", - # "^(/\\*.*?\\*/)?\\s*SELECT\\s+database\\s*\\(\\s*\\)\\s*$", - # "^(/\\*.*?\\*/)?\\s*SET\\s+SQL_SELECT_LIMIT\\s*=\\s*\\w+$", - # "^SHOW\\s+VARIABLES\\s+LIKE\\s+'aurora\\\\_version'\\s*$", - # "^SELECT\\s+version\\s*\\(\\s*\\)\\s*,\\s*@@version_comment\\s*,\\s*database\\s*\\(\\s*\\)\\s*$", - # "^SET\\s+autocommit\\s*=\\s*\\d+$", - # "^(/\\*.*?\\*/)\\s*SELECT\\s+((@@session\\s*\\.\\s*|@@)\\w+(\\s+AS\\s+\\w+)?(\\s*,\\s*)?)+\\s*$" - # ] - # } - # -- The path where the skip command config file will be mounted. - skipCommandConfigFile: /app/arisa/skip_command_config.json -``` +QueryPie Web Console 에서 QueryPie Database 에 연결하려면, DB 연결 설정이 필요합니다: [DB Connections](../administrator-manual/databases/connection-management/db-connections) -#### 4.3 QueryPie 설치 +Database 연결 설정 과정에서 QueryPie MySQL 의 Hostname, Username, Password 가 필요합니다. -Helm을 사용하여 QueryPie ACP 를 설치합니다. +* Hostname: `host.docker.internal` +* Username: `querypie` (기본 설정의 경우) +* Password: QueryPie 를 설치한 디렉토리의 환경변수 파일에서 `DB_PASSWORD` 를 확인하세요. + * setup.v2.sh 로 설치한 경우: `.env` 파일 + * setup.sh 로 설치한 경우: `compose-env` 파일 -QueryPie ACP 의 [제품 버전](../product-versions)에 따라, Helm 버전을 선택합니다. - -* QueryPie ACP 11.3.0 또는 이후: Helm Chart 1.5.0 이상의 최신 버전을 사용하세요. -* QueryPie ACP 11.3.0 이전: Helm Chart 1.4.4 를 사용하세요. - -이 문서의 Chart 버전은 예시로 제시된 것입니다. -```bash -helm upgrade --install poc querypie/querypie --version 1.5.0 -n querypie -f values.yaml -``` +환경변수 파일에 설정된 값 중 `DB_PASSWORD`, `REDIS_PASSWORD`, `KEY_ENCRYPTION_KEY` 등은 안전하게 보관하여야 합니다. +다른 사람에게 이 값을 노출하지 않도록 주의하여 주세요. +
-데이터베이스 마이그레이션을 실행합니다. +아래 `` 부분을 고객사의 Proxy 접속 IP 혹은 도메인으로 갈음하여 쿼리를 수행합니다. -이 단계는 반드시 실행해야 합니다. - -실행하지 않으면 `Table 'querypie.system_settings' doesn't exist` 오류가 발생하며 QueryPie Pod가 정상적으로 시작되지 않습니다. - -이 명령은 MySQL 데이터베이스에 필요한 스키마와 초기 데이터를 생성합니다. +해당 주소는 `http` `https` 와 같은 Scheme 을 붙여서는 안 됩니다. -```bash -kubectl exec -it deployments/poc-querypie-tools -n querypie -- /app/script/migrate.sh runall -``` - - -#### 4.4 설치 확인 - -Pod 상태를 확인합니다. -```bash -kubectl get pods -n querypie -``` - -로그를 확인합니다. -```bash -kubectl logs pod/poc-querypie-0 -f -``` - -서비스 접속을 확인합니다. -```bash -kubectl port-forward -n querypie statefulsets/poc-querypie 80:80 ``` - -이후, 처음 설정 과정을 진행합니다. - -* [라이선스 설치](../license-installation) -* [설치 후 초기 설정](../post-installation-setup)문서를 참조하여 공통 설정, 제품별 설정을 진행합니다. - -이것으로 제품 설치 과정이 완료되었습니다. -수고하셨습니다~! - -### 5. 문제 해결 가이드 - -#### 5.1 설치 전 확인사항 - -##### 5.1.1 클러스터 접근 권한 확인 - -```bash -# Verify cluster access -kubectl cluster-info - -# Check current context -kubectl config current-context - -# Verify namespace access permissions -kubectl auth can-i create deployment -n querypie -``` - -##### 5.1.2 리소스 상태 확인 - -```bash -# Check node resource status -kubectl top nodes - -# Check available storage classes -kubectl get storageclass +UPDATE querypie.proxies SET host = '' WHERE id = 1; ``` -#### 5.2 일반적인 문제 해결 - -##### 5.2.1 Pod 상태 확인 - -```bash -# Check pod status -kubectl get pods -n querypie - -# Check pod details -kubectl describe pod -n querypie - -# Check pod logs -kubectl logs -n querypie -kubectl logs -n querypie --previous # Check previous logs if restarted +쿼리 실행에 에러 없이 정상적으로 수행이 확인되었으면, 아래 쿼리를 수행하여 등록이 되었는지 확인합니다. ``` - -주요 문제 상태 및 확인사항: - -* `ImagePullBackOff`: Container Registry 인증 정보 확인 - * Docker Hub 사용 시: `values.yaml`에서 `registry: docker.io` 설정 확인, `imagePullSecrets: []` 설정 확인 - * Harbor 사용 시: `querypie-regcred` Secret 생성 여부 확인 - * `logrotator` 이미지 오류 시: `logrotator.enabled: false` 설정 확인 (Docker Hub에서는 logrotator 이미지가 제공되지 않음) -* `Pending`: 노드의 리소스 부족 여부 확인 -* `CrashLoopBackOff`: 로그를 통해 애플리케이션 오류 확인 - * `Table 'querypie.system_settings' doesn't exist` 오류: DB 마이그레이션 미실행 → `migrate.sh runall` 명령 실행 필요 - -##### 5.2.2 서비스 연결 확인 - -```bash -# Check service status -kubectl get svc -n querypie - -# Check endpoints -kubectl get endpoints -n querypie - -# Test MySQL service connection -kubectl exec -it mysql-0 -- mysql -u querypie -p -h mysql querypie - -# Test Redis service connection -kubectl exec -it $(kubectl get pod -l app=redis -o jsonpath='{.items[0].metadata.name}') -- redis-cli -a querypie ping +SELECT * FROM querypie.proxies; ``` -##### 5.2.3 Ingress 확인 +Proxy 접속을 위한 주소를 QueryPie Database 에 등록한 이후, Server Container 를 재시작하지 않아도 됩니다. +User Agent 에서 로그인을 시도하면, 웹브라우저를 통해 인증을 진행한 이후, User Agent 를 사용할 수 있는 상태가 됩니다. -```bash -# Check ingress status -kubectl get ingress -n querypie +
+DAC/SAC Proxy 접속 주소 설정 화면 +
+DAC/SAC Proxy 접속 주소 설정 화면 +
+
-# Check ingress details -kubectl describe ingress -n querypie -``` +#### KAC: Proxy 접속 주소 설정 -#### 5.3 리소스 모니터링 +QueryPie Database 에 접속하여, KAC 의 Proxy 접속을 위한 주소를 등록합니다. -```bash -# Check pod CPU/Memory usage -kubectl top pods -n querypie +아래 `` 부분을 고객사의 Proxy 접속 IP 혹은 도메인으로 갈음하여 쿼리를 수행합니다. -# Check node CPU/Memory usage -kubectl top nodes +특이사항으로 DAC/SAC 설정과는 다르게 `http` `https` 와 같은 Scheme을 자유롭게 입력 가능합니다. -# Check resource limits for a specific pod -kubectl get pod -n querypie -o jsonpath='{.spec.containers[0].resources}' + +설정 후, 내부적으로 등록한 주소에 맞는 TLS 인증서 발급을 위해 QueryPie Container 재 기동이 필요합니다. + ``` - -#### 5.4 설치 구성 확인 - -```bash -# Check ConfigMap -kubectl get configmap -n querypie - -# Check Secret list -kubectl get secrets -n querypie - -# Check PV/PVC status -kubectl get pv -kubectl get pvc -n querypie +UPDATE querypie.k_proxy_setting SET host = 'https://'; ``` -#### 5.5 지원 요청 시 필요한 정보 - -문제 해결이 어려운 경우, 다음 정보를 수집하여 지원팀에 문의하세요: +
+KAC Proxy 접속 주소 설정 화면 +
+KAC Proxy 접속 주소 설정 화면 +
+
-##### 5.5.1 환경 정보 -```bash -# Kubernetes version -kubectl version --short +#### WAC: Proxy 접속 주소 설정 -# Node information -kubectl get nodes -o wide - -# Helm version -helm version -``` +> 설정 경로: Admin Page → Web Apps → Web App Configurations +WAC의 Proxy 접속 주소 설정은 Web Console 에서 수행 가능합니다. -##### 5.5.2 QueryPie 상태 정보 +자세한 설정 절차는 다음 문서를 참조하세요: [Web App Configurations에서 WAC 초기 설정하기](../administrator-manual/web-apps/wac-quickstart/initial-wac-setup-in-web-app-configurations) -```bash -# Helm deployment status -helm status poc -n querypie - -# Pod details -kubectl describe pod/poc-querypie-0 -n querypie - -# Recent events list -kubectl get events -n querypie --sort-by='.lastTimestamp' -``` + +설정 후, 내부적으로 등록한 주소에 맞는 TLS 인증서 발급을 위해 QueryPie Container 재 기동이 필요합니다. + -##### 5.5.3 로그 정보 -```bash -# Save QueryPie logs -kubectl logs pod/poc-querypie-0 -n querypie > querypie.log +### 제품 설치가 완료되었습니다 -# Save related component logs -kubectl logs mysql-0 > mysql.log -kubectl logs $(kubectl get pod -l app=redis -o jsonpath='{.items[0].metadata.name}') > redis.log -``` +설치 후 초기 설정 과정을 진행한 것으로, QueryPie ACP 제품을 사용할 수 있는 준비가 완료되었습니다. +수고하셨습니다~! -### 6. 참고 자료 +이후 다음의 문서를 참조하여, 관리자 설정을 진행하고, 제품을 사용할 수 있습니다. -* [Amazon EKS Workshop](https://www.eksworkshop.com) -* [Amazon EKS 문서](https://docs.aws.amazon.com/eks/) -* [Kubernetes 공식 문서](https://kubernetes.io/docs/) +* [관리자 매뉴얼](../administrator-manual) +* [사용자 매뉴얼](../user-manual) diff --git a/confluence-mdx/tests/reverse-sync/544112846/original.mdx b/confluence-mdx/tests/reverse-sync/544112846/original.mdx index 7a2f04d31..7a5d6109a 100644 --- a/confluence-mdx/tests/reverse-sync/544112846/original.mdx +++ b/confluence-mdx/tests/reverse-sync/544112846/original.mdx @@ -1,208 +1,92 @@ --- -title: 'Security' -confluenceUrl: 'https://querypie.atlassian.net/wiki/spaces/QM/pages/544178422/Security' +title: 'Allowed Zones' +confluenceUrl: 'https://querypie.atlassian.net/wiki/spaces/QM/pages/544112846/Allowed+Zones' --- import { Callout } from 'nextra/components' -# Security +# Allowed Zones ### Overview -Security 페이지에서 QueryPie 전반에 대한 보안 설정을 관리할 수 있습니다. -이 문서에서는 각 보안 설정에 대한 설명을 제공합니다. +Allowed Zones 페이지에서는, 사용자의 QueryPie 웹 콘솔 접근 및 DB 접속을 허용할 IP 대역을 통제하기 위해 사전에 Allowed Zone을 등록 및 관리합니다. -10.3.0 부터 각 서비스 별 설정 항목이 Administrator > General > Security 하위에서 각 서비스(Databases / Servers / Kubernetes) 의 General 하위(Administrator > `{Service}` > General > Configurations)로 이동되었습니다. +11.3.0부터 "IP Band(s)" 대신 "IP Address Range(s)"로 표현이 수정되었습니다. -### 웹 콘솔 로그인 설정 -QueryPie Web 로그인 관련 보안 설정을 관리합니다. +### 등록된 Allowed Zone 목록 조회하기 - -### Account Security Policy - -QueryPie 계정의 잠금 및 만료 등의 보안 정책을 설정할 수 있습니다. - -
-Screenshot-2025-08-27-at-4.25.50-PM.png -
- -* **Account Expiration Period (Days)** : 계정 만료 처리를 위한 장기 미접속 일자 기준 -* **Expiration Reminder (Days) :** 계정 만료 알림 이메일을 발송할 기준일을 설정합니다. 드롭다운 목록에서 1일부터 14일까지 원하는 날짜를 여러 개 선택할 수 있습니다. 예를 들어, 14, 7, 1을 선택하면 계정 만료 14일, 7일, 1일 전에 각각 알림 메일이 발송됩니다. - * 이 기능은 Integration 메뉴에 Email 설정이 완료된 환경에서만 동작합니다. - * 알림 기간을 아무것도 선택하지 않으면, 만료 알림 메일은 발송되지 않습니다. -* **Maximum Login Failures before Account Lockout** : 로그인 실패 시 계정 잠금 정책 - * QueryPie 로그인 실패 최대 허용 횟수 지정 (Default : 60분, 5회) - * Enable 선택 시 횟수 및 기간 범위 기준 추가 입력 가능 (예: 1440분 내 5회 실패 시 계정 잠금) -* **Restrict Concurrent Login** : 동시 로그인 제한 기능으로 사용자 로그인 계정 하나에 대해 동시에 여러 환경(Web, Agent 각각)에서 활성화될 수 있는 로그인 수를 1개로 제한하여, 가장 최근 로그인만 활성 상태로 유지하고 이전 로그인은 다음 활동 시 자동 로그아웃시켜 계정 보안을 강화하는 정책. - * 동시 로그인 제한 방식 : 해당 옵션이 활성화되면, 가장 오래된 로그인 세션을 종료하고 신규 로그인을 허용합니다. - * 단, 옵션을 활성화한 시점에 이미 로그인된 세션은 즉시 종료되지 않고 유지됩니다. 이후 새로운 사용자가 로그인하면, 기존 사용자 세션은 로그아웃됩니다. - * 로그아웃 알림 표시 방식: 동일 계정으로 다른 환경에서 로그인할 경우, 기존 세션은 종료되며 사용자에게 알림이 표시됩니다. - * 사용자가 Web Inactivity Timeout 또는 Agent Session Timeout 범위 내에서 활동 중일 경우, 명시적인 UI 동작(예: 버튼 클릭, 페이지 전환 등)을 통해 서버와 통신할 때 알림이 나타납니다. - * 버튼 클릭 등 사용자 API 호출 시 알림이 나타납니다. 알림은 다른 로그인 발생 시점부터 24시간 동안 표시됩니다. Web, User Agent, Multi-Agent는 각각 개별적으로 동시 로그인 제한이 적용됩니다. - - -### Password Setting - -QueryPie 계정의 패스워드 정책을 설정할 수 있습니다. - -
-image-20250515-091250.png -
- -* **Maximum Password Age** : 비밀번호 변경 주기 (Default : 90일) -* **Password History** : 이전 비밀번호 재사용 금지 횟수 기준 - * 설정된 숫자만큼의 비밀번호 이력을 저장하고, 비밀번호 변경 시 동일한 비밀번호 사용을 금지함 -* **Minimum Length** : 비밀번호 최소 길이 (Default : 9자) -* **Password Complexity Requirements** : 패스워드 복잡도 설정 - * Lower case letter (a-z) : 소문자 필수 - * Upper case letter (A-Z) : 대문자 필수 - * Number (0-9) : 숫자 필수 - * Special character (e.g., !@#$%^&*) : 특수문자 필수 - * Limit 3 repeating characters and numbers (e.g., aaa, bbb) : 3자 이상 반복되는 문자/숫자 제한 - * Limit 3 consecutive characters and numbers (e.g., abc, 123) : 3자 이상 연속되는 문자/숫자 제한 - * Restrict nearby characters on the keyboard (e.g., qwe, ert) : : 3자 이상 키보드 상 나란히 있는 문자열 제한 - * Does not contain part of personal information (Username, Primary email) : 패스워드 내 개인정보(Username, Primary email) 사용 제한 - - -### Timeout - -웹 콘솔과 에이전트의 타임아웃 정책을 설정할 수 있습니다. - -
-image-20251009-051727.png -
- -* **Web Inactivity Timeout** : 웹 콘솔 타임아웃 기준 (Default : 60분) - * 지정된 시간 동안 활동이 없을 경우 타임아웃 처리 -* **Agent Session Timeout** : 에이전트 세션 타임아웃 기준 (Default : 1,440분) - * 지정된 시간 동안 에이전트 앱 로그인을 유지하고, 경과 시 로그아웃 처리 -* **User Inactivity Timeout (on agent)** :
Agent Session Timeout 기능에 추가로 Agent가 사용자의 마우스, 키보드 입력을 모니터링하고 지정된 시간을 초과하여 행위(키보드의 키 입력, 마우스 클릭, 마우스 포인터 이동, 마우스 휠 조작, 마우스 드래그)가 없으면 세션을 강제 종료합니다. 유휴 상태인 경우, 장시간 쿼리를 실행하고 있어도 마우스 및 키보드 움직임이 없다면 무조건 세션이 종료되어 로그아웃처리 됩니다. 사용자 행위 감시는 30초마다 수행합니다. 최대 유휴 만료시간이 Agent Session Timeout을 초과 할 수 없습니다. - - -**User Inactivity Timeout (on agent) 설정 예시** -* Agent Session Timeout이 30분이고 User Inactivity Timeout 15분일 경우를 가정하면 아래와 같습니다. - * 12:00분에 로그인 했을 경우 최초 유휴 만료 시간은 **12:15:00** 입니다. - * 12:08분에(t+8분) 마지막 활동을 한것으로 확인되면, 새로운 유휴 만료 시간은 **12:23:00** 입니다. - * 그 뒤 1분이 지난 12:09분에 활동을 한것을 확인되면, 새로운 유휴 만료 시간은 **12:24:00** 입니다. - * Agent Session Timeout이 30분이므로 사용자의 행위 유무와 관계없이 **12:30:00** 에 세션이 종료됩니다. - - - -### QueryPie Web IP Access Control - -QueryPie 접속 시 IP 제한 정책을 설정할 수 있습니다. - -
-Screenshot-2025-06-26-at-2.14.46-PM.png -
- -* **All Users** : 모든 사용자에 대해 적용되는 IP 제한 설정 (Default : 0.0.0.0/0) -* **Each User** : 토글을 켜면 개별 사용자에 대해 Allowed Zone 설정 가능 - * 사용자별 Allowed Zone 설정 방법은 [사용자 프로필](../user-management/users/user-profile) 에서 확인 가능 - * **Use Individual Configuration of Allowed Zones for Each User** : 사용자별 개별 IP 허용 영역(Allowed Zone)을 설정합니다. - * 활성화 시, 사용자 목록 및 각 사용자에게 할당된 IP 허용 영역을 확인할 수 있는 `View User to Allowed Zone Mappings` 링크가 표시됩니다. - * **View User to Allowed Zone Mappings** : 클릭 시 사용자별 Allowed Zone 목록을 모달(Modal) 창에서 확인할 수 있습니다. 사용자 이름(Display Name)으로 검색이 가능하며, 목록에는 사용자의 이름, 로그인 ID, 이메일, 그리고 할당된 모든 IP 주소가 표시됩니다. - * **Require Allowed Zones for User Access** : 사용자의 IP 허용 영역 설정을 필수로 강제하는 정책입니다. - * 이 옵션을 활성화하면, 개별 IP 허용 영역(Allowed Zone)이 설정되지 않은 사용자는 QueryPie에 로그인할 수 없습니다. 로그인 페이지 접근은 가능하지만, 로그인 시도가 차단됩니다. - - -**IP 접근 제어 정책 활성화 시 유의사항** -`Require Allowed Zones for User Access` 옵션 활성화로 인해 로그인이 차단된 사용자는 'IP Registration Request' 워크플로우를 통해 신규 IP 주소에 대한 접근 허용을 요청할 수 있습니다. -(자세한 내용은 [IP Registration Request 요청하기](../../../user-manual/workflow/requesting-ip-registration) 문서를 참고하십시오.) - - -* **Admin Page Access Control** : 관리자 페이지에 접근할 수 있는 관리자의 IP를 제한하는 정책을 설정합니다. 토글을 활성화하여 특정 IP 주소 또는 대역에서 접속하는 관리자만 관리자 페이지에 접근하도록 제한할 수 있습니다.
-
- Admin 페이지 IP 접근 차단 시 화면 -
- Admin 페이지 IP 접근 차단 시 화면 -
-
- * **접근 요구 조건:** - * 사용자는 관리자 권한을 가지고 있어야 합니다. - * 사용자의 접속 IP는 'All Users'에 설정된 IP 대역에 포함되어야 합니다. - * 사용자의 접속 IP는 'Admin Page Access Control'에 등록된 IP 목록에 포함되어야 합니다. - * **관리자 페이지 접근 제어 설정 시 유의사항** - * `Admin Page Access Control`에 IP를 추가할 경우, 해당 IP는 반드시 상위의 **All Users** 설정에도 포함되어야 합니다. 만약 **All Users** 에 등록되지 않은 IP를 추가하고 저장을 시도할 경우, 오류가 발생하며 설정이 저장되지 않습니다. +Allowed Zone의 목록을 조회하기 위해서는 Administrator > General > Company Management > Allowed Zones 페이지로 접근합니다. +Allowed Zone 이름으로 검색이 가능합니다. -**Q. 만약 사용자가 허용되지 않은 IP 에서 QueryPie 웹 콘솔 접속 시도 시 어떤 화면을 보게 되나요?** -A. 허용되지 않은 IP에서 접속 시도 시 QueryPie 웹 콘솔 내 어떤 페이지이든 접근이 불가하여 아래와 같은 안내 화면을 보게 됩니다. -만약 All Users에 기본값(0.0.0.0/0)이 등록되어 있고, 개별 사용자에게 특정 Allowed Zone 이 설정되어 있다면 로그인 페이지까지는 접속이 가능하나 로그인은 불가하게 됩니다. +**Default** Allowed Zone은 QueryPie 설치 시에 기본으로 생성되며 모두 허용(0.0.0.0/0) 값을 가집니다.
-Each User 설정의 IP 접근 차단 시 화면 +Administrator > General > Company Management > Allowed Zones
-Each User 설정의 IP 접근 차단 시 화면 +Administrator > General > Company Management > Allowed Zones
+### Allowed Zone 상세 정보 조회하기 + +Allowed Zones 목록에서 상세 정보를 조회하려는 아이템을 클릭하면 Drawer가 열립니다. +
-All User 설정의 IP 접근차단 시 화면 +Administrator > General > Company Management > Allowed Zones > Allowed Zones Detail
-All User 설정의 IP 접근차단 시 화면 +Administrator > General > Company Management > Allowed Zones > Allowed Zones Detail
+#### Allowed Zone 할당 내역 확인 - -**IP 제한 설정 주의** -Security 페이지의 설정은 저장 즉시 반영됩니다. -따라서 입력한 IP와 해당 옵션을 설정한 관리자의 IP가 일치하지 않을 경우 관리자라 하더라도 **저장 즉시 로그아웃 처리** 되니 주의해서 적용해 주시기 바랍니다. - - +Drawer 내 Mapped List by Allowed Zones 영역에서 Allowed Zone이 할당된 DB 커넥션 및 사용자를 확인할 수 있습니다. -### Secret Store 설정 - -Secret Store 사용 여부를 설정합니다. -현재 HashiCorp Vault를 지원하고 있습니다. - -
-screenshot-20240726-152042.png -
- -Vault 등록은 General > Integrations 메뉴에서 수행합니다. +* Database 탭: 해당 Allowed Zone으로 접근 통제 중인 DB 커넥션 목록 + * DB Connection Detail 페이지에서 Allowed Zone 할당 가능 +* Users 탭: 해당 Allowed Zone으로 QueryPie Web 접근 통제 중인 사용자 목록 -**Q. Secret Store 활성화를 해제하고 싶은데, 토글이 비활성화 상태입니다.** -A. Administrator > General > Integrations > HashiCorp Valut 메뉴에 등록된 Vault 가 남아있는지 확인해보세요. -등록된 Vault가 모두 제거된 후 토글 비활성화 가능합니다. +* 사용자별 Allowed Zone 할당은 기본적으로 비활성화되어 있으며, Global Option 활성화는 [Security 메뉴](security)에서 수행합니다. +* 사용자별 Allowed Zone 할당은 Users 메뉴의 [사용자별 상세 페이지](../user-management/users/user-profile)에서 수행합니다. -Secret Store 사용 활성화 및 Vault 등록이 완료된 후, DB 커넥션 상세 페이지 또는 Server Group 상세 페이지에서 인증 정보 저장소를 선택할 수 있게 됩니다. +### Allowed Zone 추가하기 -
-DB Connection 상세 페이지 내 Connection Information > Secret Store 선택 -
-DB Connection 상세 페이지 내 Connection Information > Secret Store 선택 -
-
+Allowed Zone 목록 페이지에서 `Create Allowed Zone` 버튼을 클릭하면 Allowed Zone 입력 항목이 출력됩니다.
-Server Group 상세 페이지 내 Accounts > Secret Store 선택 +Create Allowed Zone 생성 시 출력되는 입력항목
-Server Group 상세 페이지 내 Accounts > Secret Store 선택 +Create Allowed Zone 생성 시 출력되는 입력항목
- -11.1.0에 OAuth Client 관련 설정이 Admin > General > Company Management > Security 하위 항목으로 추가되었습니다.(단일 클라이언트 설정만 가능) -11.3.0에 Client 설정을 다중 설정이 가능하도록 개선되면서 Admin > General > System > Integrations 항목으로 이동되었습니다. - -### 기타 +* **Name** : Allowed Zone 이름 +* **IP Address Range(s)** : 할당할 IP 주소, 또는 IP 주소 범위를 입력합니다. + * IP 주소, 또는 IP 주소 범위를 하나 이상 입력할 수 있습니다. + * IP 주소 범위는 Classless Inter-Domain Routing(CIDR) 표기법을 사용합니다. 참고: [CIDR 이란?](https://aws.amazon.com/ko/what-is/cidr/) + * 둘 이상의 IP 주소, IP 주소 범위를 입력할 때, 쉼표를 구분자로 하여 입력합니다. + * 예1) `1.1.1.1, 2.2.2.2` + * 예2) `192.168.10.0/24, 192.169.30.0/24` + + +### Allowed Zone 삭제하기 -기타 보안 설정을 관리합니다. +Allowed Zone 목록에서 삭제하려는 Allowed Zone을 체크박스로 선택하면 `Delete` 버튼이 노출됩니다. +버튼을 클릭하고 확인 모달에서 `Delete` 버튼을 클릭하여 삭제를 완료합니다.
-screenshot-20240726-152051.png +삭제 옵션 활성화 +
+삭제 옵션 활성화 +
-* Export a file with Encryption : 파일 다운로드 시 암호 입력 여부 - * Required 선택 시, 파일 다운로드 시에 파일 암호 지정 필수 - diff --git a/confluence-mdx/tests/reverse-sync/544376183/original.mdx b/confluence-mdx/tests/reverse-sync/544376183/original.mdx index 431b504e5..3fdc83308 100644 --- a/confluence-mdx/tests/reverse-sync/544376183/original.mdx +++ b/confluence-mdx/tests/reverse-sync/544376183/original.mdx @@ -1,199 +1,74 @@ --- -title: 'Okta 연동하기' -confluenceUrl: 'https://querypie.atlassian.net/wiki/spaces/QM/pages/544376100/Okta' +title: 'AWS SSO 연동하기' +confluenceUrl: 'https://querypie.atlassian.net/wiki/spaces/QM/pages/544376183/AWS+SSO' --- -import { Callout } from 'nextra/components' - -# Okta 연동하기 +# AWS SSO 연동하기 ### Overview -QueryPie에서는 Okta 연동을 지원합니다. -Okta의 사용자 및 그룹을 동기화하여 접근 권한을 부여하고 정책을 적용할 수 있으며, 이 과정에서 사용자에게 간소화되고 편리한 환경을 제공하면서도 엄격한 보안 정책을 운영할 수 있습니다. -QueryPie와 Okta의 통합은 데이터베이스 및 시스템 관리 생태계의 보안과 운영 효율성 및 사용자 경험이 향상시킬 수 있습니다. - - -SCIM 프로비저닝 연동까지 구현하고자 하는 경우, [[Okta] 프로비저닝 연동 가이드](../provisioning/okta-provisioning-integration-guide) 내 절차대로 대신 진행하여 주시기 바랍니다. 하단의 Okta API를 활용한 아웃바운드 사용자 동기화 설정을 동시에 활용할 시, 사용자 동기화에 영향을 받을 수 있는 점 유의하시기 바랍니다. - - - -### Okta에서 QueryPie 를 애플리케이션으로 추가 - -
-Okta Admin > Applications > Applications > Browse App Catalog > QueryPie 검색 -
-Okta Admin > Applications > Applications > Browse App Catalog > QueryPie 검색 -
-
- -1. [Okta 서비스](https://login.okta.com/)에 접속하여 관리자 계정으로 로그인합니다. -2. 우측 상단의 프로필을 클릭하여 Your Org로 접속합니다. -3. Okta 관리자 페이지의 좌측 패널에서 Applications > Applications 메뉴로 이동합니다. -4. `Browse App Catalog` 버튼을 클릭하여 QueryPie 를 검색합니다. -5. QueryPie 애플리케이션 페이지로 들어가 `Add Integration` 버튼을 클릭합니다. -6. Application Label에 QueryPie 로 입력된 것을 확인 후, `Done` 버튼을 클릭하여 애플리케이션을 추가합니다. - - -### Okta 계정 연동을 위한 Profile 설정 - -
-Okta Admin > Directory > Profile Editor > QueryPie User > Add Attribute -
-Okta Admin > Directory > Profile Editor > QueryPie User > Add Attribute -
-
- -1. Okta 관리자 페이지의 좌측 패널에서 Directory > Profile Editor 메뉴로 이동합니다. -2. Profile 목록 중 ‘QueryPie User’ 를 클릭합니다. -3. Attributes 설정에서 `Add Attribute` 버튼을 클릭합니다. -4. Attribute 추가 화면에서 아래 4가지 항목을 차례대로 입력 후 저장합니다. - 1. Display name : firstName / Variable name : firstName 항목 입력 후 `Save and Add Another` - 2. Display name : lastName / Variable name : lastName 항목 입력 후 `Save and Add Another` - 3. Display name : email / Variable name : email 항목 입력 후 `Save and Add Another` - 4. Display name : loginId / Variable name : loginId 항목 입력 후 `Save` 클릭 - -
-Okta Admin > Directory > Profile Editor > QueryPie User > Mappings -
-Okta Admin > Directory > Profile Editor > QueryPie User > Mappings -
-
- -1. 4가지 Attribute 가 추가된 것을 확인 후 `Mappings` 버튼을 클릭합니다. -2. Okta User Profile Attribute 항목을 아래와 같이 QueryPie User Profile의 Attribute 와 연결합니다. - 1. user.firstName ↔︎ firstName - 2. user.lastName ↔︎ lastName - 3. user.email ↔︎ email - 4. user.email ↔︎ loginId (Okta 의 email 항목을 QueryPie 의 로그인 Id 로 사용합니다.) -3. `Save Mappings` 버튼을 클릭하여 저장합니다. - +QueryPie에서는 AWS IAM Identity Center의 사용자를 여러 클라우드 애플리케이션 및 SAML 2.0을 통해 사용자 연동을 지원합니다. +사용자를 동기화하여 접근 권한을 부여하고 정책을 적용할 수 있습니다. -### Okta에 추가된 QueryPie 애플리케이션에 사용자 할당 +### AWS IAM Identity Center에서 QueryPie를 애플리케이션으로 추가
-Okta Admin > Applications > Applications > QueryPie App -
-Okta Admin > Applications > Applications > QueryPie App -
+AWS-SSO-01-20230317-044219.png
-1. Okta 관리자 페이지의 좌측 패널에서 Applications > Applications 메뉴로 이동합니다. -2. 리스트에서 QueryPie 애플리케이션을 클릭합니다. -3. Assignments 탭으로 이동한 뒤 `Assign` 버튼을 클릭하여 `Assign to People` 또는 `Assign to Group`을 선택합니다. -4. Okta 계정으로 QueryPie 접근을 허용할 사용자 또는 그룹을 할당한 뒤 Done 버튼을 클릭합니다. - 1. People 할당 시 사용자 정보 확인 후 `Save and Go Back` 버튼을 클릭합니다. - 2. Group 할당 시 loginId 항목을 빈 칸으로 두고 `Save and Go Back` 버튼을 클릭합니다. -5. 사용자 또는 그룹이 QueryPie 애플리케이션에 할당되어 추가된 내역을 확인할 수 있습니다. +1. [AWS IAM Identity Center](https://ap-northeast-2.console.aws.amazon.com/singlesignon/applications/home)에 접속합니다. +2. 좌측 메뉴의 애플리케이션 메뉴로 진입합니다. +3. 우측 상단의 애플리케이션 추가 버튼을 클릭합니다. +4. 사용자 지정 SAML 2.0 애플리케이션 추가 옵션 선택 후 다음 버튼을 클릭합니다. +5. 애플리케이션 구성 > 표시 이름에 QueryPie를 입력합니다. +6. 애플리케이션 속성 > 애플리케이션 시작 URL 항목에 QueryPie가 설치된 도메인 주소를 아래와 같이 입력합니다. + 1. 애플리케이션 Start URL : https://`{querypie_host}` +7. 애플리케이션 메타 데이터 항목에 각각 다음과 같이 입력합니다. + 1. 애플리케이션 ACS URL : https://`{querypie_host}`/saml/sp/acs + 2. 애플리케이션 SAML 대상 : https://`{querypie_host}`/saml/sp/metadata +8. 제출 버튼을 클릭하여 저장합니다. -### Okta에서 QueryPie 애플리케이션 연동 정보 설정 +### QueryPie 연동을 위한 속성 매핑 설정
-Okta Admin > Applications > Applications > QueryPie App -
-Okta Admin > Applications > Applications > QueryPie App -
+AWS-SSO-06-20230317-064023.png
-1. Okta 내의 QueryPie 애플리케이션 페이지에서 Sign On 탭으로 이동합니다. -2. Settings 영역의 `Edit` 버튼을 클릭하여 QueryPie 가 설치된 도메인 주소를 Base URL 항목에 입력하고 저장합니다. -3. Metadata URL에 표기된 주소로 별도 탭에서 접근하여 표시되는 XML 정보를 복사합니다. - - -### 최소 권한의 Okta API 토큰 발급 - -QueryPie-Okta 간 사용자 및 그룹, 그룹 멤버십의 동기화를 위해 Okta Admin API 토큰 발급이 필요합니다. -일반적인 방법으로는 이용하고 계신 Okta 최고관리자(Super Administrator)/읽기권한관리자(Read-Only Administrator) 계정으로 API 토큰을 이하의 방법으로 발급하여 적용하는 방법이 있습니다: - -1. Okta 관리자 페이지 좌측 패널에서 Security > API 메뉴로 이동합니다. -2. API 메뉴에서 Tokens 탭으로 이동합니다. -3. Create Token 버튼을 클릭하여 인증 토큰을 생성할 수 있습니다. +1. 생성된 애플리케이션 우측 상단에서 작업 > 속성 매핑 편집 으로 이동합니다. +2. 애플리케이션 내 사용자 속성과 매핑 값, 형식을 위 스크린샷을 참고하여 다음과 같이 입력합니다. -다만, 보안 수준 향상을 위해 Okta API 토큰의 권한을 최소한으로 부여하도록 조정해야 하는 경우, 이하의 권한 및 방법에 따라 API 토큰을 생성할 것을 권장드립니다. +| **애플리케이션 내 사용자 속성** | **IAM Identity Center 의 문자열 값 또는 사용자 속성으로 매핑** | **형식** | +| --------------------- | ------------------------------------------------ | ------------ | +| Subject | $`{user:email}` | emailAddress | +| firstName | $`{user:givenName}` | basic | +| lastName | $`{user:familyName}` | basic | +| loginId | $`{user:email}` | basic | +| email | $`{user:email}` | basic | -
-Okta Admin Console > Security > Administrators > Roles > Create new role -
-Okta Admin Console > Security > Administrators > Roles > Create new role -
-
+`변경 사항 저장` 버튼을 클릭하여 저장합니다. -1. Okta 관리자 페이지 좌측 패널에서 Directory > People 메뉴로 이동하여 Add Person을 눌러 전용 시스템 연동용 계정을 생성합니다. - * 이미 쿼리파이 연동용으로 사용 가능한 계정이 있다면 본 단계를 넘어갑니다. -2. Okta 관리자 페이지 좌측 패널에서 Security > Administrators 메뉴로 이동하여 Roles탭으로 이동합니다. -3. Create new role을 선택합니다. -4. Role name (예. MinimumAdminRole) 및 Role description을 정의한 뒤, Select Permisions에서 이하의 권한만 체크합니다. - 1. **User** - * View users and their details - 2. **Group** - * View groups and their details - 3. **Application** - * View application and their details -5. Save role을 눌러 커스텀 롤을 저장합니다. -6. Resources 탭으로 이동합니다. -7. Create new resource set을 선택합니다. - * 이미 할당할 권한 범위 지정을 위해 만들어두신 resource set이 있다면 본 단계를 넘어가 10번 단계를 진행합니다. -8. Name (예. MinimumResources) 및 Description을 정의한 뒤 이하의 범위를 검색하여 지정합니다. - 1. User : 쿼리파이 사용자 전부 선택 - 2. Group : 쿼리파이 사용 그룹 전부 선택 - 3. Application : 쿼리파이 앱으로 한정 -9. Create를 선택하여 생성합니다. -10. Admins 탭으로 이동하여 쿼리파이 연동용 계정에 이하의 권한을 할당합니다. - 1. Role: MinimumAdminRole | Resource: MinimumResources - 2. Role: Read-Only Administrator - * API 토큰 생성메뉴 접근을 위한 임시 부여 -11. 쿼리파이 연동용 계정으로 옥타 관리자 콘솔 페이지로 인증 후 접근합니다. -12. Security > API 메뉴에서 Tokens 탭으로 이동합니다. -13. Create Token 버튼을 클릭하여 인증 토큰을 생성하여 이를 보관합니다. -14. 이후 다시 초기 작업하였던 관리자 계정으로 접속하여 Security > Administrators > Admins 탭에서 연동용 계정을 편집하여 Read-Only Adminstrator 권한을 회수합니다. - - -### QueryPie에서 Okta 연동 및 동기화 설정 +### QueryPie에서 AWS IAM Identity Center 연동 설정
-Administrator > General > User Management > Authentication +Administrator > General > User Management > Authentication
-Administrator > General > User Management > Authentication +Administrator > General > User Management > Authentication
-1. QueryPie 에서 Administrator > General > User Management > Authentication 메뉴로 이동합니다. -2. 인증 Type 항목에서 Okta 를 선택합니다. -3. 복사한 XML 정보를 Identity Provider Metadata 항목에 붙여넣기합니다. -4. 자동 동기화를 설정하고자 하는 경우, “Use Synchronization with the Authentication System”를 체크합니다. - 1. API URL: Okta 관리자 페이지 우측 상단의 프로필을 클릭하면 `{domain}`.okta.com 형식의 URL 을 확인할 수 있습니다. - 2. API Token: Okta 관리자 API 토큰을 기입합니다. - 3. Application ID: Okta 내에서 2개 이상의 QueryPie App 을 사용할 경우 입력합니다. -5. 자동 동기화 기능을 사용하고자 할 경우 Replication Frequency 항목에서 Scheduling 을 설정합니다. -6. `Dry Run` 버튼을 클릭하여 연동 정보가 정상적으로 입력되었는지 확인합니다. -7. `Save Changes`로 저장합니다. -8. `Synchronize` 버튼을 클릭하여 Okta 의 사용자를 동기화합니다. - +1. Administrator > General > User Management > Authentication 메뉴로 이동합니다. +2. 인증 Type 항목에서 **SAML** 을 선택합니다. +3. 애플리케이션 > 작업 > 구성 편집 화면에서 IAM Identity Center SAML 메타데이터 파일을 다운로드합니다. +4. 다운로드 받은 XML 정보를 Identity Provider Metadata 항목에 붙여넣기합니다. +5. `Save Changes` 버튼을 클릭하여 저장합니다. - -**Application ID 확인하는 방법** -2개 이상의 QueryPie Application 을 사용하는 경우, Okta Admin > Applications 으로 이동하여 QueryPie 앱의 디테일 화면으로 들어가면 상단 URL 에서 위의 스크린샷에 표시된 것과 같은 Application ID 를 확인할 수 있습니다. - +### QueryPie에서 SAML 로그인
-Okta Admin > Applications > QueryPie App 상단 URL -
-Okta Admin > Applications > QueryPie App 상단 URL -
+image-20240723-073353.png
+이제 로그인 페이지에서 `Login with SAML` 버튼을 통해 AWS 인증하여 QueryPie에 로그인할 수 있습니다. -### QueryPie에서 Okta 로그인 - -1. General Settings > Users 또는 Groups 메뉴에서 동기화된 사용자 및 그룹을 확인할 수 있습니다. -2. 이제 로그인 페이지에서 `Login with Okta` 버튼을 통해 Okta 계정으로 QueryPie에 로그인할 수 있습니다. - -
-image-20240723-070449.png -
- -해당 연동 방식으로는 사용자 및 그룹은 Okta → QueryPie로의 단방향 동기화를 지원합니다. -SCIM 프로비저닝 연동까지 구현하고자 하는 경우, [[Okta] 프로비저닝 연동 가이드](../provisioning/okta-provisioning-integration-guide) 내 절차대로 대신 진행하여 주시기 바랍니다. - diff --git a/confluence-mdx/tests/reverse-sync/544376265/original.mdx b/confluence-mdx/tests/reverse-sync/544376265/original.mdx index ca3faaae7..311b1c743 100644 --- a/confluence-mdx/tests/reverse-sync/544376265/original.mdx +++ b/confluence-mdx/tests/reverse-sync/544376265/original.mdx @@ -1,49 +1,51 @@ --- -title: 'Provisioning' -confluenceUrl: 'https://querypie.atlassian.net/wiki/spaces/QM/pages/544376236/Provisioning' +title: 'Provisioning 활성화 하기' +confluenceUrl: 'https://querypie.atlassian.net/wiki/spaces/QM/pages/544376265/Provisioning' --- -# Provisioning +import { Callout } from 'nextra/components' + +# Provisioning 활성화 하기 ### Overview -**SCIM(System for Cross-domain Identity Management)** 은 사용자 식별 정보를 관리하기 위해 설계된 오픈 표준 프로토콜로, 사용자와 그룹을 나타내는 정의된 스키마와 해당 사용자 및 그룹 리소스에 CRUD(생성, 읽기, 업데이트, 삭제) 작업을 수행하는 RESTful API를 제공합니다. -조직에서 사용하는 계정 시스템을 연동하여 조직 내의 사용자 및 그룹에 해당하는 Attribute(속성) 및 현황을 계정 시스템에서 반영된 즉시 QueryPie로 동기화할 수 있습니다. +SCIM 2.0 프로토콜을 기반으로 동작하는 QueryPie의 Provisioning 기능은 사용자 아이덴티티 동기화를 지원하여 기존의 사용자 인증 및 액세스 관리를 돕는 SSO에 더해 더욱 안전한 사용자 통합 인증 및 관리 환경을 제공합니다. +사용자의 라이프사이클 관리를 지원하게 되어 관리자는 조직 내의 입사자 및 퇴사자를 계정 시스템 한 곳에서 더욱 편리하게 관리할 수 있습니다. -
-screenshot-20240613-174843.png -
+### Prerequisites -### 계정 시스템 SCIM 동기화를 통한 사용자 관리 +* 이하의 쿼리파이 관리자 권한 Role에서 이 기능을 활성화할 수 있습니다: + * Owner + * System Admin -QueryPie에서는 Auth Provider라는 필드를 바탕으로 사용자의 원장을 정의합니다. -해당 Auth Provider는 Administrator > General > User Management > Authentication 메뉴에서 설정한 외부 계정 시스템 타입을 따라갑니다. + +### QueryPie Provisioning 활성화
-Administrator > General > User Management > Provisioning +Administrator > General > User Management > Provisioning
Administrator > General > User Management > Provisioning
-일반적인 SCIM 연동 API로는 해당 주체를 파악할 수 없으므로, SCIM API가 호출되어 사용자가 생성되면 Auth Provider는 해당 Authentication Type을 따라갑니다. -따라서, 보다 원활한 계정 플로우 관리를 위해 [SSO 계정 시스템 연동](authentication)의 절차를 먼저 진행하는 것을 권장드립니다. -이에 따른 시스템 동작은 아래와 같습니다. - -* **Authentication 미설정 (Default: Internal Database)** - * SCIM API에 의해 생성된 사용자 또는 그룹의 Auth Provider는 “QueryPie”가 되며 일반적인 bulk import의 개념으로 동작하게 됩니다. - * 로컬 쿼리파이 계정과 동일하게 관리되며, 쿼리파이에서 해당 사용자에 대한 편집, 삭제가 가능합니다. -* **Authentication 설정 (예. Okta)** - * SCIM API에 의해 생성된 사용자 또는 그룹의 Auth Provider는 해당 Identity Provider(IdP)로 표기되며 사용자의 Attribute 프로필 관리는 Administrator > General > User Management > Profile Editor의 기준으로 업데이트 관리됩니다. - * 기존 로컬 QueryPie 계정에 Username (loginId)가 동일한 사용자의 정보가 SCIM API로 업데이트 호출을 받게되면, 해당 사용자의 프로필이 IdP에 맞추어 수정되나, 쿼리파이 내 부여 권한의 유지를 목적으로 우선 Auth Provider가 해당 IdP로 변경되지 않습니다. (9.19.0 기준) - * 여전히 로컬 쿼리파이 계정과 동일하게 쿼리파이에서 해당 사용자에 대한 프로필 및 현황 편집, 삭제가 가능합니다. - * 실제 일관성 유지를 위해 사용자의 라이프사이클 관리는 IdP에서 진행하시는 것을 권장드립니다. - * 동기화된 사용자는 QueryPie 내에서 변경 및 삭제가 불가능합니다. - -### SCIM 계정 시스템 연동 가이드 바로가기 - -* [Provisioning 활성화 하기](provisioning/activating-provisioning) -* [[Okta] 프로비저닝 연동 가이드](provisioning/okta-provisioning-integration-guide) - - +1. QueryPie 앱의 Administrator > General > User Management > Provisioning 경로로 이동합니다. +2. Provisioning 우측의 `Enable` 버튼을 클릭하여 SCIM 기능을 활성화합니다. +3. SCIM Endpoint로 제공하는 주소 값을 향후 Base URL로 설정할 수 있도록 보관합니다. +4. Access Token 발급을 위해 우측의 `Generate Token` 버튼을 클릭합니다. +5. 팝업창이 나타나면 해당 Access Token 값을 향후 IdP 측 토큰 정보에 기입할 수 있도록 복사해둡니다. + 1. 이 토큰 값은 다시 조회가 어려우므로 해당 창을 닫지 않고 바로 원장이 될 Identity Provider로 넘어가는 것을 권장합니다. ([ **Okta-QueryPie Provisioning 연동** ](okta-provisioning-integration-guide) 스텝 참고) + 2. 혹시라도 토큰 값을 분실한 경우, 기존의 토큰을 삭제하고 다시 4번 단계를 통해 새로 발급받기 바랍니다. +6. `Confirm` 버튼을 눌러 창을 닫습니다. + + +**SCIM 전용 토큰 안내** +1. Access Token은 Generate Token 버튼을 통해 생성할 수 있으며, 최대 2개까지만 발급 가능합니다. +2. 토큰 값은 생성 당시 1회에 한해 노출되며 이후에는 노출되지 않습니다. +3. SCIM API 전용으로만 사용 가능하며 /api/scim/v2 외 다른 엔드포인트 호출이 불가합니다. +4. 새로 생성된 토큰은 발급일 yyyy-MM-dd 기준으로 1년까지만 유효합니다. + 1. 만료일이 도래하면 토큰은 Expired 처리되어 SCIM API 이용이 불가합니다. + 2. 관리자는 만료일이 도달하기 이전에 신규 토큰을 발급하여 기존의 IdP에 설정된 토큰을 변경해야 합니다. +5. 토큰을 선택하고 `DELETE` 버튼을 클릭하여 토큰 삭제가 가능합니다. +6. 만일 관리자가 토큰을 발급받았던 상태에서 Provisioning을 비활성화 했다가 다시 활성화 했을 경우, 기존의 토큰은 모두 비활성화 타이밍에 삭제 처리되므로, 관리자는 새로 유효한 토큰을 발급해야 합니다. + diff --git a/confluence-mdx/tests/reverse-sync/544379393/original.mdx b/confluence-mdx/tests/reverse-sync/544379393/original.mdx index 1690e438a..e71463748 100644 --- a/confluence-mdx/tests/reverse-sync/544379393/original.mdx +++ b/confluence-mdx/tests/reverse-sync/544379393/original.mdx @@ -1,44 +1,67 @@ --- -title: 'Integrations' -confluenceUrl: 'https://querypie.atlassian.net/wiki/spaces/QM/pages/544080097/Integrations' +title: 'Syslog 연동' +confluenceUrl: 'https://querypie.atlassian.net/wiki/spaces/QM/pages/544379393/Syslog' --- import { Callout } from 'nextra/components' -# Integrations +# Syslog 연동 ### Overview -Integration 메뉴에서는 외부 보안 서비스와의 연동을 간편하게 지원합니다. -다양한 보안 툴과의 연동을 통해 시스템 보안을 강화하고, 시스템의 복잡성을 줄이며, 관리 및 유지 보수를 단순화할 수 있습니다. -10.0.0 버전 현재, SIEM/SOAR 및 Secret Store 연동을 지원하고 있으며, 지원하고 있는 SIEM 서비스는 Syslog, Splunk의 2종입니다. +QueryPie에서 기록하는 로그를 Syslog 형식으로 외부로 전송하는 기능을 제공합니다. - -**SIEM이란?**
SIEM(Security Information and Event Management) 은 여러 원본으로부터 이벤트 로그 데이터의 실시간 수집 및 분석을 지원합니다. -로그의 상관 관계를 분석하고 비정상적 활동을 식별하여 적절한 조치를 취할 수 있습니다. +* 9.19.0 이전 버전까지는 UDP 프로토콜 기반 Syslog(RFC3164) 형식의 로그 전송을 지원하였습니다. +* 9.19.0 버전부터 TCP 프로토콜을 지원합니다. 또한, HTTP/HTTPS 프로토콜 기반 Splunk HEC(HTTP Event Collector) 전송을 지원합니다. + + +### Syslog Integration 설정 + +1. Administrator > General > System > Integrations 메뉴로 이동합니다. +2. Syslog 타일을 클릭하여 상세 페이지로 이동합니다. + + +**Syslog (legacy) 는 무엇인가요?**
기존 Syslog를 사용하셨던 경우 **Syslog (Legacy)** 타일이 추가로 표시됩니다. +이곳에서 기존 포맷을 유지한 상태로 Syslog를 그대로 전송받을 수 있습니다. +Legacy Format은 Syslog 프로토콜 상 Timestamp 필드가 Time Zone의 영향을 받으므로 별도로 Time Zone 설정 항목이 존재합니다. +기본값은 UTC입니다.
+1. 상세 페이지에 있는 `Configure` 버튼을 클릭하면 Destination 정보를 입력할 수 있는 팝업이 표시됩니다. +
-Administrator > General > System > Integrations +Administrator > General > System > Integrations > Syslog > Configure Destination
-Administrator > General > System > Integrations +Administrator > General > System > Integrations > Syslog > Configure Destination
- -Integration 설정을 위해서는 System admin 권한이 필요합니다. +1. Destination 정보를 생성하기 위해 다음의 정보들을 입력합니다. + 1. **Destination Name** : syslog를 수신하는 주체를 식별할 수 있도록 적당한 이름을 입력합니다. + 2. **Protocol** : syslog에서 선택 가능한 프로토콜은 TCP(기본값)와 UDP입니다. UDP는 패킷의 길이 제약사항이 있고 보안적으로 취약하므로 TCP 사용을 권장합니다. + 3. **Destination Address (Hostname)** : syslog를 수신하는 syslog server의 IP address 또는 hostname을 입력합니다. + 4. **Port** : sylog server에서 listen 하는 port를 입력합니다. (기본값 514) + 5. **Test Connection 버튼** : TCP는 syslog 서버와 통신상태를 점검할 수 있습니다. + * UDP는 프로토콜 특성상 통신 상태 점검이 불가능하여, Test Connection 버튼이 비활성화됩니다. + 6. **Select Event Items** : 이벤트 항목을 선택적으로 전송할 수 있습니다. 아래에 있는 "Select all event items, including those that may be added later.” 체크박스를 선택하면 전송 가능한 모든 이벤트를 전송합니다. + 7. Disable syslog header : syslog header 정보를 빼고 전송합니다(기본값 Yes). 일부 SIEM에서 json 파싱이 어려운 경우 syslog header를 빼기 위해 제공되는 옵션입니다. + 8. Description : 설정 정보에 대한 100자 이내의 간략한 정보를 입력합니다. +2. `OK` 버튼을 누르고 설정을 저장합니다. + 1. 설정 사항을 저장하더라도 바로 Syslog 전송이 활성화되는 것은 아닙니다. +3. 전송 시작을 하려면 페이지 좌측 상단에 있는 토글 버튼을 `ON`으로 전환합니다. + 1. 이 전송 토글 버튼은 유지 보수 등 다양한 상황에서 일시적으로 전송을 중지해야 하는 경우 사용할 수 있습니다. +4. 만약 더 이상 Syslog 전송이 필요하지 않을 경우 Delete 버튼을 통해 설정을 제거할 수 있습니다. + 1. 단, 전송 중인 상태에서는 삭제할 수 없으므로 전송 토글 버튼을 :토글off: 로 변경한 후 삭제해 주시기 바랍니다. + + +11.3.0에서 Timezone 설정이 추가되었습니다. +이전에 Syslog (Legacy)에서만 Timezone 설정을 할 수 있었으나 SIEM 관련 설정 모두(Syslog, Splunk) Timezone 설정을 할 수 있도록 변경되었습니다. +또한 New DAC Policy Management 기능에 의해 발생된 이벤트에 대한 스트리밍 전송 기능이 추가되었습니다. +(Select Event Items에서 DAC Policy Audit Logs를 선택.) -### 제공하는 기능 - -* [Syslog 연동](integrations/integrating-with-syslog) -* [Splunk 연동](integrations/integrating-with-splunk) -* [Secret Store 연동](integrations/integrating-with-secret-store) -* [Email 연동](integrations/integrating-with-email) -* [Event Callback 연동](integrations/integrating-with-event-callback) -* [OAuth 2.0을 사용하기 위한 Google Cloud API 연동](integrations/integrating-google-cloud-api-for-oauth-20) -* [Slack DM 연동](integrations/integrating-with-slack-dm) -* [OAuth Client Application](integrations/oauth-client-application) -* [Identity Providers](integrations/identity-providers) +
+image-20251009-045004.png +
diff --git a/confluence-mdx/tests/reverse-sync/568852692/original.mdx b/confluence-mdx/tests/reverse-sync/568852692/original.mdx index cb5c0118a..668bd35a6 100644 --- a/confluence-mdx/tests/reverse-sync/568852692/original.mdx +++ b/confluence-mdx/tests/reverse-sync/568852692/original.mdx @@ -1,321 +1,64 @@ --- -title: 'MongoDB 전용 가이드' -confluenceUrl: 'https://querypie.atlassian.net/wiki/spaces/QM/pages/544380381/MongoDB' +title: 'DocumentDB 전용 가이드' +confluenceUrl: 'https://querypie.atlassian.net/wiki/spaces/QM/pages/568852692/DocumentDB' --- import { Callout } from 'nextra/components' -# MongoDB 전용 가이드 +# DocumentDB 전용 가이드 -MongoDB 전용 상세 설정 가이드를 이곳에서 제공합니다. +Amazon DocumentDB 전용 상세 설정 가이드를 이곳에서 제공합니다. -### MongoDB 커넥션 등록하기 +### Cloud 동기화하는 경우 커넥션 클러스터 구조 조정 -MongoDB는 단일 호스트로 구성되는 경우 보다 Replica Set 또는 Sharded Cluster(Sharding)형태의 멀티 호스트 구조를 사용하는 경우가 많습니다. -이 경우 멀티 호스트 방식의 커넥션을 생성해야 합니다. +클라우드 동기화를 통해 생성된 클러스터 정보를 확인하며, 클러스터 엔드포인트, 읽기 전용 엔드포인트, 인스턴스 엔드포인트를 각각 용도에 맞게 접근할 수 있는 기능으로, 멀티 호스트 환경에서도 효율적으로 작동하도록 설계되었습니다. +해당 기능은 관리자 페이지 > Databases > DB Connections에서 설정할 수 있습니다. -#### 1. MongoDB의 기본적인 Connection String 구조 이해하기 - -MongoDB의 connection string은 standard, +srv 두가지가 있습니다. - -##### < Standard connection string의 구조 > - -``` -mongodb://[Hostname or IP]:[port],[Hostname or IP]:[port],[Hostname or IP]:[port]..../?[options] -``` - -* mongodb:// : standard connection string scheme -* Hostname or IP : mongodb 클러스터 멤버 호스트의 전체 도메인이름 또는 IP 주소 -* options : `/?` 뒤에 붙는 접속에 관련된 옵션. 여러 개의 옵션을 사용할 경우 `&`로 붙여서 사용합니다.
ex. `/?authSource=admin&replicaSet=rs0` - - -replica set 을 사용하는 경우 `/?` 뒤에 replicaSet=[replica set 이름] 을 입력해야 합니다. -ex. `/?replicaSet=rs0` - - - -##### < +srv connection string의 구조 > - -``` -mongodb+srv:///?[options] -``` - -* mongodb+srv:// : +srv connection string scheme -* Fully Qualified Domain Name (FQDN) : - DNS에 등록되어 있는 호스트네임과 도메인네임의 조합으로 이루어진 이름 ex. server1.example.com -* options : `/?` 뒤에 붙는 접속에 관련된 옵션. 여러 개의 옵션을 사용할 경우 `&`로 붙여서 사용합니다.
ex. `/?authSource=admin&replicaSet=rs0` - - -+srv 는 클러스터에 포함되어 있는 각각의 호스트의 주소가 동적으로 바뀔 수 있기 때문에 QueryPie에서 +srv를 직접 커넥션에 사용할 수는 없고 standard connection string으로 변환해서 사용하게 됩니다. -이런 변환과정으로 인해 현재 +srv 를 사용하여 접속하는 경우 하위 인스턴스에 직접 접속은 지원하지 않습니다. -그럼에도 불구하고 +srv 접속 환경의 하위 호스트에 대한 직접 접속이 필요한 경우, 사용자가 nslookup 명령을 사용하여 DNS 조회를 통해 각 호스트 정보를 확인 후 별도 standard connection string을 사용한 커넥션을 생성해서 접속해야 합니다. - - -#### 2. MongoDB 커넥션 생성하기 - -
-Administrator > Databases > Connection Management > DB Connections > Create Connection -
-Administrator > Databases > Connection Management > DB Connections > Create Connection -
-
- -1. Administrator > Databases > Connection Management > DB Connections 메뉴로 이동합니다. -2. 우측 상단의 `Create Connection` 버튼을 클릭합니다. -3. 데이터 소스 선택 단계에서 mongoDB를 선택합니다. - -#### 3. Replica Set 형태로 설정하기 - -##### < Standard Connection > - -
-image-20240730-114050.png -
- -1. Allowed Zone에 알맞은 네트워크 zone 설정을 합니다. -2. Connection Name을 지정합니다. -3. `Cluster` 스위치를 를 켜서 클러스터 입력을 활성화한 후 다음의 정보들을 입력합니다. - 1. Type : 커넥션 정보에 노출되는 영역입니다. Primary 역할이 동적으로 바뀔 수 있으므로 기본값인 `Primary` 를 선택합니다. - 2. Expose : Connection 정보 화면 또는 agent의 접속대상 목록에 클러스터의 하위 노드(호스트 또는 인스턴스)를 펼쳐 볼수 있도록 하려면 `Expandable`을, 펼쳐 볼수 없도록 하려면 `Unexpandable`을, 클러스터를 숨기고 하위 노드(호스트 또는 인스턴스)들만 표시하려면 `Hidden`을 선택합니다. - 3. Connection String : - 1. Scheme 선택항목에서 `mongodb://` 를 선택합니다. - 2. 하위 호스트 이름과 포트를 쉼표로 구분하여 입력합니다. - 4. `Add Instance` 버튼을 눌러 각 멤버 호스트를 인스턴스로 추가합니다. - 1. Instance Name : 각각의 호스트를 구별할 수 있는 이름을 입력합니다. - 2. Connection String : 각 호스트를 `HOSTNAME(FQDN or IP Address):[PORT]` 형식으로 입력합니다. - 3. Expose 는 커넥션 정보에서의 개별 인스턴스의 노출 여부를 결정할 수 있는 옵션입니다.
**멀티호스트 기능을 사용하기 위해서는 반드시 인스턴스가 expose 상태여야 하므로 반드시** `Expose` **옵션을 활성화 시킵니다.** - -
-image-20240730-114226.png -
- -1. Authentication DB : Authentication DB(authSource)의 값을 입력합니다. -2. Other Options : Connection string에 사용하는 옵션 중 authSource를 제외한 나머지 값을 입력합니다.
예시 1) 단일 옵션만 사용하는 경우 형식 ( [Key]=[Value] ) : replicaSet=rs0
예시 2) 다중 옵션을 사용하는 경우 형식 ( [Key]=[Vaule]&[Key]=[Value] ) : replicaSet=rs0&tls=true
**replica set 구성인 경우 replicaSet=[replicaset name] 옵션을 입력해야 합니다.** -3. Secret Store : 암호 및 키 관리를 3rd party를 사용할 경우를 위한 옵션입니다. 기본값 Querypie는 QueryPie 내부에서 관리하는 것을 의미합니다. -4. User Name & Password : 해당 데이터베이스의 사용자 이름과 비밀번호를 입력합니다. -5. `Test Connection` 버튼을 클릭하여, 입력한 접속 정보가 유효한지 확인할 수 있습니다. -6. `Next` 버튼을 통해 마무리하고 저장합니다. - - -Cluster 모드에 대한 더 자세한 내용은 [DB Connections](.)에서도 확인할 수 있습니다. - -______ - -##### < +srv Connection > - -
-image-20240730-114540.png -
- -1. Allowed Zone에 알맞은 네트워크 zone 설정을 합니다. -2. Connection Name을 지정합니다. -3. `Cluster` 스위치를 를 켜서 클러스터 입력을 활성화한 후 다음의 정보들을 입력합니다. - 1. Type : 커넥션 정보에 노출되는 영역입니다. Primary 역할이 동적으로 바뀔 수 있으므로 기본값인 `Primary` 를 선택합니다. - 2. Expose : Connection 정보 화면 또는 agent의 접속대상 목록에 클러스터의 하위 노드(호스트 또는 인스턴스)를 펼쳐 볼수 있도록 하려면 `Expandable`을, 펼쳐 볼수 없도록 하려면 `Unexpandable`을, 클러스터를 숨기고 하위 노드(호스트 또는 인스턴스)들만 표시하려면 `Hidden`을 선택합니다. - 3. Connection String : - 1. Scheme 선택항목에서 `mongodb+srv://` 를 선택합니다. - 2. 도메인 형식의 호스트 이름(FQDN)을 입력합니다. - 3. `Lookup` 버튼을 누릅니다. 정상적으로 DNS 조회가 되었다면 클러스터 포함된 노드가 인스턴스로 자동으로 추가 됩니다. - 4. Authentication DB 및 Other Options - 1. Authentication DB 값과 Other Options에도 DNS의 TXT레코드에서 조회된 값이 자동으로 입력됩니다. - 2. +srv 스킴은 TLS 옵션이 자동으로 true이므로 standard string으로 변환하면 tls=true를 수동으로 입력해줘야 합니다. (TXT 레코드에 TLS 옵션이 없기 때문입니다.) 따라서 Other options 항목에 위 그림과 같이 &tls=true를 입력합니다. -4. Secret Store : 암호 및 키 관리를 3rd party를 사용할 경우를 위한 옵션입니다. 기본값 Querypie는 QueryPie 내부에서 관리하는 것을 의미합니다. -5. User Name & Password : 해당 데이터베이스의 사용자 이름과 비밀번호를 입력합니다. -6. `Test Connection` 버튼을 클릭하여, 입력한 접속 정보가 유효한지 확인할 수 있습니다. -7. `Next` 버튼을 통해 마무리하고 저장합니다 - -#### 4. Sharded Cluster(Sharding) 형태로 설정하기 - -Sharded Cluster는 Replica Set과 Connection String의 옵션만 다르고 설정 방법은 같습니다. -Replica Set은 replicaSet=[replica set name] 옵션이 필요하지만 Sharded Cluster는 이 옵션이 필요 없습니다. - -
-image-20240730-114833.png -
- -##### < Standard Connection > - -1. `Cluster` 스위치를 를 켜서 클러스터 입력을 활성화한 후 다음의 정보들을 입력합니다. - 1. Type : 커넥션 정보에 노출되는 영역입니다. Primary 역할이 동적으로 바뀔 수 있으므로 Primary 값을 유지합니다. - 2. Connection String : - 1. Scheme 선택항목에서 `mongodb://` 를 선택합니다. - 2. 각 mongos의 호스트 이름과 포트를 쉼표로 구분하여 입력합니다. - 3. `Add Instance` 버튼을 눌러 각 mongos를 인스턴스로 추가합니다. - 1. `mongodb://HOSTNAME(FQDN or IP Address):[PORT]` 형식으로 입력 후 Instance Name을 알맞게 입력합니다. - 2. Expose 는 커넥션 정보에서의 노출 여부를 결정할 수 있는 값입니다. -2. Authentication DB : Authentication DB(authSource)의 값을 입력합니다. -3. Other Options : Sharded cluster는 별도 추가 옵션이 필요하지 않을 수 있습니다. -4. Secret Store : 암호 및 키 관리를 3rd party를 사용할 경우를 위한 옵션입니다. 기본값 Querypie는 QueryPie 내부에서 관리하는 것을 의미합니다. -5. User Name & Password : 해당 데이터베이스의 사용자 이름과 비밀번호를 입력합니다. -6. `Test Connection` 버튼을 클릭하여, 입력한 접속 정보가 유효한지 확인할 수 있습니다. -7. `Next` 버튼을 통해 마무리하고 저장합니다. -______ - -##### < +srv Connection > - -standard string으로 변환된 뒤 tls=true 옵션만 Other options에 잘 넣어주면 됩니다. -replica set 설정과 차이가 없습니다. - - -Cluster 모드에 대한 더 자세한 내용은 [DB Connections](.)에서도 확인할 수 있습니다. - - -### Proxy를 사용하는 경우 TLS(SSL) 설정 - -위에서 안내된 바와 같이 QueryPie의 SQL editor를 사용하여 접속하는 경우 커넥션 스트링에 tls=true가 필요합니다. - -> +srv 스킴은 TLS 옵션이 자동으로 true이므로 standard string으로 변환하면 **tls=true** 를 수동으로 입력해줘야 합니다.> (TXT 레코드에 TLS 옵션이 없기 때문입니다.) 따라서 Other options 항목에 위 그림과 같이 **&tls=true** 를 입력합니다. -Proxy를 사용하는 경우 DataGrip등의 SQL Client에서 TLS 설정과 별개로 QueryPie에서도 SSL 설정이 필요합니다.
[SSL Configurations](../ssl-configurations)를 참고하여 설정 후 커넥션의 SSL 설정에 반영해야 합니다.
- -
-image-20240731-050745.png -
- - -______ - - -### MongoDB 데이터 정책 및 규칙 설정 - -MongoDB 에 개인정보 또는 민감정보와 같이 접근 제한이 필요한 데이터는 조회 시 해당 데이터를 확인할 수 없도록 Collection, JSON Value에 대해 데이터 접근 제한 및 마스킹 정책을 설정할 수 있습니다. -QueryPie에서 지원하는 DBMS 중 MongoDB의 경우 항상 데이터를 JSON 형태로 저장하기 때문에 별도의 포맷팅 로직을 사용하게 됩니다. - - -최초 정책 생성은 아래 링크를 확인해주세요. - -* [Data Masking](../../policies/data-masking) -* [Data Access](../../policies/data-access) - -#### 마스킹 정책에 규칙 등록하기 - -
-Administrator > Databases > Policies > Data Masking > Add Rule List -
-Administrator > Databases > Policies > Data Masking > Add Rule List -
-
- -1. 정책을 생성하고 나면, 실제로 정책을 적용할 데이터의 경로를 규칙으로 등록합니다.
Rule List 탭에서 규칙이 등록된 것을 확인할 수 있습니다. 이제 사용자가 MongoDB 에서 해당 Collection 의 Document 를 조회할 경우 적용한 마스킹 패턴에 따라 사전에 지정한 Attribute 의 Value 값이 `*****@gmail.com`와 같이 마스킹되어 표시됩니다. - 1. Data Masking 메뉴에서 생성한 정책을 클릭합니다. - 2. 정책 세부 정보 및 규칙 등록 화면이 표시되고 우측에서 `Add Rule List` 버튼을 클릭합니다. - 3. 정책을 적용할 데이터의 경로를 차례대로 선택합니다. - 1. Database Name : 규칙 등록을 위한 필수 값입니다. - 2. Table Name : MongoDB 의 경우 Collection 이름을 입력합니다. - 3. Column Name : MongoDB 의 경우 Document 내에서 마스킹을 적용할 JSON Attribute 값을 입력합니다. - 4. 마스킹 패턴을 적용합니다. - 1. 3번에서 선택한 컬럼에 적용할 마스킹 패턴을 1개 이상 선택합니다. - 2. 기본적으로 20여가지의 개인정보 및 민감정보를 마스킹하는 패턴을 제공합니다. - 3. Masking Pattern 메뉴에서 정규식을 통해 직접 탐지 패턴과 마스킹 패턴을 생성할 수 있습니다. - 5. 해당 데이터 조회가 필요한 사용자 또는 그룹에 한해 마스킹 규칙을 예외 처리할 수 있습니다. - 1. Allowed Users : 해당 규칙을 예외처리할 사용자 또는 그룹을 선택합니다. - 6. `Ok` 버튼 통해 저장합니다. - -#### Collection / JSON Value 접근 제한 정책에 규칙 등록하기 - -정책을 생성하고 나면, 실제로 정책을 적용할 데이터의 경로를 규칙으로 등록합니다. +클라우드 동기화 후 아래 화면과 같이 첫 번째 클러스터에 Cluster endpoint 주소, 두 번째 클러스터에 읽기 전용 endpoint 주소, 세 번째 클러스터에 인스턴스 endpoint 주소를 사용한 멀티호스트 connection string을 보여줍니다. +인스턴스 endpoint로 접속하는 것보다 Cluster endpoint 를 사용하는 것을 권고합니다.
-Administrator > Databases > Policies > Data Access > Add Rule List -
-Administrator > Databases > Policies > Data Access > Add Rule List -
+image-20240122-102557.png
-1. Data Access 메뉴에서 생성한 정책을 클릭합니다. -2. 정책 세부 정보 및 규칙 등록 화면이 표시되고 우측에서 `Add Rule List` 버튼을 클릭합니다. -3. 정책을 적용할 데이터의 경로를 차례대로 선택합니다. - 1. Database Name : 규칙 등록을 위한 필수 값입니다. - 2. Table Name : 규칙 등록을 위한 필수 값입니다. 테이블만 선택할 경우, 해당 테이블 조회 자체가 불가능하도록 제한됩니다. MongoDB 의 경우 Collection 이름을 입력합니다. - 3. Column Name : MongoDB 에서는 Document 내의 특정 Value 에 대하여 데이터 접근을 제한하고자 하는 경우 JSON Attribute 값을 입력합니다. -4. 해당 데이터 조회가 필요한 사용자 또는 그룹에 한해 접근 제한 규칙을 예외 처리할 수 있습니다. - 1. Allowed Users : 해당 규칙을 예외처리할 사용자 또는 그룹을 선택합니다. -5. `Ok` 버튼 통해 저장합니다. - -Rule List 탭에서 규칙이 등록된 것을 확인할 수 있습니다. -이제 사용자가 해당 데이터를 조회하면, 테이블에 정책이 적용된 경우 테이블 자체를 조회할 수 없고, 컬럼에 규칙이 적용된 경우 *`{RESTRICTED}`* 로 표시됩니다. - -#### JSON PATH 예시 +### Amazon DocumentDB TLS(SSL) 사용하기 -정책을 적용할 MongoDB의 데이터의 예시는 다음과 같습니다. -``` -{ - _id: ObjectId("64b3f7ad344ac8c881a09dc6"), - item: "journal", - qty: 25, - tags: ["blank", "red"], - size: { - h: 14, - w: 21, - uom: "cm" - } -} -``` +AWS에서 새로운 DocumentDB를 생성하면 TLS를 사용하여 전송구간 암호화를 사용할 수 있고 사용자가 선택적으로 옵션을 끌 수 있습니다. +Amazon DocumentDB 클러스터에 대한 전송 중 데이터 암호화는 클러스터 파라미터 그룹의 TLS 파라미터를 통해 관리됩니다. +AWS Management Console 또는 AWS Command Line Interface (AWS CLI)를 사용하여 Amazon DocumentDB 클러스터 TLS 설정을 관리할 수 있습니다. [참고](https://docs.aws.amazon.com/ko_kr/documentdb/latest/developerguide/security.encryption.ssl.html#security.encryption.ssl.managing)
Amazon DocumentDB에서 TLS가 활성화 되어 있는 경우 접속을 위해 AWS에서 제공하는 CA 번들 인증서가 필요합니다. -##### Case 1. item 속성 접근 제한 +#### CA 번들 인증서 등록하기 -
-Administrator > Databases > Policies > Data Access > Add Rule List -
-Administrator > Databases > Policies > Data Access > Add Rule List -
-
+AWS에서는 region에 상관없이 공동으로 사용할 수 있는 [global 번들 인증서](https://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/UsingWithRDS.SSL.html#UsingWithRDS.SSL.CertificatesAllRegions)와 [region별 번들 인증서](https://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/UsingWithRDS.SSL.html#UsingWithRDS.SSL.RegionCertificates) 두 가지 종류를 제공합니다. -하나의 속성에 대해 접근제한 정책을 설정할 경우 “Column Name” 항목에 해당하는 item을 입력 후 `OK` 버튼을 클릭합니다. +1. 번들 인증서를 다운로드 받습니다. +2. QueryPie 관리자 콘솔에서 Databases > Connection Management > SSL Configurations 메뉴로 이동합니다.
-image-20240730-120312.png +image-20240730-112808.png
-위 스크린샷과 같이 item(“T_PWD”) 속성의 값이 “Restricted Column”으로 표시되는 것을 확인할 수 있습니다. - -##### Case 2. size.h 속성 접근 제한 - -size하위의 h속성에 대해 접근제한 정책을 설정할 경우 “Column Name” 항목에 `$.size.h`을 입력 후 `OK` 버튼을 클릭합니다. - -
-Administrator > Databases > Policies > Data Access > Add Rule List -
-Administrator > Databases > Policies > Data Access > Add Rule List -
-
+1. 우측 상단에 있는 `Create SSL` 버튼을 누릅니다. +2. `Name` 항목에 식별이 용이하도록 이름을 지정합니다. +3. `SSL Mode`에서 `Required`를 선택합니다. +4. 다운로드 받은 번들 인증서 (확장명 .pem 파일)를 텍스트 편집기로 열고 전체 내용을 복사해서 `CA Certificate` 항목에 붙여 넣습니다. +5. `Save` 버튼을 눌러 설정을 저장합니다.
-image-20240730-120215.png +image-20240220-225433.png
-위 스크린샷과 같이 size 하위의 h속성의 값이 “Restricted Column”으로 표시되는 것을 확인할 수 있습니다. - -##### Case 3. size 하위 모든 속성 접근 제한 - -size 하위의 모든 속성에 대해 접근제한 정책을 설정할 경우 “Column Name” 항목에 `$.size`을 입력 후 `OK` 버튼을 클릭합니다. +#### DocumentDB에 인증서 매핑하기 -
-Administrator > Databases > Policies > Data Access > Add Rule List -
-Administrator > Databases > Policies > Data Access > Add Rule List -
-
- -
-image-20240730-120421.png -
- -위 스크린샷과 같이 size 하위의 모든속성의 값이 “Restricted Column”으로 표시되는 것을 확인할 수 있습니다. - -##### Case 4. tags 속성의 리스트 2번째 값에 대한 접근 제한 - -tags속성의 리스트 값 중 2번째 값에 대한 접근제한 정책을 설정할 경우 “Column Name” 항목에 `$.tags[1]`을 입력 후 `OK` 버튼을 클릭합니다. - -
-Administrator > Databases > Policies > Data Access > Add Rule List -
-Administrator > Databases > Policies > Data Access > Add Rule List -
-
+1. Adminstrator > Databases > Connection Management > DB Connections 메뉴로 이동합니다. +2. 클라우드 동기화를 통해 생성되어 있는 DocumentDB 커넥션을 선택합니다. +3. 아래로 스크롤하여 **SSL / SSH Setting** 탭으로 이동합니다. +4. `Use SSL` 체크박스를 체크하여 활성화시킨 뒤 **SSL Configurations** 에서 앞단계(CA 번들 인증서 등록하기)에서 등록한 설정 이름을 선택합니다.
-image-20240730-120544.png +image-20240220-230604.png
-위 스크린샷과 같이 tags속성의 2번째 값이 “Restricted Column”으로 표시되는 것을 확인할 수 있습니다. +1. 우측상단의 `Save Changes` 버튼을 눌러 설정을 저장합니다. diff --git a/confluence-mdx/tests/reverse-sync/862093313/original.mdx b/confluence-mdx/tests/reverse-sync/862093313/original.mdx index 43dbf2982..2a6c3f637 100644 --- a/confluence-mdx/tests/reverse-sync/862093313/original.mdx +++ b/confluence-mdx/tests/reverse-sync/862093313/original.mdx @@ -1,126 +1,156 @@ --- -title: '설치 후 초기 설정' -confluenceUrl: 'https://querypie.atlassian.net/wiki/spaces/QM/pages/1907294209' +title: '시스템 아키텍처와 네트워크 접근제어' +confluenceUrl: 'https://querypie.atlassian.net/wiki/spaces/QM/pages/862093313' --- -import { Callout } from 'nextra/components' +# 시스템 아키텍처와 네트워크 접근제어 -# 설치 후 초기 설정 -운영 환경에 따라 설치 이후 필수적으로 수행이 필요한 설정들을 안내합니다. +### 시스템 아키텍처 -### 공통 설정 +QueryPie Server, QueryPie User Agent, User PC 의 Web Browser, 그리고 이용자의 접근 대상인 Database, Linux Server 등의 시스템이 어떻게 구성되고 연결되는지 알아봅니다. -설치 직후 QueryPie 사용 시 필요한 공통 절차입니다. +#### 시스템 아키텍처 구성도 -#### QueryPie Web Base URL 설정 +이 시스템 아키텍처는 단일 리눅스 서버에 QueryPie Service 를 설치하는 경우의 아키텍처입니다. +TLS 인증서를 적용한 웹서비스, 고가용성을 위한 다중화 구성 등을 포함하지 않습니다. -> 설정 경로: Admin Page → General -Web Console 에 접근하기 위한 QueryPie 의 URL 주소입니다. -(예시. `https://querypie.customer.com`) 이 URL 은 QueryPie 의 Base URL 이라고 부르기도 합니다. +
+Overview of QueryPie System Architecture +
+Overview of QueryPie System Architecture +
+
-이 URL 은 `/` 로 끝나지 않아야 합니다. `https://querypie.customer.com/` 와 같이 URL 의 마지막에 `/` 를 붙이지 않도록 주의하여 주세요. +각 컴포넌트에 대한 설명은 다음과 같습니다. -이 URL 은 아래의 용도로 사용됩니다. +#### User PC 의 Web Browser -* SSO Integration 의 인증 과정에서, callback 주소로 사용됩니다. -* Web Console 에서 User Agent 를 내려받는 링크에 사용됩니다. -* 그 외 자세한 용도는, [QUERYPIE_WEB_URL](container-environment-variables/querypieweburl)를 참조하시기 바랍니다. +이용자의 PC 에서 웹 브라우저를 통해 QueryPie 웹 서비스에 접속합니다. +QueryPie 를 이용하기 위해서는 웹 브라우저가 필수적입니다. +QueryPie 관리자, 보안정책 운영자는 QueryPie Web Console 을 통해 QueryPie 서비스를 관리합니다. +또한, QueryPie 사용자는 QueryPie Web SQL Editor, Web Terminal 을 통해 대상 시스템에 접근할 수 있습니다. -
-QueryPie Web Base URL 설정 화면 -
-QueryPie Web Base URL 설정 화면 -
-
+#### User PC 의 QueryPie User Agent -### 제품별 설정 +User PC 에서 작동하는 Database Client Application, SSH Client Application 를 이용하는 경우, QueryPie User Agent 가 필요합니다. +QueryPie User Agent 는 User PC 에서 작동하는 Local Proxy Agent 의 역할을 수행합니다. +QueryPie Web Console 에 로그인하면, QueryPie User Agent 를 다운로드 받을 수 있습니다. -#### DAC/SAC: Proxy 접속 주소 설정 +QueryPie User Agent 는 User PC 에서 작동하는 대부분의 Database Client Application, SSH Client Application 을 지원합니다. +(이후 `3rd Party Tool` 이라고 표기합니다.) 구체적인 사례는 이 문서를 참조하세요: [Supported 3rd Party Tools (KO)](https://querypie.atlassian.net/wiki/spaces/QCP/pages/919404587) -QueryPie Database 에 접속하여, DAC/SAC 의 Proxy 접속을 위한 주소를 등록합니다. +#### QueryPie Server - -QueryPie Web Console 에서 QueryPie Database 에 연결하려면, DB 연결 설정이 필요합니다: [DB Connections](../administrator-manual/databases/connection-management/db-connections) +Linux VM 에서 작동하는 QueryPie Server 는 Web Console, Web SQL Editor, Web Terminal 을 웹서비스로 제공합니다. +또한 SQL protocol, ssh protocol을 이해하고 접근제어를 수행하는 Proxy server를 제공하는 핵심적 역할을 수행합니다. -Database 연결 설정 과정에서 QueryPie MySQL 의 Hostname, Username, Password 가 필요합니다. +QueryPie Server 는 두 가지 컴포넌트를 필요로 합니다. -* Hostname: `host.docker.internal` -* Username: `querypie` (기본 설정의 경우) -* Password: QueryPie 를 설치한 디렉토리의 환경변수 파일에서 `DB_PASSWORD` 를 확인하세요. - * setup.v2.sh 로 설치한 경우: `.env` 파일 - * setup.sh 로 설치한 경우: `compose-env` 파일 +* QueryPie Database +* QueryPie Redis -환경변수 파일에 설정된 값 중 `DB_PASSWORD`, `REDIS_PASSWORD`, `KEY_ENCRYPTION_KEY` 등은 안전하게 보관하여야 합니다. -다른 사람에게 이 값을 노출하지 않도록 주의하여 주세요. - +#### QueryPie Database -아래 `` 부분을 고객사의 Proxy 접속 IP 혹은 도메인으로 갈음하여 쿼리를 수행합니다. +QueryPie Database 는 QueryPie Server 의 작동을 위한 데이터를 저장합니다. +QueryPie 의 User Account, Admin Account, 연결 대상 시스템의 정보, 접근제어 정책 등을 저장합니다. +뿐만 아니라, User 의 Query Log, System Access Log 등 Audit 정보를 저장합니다. - -해당 주소는 `http` `https` 와 같은 Scheme 을 붙여서는 안 됩니다. - -``` -UPDATE querypie.proxies SET host = '' WHERE id = 1; -``` +MySQL, MariaDB 또는 호환되는 Database 를 QueryPie Database 로 사용할 수 있습니다. -쿼리 실행에 에러 없이 정상적으로 수행이 확인되었으면, 아래 쿼리를 수행하여 등록이 되었는지 확인합니다. -``` -SELECT * FROM querypie.proxies; -``` +* AWS Aurora MySQL +* GCP Cloud SQL for MySQL -Proxy 접속을 위한 주소를 QueryPie Database 에 등록한 이후, Server Container 를 재시작하지 않아도 됩니다. -User Agent 에서 로그인을 시도하면, 웹브라우저를 통해 인증을 진행한 이후, User Agent 를 사용할 수 있는 상태가 됩니다. +#### QueryPie Redis -
-DAC/SAC Proxy 접속 주소 설정 화면 -
-DAC/SAC Proxy 접속 주소 설정 화면 -
-
+QueryPie Redis 는 QueryPie Server 의 작동을 위한 Cache 역할을 수행합니다. +QueryPie Server 가 작동하기 위해, 필수로 요구되는 컴포넌트입니다. -#### KAC: Proxy 접속 주소 설정 +#### Target Database -QueryPie Database 에 접속하여, KAC 의 Proxy 접속을 위한 주소를 등록합니다. +이용자가 접근을 원하는 Database 서버입니다. +QueryPie Server 는 이용자와 Target Database 사이의 중계 역할을 수행합니다. -아래 `` 부분을 고객사의 Proxy 접속 IP 혹은 도메인으로 갈음하여 쿼리를 수행합니다. +#### Target Server System -특이사항으로 DAC/SAC 설정과는 다르게 `http` `https` 와 같은 Scheme을 자유롭게 입력 가능합니다. +이용자가 접근을 원하는 Linux Server, Windows Server 등의 시스템입니다. +QueryPie Server 는 이용자와 Target Server System 사이의 중계 역할을 수행합니다. - -설정 후, 내부적으로 등록한 주소에 맞는 TLS 인증서 발급을 위해 QueryPie Container 재 기동이 필요합니다. - -``` -UPDATE querypie.k_proxy_setting SET host = 'https://'; -``` +### 네트워크 접근제어 설정 -
-KAC Proxy 접속 주소 설정 화면 -
-KAC Proxy 접속 주소 설정 화면 -
-
+#### 네트워크 접근 유형 + +QueryPie 가 설치된 Linux VM 을 중심으로, 네트워크 연결을 Outbound, Inbound, 두 가지 유형으로 구분합니다. + +* Outbound : QueryPie 가 설치된 Linux VM 에서, 외부 인터넷으로 연결하는 네트워크 접근입니다. +* Inbound : 이용자의 PC 또는 고객사 내부 네트워크에서, QueryPie 가 설치된 Linux VM 으로 연결하는 네트워크 접근입니다. + +#### 소프트웨어 설치를 위한 네트워크 접근 + +| **Access Type** | **Source** | **Destination** | **Protocol** | **Port** | **Description** | +| ----------------- | --------------- | --------------------------------------------------------------------------------------------------------------------- | -------------- | ---------- | ---------------------------------------------------------------------------- | +| Outbound | QueryPie Server | FQDN: `dl.querypie.com`
IPv4 Address:
`18.67.51.51`,
`18.67.51.67`,
`18.67.51.73`,
`18.67.51.76` | TCP | 443 | 제품 설치를 위한 설정파일을 내려받는 website 입니다. | +| Outbound | QueryPie Server | FQDN: `harbor.querypie.io`
IPv4 Address:
`15.164.47.8`, `52.79.197.102` | TCP | 443 | 제품 설치를 위해, Docker Image 를 내려받는 website 입니다. docker 용어로는 Docker Registry 입니다. | + +#### 제품 사용을 위한 네트워크 접근 + +아래의 항목은 제품 사용을 위한 네트워크 접근을 설명합니다. +QueryPie 제품의 기능에 따라, 공통, DAC, SAC, KAC, WAC 로 구분합니다. + +#### 공통 + +| **Access Type** | **Source** | **Destination** | **Service** | **Protocol** | **Port** | **Description** | +| ----------------- | ------------------ | ---------------------------------------------------- | ------------- | -------------- | ---------- | ------------------------------------------------- | +| Inbound | PC of Admin User | QueryPie Server | SSH | TCP | 22 | Installation and management | +| Inbound | PC of Admin User | QueryPie Server | HTTP | TCP | 80 | QueryPie Web Console | +| Inbound | PC of Admin User | QueryPie Server | HTTPS | TCP | 443 | QueryPie Web Console | +| Inbound | PC of Admin User | QueryPie Server | Custom TCP | TCP | 9000 | QueryPie Proxy for User Agent | +| Inbound | PC of Admin User | QueryPie Server | MySQL | TCP | 3306 | (Optional) QueryPie Meta DB | +| Inbound | PC of Admin User | QueryPie Server | Redis | TCP | 6379 | (Optional) QueryPie CacheDB | +| Inbound | All the users
| QueryPie Server
or
Application Load Balancer | HTTP | TCP | 80 | QueryPie Web Console | +| Inbound | All the users
| QueryPie Server
or
Application Load Balancer | HTTPS | TCP | 443 | ( **Recommended** ) QueryPie Web Console | +| Inbound | All the users
| QueryPie Server
or
Network Load Balancer | Custom TCP | TCP | 9000 | ( **Recommended** ) QueryPie Proxy for User Agent | + +#### DAC + +| **Access Type** | **Source** | **Destination** | **Type** | **Protocol** | **Port Range** | **Description** | +| ----------------- | ---------------------------------------------- | ----------------- | ---------- | -------------- | ---------------- | -------------------------------------------------- | +| Inbound | Users or Systems connecting to Agentless Proxy | QueryPie Server | Custom TCP | TCP | 40000 - 41000 | ( **Recommended** ) QueryPie Agentless Proxy | +| Inbound | Users or Systems connecting to Agentless Proxy | QueryPie Server | Custom TCP | TCP | 41001 - 45000 | (Optional) More ports for QueryPie Agentless Proxy | + +#### SAC +| **Access Type** | **Source** | **Destination** | **Type** | **Protocol** | **Port** | **Description** | +| ----------------- | --------------- | ---------------------- | ---------- | -------------- | ---------- | ------------------------------------------------------------------ | +| Outbound | QueryPie Server | Target Linux Servers | SSH | TCP | 22 | When Users access target linux machines via QueryPie | +| Outbound | QueryPie Server | Target Windows Servers | RDP | TCP | 3389 | When Admin installs QueryPie RDP Agent on target Windows Servers. | +| Outbound | QueryPie Server | Target Windows Servers | Custom RDP | TCP | 13389 | When Users access target Windows Servers via QueryPie | +| Outbound | QueryPie Server | Target Windows Servers | Custom TCP | TCP | 13390 | Obsoleted - Port 13390 is not used anymore since version 10.2.2 | -#### WAC: Proxy 접속 주소 설정 +#### KAC -> 설정 경로: Admin Page → Web Apps → Web App Configurations -WAC의 Proxy 접속 주소 설정은 Web Console 에서 수행 가능합니다. +| **Access Type** | **Source** | **Destination** | **Type** | **Protocol** | **Port** | **Description** | +| ----------------- | --------------- | ------------------------------------------------ | ---------- | -------------- | ---------- | -------------------------------------------------- | +| Inbound | All the users | QueryPie Server
or
Network Load Balancer | Custom TCP | TCP | 6443 | From Users to QueryPie KAC Proxy | +| Outbound | QueryPie Server | Target Kubernetes Cluster | Custom TCP | TCP | 6443 | From QueryPie Server to target Kubernetes Clusters | -자세한 설정 절차는 다음 문서를 참조하세요: [Web App Configurations에서 WAC 초기 설정하기](../administrator-manual/web-apps/wac-quickstart/initial-wac-setup-in-web-app-configurations) +#### WAC - -설정 후, 내부적으로 등록한 주소에 맞는 TLS 인증서 발급을 위해 QueryPie Container 재 기동이 필요합니다. - +| **Access Ty** pe | **Source** | **Destination** | **Type** | **Protocol** | **Port** | **Description** | +| ----------------- | ------------------ | ------------------------------------------------ | ---------- | -------------- | ---------- | -------------------------------- | +| Inbound | All the users
| QueryPie Server
or
Network Load Balancer | Custom TCP | TCP | 7447 | From Users to QueryPie WAC Proxy | +### Load Balancers 설정 -### 제품 설치가 완료되었습니다 +부하분산, 장애내성을 갖추기 위해, QueryPie Service 에 Load Balancer 를 적용하는 설정을 표로 설명합니다. -설치 후 초기 설정 과정을 진행한 것으로, QueryPie ACP 제품을 사용할 수 있는 준비가 완료되었습니다. -수고하셨습니다~! +| **LB** | **Listener** | **Target** | **Health Check** | **LB Option** | **Description** | +| ---------------------------------- | -------------- | ------------------ | ------------------------- | --------------- | ------------------------- | +| Application Load Balancer
(L7) | HTTP / 80 | - | None | default | Redirection to HTTPS | +| Application Load Balancer
(L7) | HTTPS / 443 | http://querypie:80 | http://querypie:80/readyz | Sticky Session | QueryPie Web Console | +| Network Load Balancer
(L4) | TCP / 9000 | querypie:9000 | http://querypie:80/readyz | default | QueryPie Agent (DAC, SAC) | +| Network Load Balancer
(L4) | TCP / 6443 | querypie:6443 | http://querypie:80/readyz | default | QueryPie Agent (KAC) | +| Network Load Balancer
(L4) | TCP / 7447 | querypie:7447 | http://querypie:80/readyz | default | QueryPie Agent (WAC) | -이후 다음의 문서를 참조하여, 관리자 설정을 진행하고, 제품을 사용할 수 있습니다. -* [관리자 매뉴얼](../administrator-manual) -* [사용자 매뉴얼](../user-manual) diff --git a/confluence-mdx/tests/reverse-sync/920944732/original.mdx b/confluence-mdx/tests/reverse-sync/920944732/original.mdx index 450ff601c..0e77bbc5c 100644 --- a/confluence-mdx/tests/reverse-sync/920944732/original.mdx +++ b/confluence-mdx/tests/reverse-sync/920944732/original.mdx @@ -1,167 +1,68 @@ --- -title: '사용자 프로필' -confluenceUrl: 'https://querypie.atlassian.net/wiki/spaces/QM/pages/544376787' +title: 'qp-admin 기본 계정에 대한 패스워드 변경 강제화 및 계정 삭제 기능' +confluenceUrl: 'https://querypie.atlassian.net/wiki/spaces/QM/pages/920944732/qp-admin' --- import { Callout } from 'nextra/components' -# 사용자 프로필 +# qp-admin 기본 계정에 대한 패스워드 변경 강제화 및 계정 삭제 기능 ### Overview -사용자 프로필에 등록된 속성으로 Attribute-based Access Control (ABAC)을 구현할 수 있습니다. -이 문서에서는 사용자 상세 정보 항목별 상세 내용을 안내합니다. - - -### Profile - -사용자의 Attribute(속성)을 조회할 수 있는 탭입니다. -각 Attribute별 설명은 이 페이지 하단의 **참고: 사용자 Attribute 목록** 항목을 참고하여 주시기 바랍니다. - -
-Administrator > General > User Management > Users > List Details > Profile 탭 -
-Administrator > General > User Management > Users > List Details > Profile 탭 -
-
- -### Groups - -
-Administrator > General > User Management > Users > List Details > Groups 탭 -
-Administrator > General > User Management > Users > List Details > Groups 탭 -
-
- -사용자가 소속된 사용자 그룹을 조회할 수 있는 탭입니다. - -1. **Auth Provider** : 그룹의 관리 주체 -2. **Group Name** : 그룹명 - - -### Admin Roles - -
-Administrator > General > User Management > Users > List Details > Admin Roles 탭 -
-Administrator > General > User Management > Users > List Details > Admin Roles 탭 -
-
- -사용자에게 할당된 쿼리파이 관리자 권한 목록을 조회할 수 있는 탭입니다. - -1. **Role Name** : 관리자 역할명 -2. **Description** : 관리자 역할에 대한 설명 -3. **Granted By** : 현 사용자에게 관리자 역할을 부여한 주체 -4. **Granted At** : 관리자 역할을 부여받은 일시 - - -### Allowed Zones - -Administrator > General > Company Management > Allowed Zones 메뉴에서 생성된 Allowed Zone을 사용자에게 직접 할당하거나, 'IP Registration Request' 워크플로우를 통해 승인된 Static IP가 자동으로 적용된 내역을 확인할 수 있습니다. - -
-Allowed Zones 탭 -
-Allowed Zones 탭 -
-
+본 문서는 QueryPie의 보안 강화를 위한 주요 업데이트 중 하나로, 기본 계정인 qp-admin의 삭제 기능이 10.2.8 버전에 새롭게 추가된 배경과 동작 방식, 유의사항 등을 안내합니다. +기존에는 qp-admin 계정이 시스템에 기본 생성되며 삭제가 불가능했지만, 이로 인해 계정 노출 및 보안 취약점 악용 가능성이 지속적으로 제기되어 왔습니다. +이러한 리스크를 해소하기 위해, 해당 버전부터는 기본 계정 삭제 기능과 함께 최초 로그인 시 패스워드 변경을 필수화하는 등 보안 중심의 개선 사항이 도입되었습니다. + +### qp-admin 계정 삭제 조건 + +* 시스템에 인증 방식(Auth Provider)과 관계없이 Owner 권한을 가진 계정이 최소 1개 이상 존재해야 합니다. + * 이유는 OKTA와 LDAP으로 연동된 유저인 경우, IdP에서 삭제가 되면 Owner 계정이 한 개도 없는 경우가 발생할 수 있기 때문입니다. +* 조건 미충족 시(QueryPie 인증 방식의 Owner 유저가 1명도 없을 경우), 삭제 버튼 비활성화 됩니다. + +### qp-admin 계정 삭제 방법 + +1. Admin > General > User Management > Users 메뉴 접속합니다. +
+ <br/> +
+
+
+
+2. qp-admin 계정 선택합니다. +
+ <br/> +
+
+
+
+3. `Delete` 버튼 클릭합니다. +
+ <br/> +
+
+
+
+4. 조건 검증 후 Delete 처리합니다. -**사전 작업** -사용자별 Allowed Zone 할당을 위해서는 먼저 Admin > General > Company Management > Security 메뉴에서 사용자별 QueryPie Web 접근 IP 제어 기능을 활성화해야 합니다. [Security](../../company-management/security) 문서를 참고해주세요. +**주의사항** +* qp-admin 계정 삭제 후 복구는 불가능합니다. +* 삭제를 위해서는 최소 1명의 QueryPie 인증 방식의 Owner 유저가 존재해야 합니다. -#### 워크플로우를 통해 등록된 Static IP 확인하기 - -사용자가 'IP Registration Request' 워크플로우를 통해 IP 주소 등록을 요청하고 최종 승인되면, 해당 IP는 사용자의 **Profile** 탭에 있는 `Static IP` 속성에 자동으로 추가됩니다. - -이렇게 `Static IP` 속성에 등록된 주소들은 이 `Allowed Zone` 탭에 `Name`이 `Static IP` 인 항목으로 자동 반영되어, 사용자는 해당 IP에서의 접근 권한을 부여받게 됩니다. - -
-Screenshot-2025-06-26-at-6.12.22-PM.png -
- -#### 워크플로우를 통해 등록된 Static IP삭제하기 - -워크플로우를 통해 자동으로 등록된 `Static IP` 항목은 `Allowed Zones` 탭에서 직접 `Detach` 할 수 없습니다. -삭제하려면 사용자의 **Profile** 탭으로 이동하여 `Static IP` 속성값 중 원하는 IP 주소를 직접 편집하여 제거해야 합니다. `Static IP` 속성에서 값이 삭제되면 `Allowed Zones` 탭에서도 해당 IP가 즉시 제거되어 접근 권한이 해제됩니다. - - -#### 테이블 표시 정보 - -테이블에서 표시하는 정보는 다음과 같습니다. - -1. **Name** : Allowed Zone의 명칭 -2. **IP Bands** : Allowed Zone의 IP대역 - -#### 사용자에게 Allowed Zone 할당하기 - -Allowed Zones 탭 우측 `Attach Allowed Zones` 버튼을 클릭하면 Allowed Zone 할당 모달이 출력됩니다. -할당하고자 하는 Allowed Zone을 선택하고 `Attach` 버튼을 클릭하여 할당을 완료합니다. - -
-Attach Allowed Zone 모달 -
-Attach Allowed Zone 모달 -
-
- -#### 사용자에게서 Allowed Zone 할당 해제하기 - -Allowed Zone 탭 하단 목록에서 할당을 해제하려는 항목을 체크박스로 선택하면 `Detach` 버튼이 노출됩니다. -버튼을 클릭하고, 확인 모달에서 `Detach` 버튼을 클릭하여 할당 해제를 완료합니다. - -
-Allowed Zones 할당 해제 -
-Allowed Zones 할당 해제 -
-
- - -**Q. Tags 탭이 비활성화 되어 있어요.** -A. Tags 탭은 사용자별로 할당된 Tag를 조회하고 관리할 수 있는 탭으로 아직 미출시된 기능입니다. -추후 버전에서 지원 예정입니다. - +### qp-admin 계정 패스워드 변경 강제화 조건 +* 10.2.8 업그레이드 시 qp-admin 계정의 패스워드는 자동 만료 처리합니다. +* 로그인 시 반드시 패스워드 재설정 필요합니다. +* 초기 로그인 시점에 패스워드 변경 강제화됩니다. -### 참고: 사용자 Attribute 목록 +### qp-admin 계정 패스워드 변경 방법 -| **속성명** | **변수** | **설명** | **비고** | -| ------------------ | ----------------- | ----------------------------- | -------- | -| User name | loginId | 사용자 ID | 필수 | -| First name | firstName | 사용자 이름 | | -| Last name | lastName | 사용자 성 | | -| Middle name | middleName | 사용자 중간 이름 | | -| Honorific prefix | honorificPrefix | 사용자 존칭 (접두사) (예. Mr./Ms.) | | -| Honorific suffix | honorificSuffix | 사용자 존칭 (접미사) (예. 님, 씨) | | -| Primary email | email | 사용자 이메일 | 필수 | -| Title | title | 사용자 직함 | | -| Display name | displayName | 사용자 표기명 | 필수 | -| Nickname | nickName | 사용자 별칭 | | -| Profile Url | profileUrl | 사용자 프로필 URL | | -| Secondary email | secondEmail | 보조 이메일 | | -| Mobile phone | mobilePhone | 휴대폰 번호 | | -| Primary phone | primaryPhone | 전화전호 (주 연락처) | | -| Street address | streetAddress | 도로주소 | | -| City | city | 도시 | | -| State | state | 주/도 | | -| Zip code | zipCode | 우편번호 | | -| Country code | countryCode | 국가코드 번호 | | -| Postal Address | postalAddress | 우편용 주소 | | -| Preferred language | preferredLanguage | 선호 언어 (예. en) | | -| Locale | locale | 국가/언어 설정에 쓰이는 장소 (예. en_US) | | -| Time zone | timezone | 지역 타임존 (예. US/Pacific) | | -| User type | userType | 사용자 유형 (예. Employee) | | -| Employee number | employeeNumber | 사번 | | -| Cost center | costCenter | 사업부서 (재무회계 기준) | | -| Organization | organization | 사용자 소속 조직 | | -| Division | division | 사용자 소속 부 | | -| Department | department | 사용자 소속 부서 | | -| Manager ID | managerId | 상사 ID | | -| Manager | manager | 상사 표기명 | | -| Static IP | staticIp | 사용자 할당 정적 IP | | -| Mac address | macAddress | 사용자 MAC 주소 | | -| Risk score | riskScore | 사용자 위험 지수 (쿼리파이 System에서 관리) | 추후 제공 예정 | +1. qp-admin 계정 로그인 시 패스워드 만료 안내 화면 노출합니다. +
+ <br/> +
+
+
+
+2. 새 비밀번호 설정 후 정상 로그인 가능합니다. diff --git a/confluence-mdx/tests/reverse-sync/pages.yaml b/confluence-mdx/tests/reverse-sync/pages.yaml index 6cf4034da..143c8ed3d 100644 --- a/confluence-mdx/tests/reverse-sync/pages.yaml +++ b/confluence-mdx/tests/reverse-sync/pages.yaml @@ -69,7 +69,7 @@ testcases: title: "Callout 블록 전체 삭제" description: > 컴포넌트 전체가 라운드트립 후 소실됨. - mdx_path: administrator-manual/general/system/integrations.mdx + mdx_path: administrator-manual/general/system/integrations/integrating-with-syslog.mdx expected_status: fail # ────────────────────────────────────────────── @@ -82,7 +82,7 @@ testcases: title: "Unsupported XHTML Node 중복 (provisioning)" description: > (Unsupported xhtml node: ...) 플레이스홀더가 라운드트립 후 중복 출력됨. - mdx_path: administrator-manual/general/user-management/provisioning.mdx + mdx_path: administrator-manual/general/user-management/provisioning/activating-provisioning.mdx expected_status: fail 544381637: @@ -120,7 +120,7 @@ testcases: description: > MDX 교정 시 수정한 띄어쓰기가 XHTML 원본 기준으로 되돌아감. 예: DataGrip등 → DataGrip 등 (교정) → DataGrip등 (원복) - mdx_path: administrator-manual/databases/connection-management/db-connections/mongodb-specific-guide.mdx + mdx_path: administrator-manual/databases/connection-management/db-connections/documentdb-specific-guide.mdx expected_status: fail 954172219: @@ -140,7 +140,7 @@ testcases: description: > 어미·표현 수정이 XHTML 원본 기준으로 되돌아감. 예: 다중 설정이 가능하도록 → 다중으로 구성할 수 있도록 - mdx_path: administrator-manual/general/company-management/security.mdx + mdx_path: administrator-manual/general/company-management/allowed-zones.mdx expected_status: fail 544376183: @@ -150,7 +150,7 @@ testcases: description: > 경어체 교정이 XHTML 원본 기준으로 되돌아감. 예: 진행하여 주시기 바랍니다 → 진행하기 바랍니다 - mdx_path: administrator-manual/general/user-management/authentication/integrating-with-okta.mdx + mdx_path: administrator-manual/general/user-management/authentication/integrating-with-aws-sso.mdx expected_status: fail 920944732: @@ -160,7 +160,7 @@ testcases: description: > MDX 교정 시 수정한 띄어쓰기가 XHTML 원본 기준으로 되돌아감. 예: Static IP삭제하기 → Static IP 삭제하기 - mdx_path: administrator-manual/general/user-management/users/user-profile.mdx + mdx_path: administrator-manual/general/user-management/users/password-change-enforcement-and-account-deletion-feature-for-qp-admin-default-account.mdx expected_status: fail 1177321474: @@ -170,7 +170,7 @@ testcases: description: > 어미 교정이 XHTML 원본 기준으로 되돌아감. 예: 참조하여 주세요 → 참조해 주세요 - mdx_path: installation/installation/installation-guide-simple-configuration.mdx + mdx_path: installation/installation/installation-guide-setupv2sh.mdx expected_status: fail 1907294209: @@ -180,7 +180,7 @@ testcases: description: > 조사 붙여쓰기 교정이 XHTML 원본 기준으로 되돌아감. 예: QueryPie ACP 를 → QueryPie ACP를 - mdx_path: installation/installation/installing-on-aws-eks.mdx + mdx_path: installation/post-installation-setup.mdx expected_status: fail 862093313: @@ -190,7 +190,7 @@ testcases: description: > 어휘 교정이 XHTML 원본 기준으로 되돌아감. 예: 갈음하여 → 대체하여 - mdx_path: installation/post-installation-setup.mdx + mdx_path: installation/system-architecture-and-network-access-control.mdx expected_status: fail 1297383451: @@ -200,5 +200,5 @@ testcases: description: > 날짜 형식 교정이 XHTML 원본 기준으로 되돌아감. 예: Aug 29, 2025 → 2025년 08월 29일 - mdx_path: installation/prerequisites/linux-distribution-and-docker-podman-support-status.mdx + mdx_path: installation/prerequisites/configuring-rootless-mode-with-podman.mdx expected_status: fail From d2cf56d682553b1e666bd57e86ba32bbb3f5e67e Mon Sep 17 00:00:00 2001 From: JK Date: Wed, 18 Feb 2026 19:11:09 +0900 Subject: [PATCH 2/4] reset improved.mdx --- .../reverse-sync/1177321474/improved.mdx | 374 +++------ .../reverse-sync/1297383451/improved.mdx | 429 +++------- .../reverse-sync/1907294209/improved.mdx | 778 ++---------------- .../tests/reverse-sync/544112846/improved.mdx | 204 +---- .../tests/reverse-sync/544376183/improved.mdx | 207 +---- .../tests/reverse-sync/544376265/improved.mdx | 66 +- .../tests/reverse-sync/544379393/improved.mdx | 71 +- .../tests/reverse-sync/568852692/improved.mdx | 321 +------- .../tests/reverse-sync/862093313/improved.mdx | 198 +++-- .../tests/reverse-sync/920944732/improved.mdx | 205 ++--- 10 files changed, 682 insertions(+), 2171 deletions(-) diff --git a/confluence-mdx/tests/reverse-sync/1177321474/improved.mdx b/confluence-mdx/tests/reverse-sync/1177321474/improved.mdx index 3e3d4e0c7..73e552417 100644 --- a/confluence-mdx/tests/reverse-sync/1177321474/improved.mdx +++ b/confluence-mdx/tests/reverse-sync/1177321474/improved.mdx @@ -1,19 +1,23 @@ --- -title: '설치 가이드 - 간단한 구성' -confluenceUrl: 'https://querypie.atlassian.net/wiki/spaces/QM/pages/964952065/-' +title: '설치 가이드 - setup.v2.sh' +confluenceUrl: 'https://querypie.atlassian.net/wiki/spaces/QM/pages/1177321474/-+setup.v2.sh' --- import { Callout } from 'nextra/components' -# 설치 가이드 - 간단한 구성 +# 설치 가이드 - setup.v2.sh ## 소개 -이 설치 가이드는 하나의 서버 컴퓨터에 QueryPie ACP 서버를 설치하는 간단한 구성의 설치 방법을 안내합니다. +이 설치 가이드는 하나의 서버 컴퓨터에 QueryPie 서버를 설치하는 간단한 구성의 설치 방법을 안내합니다. 간단한 구성으로 설치하더라도, 대부분의 쿼리파이 기능을 시험해 볼 수 있습니다. -그러나, 이 설치 방식은 실제 운영 환경에서 사용하기에는 적합하지 않습니다. +이 가이드에서 안내하는 setup.v2.sh 설치 프로그램은 기존의 설치 과정을 자동으로 수행합니다. +자동화된 설치 과정은 기존의 설치 과정과 주요 부분이 동일합니다. +기존 설치 과정은 이 문서를 참조하세요: [설치 가이드 - 간단한 구성](installation-guide-simple-configuration) + +이 설치 방식은 실제 운영 환경에서 사용하기에는 적합하지 않습니다. 실제 운영 환경에 사용하기에 적합한 설치 방법은 별도로 제공되는 [QueryPie Installation Guide]를 참고하십시오. @@ -36,265 +40,141 @@ QueryPie 10.3.0 또는 이후 버전을 대상으로 하는 PoC 용도의 설치 ## 설치 과정 -### setup.sh 실행 +### setup.v2.sh 실행 -QueryPie 설치를 간편하게 수행할 수 있는 `setup.sh` 스크립트를 내려받고, 실행합니다. +QueryPie 를 설치할 리눅스 서버의 shell 에서, `setup.v2.sh` 스크립트를 내려받고, 실행합니다. setup.sh 가 실제로 수행하는 명령은 실행 과정에서 확인할 수 있습니다. -아래의 “Manual steps replacing setup.sh” 항목은 `setup.sh` 가 실행하는 명령을 옮겨 놓은 것입니다. - -QueryPie Service를 위한 docker, docker-compose 를 설치하고, docker-compose.yml 등 설정파일을 설치합니다. - - -아래에 제시된 QP_VERSION, DOWNLOAD_VERSION 은 예시입니다. -설치할 버전은 [제품 버전](../product-versions) 문서를 참조하거나, 기술지원 담당자에게 확인받으세요. - -```bash -# Download and run ./setup.sh with required environment variables. -curl -L https://dl.querypie.com/releases/compose/setup.sh -o setup.sh -chmod +x setup.sh -export DOWNLOAD_VERSION=10.3.x -export QP_VERSION=10.3.0 -./setup.sh - -# Grant permission of docker group -sudo usermod -aG docker $USER - -# Please logout and ssh again to run docker command. -``` - -docker 를 처음 설치한 경우, 현재 shell 이 docker group 의 권한을 아직 갖고 있지 못합니다. -logout 이후, 다시 ssh 연결하세요. - - -OS 버전이나 종류에 따라 setup.sh 가 정상적으로 실행되지 않는 경우, 아래와 같이 설치합니다. - -
-Manual steps replacing setup.sh -```bash -# Install docker -curl -fsSL https://get.docker.com -o get-docker.sh -sudo sh ./get-docker.sh -sudo systemctl start docker -sudo usermod -aG docker $USER - -# Install docker-compose -curl -SL https://dl.querypie.com/releases/bin/v2.29.7/docker-compose-linux-x86_64 -o docker-compose -chmod +x docker-compose -sudo install -m 755 docker-compose /usr/local/bin/ - -# Install docker-compose.yml and config files -# NOTE: Please use the actual version number instead of '10.3.0'. -mkdir -p querypie/10.3.0 -cd querypie/10.3.0 -curl -L https://dl.querypie.com/releases/compose/10.3.x/package.tar.gz -o package.tar.gz -tar zxvf package.tar.gz - -# Install logrotate config for docker daemon -sudo cp logrotate /etc/logrotate.d/querypie -``` -
- - -### Harbor Login - -QueryPie Docker Image 를 내려받을 수 있도록, Harbor Docker Registry 에 로그인합니다. - - -최초 설치 시 고객사 하버 계정을 발급하여 사전에 전달드립니다. - ```bash -docker login harbor.chequer.io -Username: -Password: +$ # Download setup.v2.sh and execute it. +$ bash <(curl -s https://dl.querypie.com/setup.v2.sh) ``` -아래와 같은 메시지가 나타나는 경우, Harbor 에 정상적으로 로그인된 것입니다. +다음과 같이 `setup.v2.sh` 를 파일로 저장한 후, 실행하여도 됩니다. ```bash -WARNING! Your password will be stored unencrypted in /home/ubuntu/.docker/config.json. -Configure a credential helper to remove this warning. See -https://docs.docker.com/engine/reference/commandline/login/#credential-stores - -Login Succeeded +$ curl -s https://dl.querypie.com/setup.v2.sh -o setup.v2.sh +$ bash setup.v2.sh ``` +`setup.v2.sh` 는 제조사에서 권장하는 버전을 스스로 선택하여 설치합니다. +설치 가능한 버전은 이 문서를 참조하세요: [제품 버전](../product-versions) -### compose-env 설정 - -`./setup.sh` 스크립트를 실행하면, `querypie//` 디렉토리 안에 `docker-compose.yml`, `compose-env` 등 설정 파일을 생성하게 됩니다. -이 디렉토리 안으로 이동하여, `compose-env` 라는 이름의 설정 파일을 편집합니다. - -각 환경변수에 대한 설명은 다음 문서를 참조해 주세요: [컨테이너 환경변수](../container-environment-variables) +특정한 버전을 지정하여 설치하려는 경우, 다음과 같은 명령을 사용할 수 있습니다. ```bash -# Version of QueryPie Docker Image to run: 10.3.0 or later. -VERSION=10.3.0 - -# Common -## Secret key for encrypting communication between QueryPie client agents and QueryPie over port 9000/tcp. -## Must be exactly 32 characters in length. -## Suggested: 32-char random string via `openssl rand -hex 16` -AGENT_SECRET= - -## Secret key used to encrypt sensitive information, such as database connection strings and SSH private keys. -## This key can be any string but is immutable once set. -## Suggested: 16-char random string via `openssl rand -hex 8` -KEY_ENCRYPTION_KEY= - -# DB -## Suggested: host.docker.internal -DB_HOST= -DB_PORT=3306 -DB_CATALOG=querypie -LOG_DB_CATALOG=querypie_log -ENG_DB_CATALOG=querypie_snapshot -## Suggested: querypie -DB_USERNAME= -## Suggested: 16-char random string via `openssl rand -hex 8` -DB_PASSWORD= -DB_MAX_CONNECTION_SIZE=20 -## If you’re using AWS Aurora, use the software.amazon.jdbc.Driver instead of org.mariadb.jdbc.Driver for automatic failover handling. -DB_DRIVER_CLASS=org.mariadb.jdbc.Driver - -# Redis -## REDIS_NODES should be specified as a “Host:Port” combination. -## In CLUSTER MODE, when specifying multiple nodes, separate each address with a comma. -## Example: Host1:6379,Host2:6379,Host3:6379 -## Suggested: host.docker.internal:6379 -REDIS_NODES= -## Suggested: 16-char random string via `openssl rand -hex 8` -REDIS_PASSWORD= - -DAC_SKIP_SQL_COMMAND_RULE_FILE=skip_command_config.json -``` - - -### MySQL / Redis 구동 - -Single machine 구성에서는, 하나의 VM 내에 QueryPie MySQL, QueryPie Redis 를 Container 방식으로 실행합니다. -다음의 명령으로, MySQL, Redis 를 실행합니다. -처음 실행하는 경우, `compose-env` 파일에서 정의한 Username, Password 를 적용하여, 기본 계정을 생성하게 됩니다. +$ bash setup.v2.sh --install 10.3.4 +$ bash setup.v2.sh --upgrade 11.0.1 +$ bash setup.v2.sh --help +#### setup.v2.sh - QueryPie Installer 25.08.8, /usr/bin/bash 4.4.20(1)-release on Linux x86_64 #### +setup.v2.sh 25.08.8, the QueryPie installation script. +Usage: setup.v2.sh [options] + or setup.v2.sh [options] --install + or setup.v2.sh [options] --install-container-engine + or setup.v2.sh [options] --install-compose-package + or setup.v2.sh [options] --upgrade + or setup.v2.sh [options] --uninstall + or setup.v2.sh [options] --help + +FOR AWS AMI BUILD MAINTAINER: + or setup.v2.sh [options] --install-partially-for-ami + or setup.v2.sh [options] --resume + or setup.v2.sh [options] --verify-installation + or setup.v2.sh [options] --verify-not-installed + or setup.v2.sh [options] --populate-env + or setup.v2.sh [options] --reset-credential + +ENVIRONMENT VARIABLES: + + DOCKER_REGISTRY Default: 'docker.io/querypie/' + The Docker registry to pull images from. + You may specify a private registry such as 'myregistry.example.com/querypie/'. + Note that the trailing slash is required, if you set this variable. + Actual image names will be like 'myregistry.example.com/querypie/querypie:11.1.1'. + +OPTIONS: + --yes Assume "yes" to all prompts and run non-interactively. + -V, --version Show the version of this script. + -x, --xtrace Print commands and their arguments as they are executed. + -h, --help Show this help message. +$ +``` + +### Podman 환경에서 QueryPie 설치하기 + +`setup.v2.sh` `25.08.8` 버전부터는 Podman + Docker Compose 조합의 실행환경을 지원합니다. + +다음의 리눅스 배포본에서는 Podman + Docker Compose 조합의 실행환경을 권장합니다. + +* Red Hat Enterprise Linux 8, 9, 10 +* Rocky 8, 9 + +자세한 설치 방법은 이 문서를 참조하세요: [Podman 으로 Rootless Mode 구성하기](../prerequisites/configuring-rootless-mode-with-podman) + +### setup.v2.sh 가 자동으로 수행하는 작업 + +`setup.v2.sh` 는 다음의 주요 설치 절차를 자동으로 진행합니다. + +1. `docker-compose.yml` , `.env` 등 Compose 를 위한 설정파일을 내려 받기 + * 기존의 `compose-env` 라는 환경변수 설정 파일의 이름이 `.env` 로 바뀌었습니다. `compose-env` 는 설정파일 생성을 위한 template 으로 사용됩니다. +2. `.env` 에 환경변수 값을 설정하기 + * 각 환경변수에 대한 설명은 [컨테이너 환경변수](../container-environment-variables) 문서를 참고해주세요. +3. docker image 내려받기 + * `docker.io/querypie/` registry 에서 image 를 내려받습니다. 따라서, Harbor login 과정이 필요하지 않습니다. +4. mysql, redis container 실행하기 +5. querypie-tools container 실행하고, migration 수행하기 +6. querypie-app container 실행하기 +7. `./querypie/current` 라는 심볼릭 링크를 생성하여, 현재 작동 중인 버전을 가리킵니다. + +`setup.v2.sh` 가 querypie-app container 를 정상적으로 기동하고 나면, 다음과 같은 실행 성공 안내 메시지를 만나게 됩니다. +``` ++ docker exec querypie-app-1 readyz +######################################################################## +# # +# ██████╗ ██╗ ██╗███████╗██████╗ ██╗ ██╗██████╗ ██╗███████╗ # +# ██╔═══██╗██║ ██║██╔════╝██╔══██╗╚██╗ ██╔╝██╔══██╗██║██╔════╝ # +# ██║ ██║██║ ██║█████╗ ██████╔╝ ╚████╔╝ ██████╔╝██║█████╗ # +# ██║▄▄ ██║██║ ██║██╔══╝ ██╔══██╗ ╚██╔╝ ██╔═══╝ ██║██╔══╝ # +# ╚██████╔╝╚██████╔╝███████╗██║ ██║ ██║ ██║ ██║███████╗ # +# ╚══▀▀═╝ ╚═════╝ ╚══════╝╚═╝ ╚═╝ ╚═╝ ╚═╝ ╚═╝╚══════╝ # +# # +######################################################################## +.--------------------------------------------------------. +| 🚀 QueryPie Server has been successfully started! 🚀 | +| Timestamp in UTC: Mon Jul 28 17:04:31 UTC 2025 | +| Timestamp in KST: Tue Jul 29 02:04:31 KST 2025 | +'--------------------------------------------------------' ++ popd +~ +## Create a symbolic link 'current' pointing to 11.0.1 ++ pushd ./querypie/ +~/querypie ~ ++ rm -f current ++ ln -s 11.0.1 current ++ popd +~ +### Installation completed successfully +### Access QueryPie at http://172.31.11.201:8000 or https://172.31.11.201:8443 in your browser +### Determine the public IP address of your host machine if needed +[ec2-user@ip-172-31-11-201 ~]$ ``` -docker-compose --env-file compose-env --profile database up -d -``` -``` -docker ps - -CONTAINER ID IMAGE ... NAMES -0b8d8b9b9486 harbor.chequer.io/querypie/mysql:8.0.39 ... querypie-mysql-1 -6d96b9cdc95e harbor.chequer.io/querypie/redis:7.4.2 ... querypie-redis-1 -``` - - -### Tools 구동 - -QueryPie Tools 는 설치 과정에서 사용되는 도구입니다. -QueryPie Tools 는 QueryPie MySQL 에 Table, Procedure 등을 생성하는 기능을 제공합니다. -MySQL 의 Database Table 등은 제품의 버전에 따라 그 내용이 바뀌게 되며, Flyway 라는 오픈소스 도구를 이용해, 형상을 관리합니다. -QueryPie Tools 는 제품의 라이선스를 설치하는 기능을 제공합니다. - -QueryPie Tools 는 TCP Port 8050 에서 요청을 받아들이는 API 서버 방식으로 작동합니다. - -#### Tools 실행 -다음의 명령을 수행하여, QueryPie Tools 를 실행합니다. -이후 `docker ps` 명령으로 Container 가 정상적으로 실행 중인지 확인할 수 있습니다. `docker logs -f querypie-tools-1` 명령으로 Container 의 로그를 확인할 수 있습니다. -``` -docker-compose --env-file compose-env --profile tools up -d -``` -``` -docker ps - -CONTAINER ID IMAGE ... NAMES -6e867d744acb harbor.chequer.io/querypie/querypie-tools:10.3.0 ... querypie-tools-1 -0b8d8b9b9486 harbor.chequer.io/querypie/mysql:8.0.39 ... querypie-mysql-1 -6d96b9cdc95e harbor.chequer.io/querypie/redis:7.4.2 ... querypie-redis-1 -``` - -#### Migration 실행 - -QueryPie 가 필요로 하는 MySQL Table, Procedure 등을 생성하는 작업을, Migration 이라고 부릅니다. -다음의 명령을 수행하여, Migration 을 실행합니다. -최초 설치의 경우, 수백건의 DB Table 을 생성하는 과정에서, 1~2분 가량 시간이 소요됩니다. -``` -docker exec -it querypie-tools-1 /app/script/migrate.sh runall -``` -``` -[2025-05-20 07:43:15] QueryPie migration is started. --------------------------------------------------------------------------------- -[2025-05-20 07:43:15] QueryPie `V67.11__9.10.0.11_workflow_rule_migration.sql` is started. -[2025-05-20 07:43:18] QueryPie `V67.11__9.10.0.11_workflow_rule_migration.sql` is finished. - -... -[2025-05-20 07:44:17] QueryPie Snapshot `V5.0__10.2.8.0_oven_diary_tables_alter_json_column_type.sql` is started. -[2025-05-20 07:44:17] QueryPie Snapshot `V5.0__10.2.8.0_oven_diary_tables_alter_json_column_type.sql` is finished. -[2025-05-20 07:44:17] QueryPie Snapshot migration is finished. --------------------------------------------------------------------------------- -``` - -#### License 실행 - -QueryPie Tools 에 license 파일을 설치하는 명령을 다음과 같이 수행할 수 있습니다. `license.crt` 라는 파일 이름은 예시입니다. -기술지원 담당자에게 전달 받은 라이선스 파일의 이름을 지정하면 됩니다. -라이선스 파일은 x509 형식의 인증서 파일로서, 텍스트 파일입니다. -``` -curl -XPOST 127.0.0.1:8050/license/upload -F file=@license.crt -``` -``` -[License] Upload: Success -``` - -#### Tools 종료 - -설치를 위한 중간 과정이 완료되었기에, QueryPie Tools 를 종료합니다. -``` -docker-compose --env-file compose-env --profile tools down -``` - -### QueryPie 구동 - -QueryPie Tools 를 이용해, MySQL Database Table 을 생성하고, License 를 설치하면, 기본적인 설치 과정이 거의 완료된 것입니다. -이제는 QueryPie Server Container 를 실행하여, QueryPie 를 사용할 수 있습니다. -다음의 명령을 실행하여, QueryPie Server Container 를 실행합니다. -``` -docker-compose --env-file compose-env --profile querypie up -d -``` +### 설치 완료 -일반적인 서버 환경에서 약 1분50초~2분10초 후에 QueryPie Container 가 실행됩니다. -``` -docker ps +수고하셨습니다. +이제 QueryPie 가 작동하는 모습을 볼 수 있습니다. -CONTAINER ID IMAGE ... NAMES -69353ab980d8 harbor.chequer.io/querypie/querypie:10.3.0 ... querypie-app-1 -0b8d8b9b9486 harbor.chequer.io/querypie/mysql:8.0.39 ... querypie-mysql-1 -6d96b9cdc95e harbor.chequer.io/querypie/redis:7.4.2 ... querypie-redis-1 -``` +`setup.v2.sh` 의 실행 마지막에 보이는 `http://172.31.11.201:8000` 와 같은 URL 에 접속을 시도하여 보십시오. +이 주소는 Local PC 에서 Linux Server 로 연결하기 위한 IP Address 를 사용합니다. +네트워크 연결 구성을 참조하여, Firewall, AWS Security Group 설정 등을 변경하여야 할 수 있습니다: [시스템 아키텍처와 네트워크 접근제어](../system-architecture-and-network-access-control) -QueryPie Container 의 프로세스들이 정상적으로 기동하고 나면, Container Log 에서, 다음과 같은 실행 성공 안내 메시지를 만나게 됩니다. -``` -docker logs -f querypie-app-1 - -.... -READYZ | ######################################################################## -READYZ | # # -READYZ | # ██████╗ ██╗ ██╗███████╗██████╗ ██╗ ██╗██████╗ ██╗███████╗ # -READYZ | # ██╔═══██╗██║ ██║██╔════╝██╔══██╗╚██╗ ██╔╝██╔══██╗██║██╔════╝ # -READYZ | # ██║ ██║██║ ██║█████╗ ██████╔╝ ╚████╔╝ ██████╔╝██║█████╗ # -READYZ | # ██║▄▄ ██║██║ ██║██╔══╝ ██╔══██╗ ╚██╔╝ ██╔═══╝ ██║██╔══╝ # -READYZ | # ╚██████╔╝╚██████╔╝███████╗██║ ██║ ██║ ██║ ██║███████╗ # -READYZ | # ╚══▀▀═╝ ╚═════╝ ╚══════╝╚═╝ ╚═╝ ╚═╝ ╚═╝ ╚═╝╚══════╝ # -READYZ | # # -READYZ | ######################################################################## -READYZ | .--------------------------------------------------------. -READYZ | | 🚀 QueryPie Server has been successfully started! 🚀 | -READYZ | | Timestamp in UTC: Sun Jan 26 15:00:56 UTC 2025 | -READYZ | | Timestamp in KST: Mon Jan 27 00:00:56 KST 2025 | -READYZ | '--------------------------------------------------------' -.... -``` +### License 입력하기 -### 설치 완료 +License 파일은 웹콘솔 화면에서 입력할 수 있습니다. -수고하셨습니다. -이제 QueryPie 가 작동하는 모습을 볼 수 있습니다. +
+Enter the license in PEM format. +
+Enter the license in PEM format. +
+
## 기본 설정 절차 diff --git a/confluence-mdx/tests/reverse-sync/1297383451/improved.mdx b/confluence-mdx/tests/reverse-sync/1297383451/improved.mdx index a7febaa8d..f7dc180e5 100644 --- a/confluence-mdx/tests/reverse-sync/1297383451/improved.mdx +++ b/confluence-mdx/tests/reverse-sync/1297383451/improved.mdx @@ -1,324 +1,127 @@ --- -title: '리눅스 배포본과 Docker, Podman 지원 현황' -confluenceUrl: 'https://querypie.atlassian.net/wiki/spaces/QM/pages/1298530305/Docker+Podman' +title: 'Podman 으로 Rootless Mode 구성하기' +confluenceUrl: 'https://querypie.atlassian.net/wiki/spaces/QM/pages/1297383451/Podman+Rootless+Mode' --- -import { Callout } from 'nextra/components' - -# 리눅스 배포본과 Docker, Podman 지원 현황 - -이 문서는 QueryPie Server의 컨테이너 기반 배포 및 운영 환경 선택을 위한 기술 가이드입니다. -QueryPie Server는 Docker와 Podman 컨테이너 엔진에서 검증되었으며, 다양한 Linux 배포본에서의 호환성과 권장 구성을 분석하여 최적의 운영 환경 선택을 지원합니다. -이 문서는 시스템 아키텍트와 인프라 엔지니어가 환경 설계 시 참고할 수 있는 기술적 근거와 실무 가이드라인을 제공합니다. - -설치 방법, 검증 스크립트, 운영 절차 등은 이 문서에서 다루지 않습니다. - -* 최종 업데이트: 2025년 08월 29일 -* 검증 기준일: 2025년 08월 29일 - -### 컨테이너 엔진과 Compose - -QueryPie Server는 컨테이너 기반으로 배포·운영되며, Docker와 Podman 두 컨테이너 엔진에서 기능 검증을 완료하고 기술지원을 제공합니다. - -Docker는 널리 사용되는 컨테이너 엔진으로, 엔진 자체와 도구 체인(Compose 등)을 포함하며, 커뮤니티 무료 버전과 상용 버전(Desktop)으로 제공됩니다. -Podman은 Docker와 유사한 명령체계와 워크플로우를 제공하면서도 루트리스(rootless) 실행을 기본으로 지원하는 오픈소스 컨테이너 엔진으로, 특히 RHEL 계열에서 표준으로 권장됩니다. - -Docker 와 Podman 은 Compose 와 함께 사용하여, 여러 Container 를 실행하고 관리할 수 있습니다. -Compose는 단일 호스트에서 여러 Container를 실행하여 소프트웨어를 구동, 운영하는 데 적합합니다. -Compose 의 구현체로 Docker Compose 가 널리 사용되며, Docker, Podman, 모두 Docker Compose 와 함께 사용할 수 있습니다. -Docker Compose 는 하나의 실행파일로 구성되어 있고, 다른 패키지에 의존성이 없어, 설치가 간편합니다. -Podman 의 경우, Python 으로 구현된 Podman Compose 라는 구현체가 제공되기도 합니다. - -#### 권장하는 컨테이너 엔진과 Compose 구성 - -QueryPie는 운영 환경에서 **Docker + Docker Compose** 조합 또는 **Podman + Docker Compose** 조합을 1차 권장합니다. -권장 최소 버전은 Docker Engine 23.0 (23년 2월 출시) 이상, Docker Compose 2.29.0 (24년 7월 출시) 이상, Podman 4.9.0 (24년 1월 출시) 이상으로 검증되어 있습니다. - -Podman + Podman Compose 조합은 기술적으로 지원되나, Python 의존성과 추가 환경 설정이 필요하고 Docker Compose 대비 기능 제약이 있어 2차 권장 구성으로 분류됩니다. - - -리눅스 배포본에 따라, Docker, Podman 가운데 한가지만 지원되는 경우가 있습니다. -이에 따라, 두 컨테이너 엔진을 상황에 따라 적절히 선택하여 사용하여야 합니다. -특히, 많이 사용되는 Amazon Linux 2023에서 Podman을 지원하지 않는다는 것, 25년 출시된 Red Hat Enterprise Linux 10에서 Docker를 지원하지 않는다는 것에 유의해 주세요. - - -### 리눅스 배포본의 현황 요약표 - -아래 표는 QueryPie에서 공식적으로 기술지원을 제공하는 배포본과 Docker, Podman 지원 현황을 정리한 것입니다. -Docker, Podman 지원 현황은 QueryPie를 실행, 관리하기 위한 버전이 제공되는지 여부를 기준으로 합니다. - -Podman 3.x 의 구버전, 신뢰할 수 있는 패키지가 제공되지 않는 경우, QueryPie 팀으로부터 기술지원되지 않으며, QueryPie 를 사용할 수 없는 조건이라고 분류합니다. - - ------ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-**배포판 / 버전** - -**출시일** - -**기술지원 종료일 (EOL/EOS)** - -**Docker, Podman 지원** -
-**Amazon Linux 2** - -2018년 6월 - -2026년 6월 30일 - -* Docker 기본 지원 -* Podman 지원 없음 ➖ -
-**Amazon Linux 2023** - -2023년 3월 - -Standard Support: 2027년 6월, Maintenance Support: 2029년 6월까지 - -* Docker 기본 지원 -* Podman 지원 없음 ➖ -
-**Red Hat Enterprise Linux 8** - -2019년 5월 - -Full Support: 2024년 5월,
Maintenance: 2029년까지 -
-* Podman 기본 지원 -* Docker 가능 -
-**Red Hat Enterprise Linux 9** - -2022년 5월 - -약 10년 (2032년까지) - -* Podman 기본 지원 -* Docker 가능 -
-**Red Hat Enterprise Linux 10** - -2025년 5월 - -약 10년 (2035년까지) - -* Podman 기본 지원 -* Docker 지원 없음 ➖ -
-**Ubuntu 22.04 LTS (Jammy)** - -2022년 4월 - -2027년 4월 (ESM 적용 시 최대 2032년) - -* Podman 사용 불가 ➖ 구버전 3.4.4 -* Docker 기본 지원 -
-**Ubuntu 24.04 LTS (Noble)** - -2024년 4월 - -2029년 4월 (ESM 적용 시 2036년) - -* Podman 기본 지원 -* Docker 기본 지원 -
-**Rocky Linux 8** - -2021년 6월 - -RHEL 8 과 동일 (2029년까지) - -RHEL 8 바이너리 호환 -
-**Rocky Linux 9** - -2022년 7월 - -RHEL 9 과 동일 (2032년까지) - -RHEL 9 바이너리 호환 -
-**CentOS Stream** - -2021년 이후 - -롤링 릴리스, EOS 없음 - -차기 RHEL 미리 반영, 안정성 낮음 -
- -### 리눅스 배포본의 특징 - -QueryPie 팀에서 기술지원을 제공하는 리눅스 배포본의 현황을 설명합니다. - -#### Amazon Linux 2 (2018년 6월 출시) - -Amazon Linux 2는 RHEL 7 계열을 기반으로 AWS가 EC2에 최적화하여 제공하는 배포판으로, 장기간의 안정적 운영을 위해 널리 사용되어왔습니다. -AWS의 공식 지원 정책에 따르면 Amazon Linux 2의 공식 보안·버그 패치 제공은 2026-06-30까지로 예정되어 있어(출처: [Amazon Linux 2 FAQs](https://aws.amazon.com/amazon-linux-2/faqs/)), 신규 서버 구축이나 장기 운영을 계획 중이라면 수명 주기가 더 긴 Amazon Linux 2023 또는 Ubuntu/RHEL 계열로의 이전을 검토하세요. - -컨테이너 관점에서 Amazon Linux 2는 amazon-linux-extras를 통해 Docker를 손쉽게 설치·운영할 수 있게 설계되어 있으며, 이 경로가 AWS 문서에서 일관되게 안내되는 표준 접근법입니다. -반면 Podman은 기본 저장소에서 제공되지 않으며, 제3자 리포지터리(COPR 등)를 통해 설치하는 비공식 경로가 존재하더라도 AWS의 패키지 관리·지원 체계 밖에 있기 때문에, 운영 체계와 지원 정책의 일관성을 중시하는 서버 워크로드에서는 Docker 사용이 현실적입니다. -Compose는 Docker Compose 플러그인(v2)을 함께 배포·업데이트할 수 있어, 단일 호스트 상의 멀티 컨테이너 서비스를 안정적으로 관리할 수 있습니다. - -* Docker, Docker Compose 조합을 사용하기에 적합합니다. -* **Podman 은 지원되지 않습니다** . - -#### Amazon Linux 2023 (2023년 3월 출시) - -Amazon Linux 2023(AL2023)은 Fedora를 상류(upstream)로 채택해 주기적 릴리스, 지원 일정을 명확히 한 차세대 AWS 리눅스입니다. -GA는 2023년 3월에 이뤄졌고, 표준 지원(Standard Support)은 2027년 6월 30일, 유지보수 지원(Maintenance Support)은 2029년 6월 30일까지 제공되는 5년 지원 모델을 따릅니다(출처: [Amazon Linux 2023 FAQs](https://aws.amazon.com/linux/amazon-linux-2023/faqs/)). - -AL2023은 패키지 관리가 dnf로 전환되며, Docker는 공식 문서에 따라 표준 절차로 설치·운영됩니다. -AWS가 제공하는 설치 가이드에서도 Docker 중심의 운영 모델이 제시되며, 현재 공식 저장소에 Podman 패키지는 포함되어 있지 않습니다. -결과적으로, QueryPie Server를 EC2에 배치한다면 AL2023에서는 Docker + Docker Compose 조합이 가장 간결하고 문서화가 잘 된 경로입니다. - -* Docker, Docker Compose 조합을 사용하기에 적합합니다. Amazon Linux 2023 의 dnf 패키지를 설치하는 경우, **Docker 25.0.8** 버전이 기본 설치됩니다. -* **Podman 은 지원되지 않습니다.** Amazon Linux 2023 은 Podman 설치가 어렵고, 검증된 설치 패키지가 제공되지 않습니다. 상당수 이용자가 Podman 을 배포본에 추가하기를 요청하였으나, AWS 에서 이를 완곡히 거절하고, Podman 에 대한 기술지원을 하지 않는 것으로 보입니다. - -#### Red Hat Enterprise Linux 8 (2019년 5월 출시) - -RHEL 8은 2019년 5월 7일 공개되었고, Full Support는 2024년 5월 31일에 종료되었으며, Maintenance Support는 2029년 5월 31일까지, 선택 시 Extended Life Cycle Support(ELS)는 2032년 5월 31일까지 이어집니다. -기업 현장에서 가장 널리 배포된 EL8 생태계의 중심으로, Red Hat은 Docker 엔진 대신 Podman을 기본 컨테이너 엔진으로 제공합니다. -Podman은 Docker와 호환되는 CLI와 REST API(패키지 podman-docker 등)를 통해 많은 도구가 기대하는 docker 명령·소켓과의 호환성을 제공합니다. -Docker 자체는 Red Hat의 기본 채널에서 제공·지원하지 않지만, Docker 공식 리포지터리를 추가해 설치하는 방식이 현장에서 사용됩니다. -Compose 측면에서는 Docker Compose(v2 플러그인)를 Docker 엔진과 함께 쓰거나, Podman과의 호환 계층을 사용해 docker-compose 기반 배포 파일을 그대로 활용하는 방식이 검증되어 있습니다. - -* Podman, Docker Compose 조합을 사용하기에 적합합니다. **Podman 4.9.4** 버전이 설치됩니다. -* Docker, Docker Compose 조합을 사용하기에 적합합니다. **Docker 최신 버전의 패키지가 제공** 됩니다. 25년 8월 현재 **28.3.3** 버전이 제공됩니다. - * [https://docs.docker.com/engine/install/rhel/](https://docs.docker.com/engine/install/rhel/) - -#### Red Hat Enterprise Linux 9 (2022년 5월 출시) - -RHEL 9는 2022년 5월 18일 릴리스되었고, Full Support는 2027년 5월 31일, Maintenance Support는 2032년 5월 31일, 선택 ELS는 2035년 5월 31일까지 제공됩니다. -운영 모델은 RHEL 8과 동일하게 Podman 중심이며, 루트리스 모드와 시스템 통합(systemd 유저 서비스 등)에서 성숙도가 높아졌습니다. -QueryPie Server는 Podman을 표준 엔진으로 사용해도 무리가 없고, podman-docker 호환 패키지를 더하면 기존 docker-compose.yml 자산을 큰 변경 없이 재사용할 수 있습니다. -Docker CE는 공식 RHEL 리포지터리의 지원 범위 밖이지만, Docker 측 리포지터리를 추가해 설치·운영하는 방식이 실무에서 널리 쓰입니다. - -* Podman, Docker Compose 조합을 사용하기에 적합합니다. **Podman 4.9.4** 버전이 설치됩니다. -* Docker, Docker Compose 조합을 사용하기에 적합합니다. **Docker 최신 버전의 패키지가 제공** 됩니다. 25년 8월 현재 **28.3.3** 버전이 제공됩니다. - * [https://docs.docker.com/engine/install/rhel/](https://docs.docker.com/engine/install/rhel/) - -#### Red Hat Enterprise Linux 10 (2025년 5월 출시) - -RHEL 10은 2025년 5월 20일에 공개되었으며, Red Hat의 표준 정책에 따라 Full Support는 2030년 5월 31일, Maintenance Support는 2035년 5월 31일, 선택 ELS는 2038년 5월 31일까지 이어지는 로드맵을 가집니다. -RHEL 10에서는 Docker 엔진과 docker 명령이 기본 제공에서 제거되었고, Red Hat의 공식 지원도 Podman에 한정됩니다. -Docker를 외부 업스트림에서 설치하는 것은 기술적으로 가능하더라도 RHEL 10 자체의 지원 범주 밖이며, Red Hat 문서 역시 이를 명시합니다. -따라서 RHEL 10에서 QueryPie Server를 운영할 때는 Podman을 1순위로 선택하고, Compose 파일은 Docker Compose 구문을 유지하되 Podman의 Docker API 호환 레이어를 통해 적용하는 구성이 가장 현실적입니다. - -* Podman, Docker Compose 조합을 사용하기에 적합합니다. **Podman 5.4.0** 버전이 설치됩니다. -* **Docker 패키지가 제공되지 않습니다** . (2025년 8월 현재) CentOS Stream 10 에서 Docker 패키지가 준비되어 있으나, 설치하여 실행할 때, 오류가 발생합니다. - -#### Ubuntu 22.04 LTS Jammy Jellyfish - -Ubuntu 22.04 LTS는 2022년 4월 21일 공개되었고, 표준 지원은 2027년 4월까지, Extended Security Maintenance(ESM)는 2032년 4월까지 제공됩니다. -Canonical은 서버·클라우드 환경에서 Docker와 Podman 모두를 공식 문서·저장소를 통해 제공하며, Docker는 Docker 공식 APT 리포지터리 또는 Ubuntu의 docker.io/플러그인 패키지로, Podman은 배포본 기본 저장소에서 설치할 수 있습니다. -Compose는 Docker Compose v2 플러그인으로 가장 수월하며, Podman 환경에서는 Docker API 호환을 통해 기존 Compose 파일을 재사용하는 구성이 실무에서 흔합니다. -Ubuntu 특유의 폭넓은 커뮤니티 생태계와 빠른 보안 패치 제공은 QueryPie Server 같은 컨테이너형 애플리케이션의 안정 운용에 유리합니다. - -* **Podman 을 사용하기에 적합하지 않습니다** . 기본 저장소에서 제공되는 Podman 3.4.4 버전은 Docker Compose와 호환되지 않아, 권장하지 않습니다. -* Docker, Docker Compose 조합을 사용하기에 적합합니다. **Docker 최신 버전의 패키지가 제공** 됩니다. 25년 8월 현재 **28.3.3** 버전이 제공됩니다. - * [https://docs.docker.com/engine/install/ubuntu/](https://docs.docker.com/engine/install/ubuntu/) - -#### Ubuntu 24.04 LTS Noble Numbat - -Ubuntu 24.04 LTS는 2024년 4월 25일 공개되었으며, 표준 지원은 2029년 4월까지, ESM은 2036년 4월까지 이어집니다. -최신 LTS답게 컨테이너 관련 툴체인의 버전이 상향되어 있으며, Docker는 Docker 공식 리포지터리와 Canonical 패키지 모두에서 최신 Compose 플러그인과 함께 배치할 수 있습니다. -Podman 역시 기본 저장소에서 제공되어 루트리스 실행과 사용자별 컨테이너 관리가 자연스럽고, CI/CD에서의 비대화형 실행이 매끄럽습니다. -장기 관점의 서버 표준화가 필요하다면, 24.04 LTS는 22.04 LTS 대비 더 긴 보안 업데이트 창구와 최신 커널·툴체인 기반을 동시에 확보할 수 있다는 점에서 장점이 있습니다. +# Podman 으로 Rootless Mode 구성하기 -* Podman, Docker Compose 조합을 사용하기에 적합합니다. **Podman 4.9.3** 버전이 설치됩니다. -* Docker, Docker Compose 조합을 사용하기에 적합합니다. **Docker 최신 버전의 패키지가 제공** 됩니다. 25년 8월 현재 **28.3.3** 버전이 제공됩니다. - * [https://docs.docker.com/engine/install/ubuntu/](https://docs.docker.com/engine/install/ubuntu/) +Podman 은 Docker 를 대체할 수 있는 컨테이너 엔진입니다. +QueryPie 는 Docker 와 Podman, 두 컨테이너 엔진 환경을 모두 지원합니다. +Podman 은 기본적인 설치 구성에서 Rootless Mode 로 작동합니다. +이에 따라, 고객사의 보안정책에 따라 Rootless Mode 환경을 구성해야 하는 경우, Podman 으로 구현하는 것을 권장합니다. -#### Rocky Linux 9 (2022년 7월 출시) +### Podman 을 간편하게 설치하기 -Rocky Linux 9 역시 RHEL 9과 동형의 릴리스 정책을 따르며, 유지보수 지원은 2032년 5월 31일까지 제공됩니다. -기본 컨테이너 스택은 Podman이며, 루트리스 실행과 cgroup, systemd 연계가 성숙해 복잡한 다중 컨테이너 서비스를 운영하기 용이합니다. -Docker CE는 Rocky 9에서도 공식(Red Hat) 채널이 아닌 Docker의 자체 리포지터리를 통해 설치하는 모델이 일반적이고, Compose 플러그인을 더해 배포 자동화를 단순화할 수 있습니다. -QueryPie Server는 두 엔진 모두에서 동등한 품질로 동작하도록 검증되었습니다. +setup.v2.sh 를 이용하면, Podman 을 간편하게 설치할 수 있습니다. +setup.v2.sh 가 자동으로 설치하는 Podman 은 Rootless Mode 를 기본으로 적용합니다. -* Podman, Docker Compose 조합을 사용하기에 적합합니다. **Podman 4.9.4** 버전이 설치됩니다. -* Docker, Docker Compose 조합을 사용하기에 적합합니다. **Docker 최신 버전의 패키지가 제공** 됩니다. 25년 8월 현재 **28.3.3** 버전이 제공됩니다. - * [https://docs.docker.com/engine/install/rhel/](https://docs.docker.com/engine/install/rhel/) +setup.v2.sh 를 이용하여 Podman 을 설치하는 방법은 다음과 같습니다. +```bash +$ bash <(curl -s https://dl.querypie.com/setup.v2.sh) --install-container-engine +``` -#### CentOS Stream (2021년 이후) +이 명령은 해당 서버의 리눅스 배포본을 자동으로 탐지하고, Podman이 원활하게 지원되는 경우 Podman을 설치합니다. +Podman을 설치하는 리눅스 배포본은 다음과 같습니다. -기존 CentOS 의 대체 배포판으로, RHEL 의 차기 릴리스를 미리 반영하는 롤링 업데이트 방식을 채택하고 있습니다. -안정성 면에서 RHEL 및 Amazon Linux 대비 변동성이 있으므로, 장기 운영보다는 개발 및 테스트 환경에 적합합니다. -QueryPie 운영 환경에 적합하지 않기에, 사용하지 않는 것을 권장합니다. +* Red Hat Enterprise Linux 8, 9, 10 +* Rocky 8, 9 +* Ubuntu 24.04 LTS + +Podman을 설치하지 않고 Docker를 설치하는 리눅스 배포본은 다음과 같습니다. +아래의 리눅스 배포본에서 Docker를 사용해야 하는 이유에 대해서는 이 문서를 참조하세요: [리눅스 배포본과 Docker, Podman 지원 현황](linux-distribution-and-docker-podman-support-status) + +* Amazon Linux 2, Amazon Linux 2023 +* Ubuntu 22.04 LTS + +### Rootless Mode Podman 을 수작업으로 설치하기 + +Red Hat Enterprise Linux, Rocky 에서는 다음 명령으로 Podman 을 수작업으로 직접 설치할 수 있습니다. +```bash +$ sudo dnf -y -q --best install podman podman-plugins podman-manpages podman-docker +$ systemctl --user enable --now podman.socket +``` + +`systemctl` 명령으로 `podman.socket` 서비스를 활성화해야 한다는 것에 주의해 주세요. `podman.socket` 서비스를 활성화해야 Docker Compose와 Podman을 함께 사용할 수 있습니다. + +`systemctl` 명령에서, `--user` 옵션을 사용하는 경우, Rootless Mode 로 설치됩니다. `--user` 옵션을 사용하지 않는 경우, Rootful Mode 로 설치됩니다. + +Ubuntu 24.04 LTS 에서는 다음 명령으로 Podman 을 수작업으로 직접 설치할 수 있습니다. +```bash +$ sudo apt -qq update +$ sudo apt-get -y -qq install podman podman-docker +$ systemctl --user enable --now podman.socket +``` + +### Rootless Mode Podman 에서 QueryPie 설치하기 + +setup.v2.sh 를 이용하면, Rootless Mode Podman 환경에서 QueryPie 를 간편하게 설치할 수 있습니다. + +QueryPie 를 처음 설치하는 경우, Compose package 를 설치할 리눅스 계정의 홈디렉토리에서, 다음의 명령을 수행합니다. +setup.v2.sh 가 권장하는 버전의 QueryPie 가 자동으로 설치됩니다. +```bash +$ bash <(curl -s https://dl.querypie.com/setup.v2.sh) +``` + +QueryPie 버전을 지정하여 설치하려는 경우, 다음과 같이 버전을 명시할 수 있습니다. +```bash +$ bash <(curl -s https://dl.querypie.com/setup.v2.sh) --install 11.0.1 +``` + +위의 명령을 실행하면, Compose 를 위한 package.tar.gz 설정, `.env` 환경변수 설정, Container 이미지 내려받기, Migration 실행하기, Container 실행하기, Rootless Mode Podman 을 위한 systemd service 등록 등 전체 설치 과정이 자동으로 수행됩니다. + +#### 리눅스 서버 재시작과 systemd service 등록 + +Rootless Mode Podman 의 경우, 리눅스 서버가 재시작하는 경우, 추가적인 설정을 하지 않으면, Container 가 자동으로 실행되지 않습니다. +이는 Rootless Mode Podman 의 특성입니다. + +리눅스 서버 재시작 때, Container 가 자동으로 실행되려면, `podman compose up -d` 명령을 수행하는 systemd service 를 등록하고 활성화하여야 합니다. +QueryPie 를 위한 systemd service 파일은 Compose 를 위한 package.tar.gz 에서 기본으로 제공됩니다. + +`setup.v2.sh` 를 이용하여 QueryPie 를 설치한 경우, 이러한 systemd service 등록, 활성화 과정을 자동으로 수행합니다. +따라서, 이용자가 이 부분을 직접 실행하지 않아도 됩니다. + +그러나, QueryPie 설치, 운영을 원활히 수행하려면 systemd service 등록, 활성화 과정에 대한 이해가 필요하고, 직접 systemd service를 제어하여 문제를 해결할 수 있어야 합니다. + +먼저, systemd user mode 의 service 가 자동으로 활성화되는 시스템 설정이 필요합니다. `loginctl` 명령으로 이 이용자에 대해 linger mode 를 켜야 합니다. +이 설정을 적용하지 않으면, 이용자가 리눅스 시스템에 로그인한 이후에야, systemd service 가 작동합니다. +이용자가 리눅스 서버에 로그인하지 않은 상태에서 자동으로 systemd service를 활성화하기 위해 linger mode를 켜 주세요. +```bash +$ sudo loginctl enable-linger $USER +``` + +systemd service 파일을 가리키는 심볼릭 링크를 `$HOME/.config/systemd/user/` 아래에 생성합니다. +```bash +$ systemctl --user link querypie/current/systemd/podman-querypie-database.service +Created symlink /home/ec2-user/.config/systemd/user/podman-querypie-database.service → /home/ec2-user/querypie/current/systemd/podman-querypie-database.service. +$ systemctl --user link querypie/current/systemd/podman-querypie-app.service +Created symlink /home/ec2-user/.config/systemd/user/podman-querypie-app.service → /home/ec2-user/querypie/current/systemd/podman-querypie-app.service. +``` + +systemd enable 명령으로 서비스를 작동시킵니다. +```bash +$ systemctl --user enable --now podman-querypie-database.service +Created symlink /home/ec2-user/.config/systemd/user/default.target.wants/podman-querypie-database.service → /home/ec2-user/querypie/11.1.1/systemd/podman-querypie-database.service. +$ systemctl --user enable --now podman-querypie-app.service +Created symlink /home/ec2-user/.config/systemd/user/default.target.wants/podman-querypie-app.service → /home/ec2-user/querypie/11.1.1/systemd/podman-querypie-app.service. +``` + +별도 구성된 MySQL 을 사용하는 경우 + +기본 제공되는 `./querypie//compose.yml` 을 이용해, 하나의 리눅스 서버에서 MySQL 를 실행하지 않고, 별도로 구성된 MySQL 을 사용하는 경우, systemd service 작동 범위를 변경하면 됩니다. + +`podman-querypie-database.service` 를 작동시키지 않으면 됩니다. +작동 중인 systemd service 를 다음의 명령으로 끌 수 있습니다. +```bash +$ systemctl --user disable podman-querypie-database.service +``` + +QueryPie를 원활히 운영하려면, `systemctl` 명령을 이용하여 systemd service를 관리하는 방법에 익숙해야 합니다. +그러나, 이 문서에서는 `systemctl` 명령을 이용하여 systemd service 를 관리하는 방법을 상세히 다루지 않습니다. + +### 참고자료 + +* Red Hat Enterprise Linux, Rootless Podman 환경에서 systemd service 를 이용해 container 를 자동으로 실행하기 + * [https://www.redhat.com/en/blog/container-systemd-persist-reboot](https://www.redhat.com/en/blog/container-systemd-persist-reboot) + * [https://docs.redhat.com/en/documentation/red_hat_enterprise_linux/8/html/building_running_and_managing_containers/assembly_porting-containers-to-systemd-using-podman_building-running-and-managing-containers](https://docs.redhat.com/en/documentation/red_hat_enterprise_linux/8/html/building_running_and_managing_containers/assembly_porting-containers-to-systemd-using-podman_building-running-and-managing-containers) diff --git a/confluence-mdx/tests/reverse-sync/1907294209/improved.mdx b/confluence-mdx/tests/reverse-sync/1907294209/improved.mdx index 2e0bb9391..43dbf2982 100644 --- a/confluence-mdx/tests/reverse-sync/1907294209/improved.mdx +++ b/confluence-mdx/tests/reverse-sync/1907294209/improved.mdx @@ -1,756 +1,126 @@ --- -title: 'AWS EKS 환경에서 설치하기' -confluenceUrl: 'https://querypie.atlassian.net/wiki/spaces/QM/pages/815235967/AWS+EKS' +title: '설치 후 초기 설정' +confluenceUrl: 'https://querypie.atlassian.net/wiki/spaces/QM/pages/1907294209' --- import { Callout } from 'nextra/components' -# AWS EKS 환경에서 설치하기 +# 설치 후 초기 설정 -### 1. 개요 +운영 환경에 따라 설치 이후 필수적으로 수행이 필요한 설정들을 안내합니다. -#### 1.1 목적 +### 공통 설정 -* AWS EKS 클러스터에 QueryPie를 설치하고 구성하는 전체 과정 안내 -* 안정적인 운영을 위한 설정 가이드 제공 +설치 직후 QueryPie 사용 시 필요한 공통 절차입니다. -#### 1.2 대상 독자 +#### QueryPie Web Base URL 설정 -* Kubernetes 기본 개념(Pod, Service, Deployment 등)을 이해하고 있는 엔지니어 -* AWS EKS 사용 경험이 있는 엔지니어 +> 설정 경로: Admin Page → General +Web Console 에 접근하기 위한 QueryPie 의 URL 주소입니다. +(예시. `https://querypie.customer.com`) 이 URL 은 QueryPie 의 Base URL 이라고 부르기도 합니다. -#### 1.3 예상 소요 시간 +이 URL 은 `/` 로 끝나지 않아야 합니다. `https://querypie.customer.com/` 와 같이 URL 의 마지막에 `/` 를 붙이지 않도록 주의하여 주세요. -* 전체 설치 과정: 약 1시간 -* 환경 구성: 15분 -* 기본 컴포넌트(MySQL, Redis) 설치: 15분 -* QueryPie 설치: 20분 -* 설치 검증 및 초기 설정: 10분 +이 URL 은 아래의 용도로 사용됩니다. -### 2. 사전 요구사항 +* SSO Integration 의 인증 과정에서, callback 주소로 사용됩니다. +* Web Console 에서 User Agent 를 내려받는 링크에 사용됩니다. +* 그 외 자세한 용도는, [QUERYPIE_WEB_URL](container-environment-variables/querypieweburl)를 참조하시기 바랍니다. -#### 2.1 인프라 요구사항 -* EKS 클러스터 - * 권장 노드 사양: m7i.xlarge (4 vCPU, 16GB RAM) - * Kubernetes 버전: 1.24 이상 - * 필요 노드 수: 최소 1개 (프로덕션 환경은 3개 이상 권장) +
+QueryPie Web Base URL 설정 화면 +
+QueryPie Web Base URL 설정 화면 +
+
-#### 2.2 로컬 환경 준비사항 +### 제품별 설정 -AWS CLI 설치 및 구성 -```bash -brew install awscli -aws configure # Requires Access Key and Secret Key -``` - -kubectl 설치 -```bash -brew install kubectl -``` - -Helm 설치 (버전 3.10.0 이상 필수) -```bash -brew install helm -``` - -선택적 도구 설치 (추천) -```bash -brew install kubectx # Context switching tool -brew install fzf # Command-line fuzzy finder -``` - -#### 2.3 접근 권한 요구사항 - -Container Registry 접근 권한 - -* Docker Hub: 인증 없이 공개 이미지 사용 가능 (`docker.io/querypie`) -* Harbor: 별도 계정 정보 필요 (`harbor.chequer.io`) - * 계정 정보 (Username/Password) - * QueryPie 이미지 접근 권한 - -#### 2.4 네트워크 요구사항 - -* 인터넷 연결 (이미지 다운로드용) -* EKS 클러스터 접근 가능한 네트워크 환경 -* LoadBalancer 사용 가능한 환경 (Ingress 구성용) - -### 3. 기본 컴포넌트 설치 - -시작하기 전에 QueryPie 설치를 위해 namespace를 만듭니다. -``` -kubectl create namespace querypie -``` - -#### 3.1 MetaDB(MySQL) 설치 - -MySQL은 QueryPie의 메타데이터를 저장하는 데이터베이스입니다. - -##### 3.1.1 Persistent Volume 생성 - -아래 내용으로 `pv.yml` 파일을 생성합니다. -```yaml -apiVersion: v1 -kind: PersistentVolume -metadata: - name: local-pv - labels: - app: mysql -spec: - capacity: - storage: 50Gi - accessModes: - - ReadWriteOnce - hostPath: - path: /var/lib/mysql - type: DirectoryOrCreate -``` - -PV를 생성합니다. -```bash -kubectl apply -f pv.yml -``` - -##### 3.1.2 MySQL StatefulSet 배포 - -아래 내용으로 `mysql.yml` 파일을 생성합니다. `MYSQL_PASSWORD` 의 비밀번호는 고객사의 정책에 따라 다른 값을 지정합니다. -```yaml -apiVersion: apps/v1 -kind: StatefulSet -metadata: - name: mysql - namespace: querypie -spec: - selector: - matchLabels: - app: mysql - serviceName: mysql - replicas: 1 - template: - metadata: - labels: - app: mysql - spec: - containers: - - name: mysql - image: mysql:8.0 - env: - - name: MYSQL_ROOT_PASSWORD - value: querypie - - name: MYSQL_DATABASE - value: querypie - - name: MYSQL_USER - value: querypie - - name: MYSQL_PASSWORD - value: "{your-mysql-password}" - resources: - requests: - cpu: "0.5" - memory: "2Gi" - ports: - - containerPort: 3306 - name: mysql - volumeMounts: - - name: data - mountPath: /var/lib/mysql - volumeClaimTemplates: - - metadata: - name: data - spec: - accessModes: [ "ReadWriteOnce" ] - resources: - requests: - storage: 50Gi - storageClassName: "" - selector: - matchLabels: - app: mysql ---- -apiVersion: v1 -kind: Service -metadata: - name: mysql - namespace: querypie - labels: - app: mysql -spec: - type: ClusterIP - selector: - app: mysql - ports: - - port: 3306 - targetPort: 3306 - protocol: TCP - name: mysql -``` - -MySQL StatefulSet과 Service를 생성합니다. -```bash -kubectl apply -f mysql.yml -``` - -MySQL Pod가 정상적으로 실행될 때까지 기다립니다. -```bash -kubectl get pods -w -n querypie | grep mysql -``` - -##### 3.1.3 데이터베이스 초기화 - -MySQL에 접속합니다. -```bash -kubectl exec -it mysql-0 -n querypie -- mysql -u root -p -# The password is {your-mysql-password} in above example. -``` - -필요한 데이터베이스를 생성합니다. -```sql -DROP DATABASE IF EXISTS querypie; -DROP DATABASE IF EXISTS querypie_log; -DROP DATABASE IF EXISTS querypie_snapshot; - -CREATE database querypie CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci; -CREATE database querypie_log CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci; -CREATE database querypie_snapshot CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci; - -GRANT ALL privileges ON querypie.* TO querypie@'%'; -GRANT ALL privileges ON querypie_log.* TO querypie@'%'; -GRANT ALL privileges ON querypie_snapshot.* TO querypie@'%'; - -FLUSH PRIVILEGES; -``` - -MySQL을 종료합니다. -```sql -exit -``` - -#### 3.2 Redis 설치 - -Redis는 QueryPie의 세션 및 캐시 저장소입니다. -아래 내용으로 `redis.yml` 파일을 생성합니다. `{your-redis-password}` 에는 고객사의 정책에 따라 다른 값을 지정합니다. -```yaml -apiVersion: apps/v1 -kind: Deployment -metadata: - name: redis - namespace: querypie - labels: - app: redis -spec: - selector: - matchLabels: - app: redis - template: - metadata: - labels: - app: redis - spec: - containers: - - name: redis - image: redis:7 - imagePullPolicy: IfNotPresent - args: ["--requirepass", "{your-redis-password}"] - ports: - - containerPort: 6379 - protocol: TCP - resources: - limits: - cpu: "0.1" - memory: "1Gi" - volumeMounts: - - name: redis-data - mountPath: /data - restartPolicy: Always - volumes: - - name: redis-data - emptyDir: {} - # Data is deleted on pod restart. It is OK for cache purposes. ---- -apiVersion: v1 -kind: Service -metadata: - name: redis - namespace: querypie - labels: - app: redis -spec: - type: ClusterIP - selector: - app: redis - ports: - - port: 6379 - targetPort: 6379 - protocol: TCP -``` - -Redis Deployment와 Service를 생성합니다. -```bash -kubectl apply -f redis.yml -``` - -Redis Pod가 정상적으로 실행될 때까지 기다립니다. -```bash -kubectl get pods -w -n querypie | grep redis -``` - -### 4. QueryPie 설치 - -#### 4.1 Secret 설정 - -##### 4.1.1 Container Registry 인증 정보 등록 - -**Docker Hub 사용 시** - -Docker Hub의 공개 이미지를 사용하는 경우, 이 단계를 건너뛰어도 됩니다. `values.yaml`에서 `registry: docker.io`로 설정하면 인증 없이 이미지를 다운로드할 수 있습니다. - -**Harbor 사용 시** - -Harbor 레지스트리를 사용하는 경우, 아래 명령으로 인증 정보를 등록합니다. -```bash -kubectl create secret docker-registry querypie-regcred \ - --docker-server=harbor.chequer.io \ - --docker-username='{harbor-id}' \ - --docker-password='{harbor-pw}' \ - -n querypie -``` - -##### 4.1.2 QueryPie 환경 설정 - -아래 내용으로 `querypie.env` 파일을 생성합니다. -환경변수에 대한 가이드를 참조하세요: [컨테이너 환경변수](../container-environment-variables) -```ini -# Agent Secret (32-character random string) -AGENT_SECRET=01234567890123456789012345678912 -KEK=querypie - -# QueryPie Meta DB connection info -DB_CATALOG=querypie -DB_HOST=mysql -DB_USERNAME=querypie -DB_PASSWORD={your-mysql-password} -DB_PORT=3306 - -# QueryPie Log DB connection info -LOG_DB_CATALOG=querypie_log -LOG_DB_HOST=mysql -LOG_DB_USERNAME=querypie -LOG_DB_PASSWORD={your-mysql-password} -LOG_DB_PORT=3306 - -# QueryPie Snapshot DB connection info -ENG_DB_CATALOG=querypie_snapshot -ENG_DB_HOST=mysql -ENG_DB_USERNAME=querypie -ENG_DB_PASSWORD={your-mysql-password} -ENG_DB_PORT=3306 - -# Redis connection info -REDIS_NODES=redis:6379 -REDIS_PASSWORD={your-redis-password} -``` - -환경 설정 파일을 Secret으로 등록합니다. -```bash -kubectl create secret generic querypie-secret --from-env-file=querypie.env -n querypie -``` - -#### 4.2 Helm Chart 설정 - -##### 4.2.1 Helm Repository 추가 - -```bash -# Add repository -helm repo add querypie https://chequer-io.github.io/querypie-deployment/helm-chart - -# Verify repository list -helm repo list -``` - -##### 4.2.2 values.yaml 설정 +#### DAC/SAC: Proxy 접속 주소 설정 -아래 내용으로 `values.yml` 파일을 생성합니다. +QueryPie Database 에 접속하여, DAC/SAC 의 Proxy 접속을 위한 주소를 등록합니다. -**참고** : 아래 예시는 Docker Hub를 사용하는 사례를 기준으로 합니다. -Harbor Registry 사용 시 `registry: harbor.chequer.io`로 변경하세요. -설치할 제품 버전은 [제품 버전](../product-versions) 문서를 참조하여 지정하세요. - -```yaml -# -- appVersion: QueryPie version to install. This is an example value. -# -- Please refer to the Product Versions document for available versions. -appVersion: &version 11.5.1 - -global: - image: - # -- Default registry used for all images - # For Docker Hub: docker.io - # For Harbor: harbor.chequer.io - registry: docker.io - # -- Default image tags used for all images - tag: *version - # -- Default image pull policy for all images - pullPolicy: IfNotPresent - # -- Default labels for all resources deployed by the chart - labels: {} - -# -- ServiceAccount for QueryPie and QueryPie tools pods -# It is created for authenticating private image registry and AWS API. -# @default -- {} -serviceAccount: - labels: {} - annotations: {} - # -- The name of the secret used for pulling the QueryPie image from the private registry. - # For Docker Hub: Set imagePullSecrets to an empty array ([]) or remove this section. - # For Harbor: Create the querypie-regcred secret and uncomment below. - imagePullSecrets: [] - # Uncomment below when using Harbor registry: - # imagePullSecrets: - # - name: querypie-regcred - -querypie: - # -- Labels used for QueryPie pods. - labels: {} - # -- Annotations used for QueryPie pods. - annotations: {} - tolerations: {} - # -- NodeSelector for QueryPie pods - nodeSelector: {} - replicas: 1 - # -- PodManagementPolicy for QueryPie pods. OrderedReady is fine for most cases, but Parallel is also good for large-scale deployments. - podManagementPolicy: Parallel - image: - # -- (string) Registry used for the QueryPie image. If not set, the global registry will be used. - registry: - # -- (string) Tag used for the QueryPie image. If not set, the global tag will be used. - tag: - # -- (string) PullPolicy used for the QueryPie image. If not set, the global pullPolicy will be used. - pullPolicy: - # -- Repository used for the QueryPie image. (required) - repository: querypie/querypie - ingress: - # -- (bool) If true, Ingress resource for QueryPie will be created. - enabled: true - labels: {} - # -- Annotations used for the Ingress resource. - # It is useful when you want to enable controller-specific feature for the Ingress resource. - annotations: {} - # -- (string) Class used for the Ingress resource. If not set, the default class will be used. - ingressClassName: "" - # -- Hostname used for the Ingress resource. If not set, every hostname will be accepted. - host: querypie.querypie.io # Replace with your actual URL - # -- Extra paths used for the Ingress resource. - # It is mostly used for redirecting HTTP to HTTPS if the ingress controller does not support redirect by default. - - proxyService: - # -- Create a service resource for QueryPie Agent connections. - # Basically, it opens 9000/tcp port for the QueryPie Agent, and 40000~/tcp for the Agentless connections. - enabled: true - labels: {} - # -- Annotations used for the Service resource. - # It is useful when you want to enable controller-specific feature for the Service resource. - annotations: {} - type: LoadBalancer - loadBalancerClass: "" - # -- Set the externalTrafficPolicy to Local is recommended for auditing the real client IP address. - externalTrafficPolicy: "Local" - # -- SessionAffinity is not required for the QueryPie. - sessionAffinity: "None" - updateStrategy: - # -- The strategy used for updating the QueryPie pods. - # It is generally recommended to use the RollingUpdate strategy. - # But if required, you can change it to OnDelete for manual operations. - type: RollingUpdate - resources: - requests: - cpu: "2000m" - memory: 16Gi - limits: - # -- More than 2 CPU cores are recommended. - cpu: "2000m" - # -- More than 16Gi memory is recommended. - memory: 16Gi - # -- Logrotator configuration - # Starting from version 11.3.0, log rotation is built into the main container. - # The logrotator image is only available on Harbor registry. - # When using Docker Hub, this must be disabled. - logrotator: - enabled: false - # Uncomment below and set enabled: true when using Harbor registry: - # image: - # repository: querypie/logrotate - # tag: latest - # -- External storage for the QueryPie Object Storage. - externalStorage: - # -- Type of the external storage. - # - none: No external storage. - # - persistentVolumeClaim: using a single Persistent Volume Claim for all QueryPie pods. - type: none - # -- Use a persistent volume claim for the external storage. It will be available if the type is persistentVolumeClaim. - persistentVolumeClaim: - # -- Use an existing Persistent Volume Claim for the external storage. - # If you set this to true, this helm chart will not create a new Persistent Volume Claim. - useExisting: false - # -- The name of the existing Persistent Volume Claim to be used. - claimName: "" - # -- Metadata of the Persistent Volume Claim. - metadata: - annotations: {} - labels: {} - # -- Spec of the Persistent Volume Claim. - spec: - storageClassName: "" - resources: - requests: - storage: 100Gi - # -- It is required to have ReadWriteMany access mode on production. - accessModes: - - ReadWriteMany - # -- Extra environment variables used for the QueryPie pods. - # This is useful for experimental features, debugging, workaround, and so on. - # for example: - # API_JVM_HEAPSIZE: '2g' will set the JVM heap size to 2GB. - extraEnvs: {} - -tools: - image: - # -- Registry used for the QueryPie tools image. If not set, the global registry will be used. - repository: querypie/querypie-tools - -config: - # -- External URL that users use to access the QueryPie via web. - # Specify the scheme, hostname, and port is required. - externalURL: "https://querypie.querypie.io" # Replace with your actual URL - secretName: "querypie-secret" - - database: - querypie: - # -- The maximum number of connections that QueryPie can use for "metastore" purposes. - connectionPoolSize: 20 - - dac: - # -- This setting is used to ignore simple queries sent by client tools such as DataGrip. - # Please refer to the commented-out example below. - skipCommandConfigData: "{}" - # skipCommandConfig: | - # { - # "mysql": [ - # "^(/\\*.*?\\*/)?\\s*SELECT\\s+@@session\\s*\\.\\s*\\w+\\s*$", - # "^(/\\*.*?\\*/)?\\s*SET\\s+session\\s+transaction\\s+\\w+(\\s+\\w+)*\\s*$", - # "^(/\\*.*?\\*/)?\\s*SET\\s+net_write_timeout\\s*=\\s*\\d+\\s*$", - # "^(/\\*.*?\\*/)?\\s*SELECT\\s+database\\s*\\(\\s*\\)\\s*$", - # "^(/\\*.*?\\*/)?\\s*SET\\s+SQL_SELECT_LIMIT\\s*=\\s*\\w+$", - # "^SHOW\\s+VARIABLES\\s+LIKE\\s+'aurora\\\\_version'\\s*$", - # "^SELECT\\s+version\\s*\\(\\s*\\)\\s*,\\s*@@version_comment\\s*,\\s*database\\s*\\(\\s*\\)\\s*$", - # "^SET\\s+autocommit\\s*=\\s*\\d+$", - # "^(/\\*.*?\\*/)\\s*SELECT\\s+((@@session\\s*\\.\\s*|@@)\\w+(\\s+AS\\s+\\w+)?(\\s*,\\s*)?)+\\s*$" - # ] - # } - # -- The path where the skip command config file will be mounted. - skipCommandConfigFile: /app/arisa/skip_command_config.json -``` +QueryPie Web Console 에서 QueryPie Database 에 연결하려면, DB 연결 설정이 필요합니다: [DB Connections](../administrator-manual/databases/connection-management/db-connections) -#### 4.3 QueryPie 설치 +Database 연결 설정 과정에서 QueryPie MySQL 의 Hostname, Username, Password 가 필요합니다. -Helm을 사용하여 QueryPie ACP를 설치합니다. +* Hostname: `host.docker.internal` +* Username: `querypie` (기본 설정의 경우) +* Password: QueryPie 를 설치한 디렉토리의 환경변수 파일에서 `DB_PASSWORD` 를 확인하세요. + * setup.v2.sh 로 설치한 경우: `.env` 파일 + * setup.sh 로 설치한 경우: `compose-env` 파일 -QueryPie ACP의 [제품 버전](../product-versions)에 따라 Helm 버전을 선택합니다. - -* QueryPie ACP 11.3.0 또는 이후: Helm Chart 1.5.0 이상의 최신 버전을 사용하세요. -* QueryPie ACP 11.3.0 이전: Helm Chart 1.4.4 를 사용하세요. - -이 문서의 Chart 버전은 예시로 제시된 것입니다. -```bash -helm upgrade --install poc querypie/querypie --version 1.5.0 -n querypie -f values.yaml -``` +환경변수 파일에 설정된 값 중 `DB_PASSWORD`, `REDIS_PASSWORD`, `KEY_ENCRYPTION_KEY` 등은 안전하게 보관하여야 합니다. +다른 사람에게 이 값을 노출하지 않도록 주의하여 주세요. +
-데이터베이스 마이그레이션을 실행합니다. +아래 `` 부분을 고객사의 Proxy 접속 IP 혹은 도메인으로 갈음하여 쿼리를 수행합니다. -이 단계는 반드시 실행해야 합니다. - -실행하지 않으면 `Table 'querypie.system_settings' doesn't exist` 오류가 발생하며 QueryPie Pod가 정상적으로 시작되지 않습니다. - -이 명령은 MySQL 데이터베이스에 필요한 스키마와 초기 데이터를 생성합니다. +해당 주소는 `http` `https` 와 같은 Scheme 을 붙여서는 안 됩니다. -```bash -kubectl exec -it deployments/poc-querypie-tools -n querypie -- /app/script/migrate.sh runall -``` - - -#### 4.4 설치 확인 - -Pod 상태를 확인합니다. -```bash -kubectl get pods -n querypie -``` - -로그를 확인합니다. -```bash -kubectl logs pod/poc-querypie-0 -f -``` - -서비스 접속을 확인합니다. -```bash -kubectl port-forward -n querypie statefulsets/poc-querypie 80:80 ``` - -이후, 처음 설정 과정을 진행합니다. - -* [라이선스 설치](../license-installation) -* [설치 후 초기 설정](../post-installation-setup) 문서를 참조하여 공통 설정, 제품별 설정을 진행합니다. - -이것으로 제품 설치 과정이 완료되었습니다. -수고하셨습니다~! - -### 5. 문제 해결 가이드 - -#### 5.1 설치 전 확인사항 - -##### 5.1.1 클러스터 접근 권한 확인 - -```bash -# Verify cluster access -kubectl cluster-info - -# Check current context -kubectl config current-context - -# Verify namespace access permissions -kubectl auth can-i create deployment -n querypie -``` - -##### 5.1.2 리소스 상태 확인 - -```bash -# Check node resource status -kubectl top nodes - -# Check available storage classes -kubectl get storageclass +UPDATE querypie.proxies SET host = '' WHERE id = 1; ``` -#### 5.2 일반적인 문제 해결 - -##### 5.2.1 Pod 상태 확인 - -```bash -# Check pod status -kubectl get pods -n querypie - -# Check pod details -kubectl describe pod -n querypie - -# Check pod logs -kubectl logs -n querypie -kubectl logs -n querypie --previous # Check previous logs if restarted +쿼리 실행에 에러 없이 정상적으로 수행이 확인되었으면, 아래 쿼리를 수행하여 등록이 되었는지 확인합니다. ``` - -주요 문제 상태 및 확인사항: - -* `ImagePullBackOff`: Container Registry 인증 정보 확인 - * Docker Hub 사용 시: `values.yaml`에서 `registry: docker.io` 설정 확인, `imagePullSecrets: []` 설정 확인 - * Harbor 사용 시: `querypie-regcred` Secret 생성 여부 확인 - * `logrotator` 이미지 오류 시: `logrotator.enabled: false` 설정 확인 (Docker Hub에서는 logrotator 이미지가 제공되지 않음) -* `Pending`: 노드의 리소스 부족 여부 확인 -* `CrashLoopBackOff`: 로그를 통해 애플리케이션 오류 확인 - * `Table 'querypie.system_settings' doesn't exist` 오류: DB 마이그레이션 미실행 → `migrate.sh runall` 명령 실행 필요 - -##### 5.2.2 서비스 연결 확인 - -```bash -# Check service status -kubectl get svc -n querypie - -# Check endpoints -kubectl get endpoints -n querypie - -# Test MySQL service connection -kubectl exec -it mysql-0 -- mysql -u querypie -p -h mysql querypie - -# Test Redis service connection -kubectl exec -it $(kubectl get pod -l app=redis -o jsonpath='{.items[0].metadata.name}') -- redis-cli -a querypie ping +SELECT * FROM querypie.proxies; ``` -##### 5.2.3 Ingress 확인 +Proxy 접속을 위한 주소를 QueryPie Database 에 등록한 이후, Server Container 를 재시작하지 않아도 됩니다. +User Agent 에서 로그인을 시도하면, 웹브라우저를 통해 인증을 진행한 이후, User Agent 를 사용할 수 있는 상태가 됩니다. -```bash -# Check ingress status -kubectl get ingress -n querypie +
+DAC/SAC Proxy 접속 주소 설정 화면 +
+DAC/SAC Proxy 접속 주소 설정 화면 +
+
-# Check ingress details -kubectl describe ingress -n querypie -``` +#### KAC: Proxy 접속 주소 설정 -#### 5.3 리소스 모니터링 +QueryPie Database 에 접속하여, KAC 의 Proxy 접속을 위한 주소를 등록합니다. -```bash -# Check pod CPU/Memory usage -kubectl top pods -n querypie +아래 `` 부분을 고객사의 Proxy 접속 IP 혹은 도메인으로 갈음하여 쿼리를 수행합니다. -# Check node CPU/Memory usage -kubectl top nodes +특이사항으로 DAC/SAC 설정과는 다르게 `http` `https` 와 같은 Scheme을 자유롭게 입력 가능합니다. -# Check resource limits for a specific pod -kubectl get pod -n querypie -o jsonpath='{.spec.containers[0].resources}' + +설정 후, 내부적으로 등록한 주소에 맞는 TLS 인증서 발급을 위해 QueryPie Container 재 기동이 필요합니다. + ``` - -#### 5.4 설치 구성 확인 - -```bash -# Check ConfigMap -kubectl get configmap -n querypie - -# Check Secret list -kubectl get secrets -n querypie - -# Check PV/PVC status -kubectl get pv -kubectl get pvc -n querypie +UPDATE querypie.k_proxy_setting SET host = 'https://'; ``` -#### 5.5 지원 요청 시 필요한 정보 - -문제 해결이 어려운 경우, 다음 정보를 수집하여 지원팀에 문의하세요: +
+KAC Proxy 접속 주소 설정 화면 +
+KAC Proxy 접속 주소 설정 화면 +
+
-##### 5.5.1 환경 정보 -```bash -# Kubernetes version -kubectl version --short +#### WAC: Proxy 접속 주소 설정 -# Node information -kubectl get nodes -o wide - -# Helm version -helm version -``` +> 설정 경로: Admin Page → Web Apps → Web App Configurations +WAC의 Proxy 접속 주소 설정은 Web Console 에서 수행 가능합니다. -##### 5.5.2 QueryPie 상태 정보 +자세한 설정 절차는 다음 문서를 참조하세요: [Web App Configurations에서 WAC 초기 설정하기](../administrator-manual/web-apps/wac-quickstart/initial-wac-setup-in-web-app-configurations) -```bash -# Helm deployment status -helm status poc -n querypie - -# Pod details -kubectl describe pod/poc-querypie-0 -n querypie - -# Recent events list -kubectl get events -n querypie --sort-by='.lastTimestamp' -``` + +설정 후, 내부적으로 등록한 주소에 맞는 TLS 인증서 발급을 위해 QueryPie Container 재 기동이 필요합니다. + -##### 5.5.3 로그 정보 -```bash -# Save QueryPie logs -kubectl logs pod/poc-querypie-0 -n querypie > querypie.log +### 제품 설치가 완료되었습니다 -# Save related component logs -kubectl logs mysql-0 > mysql.log -kubectl logs $(kubectl get pod -l app=redis -o jsonpath='{.items[0].metadata.name}') > redis.log -``` +설치 후 초기 설정 과정을 진행한 것으로, QueryPie ACP 제품을 사용할 수 있는 준비가 완료되었습니다. +수고하셨습니다~! -### 6. 참고 자료 +이후 다음의 문서를 참조하여, 관리자 설정을 진행하고, 제품을 사용할 수 있습니다. -* [Amazon EKS Workshop](https://www.eksworkshop.com) -* [Amazon EKS 문서](https://docs.aws.amazon.com/eks/) -* [Kubernetes 공식 문서](https://kubernetes.io/docs/) +* [관리자 매뉴얼](../administrator-manual) +* [사용자 매뉴얼](../user-manual) diff --git a/confluence-mdx/tests/reverse-sync/544112846/improved.mdx b/confluence-mdx/tests/reverse-sync/544112846/improved.mdx index 3f7772ef1..7a5d6109a 100644 --- a/confluence-mdx/tests/reverse-sync/544112846/improved.mdx +++ b/confluence-mdx/tests/reverse-sync/544112846/improved.mdx @@ -1,208 +1,92 @@ --- -title: 'Security' -confluenceUrl: 'https://querypie.atlassian.net/wiki/spaces/QM/pages/544178422/Security' +title: 'Allowed Zones' +confluenceUrl: 'https://querypie.atlassian.net/wiki/spaces/QM/pages/544112846/Allowed+Zones' --- import { Callout } from 'nextra/components' -# Security +# Allowed Zones ### Overview -Security 페이지에서 QueryPie 전반에 대한 보안 설정을 관리할 수 있습니다. -이 문서에서는 각 보안 설정에 대한 설명을 제공합니다. +Allowed Zones 페이지에서는, 사용자의 QueryPie 웹 콘솔 접근 및 DB 접속을 허용할 IP 대역을 통제하기 위해 사전에 Allowed Zone을 등록 및 관리합니다. -10.3.0부터 각 서비스별 설정 항목이 Administrator > General > Security 하위에서 각 서비스(Databases / Servers / Kubernetes)의 General 하위(Administrator > `{Service}` > General > Configurations)로 이동되었습니다. +11.3.0부터 "IP Band(s)" 대신 "IP Address Range(s)"로 표현이 수정되었습니다. -### 웹 콘솔 로그인 설정 -QueryPie Web 로그인 관련 보안 설정을 관리합니다. +### 등록된 Allowed Zone 목록 조회하기 - -### Account Security Policy - -QueryPie 계정의 잠금 및 만료 등의 보안 정책을 설정할 수 있습니다. - -
-Screenshot-2025-08-27-at-4.25.50-PM.png -
- -* **Account Expiration Period (Days)** : 계정 만료 처리를 위한 장기 미접속 일자 기준 -* **Expiration Reminder (Days) :** 계정 만료 알림 이메일을 발송할 기준일을 설정합니다. 드롭다운 목록에서 1일부터 14일까지 원하는 날짜를 여러 개 선택할 수 있습니다. 예를 들어, 14, 7, 1을 선택하면 계정 만료 14일, 7일, 1일 전에 각각 알림 메일이 발송됩니다. - * 이 기능은 Integration 메뉴에 Email 설정이 완료된 환경에서만 동작합니다. - * 알림 기간을 아무것도 선택하지 않으면, 만료 알림 메일은 발송되지 않습니다. -* **Maximum Login Failures before Account Lockout** : 로그인 실패 시 계정 잠금 정책 - * QueryPie 로그인 실패 최대 허용 횟수 지정 (Default : 60분, 5회) - * Enable 선택 시 횟수 및 기간 범위 기준 추가 입력 가능 (예: 1440분 내 5회 실패 시 계정 잠금) -* **Restrict Concurrent Login** : 동시 로그인 제한 기능으로 사용자 로그인 계정 하나에 대해 동시에 여러 환경(Web, Agent 각각)에서 활성화될 수 있는 로그인 수를 1개로 제한하여, 가장 최근 로그인만 활성 상태로 유지하고 이전 로그인은 다음 활동 시 자동 로그아웃시켜 계정 보안을 강화하는 정책. - * 동시 로그인 제한 방식 : 이 옵션이 활성화되면, 가장 오래된 로그인 세션을 종료하고 신규 로그인을 허용합니다. - * 단, 옵션을 활성화한 시점에 이미 로그인된 세션은 즉시 종료되지 않고 유지됩니다. 이후 새로운 사용자가 로그인하면, 기존 사용자 세션은 로그아웃됩니다. - * 로그아웃 알림 표시 방식: 동일 계정으로 다른 환경에서 로그인할 경우, 기존 세션은 종료되며 사용자에게 알림이 표시됩니다. - * 사용자가 Web Inactivity Timeout 또는 Agent Session Timeout 범위 내에서 활동 중일 경우, 명시적인 UI 동작(예: 버튼 클릭, 페이지 전환 등)을 통해 서버와 통신할 때 알림이 나타납니다. - * 버튼 클릭 등 사용자 API 호출 시 알림이 나타납니다. 알림은 다른 로그인 발생 시점부터 24시간 동안 표시됩니다. Web, User Agent, Multi-Agent는 각각 개별적으로 동시 로그인 제한이 적용됩니다. - - -### Password Setting - -QueryPie 계정의 패스워드 정책을 설정할 수 있습니다. - -
-image-20250515-091250.png -
- -* **Maximum Password Age** : 비밀번호 변경 주기 (Default : 90일) -* **Password History** : 이전 비밀번호 재사용 금지 횟수 기준 - * 설정된 숫자만큼의 비밀번호 이력을 저장하고, 비밀번호 변경 시 동일한 비밀번호 사용을 금지함 -* **Minimum Length** : 비밀번호 최소 길이 (Default : 9자) -* **Password Complexity Requirements** : 패스워드 복잡도 설정 - * Lower case letter (a-z) : 소문자 필수 - * Upper case letter (A-Z) : 대문자 필수 - * Number (0-9) : 숫자 필수 - * Special character (e.g., !@#$%^&*) : 특수문자 필수 - * Limit 3 repeating characters and numbers (e.g., aaa, bbb) : 3자 이상 반복되는 문자/숫자 제한 - * Limit 3 consecutive characters and numbers (e.g., abc, 123) : 3자 이상 연속되는 문자/숫자 제한 - * Restrict nearby characters on the keyboard (e.g., qwe, ert) : 3자 이상 키보드 상 나란히 있는 문자열 제한 - * Does not contain part of personal information (Username, Primary email) : 패스워드 내 개인정보(Username, Primary email) 사용 제한 - - -### Timeout - -웹 콘솔과 에이전트의 타임아웃 정책을 설정할 수 있습니다. - -
-image-20251009-051727.png -
- -* **Web Inactivity Timeout** : 웹 콘솔 타임아웃 기준 (Default : 60분) - * 지정된 시간 동안 활동이 없을 경우 타임아웃 처리 -* **Agent Session Timeout** : 에이전트 세션 타임아웃 기준 (Default : 1,440분) - * 지정된 시간 동안 에이전트 앱 로그인을 유지하고, 경과 시 로그아웃 처리 -* **User Inactivity Timeout (on agent)** :
Agent Session Timeout 기능에 추가로 Agent가 사용자의 마우스, 키보드 입력을 모니터링하고 지정된 시간을 초과하여 행위(키보드의 키 입력, 마우스 클릭, 마우스 포인터 이동, 마우스 휠 조작, 마우스 드래그)가 없으면 세션을 강제 종료합니다. 유휴 상태인 경우, 장시간 쿼리를 실행하고 있어도 마우스 및 키보드 움직임이 없다면 무조건 세션이 종료되어 로그아웃 처리됩니다. 사용자 행위 감시는 30초마다 수행합니다. 최대 유휴 만료 시간이 Agent Session Timeout을 초과할 수 없습니다. - - -**User Inactivity Timeout (on agent) 설정 예시** -* Agent Session Timeout이 30분이고 User Inactivity Timeout 15분일 경우를 가정하면 아래와 같습니다. - * 12:00분에 로그인 했을 경우 최초 유휴 만료 시간은 **12:15:00** 입니다. - * 12:08분에(t+8분) 마지막 활동을 한 것으로 확인되면, 새로운 유휴 만료 시간은 **12:23:00** 입니다. - * 그 뒤 1분이 지난 12:09분에 활동을 한 것이 확인되면, 새로운 유휴 만료 시간은 **12:24:00** 입니다. - * Agent Session Timeout이 30분이므로 사용자의 행위 유무와 관계없이 **12:30:00** 에 세션이 종료됩니다. - - - -### QueryPie Web IP Access Control - -QueryPie 접속 시 IP 제한 정책을 설정할 수 있습니다. - -
-Screenshot-2025-06-26-at-2.14.46-PM.png -
- -* **All Users** : 모든 사용자에 대해 적용되는 IP 제한 설정 (Default : 0.0.0.0/0) -* **Each User** : 토글을 켜면 개별 사용자에 대해 Allowed Zone 설정 가능 - * 사용자별 Allowed Zone 설정 방법은 [사용자 프로필](../user-management/users/user-profile) 에서 확인 가능 - * **Use Individual Configuration of Allowed Zones for Each User** : 사용자별 개별 IP 허용 영역(Allowed Zone)을 설정합니다. - * 활성화 시, 사용자 목록 및 각 사용자에게 할당된 IP 허용 영역을 확인할 수 있는 `View User to Allowed Zone Mappings` 링크가 표시됩니다. - * **View User to Allowed Zone Mappings** : 클릭 시 사용자별 Allowed Zone 목록을 모달(Modal) 창에서 확인할 수 있습니다. 사용자 이름(Display Name)으로 검색이 가능하며, 목록에는 사용자의 이름, 로그인 ID, 이메일, 그리고 할당된 모든 IP 주소가 표시됩니다. - * **Require Allowed Zones for User Access** : 사용자의 IP 허용 영역 설정을 필수로 강제하는 정책입니다. - * 이 옵션을 활성화하면, 개별 IP 허용 영역(Allowed Zone)이 설정되지 않은 사용자는 QueryPie에 로그인할 수 없습니다. 로그인 페이지 접근은 가능하지만, 로그인 시도가 차단됩니다. - - -**IP 접근 제어 정책 활성화 시 유의사항** -`Require Allowed Zones for User Access` 옵션 활성화로 인해 로그인이 차단된 사용자는 'IP Registration Request' 워크플로우를 통해 신규 IP 주소에 대한 접근 허용을 요청할 수 있습니다. -(자세한 내용은 [IP Registration Request 요청하기](../../../user-manual/workflow/requesting-ip-registration) 문서를 참고하십시오.) - - -* **Admin Page Access Control** : 관리자 페이지에 접근할 수 있는 관리자의 IP를 제한하는 정책을 설정합니다. 토글을 활성화하여 특정 IP 주소 또는 대역에서 접속하는 관리자만 관리자 페이지에 접근하도록 제한할 수 있습니다.
-
- Admin 페이지 IP 접근 차단 시 화면 -
- Admin 페이지 IP 접근 차단 시 화면 -
-
- * **접근 요구 조건:** - * 사용자는 관리자 권한을 가지고 있어야 합니다. - * 사용자의 접속 IP는 'All Users'에 설정된 IP 대역에 포함되어야 합니다. - * 사용자의 접속 IP는 'Admin Page Access Control'에 등록된 IP 목록에 포함되어야 합니다. - * **관리자 페이지 접근 제어 설정 시 유의사항** - * `Admin Page Access Control`에 IP를 추가할 경우, 해당 IP는 반드시 상위의 **All Users** 설정에도 포함되어야 합니다. 만약 **All Users** 에 등록되지 않은 IP를 추가하고 저장을 시도할 경우, 오류가 발생하며 설정이 저장되지 않습니다. +Allowed Zone의 목록을 조회하기 위해서는 Administrator > General > Company Management > Allowed Zones 페이지로 접근합니다. +Allowed Zone 이름으로 검색이 가능합니다. -**Q. 만약 사용자가 허용되지 않은 IP에서 QueryPie 웹 콘솔 접속 시도 시 어떤 화면을 보게 되나요?** -A. 허용되지 않은 IP에서 접속 시도 시 QueryPie 웹 콘솔 내 어떤 페이지이든 접근이 불가하여 아래와 같은 안내 화면을 보게 됩니다. -만약 All Users에 기본값(0.0.0.0/0)이 등록되어 있고, 개별 사용자에게 특정 Allowed Zone이 설정되어 있다면 로그인 페이지까지는 접속이 가능하나 로그인은 불가합니다. +**Default** Allowed Zone은 QueryPie 설치 시에 기본으로 생성되며 모두 허용(0.0.0.0/0) 값을 가집니다.
-Each User 설정의 IP 접근 차단 시 화면 +Administrator > General > Company Management > Allowed Zones
-Each User 설정의 IP 접근 차단 시 화면 +Administrator > General > Company Management > Allowed Zones
+### Allowed Zone 상세 정보 조회하기 + +Allowed Zones 목록에서 상세 정보를 조회하려는 아이템을 클릭하면 Drawer가 열립니다. +
-All User 설정의 IP 접근차단 시 화면 +Administrator > General > Company Management > Allowed Zones > Allowed Zones Detail
-All User 설정의 IP 접근차단 시 화면 +Administrator > General > Company Management > Allowed Zones > Allowed Zones Detail
+#### Allowed Zone 할당 내역 확인 - -**IP 제한 설정 주의** -Security 페이지의 설정은 저장 즉시 반영됩니다. -따라서 입력한 IP와 해당 옵션을 설정한 관리자의 IP가 일치하지 않을 경우 관리자라 하더라도 **저장 즉시 로그아웃 처리** 되니 주의해서 적용해 주시기 바랍니다. - - +Drawer 내 Mapped List by Allowed Zones 영역에서 Allowed Zone이 할당된 DB 커넥션 및 사용자를 확인할 수 있습니다. -### Secret Store 설정 - -Secret Store 사용 여부를 설정합니다. -현재 HashiCorp Vault를 지원하고 있습니다. - -
-screenshot-20240726-152042.png -
- -Vault 등록은 General > Integrations 메뉴에서 수행합니다. +* Database 탭: 해당 Allowed Zone으로 접근 통제 중인 DB 커넥션 목록 + * DB Connection Detail 페이지에서 Allowed Zone 할당 가능 +* Users 탭: 해당 Allowed Zone으로 QueryPie Web 접근 통제 중인 사용자 목록 -**Q. Secret Store 활성화를 해제하고 싶은데, 토글이 비활성화 상태입니다.** -A. Administrator > General > Integrations > HashiCorp Vault 메뉴에 등록된 Vault가 남아있는지 확인해 보세요. -등록된 Vault가 모두 제거된 후 토글 비활성화 가능합니다. +* 사용자별 Allowed Zone 할당은 기본적으로 비활성화되어 있으며, Global Option 활성화는 [Security 메뉴](security)에서 수행합니다. +* 사용자별 Allowed Zone 할당은 Users 메뉴의 [사용자별 상세 페이지](../user-management/users/user-profile)에서 수행합니다. -Secret Store 사용 활성화 및 Vault 등록이 완료된 후, DB 커넥션 상세 페이지 또는 Server Group 상세 페이지에서 인증 정보 저장소를 선택할 수 있게 됩니다. +### Allowed Zone 추가하기 -
-DB Connection 상세 페이지 내 Connection Information > Secret Store 선택 -
-DB Connection 상세 페이지 내 Connection Information > Secret Store 선택 -
-
+Allowed Zone 목록 페이지에서 `Create Allowed Zone` 버튼을 클릭하면 Allowed Zone 입력 항목이 출력됩니다.
-Server Group 상세 페이지 내 Accounts > Secret Store 선택 +Create Allowed Zone 생성 시 출력되는 입력항목
-Server Group 상세 페이지 내 Accounts > Secret Store 선택 +Create Allowed Zone 생성 시 출력되는 입력항목
- -11.1.0에 OAuth Client 관련 설정이 Admin > General > Company Management > Security 하위 항목으로 추가되었습니다. (단일 클라이언트 설정만 가능) -11.3.0에 Client 설정을 다중으로 구성할 수 있도록 개선되면서 Admin > General > System > Integrations 항목으로 이동되었습니다. - -### 기타 +* **Name** : Allowed Zone 이름 +* **IP Address Range(s)** : 할당할 IP 주소, 또는 IP 주소 범위를 입력합니다. + * IP 주소, 또는 IP 주소 범위를 하나 이상 입력할 수 있습니다. + * IP 주소 범위는 Classless Inter-Domain Routing(CIDR) 표기법을 사용합니다. 참고: [CIDR 이란?](https://aws.amazon.com/ko/what-is/cidr/) + * 둘 이상의 IP 주소, IP 주소 범위를 입력할 때, 쉼표를 구분자로 하여 입력합니다. + * 예1) `1.1.1.1, 2.2.2.2` + * 예2) `192.168.10.0/24, 192.169.30.0/24` + + +### Allowed Zone 삭제하기 -기타 보안 설정을 관리합니다. +Allowed Zone 목록에서 삭제하려는 Allowed Zone을 체크박스로 선택하면 `Delete` 버튼이 노출됩니다. +버튼을 클릭하고 확인 모달에서 `Delete` 버튼을 클릭하여 삭제를 완료합니다.
-screenshot-20240726-152051.png +삭제 옵션 활성화 +
+삭제 옵션 활성화 +
-* Export a file with Encryption : 파일 다운로드 시 암호 입력 여부 - * Required 선택 시, 파일 다운로드 시에 파일 암호 지정 필수 - diff --git a/confluence-mdx/tests/reverse-sync/544376183/improved.mdx b/confluence-mdx/tests/reverse-sync/544376183/improved.mdx index f05647ada..3fdc83308 100644 --- a/confluence-mdx/tests/reverse-sync/544376183/improved.mdx +++ b/confluence-mdx/tests/reverse-sync/544376183/improved.mdx @@ -1,199 +1,74 @@ --- -title: 'Okta 연동하기' -confluenceUrl: 'https://querypie.atlassian.net/wiki/spaces/QM/pages/544376100/Okta' +title: 'AWS SSO 연동하기' +confluenceUrl: 'https://querypie.atlassian.net/wiki/spaces/QM/pages/544376183/AWS+SSO' --- -import { Callout } from 'nextra/components' - -# Okta 연동하기 +# AWS SSO 연동하기 ### Overview -QueryPie에서는 Okta 연동을 지원합니다. -Okta의 사용자 및 그룹을 동기화하여 접근 권한을 부여하고 정책을 적용할 수 있으며, 이 과정에서 사용자에게 간소화되고 편리한 환경을 제공하면서도 엄격한 보안 정책을 운영할 수 있습니다. -QueryPie와 Okta의 통합은 데이터베이스 및 시스템 관리 생태계의 보안과 운영 효율성 및 사용자 경험을 향상시킬 수 있습니다. - - -SCIM 프로비저닝 연동까지 구현하고자 하는 경우, [[Okta] 프로비저닝 연동 가이드](../provisioning/okta-provisioning-integration-guide) 내 절차대로 대신 진행하기 바랍니다. 하단의 Okta API를 활용한 아웃바운드 사용자 동기화 설정을 동시에 활용할 시, 사용자 동기화에 영향을 받을 수 있는 점 유의하기 바랍니다. - - - -### Okta에서 QueryPie를 애플리케이션으로 추가 - -
-Okta Admin > Applications > Applications > Browse App Catalog > QueryPie 검색 -
-Okta Admin > Applications > Applications > Browse App Catalog > QueryPie 검색 -
-
- -1. [Okta 서비스](https://login.okta.com/)에 접속하여 관리자 계정으로 로그인합니다. -2. 우측 상단의 프로필을 클릭하여 Your Org로 접속합니다. -3. Okta 관리자 페이지의 좌측 패널에서 Applications > Applications 메뉴로 이동합니다. -4. `Browse App Catalog` 버튼을 클릭하여 QueryPie를 검색합니다. -5. QueryPie 애플리케이션 페이지로 들어가 `Add Integration` 버튼을 클릭합니다. -6. Application Label에 QueryPie로 입력된 것을 확인 후, `Done` 버튼을 클릭하여 애플리케이션을 추가합니다. - - -### Okta 계정 연동을 위한 Profile 설정 - -
-Okta Admin > Directory > Profile Editor > QueryPie User > Add Attribute -
-Okta Admin > Directory > Profile Editor > QueryPie User > Add Attribute -
-
- -1. Okta 관리자 페이지의 좌측 패널에서 Directory > Profile Editor 메뉴로 이동합니다. -2. Profile 목록 중 'QueryPie User'를 클릭합니다. -3. Attributes 설정에서 `Add Attribute` 버튼을 클릭합니다. -4. Attribute 추가 화면에서 아래 4가지 항목을 차례대로 입력 후 저장합니다. - 1. Display name : firstName / Variable name : firstName 항목 입력 후 `Save and Add Another` - 2. Display name : lastName / Variable name : lastName 항목 입력 후 `Save and Add Another` - 3. Display name : email / Variable name : email 항목 입력 후 `Save and Add Another` - 4. Display name : loginId / Variable name : loginId 항목 입력 후 `Save` 클릭 - -
-Okta Admin > Directory > Profile Editor > QueryPie User > Mappings -
-Okta Admin > Directory > Profile Editor > QueryPie User > Mappings -
-
- -1. 4가지 Attribute가 추가된 것을 확인 후 `Mappings` 버튼을 클릭합니다. -2. Okta User Profile Attribute 항목을 아래와 같이 QueryPie User Profile의 Attribute와 연결합니다. - 1. user.firstName ↔︎ firstName - 2. user.lastName ↔︎ lastName - 3. user.email ↔︎ email - 4. user.email ↔︎ loginId (Okta의 email 항목을 QueryPie의 로그인 Id로 사용합니다.) -3. `Save Mappings` 버튼을 클릭하여 저장합니다. - +QueryPie에서는 AWS IAM Identity Center의 사용자를 여러 클라우드 애플리케이션 및 SAML 2.0을 통해 사용자 연동을 지원합니다. +사용자를 동기화하여 접근 권한을 부여하고 정책을 적용할 수 있습니다. -### Okta에 추가된 QueryPie 애플리케이션에 사용자 할당 +### AWS IAM Identity Center에서 QueryPie를 애플리케이션으로 추가
-Okta Admin > Applications > Applications > QueryPie App -
-Okta Admin > Applications > Applications > QueryPie App -
+AWS-SSO-01-20230317-044219.png
-1. Okta 관리자 페이지의 좌측 패널에서 Applications > Applications 메뉴로 이동합니다. -2. 리스트에서 QueryPie 애플리케이션을 클릭합니다. -3. Assignments 탭으로 이동한 뒤 `Assign` 버튼을 클릭하여 `Assign to People` 또는 `Assign to Group`을 선택합니다. -4. Okta 계정으로 QueryPie 접근을 허용할 사용자 또는 그룹을 할당한 뒤 Done 버튼을 클릭합니다. - 1. People 할당 시 사용자 정보 확인 후 `Save and Go Back` 버튼을 클릭합니다. - 2. Group 할당 시 loginId 항목을 빈 칸으로 두고 `Save and Go Back` 버튼을 클릭합니다. -5. 사용자 또는 그룹이 QueryPie 애플리케이션에 할당되어 추가된 내역을 확인할 수 있습니다. +1. [AWS IAM Identity Center](https://ap-northeast-2.console.aws.amazon.com/singlesignon/applications/home)에 접속합니다. +2. 좌측 메뉴의 애플리케이션 메뉴로 진입합니다. +3. 우측 상단의 애플리케이션 추가 버튼을 클릭합니다. +4. 사용자 지정 SAML 2.0 애플리케이션 추가 옵션 선택 후 다음 버튼을 클릭합니다. +5. 애플리케이션 구성 > 표시 이름에 QueryPie를 입력합니다. +6. 애플리케이션 속성 > 애플리케이션 시작 URL 항목에 QueryPie가 설치된 도메인 주소를 아래와 같이 입력합니다. + 1. 애플리케이션 Start URL : https://`{querypie_host}` +7. 애플리케이션 메타 데이터 항목에 각각 다음과 같이 입력합니다. + 1. 애플리케이션 ACS URL : https://`{querypie_host}`/saml/sp/acs + 2. 애플리케이션 SAML 대상 : https://`{querypie_host}`/saml/sp/metadata +8. 제출 버튼을 클릭하여 저장합니다. -### Okta에서 QueryPie 애플리케이션 연동 정보 설정 +### QueryPie 연동을 위한 속성 매핑 설정
-Okta Admin > Applications > Applications > QueryPie App -
-Okta Admin > Applications > Applications > QueryPie App -
+AWS-SSO-06-20230317-064023.png
-1. Okta 내의 QueryPie 애플리케이션 페이지에서 Sign On 탭으로 이동합니다. -2. Settings 영역의 `Edit` 버튼을 클릭하여 QueryPie 가 설치된 도메인 주소를 Base URL 항목에 입력하고 저장합니다. -3. Metadata URL에 표기된 주소로 별도 탭에서 접근하여 표시되는 XML 정보를 복사합니다. - - -### 최소 권한의 Okta API 토큰 발급 - -QueryPie-Okta 간 사용자 및 그룹, 그룹 멤버십의 동기화를 위해 Okta Admin API 토큰 발급이 필요합니다. -일반적인 방법으로는 이용하고 계신 Okta 최고관리자(Super Administrator)/읽기권한관리자(Read-Only Administrator) 계정으로 API 토큰을 이하의 방법으로 발급하여 적용하는 방법이 있습니다: - -1. Okta 관리자 페이지 좌측 패널에서 Security > API 메뉴로 이동합니다. -2. API 메뉴에서 Tokens 탭으로 이동합니다. -3. Create Token 버튼을 클릭하여 인증 토큰을 생성할 수 있습니다. +1. 생성된 애플리케이션 우측 상단에서 작업 > 속성 매핑 편집 으로 이동합니다. +2. 애플리케이션 내 사용자 속성과 매핑 값, 형식을 위 스크린샷을 참고하여 다음과 같이 입력합니다. -다만, 보안 수준 향상을 위해 Okta API 토큰의 권한을 최소한으로 부여하도록 조정해야 하는 경우, 이하의 권한 및 방법에 따라 API 토큰을 생성할 것을 권장드립니다. +| **애플리케이션 내 사용자 속성** | **IAM Identity Center 의 문자열 값 또는 사용자 속성으로 매핑** | **형식** | +| --------------------- | ------------------------------------------------ | ------------ | +| Subject | $`{user:email}` | emailAddress | +| firstName | $`{user:givenName}` | basic | +| lastName | $`{user:familyName}` | basic | +| loginId | $`{user:email}` | basic | +| email | $`{user:email}` | basic | -
-Okta Admin Console > Security > Administrators > Roles > Create new role -
-Okta Admin Console > Security > Administrators > Roles > Create new role -
-
+`변경 사항 저장` 버튼을 클릭하여 저장합니다. -1. Okta 관리자 페이지 좌측 패널에서 Directory > People 메뉴로 이동하여 Add Person을 눌러 전용 시스템 연동용 계정을 생성합니다. - * 이미 쿼리파이 연동용으로 사용 가능한 계정이 있다면 본 단계를 넘어갑니다. -2. Okta 관리자 페이지 좌측 패널에서 Security > Administrators 메뉴로 이동하여 Roles 탭으로 이동합니다. -3. Create new role을 선택합니다. -4. Role name (예. MinimumAdminRole) 및 Role description을 정의한 뒤, Select Permissions에서 이하의 권한만 체크합니다. - 1. **User** - * View users and their details - 2. **Group** - * View groups and their details - 3. **Application** - * View application and their details -5. Save role을 눌러 커스텀 롤을 저장합니다. -6. Resources 탭으로 이동합니다. -7. Create new resource set을 선택합니다. - * 이미 할당할 권한 범위 지정을 위해 만들어두신 resource set이 있다면 본 단계를 넘어가 10번 단계를 진행합니다. -8. Name (예. MinimumResources) 및 Description을 정의한 뒤 이하의 범위를 검색하여 지정합니다. - 1. User : 쿼리파이 사용자 전부 선택 - 2. Group : 쿼리파이 사용 그룹 전부 선택 - 3. Application : 쿼리파이 앱으로 한정 -9. Create를 선택하여 생성합니다. -10. Admins 탭으로 이동하여 쿼리파이 연동용 계정에 이하의 권한을 할당합니다. - 1. Role: MinimumAdminRole | Resource: MinimumResources - 2. Role: Read-Only Administrator - * API 토큰 생성메뉴 접근을 위한 임시 부여 -11. 쿼리파이 연동용 계정으로 옥타 관리자 콘솔 페이지로 인증 후 접근합니다. -12. Security > API 메뉴에서 Tokens 탭으로 이동합니다. -13. Create Token 버튼을 클릭하여 인증 토큰을 생성하여 이를 보관합니다. -14. 이후 다시 초기 작업하였던 관리자 계정으로 접속하여 Security > Administrators > Admins 탭에서 연동용 계정을 편집하여 Read-Only Adminstrator 권한을 회수합니다. - - -### QueryPie에서 Okta 연동 및 동기화 설정 +### QueryPie에서 AWS IAM Identity Center 연동 설정
-Administrator > General > User Management > Authentication +Administrator > General > User Management > Authentication
-Administrator > General > User Management > Authentication +Administrator > General > User Management > Authentication
-1. QueryPie에서 Administrator > General > User Management > Authentication 메뉴로 이동합니다. -2. 인증 Type 항목에서 Okta를 선택합니다. -3. 복사한 XML 정보를 Identity Provider Metadata 항목에 붙여넣기합니다. -4. 자동 동기화를 설정하고자 하는 경우, “Use Synchronization with the Authentication System”를 체크합니다. - 1. API URL: Okta 관리자 페이지 우측 상단의 프로필을 클릭하면 `{domain}`.okta.com 형식의 URL을 확인할 수 있습니다. - 2. API Token: Okta 관리자 API 토큰을 기입합니다. - 3. Application ID: Okta 내에서 2개 이상의 QueryPie App을 사용할 경우 입력합니다. -5. 자동 동기화 기능을 사용하고자 할 경우 Replication Frequency 항목에서 Scheduling을 설정합니다. -6. `Dry Run` 버튼을 클릭하여 연동 정보가 정상적으로 입력되었는지 확인합니다. -7. `Save Changes`로 저장합니다. -8. `Synchronize` 버튼을 클릭하여 Okta의 사용자를 동기화합니다. - +1. Administrator > General > User Management > Authentication 메뉴로 이동합니다. +2. 인증 Type 항목에서 **SAML** 을 선택합니다. +3. 애플리케이션 > 작업 > 구성 편집 화면에서 IAM Identity Center SAML 메타데이터 파일을 다운로드합니다. +4. 다운로드 받은 XML 정보를 Identity Provider Metadata 항목에 붙여넣기합니다. +5. `Save Changes` 버튼을 클릭하여 저장합니다. - -**Application ID 확인하는 방법** -2개 이상의 QueryPie Application을 사용하는 경우, Okta Admin > Applications으로 이동하여 QueryPie 앱의 디테일 화면으로 들어가면 상단 URL에서 위의 스크린샷에 표시된 것과 같은 Application ID를 확인할 수 있습니다. - +### QueryPie에서 SAML 로그인
-Okta Admin > Applications > QueryPie App 상단 URL -
-Okta Admin > Applications > QueryPie App 상단 URL -
+image-20240723-073353.png
+이제 로그인 페이지에서 `Login with SAML` 버튼을 통해 AWS 인증하여 QueryPie에 로그인할 수 있습니다. -### QueryPie에서 Okta 로그인 - -1. General Settings > Users 또는 Groups 메뉴에서 동기화된 사용자 및 그룹을 확인할 수 있습니다. -2. 이제 로그인 페이지에서 `Login with Okta` 버튼을 통해 Okta 계정으로 QueryPie에 로그인할 수 있습니다. - -
-image-20240723-070449.png -
- -이 연동 방식으로는 사용자 및 그룹은 Okta → QueryPie로의 단방향 동기화를 지원합니다. -SCIM 프로비저닝 연동까지 구현하고자 하는 경우, [[Okta] 프로비저닝 연동 가이드](../provisioning/okta-provisioning-integration-guide) 내 절차대로 대신 진행하기 바랍니다. - diff --git a/confluence-mdx/tests/reverse-sync/544376265/improved.mdx b/confluence-mdx/tests/reverse-sync/544376265/improved.mdx index 35eb719ed..311b1c743 100644 --- a/confluence-mdx/tests/reverse-sync/544376265/improved.mdx +++ b/confluence-mdx/tests/reverse-sync/544376265/improved.mdx @@ -1,49 +1,51 @@ --- -title: 'Provisioning' -confluenceUrl: 'https://querypie.atlassian.net/wiki/spaces/QM/pages/544376236/Provisioning' +title: 'Provisioning 활성화 하기' +confluenceUrl: 'https://querypie.atlassian.net/wiki/spaces/QM/pages/544376265/Provisioning' --- -# Provisioning +import { Callout } from 'nextra/components' + +# Provisioning 활성화 하기 ### Overview -**SCIM(System for Cross-domain Identity Management)** 은 사용자 식별 정보를 관리하기 위해 설계된 오픈 표준 프로토콜로, 사용자와 그룹을 나타내는 정의된 스키마와 해당 사용자 및 그룹 리소스에 CRUD(생성, 읽기, 업데이트, 삭제) 작업을 수행하는 RESTful API를 제공합니다. -조직에서 사용하는 계정 시스템을 연동하여 조직 내의 사용자 및 그룹에 해당하는 Attribute(속성) 및 현황을 계정 시스템에서 반영된 즉시 QueryPie로 동기화할 수 있습니다. +SCIM 2.0 프로토콜을 기반으로 동작하는 QueryPie의 Provisioning 기능은 사용자 아이덴티티 동기화를 지원하여 기존의 사용자 인증 및 액세스 관리를 돕는 SSO에 더해 더욱 안전한 사용자 통합 인증 및 관리 환경을 제공합니다. +사용자의 라이프사이클 관리를 지원하게 되어 관리자는 조직 내의 입사자 및 퇴사자를 계정 시스템 한 곳에서 더욱 편리하게 관리할 수 있습니다. -
-screenshot-20240613-174843.png -
+### Prerequisites -### 계정 시스템 SCIM 동기화를 통한 사용자 관리 +* 이하의 쿼리파이 관리자 권한 Role에서 이 기능을 활성화할 수 있습니다: + * Owner + * System Admin -QueryPie에서는 Auth Provider라는 필드를 바탕으로 사용자의 원장을 정의합니다. -이 Auth Provider는 Administrator > General > User Management > Authentication 메뉴에서 설정한 외부 계정 시스템 타입을 따라갑니다. + +### QueryPie Provisioning 활성화
-Administrator > General > User Management > Provisioning +Administrator > General > User Management > Provisioning
Administrator > General > User Management > Provisioning
-일반적인 SCIM 연동 API로는 해당 주체를 파악할 수 없으므로, SCIM API가 호출되어 사용자가 생성되면 Auth Provider는 해당 Authentication Type을 따라갑니다. -따라서, 보다 원활한 계정 플로우 관리를 위해 [SSO 계정 시스템 연동](authentication)의 절차를 먼저 진행하는 것을 권장드립니다. -이에 따른 시스템 동작은 아래와 같습니다. - -* **Authentication 미설정 (Default: Internal Database)** - * SCIM API에 의해 생성된 사용자 또는 그룹의 Auth Provider는 “QueryPie”가 되며 일반적인 bulk import의 개념으로 동작하게 됩니다. - * 로컬 쿼리파이 계정과 동일하게 관리되며, 쿼리파이에서 해당 사용자에 대한 편집, 삭제가 가능합니다. -* **Authentication 설정 (예. Okta)** - * SCIM API에 의해 생성된 사용자 또는 그룹의 Auth Provider는 해당 Identity Provider(IdP)로 표기되며 사용자의 Attribute 프로필 관리는 Administrator > General > User Management > Profile Editor의 기준으로 업데이트 관리됩니다. - * 기존 로컬 QueryPie 계정에 Username (loginId)가 동일한 사용자의 정보가 SCIM API로 업데이트 호출을 받게되면, 해당 사용자의 프로필이 IdP에 맞추어 수정되나, 쿼리파이 내 부여 권한의 유지를 목적으로 우선 Auth Provider가 해당 IdP로 변경되지 않습니다. (9.19.0 기준) - * 여전히 로컬 쿼리파이 계정과 동일하게 쿼리파이에서 해당 사용자에 대한 프로필 및 현황 편집, 삭제가 가능합니다. - * 실제 일관성 유지를 위해 사용자의 라이프사이클 관리는 IdP에서 진행하시는 것을 권장드립니다. - * 동기화된 사용자는 QueryPie 내에서 변경 및 삭제가 불가능합니다. - -### SCIM 계정 시스템 연동 가이드 바로가기 - -* [Provisioning 활성화 하기](provisioning/activating-provisioning) -* [[Okta] 프로비저닝 연동 가이드](provisioning/okta-provisioning-integration-guide) - - +1. QueryPie 앱의 Administrator > General > User Management > Provisioning 경로로 이동합니다. +2. Provisioning 우측의 `Enable` 버튼을 클릭하여 SCIM 기능을 활성화합니다. +3. SCIM Endpoint로 제공하는 주소 값을 향후 Base URL로 설정할 수 있도록 보관합니다. +4. Access Token 발급을 위해 우측의 `Generate Token` 버튼을 클릭합니다. +5. 팝업창이 나타나면 해당 Access Token 값을 향후 IdP 측 토큰 정보에 기입할 수 있도록 복사해둡니다. + 1. 이 토큰 값은 다시 조회가 어려우므로 해당 창을 닫지 않고 바로 원장이 될 Identity Provider로 넘어가는 것을 권장합니다. ([ **Okta-QueryPie Provisioning 연동** ](okta-provisioning-integration-guide) 스텝 참고) + 2. 혹시라도 토큰 값을 분실한 경우, 기존의 토큰을 삭제하고 다시 4번 단계를 통해 새로 발급받기 바랍니다. +6. `Confirm` 버튼을 눌러 창을 닫습니다. + + +**SCIM 전용 토큰 안내** +1. Access Token은 Generate Token 버튼을 통해 생성할 수 있으며, 최대 2개까지만 발급 가능합니다. +2. 토큰 값은 생성 당시 1회에 한해 노출되며 이후에는 노출되지 않습니다. +3. SCIM API 전용으로만 사용 가능하며 /api/scim/v2 외 다른 엔드포인트 호출이 불가합니다. +4. 새로 생성된 토큰은 발급일 yyyy-MM-dd 기준으로 1년까지만 유효합니다. + 1. 만료일이 도래하면 토큰은 Expired 처리되어 SCIM API 이용이 불가합니다. + 2. 관리자는 만료일이 도달하기 이전에 신규 토큰을 발급하여 기존의 IdP에 설정된 토큰을 변경해야 합니다. +5. 토큰을 선택하고 `DELETE` 버튼을 클릭하여 토큰 삭제가 가능합니다. +6. 만일 관리자가 토큰을 발급받았던 상태에서 Provisioning을 비활성화 했다가 다시 활성화 했을 경우, 기존의 토큰은 모두 비활성화 타이밍에 삭제 처리되므로, 관리자는 새로 유효한 토큰을 발급해야 합니다. + diff --git a/confluence-mdx/tests/reverse-sync/544379393/improved.mdx b/confluence-mdx/tests/reverse-sync/544379393/improved.mdx index 8d4d7cf6b..e71463748 100644 --- a/confluence-mdx/tests/reverse-sync/544379393/improved.mdx +++ b/confluence-mdx/tests/reverse-sync/544379393/improved.mdx @@ -1,44 +1,67 @@ --- -title: 'Integrations' -confluenceUrl: 'https://querypie.atlassian.net/wiki/spaces/QM/pages/544080097/Integrations' +title: 'Syslog 연동' +confluenceUrl: 'https://querypie.atlassian.net/wiki/spaces/QM/pages/544379393/Syslog' --- import { Callout } from 'nextra/components' -# Integrations +# Syslog 연동 ### Overview -Integration 메뉴에서는 외부 보안 서비스와의 연동을 간편하게 지원합니다. -다양한 보안 툴과의 연동을 통해 시스템 보안을 강화하고, 시스템의 복잡성을 줄이며, 관리 및 유지 보수를 단순화할 수 있습니다. -10.0.0 버전 현재, SIEM/SOAR 및 Secret Store 연동을 지원하고 있으며, 지원하고 있는 SIEM 서비스는 Syslog, Splunk의 2종입니다. +QueryPie에서 기록하는 로그를 Syslog 형식으로 외부로 전송하는 기능을 제공합니다. - -**SIEM이란?**
SIEM(Security Information and Event Management)은 여러 원본으로부터 이벤트 로그 데이터의 실시간 수집 및 분석을 지원합니다. -로그의 상관 관계를 분석하고 비정상적 활동을 식별하여 적절한 조치를 취할 수 있습니다. +* 9.19.0 이전 버전까지는 UDP 프로토콜 기반 Syslog(RFC3164) 형식의 로그 전송을 지원하였습니다. +* 9.19.0 버전부터 TCP 프로토콜을 지원합니다. 또한, HTTP/HTTPS 프로토콜 기반 Splunk HEC(HTTP Event Collector) 전송을 지원합니다. + + +### Syslog Integration 설정 + +1. Administrator > General > System > Integrations 메뉴로 이동합니다. +2. Syslog 타일을 클릭하여 상세 페이지로 이동합니다. + + +**Syslog (legacy) 는 무엇인가요?**
기존 Syslog를 사용하셨던 경우 **Syslog (Legacy)** 타일이 추가로 표시됩니다. +이곳에서 기존 포맷을 유지한 상태로 Syslog를 그대로 전송받을 수 있습니다. +Legacy Format은 Syslog 프로토콜 상 Timestamp 필드가 Time Zone의 영향을 받으므로 별도로 Time Zone 설정 항목이 존재합니다. +기본값은 UTC입니다.
+1. 상세 페이지에 있는 `Configure` 버튼을 클릭하면 Destination 정보를 입력할 수 있는 팝업이 표시됩니다. +
-Administrator > General > System > Integrations +Administrator > General > System > Integrations > Syslog > Configure Destination
-Administrator > General > System > Integrations +Administrator > General > System > Integrations > Syslog > Configure Destination
- -Integration 설정을 위해서는 System admin 권한이 필요합니다. +1. Destination 정보를 생성하기 위해 다음의 정보들을 입력합니다. + 1. **Destination Name** : syslog를 수신하는 주체를 식별할 수 있도록 적당한 이름을 입력합니다. + 2. **Protocol** : syslog에서 선택 가능한 프로토콜은 TCP(기본값)와 UDP입니다. UDP는 패킷의 길이 제약사항이 있고 보안적으로 취약하므로 TCP 사용을 권장합니다. + 3. **Destination Address (Hostname)** : syslog를 수신하는 syslog server의 IP address 또는 hostname을 입력합니다. + 4. **Port** : sylog server에서 listen 하는 port를 입력합니다. (기본값 514) + 5. **Test Connection 버튼** : TCP는 syslog 서버와 통신상태를 점검할 수 있습니다. + * UDP는 프로토콜 특성상 통신 상태 점검이 불가능하여, Test Connection 버튼이 비활성화됩니다. + 6. **Select Event Items** : 이벤트 항목을 선택적으로 전송할 수 있습니다. 아래에 있는 "Select all event items, including those that may be added later.” 체크박스를 선택하면 전송 가능한 모든 이벤트를 전송합니다. + 7. Disable syslog header : syslog header 정보를 빼고 전송합니다(기본값 Yes). 일부 SIEM에서 json 파싱이 어려운 경우 syslog header를 빼기 위해 제공되는 옵션입니다. + 8. Description : 설정 정보에 대한 100자 이내의 간략한 정보를 입력합니다. +2. `OK` 버튼을 누르고 설정을 저장합니다. + 1. 설정 사항을 저장하더라도 바로 Syslog 전송이 활성화되는 것은 아닙니다. +3. 전송 시작을 하려면 페이지 좌측 상단에 있는 토글 버튼을 `ON`으로 전환합니다. + 1. 이 전송 토글 버튼은 유지 보수 등 다양한 상황에서 일시적으로 전송을 중지해야 하는 경우 사용할 수 있습니다. +4. 만약 더 이상 Syslog 전송이 필요하지 않을 경우 Delete 버튼을 통해 설정을 제거할 수 있습니다. + 1. 단, 전송 중인 상태에서는 삭제할 수 없으므로 전송 토글 버튼을 :토글off: 로 변경한 후 삭제해 주시기 바랍니다. + + +11.3.0에서 Timezone 설정이 추가되었습니다. +이전에 Syslog (Legacy)에서만 Timezone 설정을 할 수 있었으나 SIEM 관련 설정 모두(Syslog, Splunk) Timezone 설정을 할 수 있도록 변경되었습니다. +또한 New DAC Policy Management 기능에 의해 발생된 이벤트에 대한 스트리밍 전송 기능이 추가되었습니다. +(Select Event Items에서 DAC Policy Audit Logs를 선택.) -### 제공하는 기능 - -* [Syslog 연동](integrations/integrating-with-syslog) -* [Splunk 연동](integrations/integrating-with-splunk) -* [Secret Store 연동](integrations/integrating-with-secret-store) -* [Email 연동](integrations/integrating-with-email) -* [Event Callback 연동](integrations/integrating-with-event-callback) -* [OAuth 2.0을 사용하기 위한 Google Cloud API 연동](integrations/integrating-google-cloud-api-for-oauth-20) -* [Slack DM 연동](integrations/integrating-with-slack-dm) -* [OAuth Client Application](integrations/oauth-client-application) -* [Identity Providers](integrations/identity-providers) +
+image-20251009-045004.png +
diff --git a/confluence-mdx/tests/reverse-sync/568852692/improved.mdx b/confluence-mdx/tests/reverse-sync/568852692/improved.mdx index d4fef6238..668bd35a6 100644 --- a/confluence-mdx/tests/reverse-sync/568852692/improved.mdx +++ b/confluence-mdx/tests/reverse-sync/568852692/improved.mdx @@ -1,321 +1,64 @@ --- -title: 'MongoDB 전용 가이드' -confluenceUrl: 'https://querypie.atlassian.net/wiki/spaces/QM/pages/544380381/MongoDB' +title: 'DocumentDB 전용 가이드' +confluenceUrl: 'https://querypie.atlassian.net/wiki/spaces/QM/pages/568852692/DocumentDB' --- import { Callout } from 'nextra/components' -# MongoDB 전용 가이드 +# DocumentDB 전용 가이드 -MongoDB 전용 상세 설정 가이드를 이곳에서 제공합니다. +Amazon DocumentDB 전용 상세 설정 가이드를 이곳에서 제공합니다. -### MongoDB 커넥션 등록하기 +### Cloud 동기화하는 경우 커넥션 클러스터 구조 조정 -MongoDB는 단일 호스트로 구성되는 경우보다 Replica Set 또는 Sharded Cluster(Sharding) 형태의 멀티 호스트 구조를 사용하는 경우가 많습니다. -이 경우 멀티 호스트 방식의 커넥션을 생성해야 합니다. +클라우드 동기화를 통해 생성된 클러스터 정보를 확인하며, 클러스터 엔드포인트, 읽기 전용 엔드포인트, 인스턴스 엔드포인트를 각각 용도에 맞게 접근할 수 있는 기능으로, 멀티 호스트 환경에서도 효율적으로 작동하도록 설계되었습니다. +해당 기능은 관리자 페이지 > Databases > DB Connections에서 설정할 수 있습니다. -#### 1. MongoDB의 기본적인 Connection String 구조 이해하기 - -MongoDB의 connection string은 standard, +srv 두 가지가 있습니다. - -##### < Standard connection string의 구조 > - -``` -mongodb://[Hostname or IP]:[port],[Hostname or IP]:[port],[Hostname or IP]:[port]..../?[options] -``` - -* mongodb:// : standard connection string scheme -* Hostname or IP : mongodb 클러스터 멤버 호스트의 전체 도메인이름 또는 IP 주소 -* options : `/?` 뒤에 붙는 접속에 관련된 옵션. 여러 개의 옵션을 사용할 경우 `&`로 붙여서 사용합니다.
ex. `/?authSource=admin&replicaSet=rs0` - - -replica set 을 사용하는 경우 `/?` 뒤에 replicaSet=[replica set 이름] 을 입력해야 합니다. -ex. `/?replicaSet=rs0` - - - -##### < +srv connection string의 구조 > - -``` -mongodb+srv:///?[options] -``` - -* mongodb+srv:// : +srv connection string scheme -* Fully Qualified Domain Name (FQDN) : - DNS에 등록되어 있는 호스트네임과 도메인네임의 조합으로 이루어진 이름 ex. server1.example.com -* options : `/?` 뒤에 붙는 접속에 관련된 옵션. 여러 개의 옵션을 사용할 경우 `&`로 붙여서 사용합니다.
ex. `/?authSource=admin&replicaSet=rs0` - - -+srv 는 클러스터에 포함되어 있는 각각의 호스트의 주소가 동적으로 바뀔 수 있기 때문에 QueryPie에서 +srv를 직접 커넥션에 사용할 수는 없고 standard connection string으로 변환해서 사용하게 됩니다. -이런 변환과정으로 인해 현재 +srv 를 사용하여 접속하는 경우 하위 인스턴스에 직접 접속은 지원하지 않습니다. -그럼에도 불구하고 +srv 접속 환경의 하위 호스트에 대한 직접 접속이 필요한 경우, 사용자가 nslookup 명령을 사용하여 DNS 조회를 통해 각 호스트 정보를 확인 후 별도 standard connection string을 사용한 커넥션을 생성해서 접속해야 합니다. - - -#### 2. MongoDB 커넥션 생성하기 - -
-Administrator > Databases > Connection Management > DB Connections > Create Connection -
-Administrator > Databases > Connection Management > DB Connections > Create Connection -
-
- -1. Administrator > Databases > Connection Management > DB Connections 메뉴로 이동합니다. -2. 우측 상단의 `Create Connection` 버튼을 클릭합니다. -3. 데이터 소스 선택 단계에서 mongoDB를 선택합니다. - -#### 3. Replica Set 형태로 설정하기 - -##### < Standard Connection > - -
-image-20240730-114050.png -
- -1. Allowed Zone에 알맞은 네트워크 zone 설정을 합니다. -2. Connection Name을 지정합니다. -3. `Cluster` 스위치를 켜서 클러스터 입력을 활성화한 후 다음의 정보들을 입력합니다. - 1. Type : 커넥션 정보에 노출되는 영역입니다. Primary 역할이 동적으로 바뀔 수 있으므로 기본값인 `Primary` 를 선택합니다. - 2. Expose : Connection 정보 화면 또는 agent의 접속 대상 목록에 클러스터의 하위 노드(호스트 또는 인스턴스)를 펼쳐 볼 수 있도록 하려면 `Expandable`을, 펼쳐 볼 수 없도록 하려면 `Unexpandable`을, 클러스터를 숨기고 하위 노드(호스트 또는 인스턴스)들만 표시하려면 `Hidden`을 선택합니다. - 3. Connection String : - 1. Scheme 선택항목에서 `mongodb://` 를 선택합니다. - 2. 하위 호스트 이름과 포트를 쉼표로 구분하여 입력합니다. - 4. `Add Instance` 버튼을 눌러 각 멤버 호스트를 인스턴스로 추가합니다. - 1. Instance Name : 각각의 호스트를 구별할 수 있는 이름을 입력합니다. - 2. Connection String : 각 호스트를 `HOSTNAME(FQDN or IP Address):[PORT]` 형식으로 입력합니다. - 3. Expose는 커넥션 정보에서의 개별 인스턴스의 노출 여부를 결정할 수 있는 옵션입니다.
**멀티호스트 기능을 사용하기 위해서는 반드시 인스턴스가 expose 상태여야 하므로 반드시** `Expose` **옵션을 활성화시킵니다.** - -
-image-20240730-114226.png -
- -1. Authentication DB : Authentication DB(authSource)의 값을 입력합니다. -2. Other Options : Connection string에 사용하는 옵션 중 authSource를 제외한 나머지 값을 입력합니다.
예시 1) 단일 옵션만 사용하는 경우 형식 ( [Key]=[Value] ) : replicaSet=rs0
예시 2) 다중 옵션을 사용하는 경우 형식 ( [Key]=[Vaule]&[Key]=[Value] ) : replicaSet=rs0&tls=true
**replica set 구성인 경우 replicaSet=[replicaset name] 옵션을 입력해야 합니다.** -3. Secret Store : 암호 및 키 관리를 3rd party를 사용할 경우를 위한 옵션입니다. 기본값 Querypie는 QueryPie 내부에서 관리하는 것을 의미합니다. -4. User Name & Password : 해당 데이터베이스의 사용자 이름과 비밀번호를 입력합니다. -5. `Test Connection` 버튼을 클릭하여, 입력한 접속 정보가 유효한지 확인할 수 있습니다. -6. `Next` 버튼을 통해 마무리하고 저장합니다. - - -Cluster 모드에 대한 더 자세한 내용은 [DB Connections](.)에서도 확인할 수 있습니다. - -______ - -##### < +srv Connection > - -
-image-20240730-114540.png -
- -1. Allowed Zone에 알맞은 네트워크 zone 설정을 합니다. -2. Connection Name을 지정합니다. -3. `Cluster` 스위치를 켜서 클러스터 입력을 활성화한 후 다음의 정보들을 입력합니다. - 1. Type : 커넥션 정보에 노출되는 영역입니다. Primary 역할이 동적으로 바뀔 수 있으므로 기본값인 `Primary` 를 선택합니다. - 2. Expose : Connection 정보 화면 또는 agent의 접속 대상 목록에 클러스터의 하위 노드(호스트 또는 인스턴스)를 펼쳐 볼 수 있도록 하려면 `Expandable`을, 펼쳐 볼 수 없도록 하려면 `Unexpandable`을, 클러스터를 숨기고 하위 노드(호스트 또는 인스턴스)들만 표시하려면 `Hidden`을 선택합니다. - 3. Connection String : - 1. Scheme 선택항목에서 `mongodb+srv://` 를 선택합니다. - 2. 도메인 형식의 호스트 이름(FQDN)을 입력합니다. - 3. `Lookup` 버튼을 누릅니다. 정상적으로 DNS 조회가 되었다면 클러스터에 포함된 노드가 인스턴스로 자동으로 추가됩니다. - 4. Authentication DB 및 Other Options - 1. Authentication DB 값과 Other Options에도 DNS의 TXT레코드에서 조회된 값이 자동으로 입력됩니다. - 2. +srv 스킴은 TLS 옵션이 자동으로 true이므로 standard string으로 변환하면 tls=true를 수동으로 입력해야 합니다. (TXT 레코드에 TLS 옵션이 없기 때문입니다.) 따라서 Other options 항목에 위 그림과 같이 &tls=true를 입력합니다. -4. Secret Store : 암호 및 키 관리를 3rd party를 사용할 경우를 위한 옵션입니다. 기본값 Querypie는 QueryPie 내부에서 관리하는 것을 의미합니다. -5. User Name & Password : 해당 데이터베이스의 사용자 이름과 비밀번호를 입력합니다. -6. `Test Connection` 버튼을 클릭하여, 입력한 접속 정보가 유효한지 확인할 수 있습니다. -7. `Next` 버튼을 통해 마무리하고 저장합니다 - -#### 4. Sharded Cluster(Sharding) 형태로 설정하기 - -Sharded Cluster는 Replica Set과 Connection String의 옵션만 다르고 설정 방법은 같습니다. -Replica Set은 replicaSet=[replica set name] 옵션이 필요하지만 Sharded Cluster는 이 옵션이 필요 없습니다. - -
-image-20240730-114833.png -
- -##### < Standard Connection > - -1. `Cluster` 스위치를 켜서 클러스터 입력을 활성화한 후 다음의 정보들을 입력합니다. - 1. Type : 커넥션 정보에 노출되는 영역입니다. Primary 역할이 동적으로 바뀔 수 있으므로 Primary 값을 유지합니다. - 2. Connection String : - 1. Scheme 선택항목에서 `mongodb://` 를 선택합니다. - 2. 각 mongos의 호스트 이름과 포트를 쉼표로 구분하여 입력합니다. - 3. `Add Instance` 버튼을 눌러 각 mongos를 인스턴스로 추가합니다. - 1. `mongodb://HOSTNAME(FQDN or IP Address):[PORT]` 형식으로 입력 후 Instance Name을 알맞게 입력합니다. - 2. Expose 는 커넥션 정보에서의 노출 여부를 결정할 수 있는 값입니다. -2. Authentication DB : Authentication DB(authSource)의 값을 입력합니다. -3. Other Options : Sharded cluster는 별도 추가 옵션이 필요하지 않을 수 있습니다. -4. Secret Store : 암호 및 키 관리를 3rd party를 사용할 경우를 위한 옵션입니다. 기본값 Querypie는 QueryPie 내부에서 관리하는 것을 의미합니다. -5. User Name & Password : 해당 데이터베이스의 사용자 이름과 비밀번호를 입력합니다. -6. `Test Connection` 버튼을 클릭하여, 입력한 접속 정보가 유효한지 확인할 수 있습니다. -7. `Next` 버튼을 통해 마무리하고 저장합니다. -______ - -##### < +srv Connection > - -standard string으로 변환된 뒤 tls=true 옵션만 Other options에 잘 넣어주면 됩니다. -replica set 설정과 차이가 없습니다. - - -Cluster 모드에 대한 더 자세한 내용은 [DB Connections](.)에서도 확인할 수 있습니다. - - -### Proxy를 사용하는 경우 TLS(SSL) 설정 - -위에서 안내된 바와 같이 QueryPie의 SQL editor를 사용하여 접속하는 경우 커넥션 스트링에 tls=true가 필요합니다. - -> +srv 스킴은 TLS 옵션이 자동으로 true이므로 standard string으로 변환하면 **tls=true**를 수동으로 입력해야 합니다.> (TXT 레코드에 TLS 옵션이 없기 때문입니다.) 따라서 Other options 항목에 위 그림과 같이 **&tls=true**를 입력합니다. -Proxy를 사용하는 경우 DataGrip 등의 SQL Client에서 TLS 설정과 별개로 QueryPie에서도 SSL 설정이 필요합니다.
[SSL Configurations](../ssl-configurations)를 참고하여 설정 후 커넥션의 SSL 설정에 반영해야 합니다.
- -
-image-20240731-050745.png -
- - -______ - - -### MongoDB 데이터 정책 및 규칙 설정 - -MongoDB에 개인정보 또는 민감정보와 같이 접근 제한이 필요한 데이터는 조회 시 해당 데이터를 확인할 수 없도록 Collection, JSON Value에 대해 데이터 접근 제한 및 마스킹 정책을 설정할 수 있습니다. -QueryPie에서 지원하는 DBMS 중 MongoDB의 경우 항상 데이터를 JSON 형태로 저장하기 때문에 별도의 포맷팅 로직을 사용하게 됩니다. - - -최초 정책 생성은 아래 링크를 확인해주세요. - -* [Data Masking](../../policies/data-masking) -* [Data Access](../../policies/data-access) - -#### 마스킹 정책에 규칙 등록하기 - -
-Administrator > Databases > Policies > Data Masking > Add Rule List -
-Administrator > Databases > Policies > Data Masking > Add Rule List -
-
- -1. 정책을 생성하고 나면, 실제로 정책을 적용할 데이터의 경로를 규칙으로 등록합니다.
Rule List 탭에서 규칙이 등록된 것을 확인할 수 있습니다. 이제 사용자가 MongoDB에서 해당 Collection의 Document를 조회할 경우 적용한 마스킹 패턴에 따라 사전에 지정한 Attribute의 Value 값이 `*****@gmail.com`와 같이 마스킹되어 표시됩니다. - 1. Data Masking 메뉴에서 생성한 정책을 클릭합니다. - 2. 정책 세부 정보 및 규칙 등록 화면이 표시되고 우측에서 `Add Rule List` 버튼을 클릭합니다. - 3. 정책을 적용할 데이터의 경로를 차례대로 선택합니다. - 1. Database Name : 규칙 등록을 위한 필수 값입니다. - 2. Table Name : MongoDB의 경우 Collection 이름을 입력합니다. - 3. Column Name : MongoDB의 경우 Document 내에서 마스킹을 적용할 JSON Attribute 값을 입력합니다. - 4. 마스킹 패턴을 적용합니다. - 1. 3번에서 선택한 컬럼에 적용할 마스킹 패턴을 1개 이상 선택합니다. - 2. 기본적으로 20여가지의 개인정보 및 민감정보를 마스킹하는 패턴을 제공합니다. - 3. Masking Pattern 메뉴에서 정규식을 통해 직접 탐지 패턴과 마스킹 패턴을 생성할 수 있습니다. - 5. 해당 데이터 조회가 필요한 사용자 또는 그룹에 한해 마스킹 규칙을 예외 처리할 수 있습니다. - 1. Allowed Users : 해당 규칙을 예외처리할 사용자 또는 그룹을 선택합니다. - 6. `Ok` 버튼을 통해 저장합니다. - -#### Collection / JSON Value 접근 제한 정책에 규칙 등록하기 - -정책을 생성하고 나면, 실제로 정책을 적용할 데이터의 경로를 규칙으로 등록합니다. +클라우드 동기화 후 아래 화면과 같이 첫 번째 클러스터에 Cluster endpoint 주소, 두 번째 클러스터에 읽기 전용 endpoint 주소, 세 번째 클러스터에 인스턴스 endpoint 주소를 사용한 멀티호스트 connection string을 보여줍니다. +인스턴스 endpoint로 접속하는 것보다 Cluster endpoint 를 사용하는 것을 권고합니다.
-Administrator > Databases > Policies > Data Access > Add Rule List -
-Administrator > Databases > Policies > Data Access > Add Rule List -
+image-20240122-102557.png
-1. Data Access 메뉴에서 생성한 정책을 클릭합니다. -2. 정책 세부 정보 및 규칙 등록 화면이 표시되고 우측에서 `Add Rule List` 버튼을 클릭합니다. -3. 정책을 적용할 데이터의 경로를 차례대로 선택합니다. - 1. Database Name : 규칙 등록을 위한 필수 값입니다. - 2. Table Name : 규칙 등록을 위한 필수 값입니다. 테이블만 선택할 경우, 해당 테이블 조회 자체가 불가능하도록 제한됩니다. MongoDB의 경우 Collection 이름을 입력합니다. - 3. Column Name : MongoDB에서는 Document 내의 특정 Value에 대하여 데이터 접근을 제한하고자 하는 경우 JSON Attribute 값을 입력합니다. -4. 해당 데이터 조회가 필요한 사용자 또는 그룹에 한해 접근 제한 규칙을 예외 처리할 수 있습니다. - 1. Allowed Users : 해당 규칙을 예외처리할 사용자 또는 그룹을 선택합니다. -5. `Ok` 버튼을 통해 저장합니다. - -Rule List 탭에서 규칙이 등록된 것을 확인할 수 있습니다. -이제 사용자가 해당 데이터를 조회하면, 테이블에 정책이 적용된 경우 테이블 자체를 조회할 수 없고, 컬럼에 규칙이 적용된 경우 *`{RESTRICTED}`* 로 표시됩니다. - -#### JSON PATH 예시 +### Amazon DocumentDB TLS(SSL) 사용하기 -정책을 적용할 MongoDB의 데이터의 예시는 다음과 같습니다. -``` -{ - _id: ObjectId("64b3f7ad344ac8c881a09dc6"), - item: "journal", - qty: 25, - tags: ["blank", "red"], - size: { - h: 14, - w: 21, - uom: "cm" - } -} -``` +AWS에서 새로운 DocumentDB를 생성하면 TLS를 사용하여 전송구간 암호화를 사용할 수 있고 사용자가 선택적으로 옵션을 끌 수 있습니다. +Amazon DocumentDB 클러스터에 대한 전송 중 데이터 암호화는 클러스터 파라미터 그룹의 TLS 파라미터를 통해 관리됩니다. +AWS Management Console 또는 AWS Command Line Interface (AWS CLI)를 사용하여 Amazon DocumentDB 클러스터 TLS 설정을 관리할 수 있습니다. [참고](https://docs.aws.amazon.com/ko_kr/documentdb/latest/developerguide/security.encryption.ssl.html#security.encryption.ssl.managing)
Amazon DocumentDB에서 TLS가 활성화 되어 있는 경우 접속을 위해 AWS에서 제공하는 CA 번들 인증서가 필요합니다. -##### Case 1. item 속성 접근 제한 +#### CA 번들 인증서 등록하기 -
-Administrator > Databases > Policies > Data Access > Add Rule List -
-Administrator > Databases > Policies > Data Access > Add Rule List -
-
+AWS에서는 region에 상관없이 공동으로 사용할 수 있는 [global 번들 인증서](https://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/UsingWithRDS.SSL.html#UsingWithRDS.SSL.CertificatesAllRegions)와 [region별 번들 인증서](https://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/UsingWithRDS.SSL.html#UsingWithRDS.SSL.RegionCertificates) 두 가지 종류를 제공합니다. -하나의 속성에 대해 접근제한 정책을 설정할 경우 “Column Name” 항목에 해당하는 item을 입력 후 `OK` 버튼을 클릭합니다. +1. 번들 인증서를 다운로드 받습니다. +2. QueryPie 관리자 콘솔에서 Databases > Connection Management > SSL Configurations 메뉴로 이동합니다.
-image-20240730-120312.png +image-20240730-112808.png
-위 스크린샷과 같이 item(“T_PWD”) 속성의 값이 “Restricted Column”으로 표시되는 것을 확인할 수 있습니다. - -##### Case 2. size.h 속성 접근 제한 - -size하위의 h속성에 대해 접근제한 정책을 설정할 경우 “Column Name” 항목에 `$.size.h`을 입력 후 `OK` 버튼을 클릭합니다. - -
-Administrator > Databases > Policies > Data Access > Add Rule List -
-Administrator > Databases > Policies > Data Access > Add Rule List -
-
+1. 우측 상단에 있는 `Create SSL` 버튼을 누릅니다. +2. `Name` 항목에 식별이 용이하도록 이름을 지정합니다. +3. `SSL Mode`에서 `Required`를 선택합니다. +4. 다운로드 받은 번들 인증서 (확장명 .pem 파일)를 텍스트 편집기로 열고 전체 내용을 복사해서 `CA Certificate` 항목에 붙여 넣습니다. +5. `Save` 버튼을 눌러 설정을 저장합니다.
-image-20240730-120215.png +image-20240220-225433.png
-위 스크린샷과 같이 size 하위의 h속성의 값이 “Restricted Column”으로 표시되는 것을 확인할 수 있습니다. - -##### Case 3. size 하위 모든 속성 접근 제한 - -size 하위의 모든 속성에 대해 접근제한 정책을 설정할 경우 “Column Name” 항목에 `$.size`을 입력 후 `OK` 버튼을 클릭합니다. +#### DocumentDB에 인증서 매핑하기 -
-Administrator > Databases > Policies > Data Access > Add Rule List -
-Administrator > Databases > Policies > Data Access > Add Rule List -
-
- -
-image-20240730-120421.png -
- -위 스크린샷과 같이 size 하위의 모든속성의 값이 “Restricted Column”으로 표시되는 것을 확인할 수 있습니다. - -##### Case 4. tags 속성의 리스트 2번째 값에 대한 접근 제한 - -tags속성의 리스트 값 중 2번째 값에 대한 접근제한 정책을 설정할 경우 “Column Name” 항목에 `$.tags[1]`을 입력 후 `OK` 버튼을 클릭합니다. - -
-Administrator > Databases > Policies > Data Access > Add Rule List -
-Administrator > Databases > Policies > Data Access > Add Rule List -
-
+1. Adminstrator > Databases > Connection Management > DB Connections 메뉴로 이동합니다. +2. 클라우드 동기화를 통해 생성되어 있는 DocumentDB 커넥션을 선택합니다. +3. 아래로 스크롤하여 **SSL / SSH Setting** 탭으로 이동합니다. +4. `Use SSL` 체크박스를 체크하여 활성화시킨 뒤 **SSL Configurations** 에서 앞단계(CA 번들 인증서 등록하기)에서 등록한 설정 이름을 선택합니다.
-image-20240730-120544.png +image-20240220-230604.png
-위 스크린샷과 같이 tags속성의 2번째 값이 “Restricted Column”으로 표시되는 것을 확인할 수 있습니다. +1. 우측상단의 `Save Changes` 버튼을 눌러 설정을 저장합니다. diff --git a/confluence-mdx/tests/reverse-sync/862093313/improved.mdx b/confluence-mdx/tests/reverse-sync/862093313/improved.mdx index 0653a0ad2..2a6c3f637 100644 --- a/confluence-mdx/tests/reverse-sync/862093313/improved.mdx +++ b/confluence-mdx/tests/reverse-sync/862093313/improved.mdx @@ -1,126 +1,156 @@ --- -title: '설치 후 초기 설정' -confluenceUrl: 'https://querypie.atlassian.net/wiki/spaces/QM/pages/1907294209' +title: '시스템 아키텍처와 네트워크 접근제어' +confluenceUrl: 'https://querypie.atlassian.net/wiki/spaces/QM/pages/862093313' --- -import { Callout } from 'nextra/components' +# 시스템 아키텍처와 네트워크 접근제어 -# 설치 후 초기 설정 -운영 환경에 따라 설치 이후 필수적으로 수행이 필요한 설정들을 안내합니다. +### 시스템 아키텍처 -### 공통 설정 +QueryPie Server, QueryPie User Agent, User PC 의 Web Browser, 그리고 이용자의 접근 대상인 Database, Linux Server 등의 시스템이 어떻게 구성되고 연결되는지 알아봅니다. -설치 직후 QueryPie 사용 시 필요한 공통 절차입니다. +#### 시스템 아키텍처 구성도 -#### QueryPie Web Base URL 설정 +이 시스템 아키텍처는 단일 리눅스 서버에 QueryPie Service 를 설치하는 경우의 아키텍처입니다. +TLS 인증서를 적용한 웹서비스, 고가용성을 위한 다중화 구성 등을 포함하지 않습니다. -> 설정 경로: Admin Page → General -Web Console 에 접근하기 위한 QueryPie 의 URL 주소입니다. -(예시. `https://querypie.customer.com`) 이 URL 은 QueryPie 의 Base URL 이라고 부르기도 합니다. +
+Overview of QueryPie System Architecture +
+Overview of QueryPie System Architecture +
+
-이 URL은 `/`로 끝나지 않아야 합니다. `https://querypie.customer.com/`와 같이 URL의 마지막에 `/`를 붙이지 않도록 주의해 주세요. +각 컴포넌트에 대한 설명은 다음과 같습니다. -이 URL 은 아래의 용도로 사용됩니다. +#### User PC 의 Web Browser -* SSO Integration 의 인증 과정에서, callback 주소로 사용됩니다. -* Web Console 에서 User Agent 를 내려받는 링크에 사용됩니다. -* 그 외 자세한 용도는 [QUERYPIE_WEB_URL](container-environment-variables/querypieweburl)을 참조하세요. +이용자의 PC 에서 웹 브라우저를 통해 QueryPie 웹 서비스에 접속합니다. +QueryPie 를 이용하기 위해서는 웹 브라우저가 필수적입니다. +QueryPie 관리자, 보안정책 운영자는 QueryPie Web Console 을 통해 QueryPie 서비스를 관리합니다. +또한, QueryPie 사용자는 QueryPie Web SQL Editor, Web Terminal 을 통해 대상 시스템에 접근할 수 있습니다. -
-QueryPie Web Base URL 설정 화면 -
-QueryPie Web Base URL 설정 화면 -
-
+#### User PC 의 QueryPie User Agent -### 제품별 설정 +User PC 에서 작동하는 Database Client Application, SSH Client Application 를 이용하는 경우, QueryPie User Agent 가 필요합니다. +QueryPie User Agent 는 User PC 에서 작동하는 Local Proxy Agent 의 역할을 수행합니다. +QueryPie Web Console 에 로그인하면, QueryPie User Agent 를 다운로드 받을 수 있습니다. -#### DAC/SAC: Proxy 접속 주소 설정 +QueryPie User Agent 는 User PC 에서 작동하는 대부분의 Database Client Application, SSH Client Application 을 지원합니다. +(이후 `3rd Party Tool` 이라고 표기합니다.) 구체적인 사례는 이 문서를 참조하세요: [Supported 3rd Party Tools (KO)](https://querypie.atlassian.net/wiki/spaces/QCP/pages/919404587) -QueryPie Database 에 접속하여, DAC/SAC 의 Proxy 접속을 위한 주소를 등록합니다. +#### QueryPie Server - -QueryPie Web Console 에서 QueryPie Database 에 연결하려면, DB 연결 설정이 필요합니다: [DB Connections](../administrator-manual/databases/connection-management/db-connections) +Linux VM 에서 작동하는 QueryPie Server 는 Web Console, Web SQL Editor, Web Terminal 을 웹서비스로 제공합니다. +또한 SQL protocol, ssh protocol을 이해하고 접근제어를 수행하는 Proxy server를 제공하는 핵심적 역할을 수행합니다. -Database 연결 설정 과정에서 QueryPie MySQL 의 Hostname, Username, Password 가 필요합니다. +QueryPie Server 는 두 가지 컴포넌트를 필요로 합니다. -* Hostname: `host.docker.internal` -* Username: `querypie` (기본 설정의 경우) -* Password: QueryPie 를 설치한 디렉토리의 환경변수 파일에서 `DB_PASSWORD` 를 확인하세요. - * setup.v2.sh 로 설치한 경우: `.env` 파일 - * setup.sh 로 설치한 경우: `compose-env` 파일 +* QueryPie Database +* QueryPie Redis -환경변수 파일에 설정된 값 중 `DB_PASSWORD`, `REDIS_PASSWORD`, `KEY_ENCRYPTION_KEY` 등은 안전하게 보관하여야 합니다. -다른 사람에게 이 값을 노출하지 않도록 주의하여 주세요. - +#### QueryPie Database -아래 `` 부분을 고객사의 Proxy 접속 IP 혹은 도메인으로 대체하여 쿼리를 수행합니다. +QueryPie Database 는 QueryPie Server 의 작동을 위한 데이터를 저장합니다. +QueryPie 의 User Account, Admin Account, 연결 대상 시스템의 정보, 접근제어 정책 등을 저장합니다. +뿐만 아니라, User 의 Query Log, System Access Log 등 Audit 정보를 저장합니다. - -이 주소는 `http` `https` 와 같은 Scheme을 붙여서는 안 됩니다. - -``` -UPDATE querypie.proxies SET host = '' WHERE id = 1; -``` +MySQL, MariaDB 또는 호환되는 Database 를 QueryPie Database 로 사용할 수 있습니다. -쿼리 실행에 에러 없이 정상적으로 수행이 확인되었으면, 아래 쿼리를 수행하여 등록이 되었는지 확인합니다. -``` -SELECT * FROM querypie.proxies; -``` +* AWS Aurora MySQL +* GCP Cloud SQL for MySQL -Proxy 접속을 위한 주소를 QueryPie Database 에 등록한 이후, Server Container 를 재시작하지 않아도 됩니다. -User Agent 에서 로그인을 시도하면, 웹브라우저를 통해 인증을 진행한 이후, User Agent 를 사용할 수 있는 상태가 됩니다. +#### QueryPie Redis -
-DAC/SAC Proxy 접속 주소 설정 화면 -
-DAC/SAC Proxy 접속 주소 설정 화면 -
-
+QueryPie Redis 는 QueryPie Server 의 작동을 위한 Cache 역할을 수행합니다. +QueryPie Server 가 작동하기 위해, 필수로 요구되는 컴포넌트입니다. -#### KAC: Proxy 접속 주소 설정 +#### Target Database -QueryPie Database 에 접속하여, KAC 의 Proxy 접속을 위한 주소를 등록합니다. +이용자가 접근을 원하는 Database 서버입니다. +QueryPie Server 는 이용자와 Target Database 사이의 중계 역할을 수행합니다. -아래 `` 부분을 고객사의 Proxy 접속 IP 혹은 도메인으로 대체하여 쿼리를 수행합니다. +#### Target Server System -특이사항으로 DAC/SAC 설정과는 다르게 `http` `https` 와 같은 Scheme을 자유롭게 입력 가능합니다. +이용자가 접근을 원하는 Linux Server, Windows Server 등의 시스템입니다. +QueryPie Server 는 이용자와 Target Server System 사이의 중계 역할을 수행합니다. - -설정 후, 내부적으로 등록한 주소에 맞는 TLS 인증서 발급을 위해 QueryPie Container 재 기동이 필요합니다. - -``` -UPDATE querypie.k_proxy_setting SET host = 'https://'; -``` +### 네트워크 접근제어 설정 -
-KAC Proxy 접속 주소 설정 화면 -
-KAC Proxy 접속 주소 설정 화면 -
-
+#### 네트워크 접근 유형 + +QueryPie 가 설치된 Linux VM 을 중심으로, 네트워크 연결을 Outbound, Inbound, 두 가지 유형으로 구분합니다. + +* Outbound : QueryPie 가 설치된 Linux VM 에서, 외부 인터넷으로 연결하는 네트워크 접근입니다. +* Inbound : 이용자의 PC 또는 고객사 내부 네트워크에서, QueryPie 가 설치된 Linux VM 으로 연결하는 네트워크 접근입니다. + +#### 소프트웨어 설치를 위한 네트워크 접근 + +| **Access Type** | **Source** | **Destination** | **Protocol** | **Port** | **Description** | +| ----------------- | --------------- | --------------------------------------------------------------------------------------------------------------------- | -------------- | ---------- | ---------------------------------------------------------------------------- | +| Outbound | QueryPie Server | FQDN: `dl.querypie.com`
IPv4 Address:
`18.67.51.51`,
`18.67.51.67`,
`18.67.51.73`,
`18.67.51.76` | TCP | 443 | 제품 설치를 위한 설정파일을 내려받는 website 입니다. | +| Outbound | QueryPie Server | FQDN: `harbor.querypie.io`
IPv4 Address:
`15.164.47.8`, `52.79.197.102` | TCP | 443 | 제품 설치를 위해, Docker Image 를 내려받는 website 입니다. docker 용어로는 Docker Registry 입니다. | + +#### 제품 사용을 위한 네트워크 접근 + +아래의 항목은 제품 사용을 위한 네트워크 접근을 설명합니다. +QueryPie 제품의 기능에 따라, 공통, DAC, SAC, KAC, WAC 로 구분합니다. + +#### 공통 + +| **Access Type** | **Source** | **Destination** | **Service** | **Protocol** | **Port** | **Description** | +| ----------------- | ------------------ | ---------------------------------------------------- | ------------- | -------------- | ---------- | ------------------------------------------------- | +| Inbound | PC of Admin User | QueryPie Server | SSH | TCP | 22 | Installation and management | +| Inbound | PC of Admin User | QueryPie Server | HTTP | TCP | 80 | QueryPie Web Console | +| Inbound | PC of Admin User | QueryPie Server | HTTPS | TCP | 443 | QueryPie Web Console | +| Inbound | PC of Admin User | QueryPie Server | Custom TCP | TCP | 9000 | QueryPie Proxy for User Agent | +| Inbound | PC of Admin User | QueryPie Server | MySQL | TCP | 3306 | (Optional) QueryPie Meta DB | +| Inbound | PC of Admin User | QueryPie Server | Redis | TCP | 6379 | (Optional) QueryPie CacheDB | +| Inbound | All the users
| QueryPie Server
or
Application Load Balancer | HTTP | TCP | 80 | QueryPie Web Console | +| Inbound | All the users
| QueryPie Server
or
Application Load Balancer | HTTPS | TCP | 443 | ( **Recommended** ) QueryPie Web Console | +| Inbound | All the users
| QueryPie Server
or
Network Load Balancer | Custom TCP | TCP | 9000 | ( **Recommended** ) QueryPie Proxy for User Agent | + +#### DAC + +| **Access Type** | **Source** | **Destination** | **Type** | **Protocol** | **Port Range** | **Description** | +| ----------------- | ---------------------------------------------- | ----------------- | ---------- | -------------- | ---------------- | -------------------------------------------------- | +| Inbound | Users or Systems connecting to Agentless Proxy | QueryPie Server | Custom TCP | TCP | 40000 - 41000 | ( **Recommended** ) QueryPie Agentless Proxy | +| Inbound | Users or Systems connecting to Agentless Proxy | QueryPie Server | Custom TCP | TCP | 41001 - 45000 | (Optional) More ports for QueryPie Agentless Proxy | + +#### SAC +| **Access Type** | **Source** | **Destination** | **Type** | **Protocol** | **Port** | **Description** | +| ----------------- | --------------- | ---------------------- | ---------- | -------------- | ---------- | ------------------------------------------------------------------ | +| Outbound | QueryPie Server | Target Linux Servers | SSH | TCP | 22 | When Users access target linux machines via QueryPie | +| Outbound | QueryPie Server | Target Windows Servers | RDP | TCP | 3389 | When Admin installs QueryPie RDP Agent on target Windows Servers. | +| Outbound | QueryPie Server | Target Windows Servers | Custom RDP | TCP | 13389 | When Users access target Windows Servers via QueryPie | +| Outbound | QueryPie Server | Target Windows Servers | Custom TCP | TCP | 13390 | Obsoleted - Port 13390 is not used anymore since version 10.2.2 | -#### WAC: Proxy 접속 주소 설정 +#### KAC -> 설정 경로: Admin Page → Web Apps → Web App Configurations -WAC의 Proxy 접속 주소 설정은 Web Console 에서 수행 가능합니다. +| **Access Type** | **Source** | **Destination** | **Type** | **Protocol** | **Port** | **Description** | +| ----------------- | --------------- | ------------------------------------------------ | ---------- | -------------- | ---------- | -------------------------------------------------- | +| Inbound | All the users | QueryPie Server
or
Network Load Balancer | Custom TCP | TCP | 6443 | From Users to QueryPie KAC Proxy | +| Outbound | QueryPie Server | Target Kubernetes Cluster | Custom TCP | TCP | 6443 | From QueryPie Server to target Kubernetes Clusters | -자세한 설정 절차는 다음 문서를 참조하세요: [Web App Configurations에서 WAC 초기 설정하기](../administrator-manual/web-apps/wac-quickstart/initial-wac-setup-in-web-app-configurations) +#### WAC - -설정 후, 내부적으로 등록한 주소에 맞는 TLS 인증서 발급을 위해 QueryPie Container 재 기동이 필요합니다. - +| **Access Ty** pe | **Source** | **Destination** | **Type** | **Protocol** | **Port** | **Description** | +| ----------------- | ------------------ | ------------------------------------------------ | ---------- | -------------- | ---------- | -------------------------------- | +| Inbound | All the users
| QueryPie Server
or
Network Load Balancer | Custom TCP | TCP | 7447 | From Users to QueryPie WAC Proxy | +### Load Balancers 설정 -### 제품 설치가 완료되었습니다 +부하분산, 장애내성을 갖추기 위해, QueryPie Service 에 Load Balancer 를 적용하는 설정을 표로 설명합니다. -설치 후 초기 설정 과정을 완료하여, QueryPie ACP 제품을 사용할 수 있는 준비가 되었습니다. -수고하셨습니다. +| **LB** | **Listener** | **Target** | **Health Check** | **LB Option** | **Description** | +| ---------------------------------- | -------------- | ------------------ | ------------------------- | --------------- | ------------------------- | +| Application Load Balancer
(L7) | HTTP / 80 | - | None | default | Redirection to HTTPS | +| Application Load Balancer
(L7) | HTTPS / 443 | http://querypie:80 | http://querypie:80/readyz | Sticky Session | QueryPie Web Console | +| Network Load Balancer
(L4) | TCP / 9000 | querypie:9000 | http://querypie:80/readyz | default | QueryPie Agent (DAC, SAC) | +| Network Load Balancer
(L4) | TCP / 6443 | querypie:6443 | http://querypie:80/readyz | default | QueryPie Agent (KAC) | +| Network Load Balancer
(L4) | TCP / 7447 | querypie:7447 | http://querypie:80/readyz | default | QueryPie Agent (WAC) | -이후 다음의 문서를 참조하여, 관리자 설정을 진행하고, 제품을 사용할 수 있습니다. -* [관리자 매뉴얼](../administrator-manual) -* [사용자 매뉴얼](../user-manual) diff --git a/confluence-mdx/tests/reverse-sync/920944732/improved.mdx b/confluence-mdx/tests/reverse-sync/920944732/improved.mdx index d8c38c814..0e77bbc5c 100644 --- a/confluence-mdx/tests/reverse-sync/920944732/improved.mdx +++ b/confluence-mdx/tests/reverse-sync/920944732/improved.mdx @@ -1,167 +1,68 @@ --- -title: '사용자 프로필' -confluenceUrl: 'https://querypie.atlassian.net/wiki/spaces/QM/pages/544376787' +title: 'qp-admin 기본 계정에 대한 패스워드 변경 강제화 및 계정 삭제 기능' +confluenceUrl: 'https://querypie.atlassian.net/wiki/spaces/QM/pages/920944732/qp-admin' --- import { Callout } from 'nextra/components' -# 사용자 프로필 +# qp-admin 기본 계정에 대한 패스워드 변경 강제화 및 계정 삭제 기능 ### Overview -사용자 프로필에 등록된 속성으로 Attribute-based Access Control (ABAC)을 구현할 수 있습니다. -이 문서에서는 사용자 상세 정보 항목별 상세 내용을 안내합니다. - - -### Profile - -사용자의 Attribute(속성)을 조회할 수 있는 탭입니다. -각 Attribute별 설명은 이 페이지 하단의 **참고: 사용자 Attribute 목록** 항목을 참고하기 바랍니다. - -
-Administrator > General > User Management > Users > List Details > Profile 탭 -
-Administrator > General > User Management > Users > List Details > Profile 탭 -
-
- -### Groups - -
-Administrator > General > User Management > Users > List Details > Groups 탭 -
-Administrator > General > User Management > Users > List Details > Groups 탭 -
-
- -사용자가 소속된 사용자 그룹을 조회할 수 있는 탭입니다. - -1. **Auth Provider** : 그룹의 관리 주체 -2. **Group Name** : 그룹명 - - -### Admin Roles - -
-Administrator > General > User Management > Users > List Details > Admin Roles 탭 -
-Administrator > General > User Management > Users > List Details > Admin Roles 탭 -
-
- -사용자에게 할당된 쿼리파이 관리자 권한 목록을 조회할 수 있는 탭입니다. - -1. **Role Name** : 관리자 역할명 -2. **Description** : 관리자 역할에 대한 설명 -3. **Granted By** : 현 사용자에게 관리자 역할을 부여한 주체 -4. **Granted At** : 관리자 역할을 부여받은 일시 - - -### Allowed Zones - -Administrator > General > Company Management > Allowed Zones 메뉴에서 생성된 Allowed Zone을 사용자에게 직접 할당하거나, 'IP Registration Request' 워크플로우를 통해 승인된 Static IP가 자동으로 적용된 내역을 확인할 수 있습니다. - -
-Allowed Zones 탭 -
-Allowed Zones 탭 -
-
+본 문서는 QueryPie의 보안 강화를 위한 주요 업데이트 중 하나로, 기본 계정인 qp-admin의 삭제 기능이 10.2.8 버전에 새롭게 추가된 배경과 동작 방식, 유의사항 등을 안내합니다. +기존에는 qp-admin 계정이 시스템에 기본 생성되며 삭제가 불가능했지만, 이로 인해 계정 노출 및 보안 취약점 악용 가능성이 지속적으로 제기되어 왔습니다. +이러한 리스크를 해소하기 위해, 해당 버전부터는 기본 계정 삭제 기능과 함께 최초 로그인 시 패스워드 변경을 필수화하는 등 보안 중심의 개선 사항이 도입되었습니다. + +### qp-admin 계정 삭제 조건 + +* 시스템에 인증 방식(Auth Provider)과 관계없이 Owner 권한을 가진 계정이 최소 1개 이상 존재해야 합니다. + * 이유는 OKTA와 LDAP으로 연동된 유저인 경우, IdP에서 삭제가 되면 Owner 계정이 한 개도 없는 경우가 발생할 수 있기 때문입니다. +* 조건 미충족 시(QueryPie 인증 방식의 Owner 유저가 1명도 없을 경우), 삭제 버튼 비활성화 됩니다. + +### qp-admin 계정 삭제 방법 + +1. Admin > General > User Management > Users 메뉴 접속합니다. +
+ <br/> +
+
+
+
+2. qp-admin 계정 선택합니다. +
+ <br/> +
+
+
+
+3. `Delete` 버튼 클릭합니다. +
+ <br/> +
+
+
+
+4. 조건 검증 후 Delete 처리합니다. -**사전 작업** -사용자별 Allowed Zone 할당을 위해서는 먼저 Admin > General > Company Management > Security 메뉴에서 사용자별 QueryPie Web 접근 IP 제어 기능을 활성화해야 합니다. [Security](../../company-management/security) 문서를 참고해주세요. +**주의사항** +* qp-admin 계정 삭제 후 복구는 불가능합니다. +* 삭제를 위해서는 최소 1명의 QueryPie 인증 방식의 Owner 유저가 존재해야 합니다. -#### 워크플로우를 통해 등록된 Static IP 확인하기 - -사용자가 'IP Registration Request' 워크플로우를 통해 IP 주소 등록을 요청하고 최종 승인되면, 해당 IP는 사용자의 **Profile** 탭에 있는 `Static IP` 속성에 자동으로 추가됩니다. - -이렇게 `Static IP` 속성에 등록된 주소들은 이 `Allowed Zone` 탭에 `Name`이 `Static IP` 인 항목으로 자동 반영되어, 사용자는 해당 IP에서의 접근 권한을 부여받게 됩니다. - -
-Screenshot-2025-06-26-at-6.12.22-PM.png -
- -#### 워크플로우를 통해 등록된 Static IP 삭제하기 - -워크플로우를 통해 자동으로 등록된 `Static IP` 항목은 `Allowed Zones` 탭에서 직접 `Detach` 할 수 없습니다. -삭제하려면 사용자의 **Profile** 탭으로 이동하여 `Static IP` 속성값 중 원하는 IP 주소를 직접 편집하여 제거해야 합니다. `Static IP` 속성에서 값이 삭제되면 `Allowed Zones` 탭에서도 해당 IP가 즉시 제거되어 접근 권한이 해제됩니다. - - -#### 테이블 표시 정보 - -테이블에서 표시하는 정보는 다음과 같습니다. - -1. **Name** : Allowed Zone의 명칭 -2. **IP Bands** : Allowed Zone의 IP 대역 - -#### 사용자에게 Allowed Zone 할당하기 - -Allowed Zones 탭 우측 `Attach Allowed Zones` 버튼을 클릭하면 Allowed Zone 할당 모달이 출력됩니다. -할당하고자 하는 Allowed Zone을 선택하고 `Attach` 버튼을 클릭하여 할당을 완료합니다. - -
-Attach Allowed Zone 모달 -
-Attach Allowed Zone 모달 -
-
- -#### 사용자에게서 Allowed Zone 할당 해제하기 - -Allowed Zone 탭 하단 목록에서 할당을 해제하려는 항목을 체크박스로 선택하면 `Detach` 버튼이 노출됩니다. -버튼을 클릭하고, 확인 모달에서 `Detach` 버튼을 클릭하여 할당 해제를 완료합니다. - -
-Allowed Zones 할당 해제 -
-Allowed Zones 할당 해제 -
-
- - -**Q. Tags 탭이 비활성화되어 있어요.** -A. Tags 탭은 사용자별로 할당된 Tag를 조회하고 관리할 수 있는 탭으로 아직 미출시된 기능입니다. -추후 버전에서 지원 예정입니다. - +### qp-admin 계정 패스워드 변경 강제화 조건 +* 10.2.8 업그레이드 시 qp-admin 계정의 패스워드는 자동 만료 처리합니다. +* 로그인 시 반드시 패스워드 재설정 필요합니다. +* 초기 로그인 시점에 패스워드 변경 강제화됩니다. -### 참고: 사용자 Attribute 목록 +### qp-admin 계정 패스워드 변경 방법 -| **속성명** | **변수** | **설명** | **비고** | -| ------------------ | ----------------- | ----------------------------- | -------- | -| User name | loginId | 사용자 ID | 필수 | -| First name | firstName | 사용자 이름 | | -| Last name | lastName | 사용자 성 | | -| Middle name | middleName | 사용자 중간 이름 | | -| Honorific prefix | honorificPrefix | 사용자 존칭 (접두사) (예. Mr./Ms.) | | -| Honorific suffix | honorificSuffix | 사용자 존칭 (접미사) (예. 님, 씨) | | -| Primary email | email | 사용자 이메일 | 필수 | -| Title | title | 사용자 직함 | | -| Display name | displayName | 사용자 표기명 | 필수 | -| Nickname | nickName | 사용자 별칭 | | -| Profile Url | profileUrl | 사용자 프로필 URL | | -| Secondary email | secondEmail | 보조 이메일 | | -| Mobile phone | mobilePhone | 휴대폰 번호 | | -| Primary phone | primaryPhone | 전화번호 (주 연락처) | | -| Street address | streetAddress | 도로주소 | | -| City | city | 도시 | | -| State | state | 주/도 | | -| Zip code | zipCode | 우편번호 | | -| Country code | countryCode | 국가코드 번호 | | -| Postal Address | postalAddress | 우편용 주소 | | -| Preferred language | preferredLanguage | 선호 언어 (예. en) | | -| Locale | locale | 국가/언어 설정에 쓰이는 장소 (예. en_US) | | -| Time zone | timezone | 지역 타임존 (예. US/Pacific) | | -| User type | userType | 사용자 유형 (예. Employee) | | -| Employee number | employeeNumber | 사번 | | -| Cost center | costCenter | 사업부서 (재무회계 기준) | | -| Organization | organization | 사용자 소속 조직 | | -| Division | division | 사용자 소속 부 | | -| Department | department | 사용자 소속 부서 | | -| Manager ID | managerId | 상사 ID | | -| Manager | manager | 상사 표기명 | | -| Static IP | staticIp | 사용자 할당 정적 IP | | -| Mac address | macAddress | 사용자 MAC 주소 | | -| Risk score | riskScore | 사용자 위험 지수 (쿼리파이 System에서 관리) | 추후 제공 예정 | +1. qp-admin 계정 로그인 시 패스워드 만료 안내 화면 노출합니다. +
+ <br/> +
+
+
+
+2. 새 비밀번호 설정 후 정상 로그인 가능합니다. From 561b956c605291488a43989f7a887392e7cf89b7 Mon Sep 17 00:00:00 2001 From: JK Date: Wed, 18 Feb 2026 19:19:56 +0900 Subject: [PATCH 3/4] correct improved.mdx --- confluence-mdx/tests/reverse-sync/1177321474/improved.mdx | 2 +- confluence-mdx/tests/reverse-sync/1297383451/improved.mdx | 2 +- confluence-mdx/tests/reverse-sync/1907294209/improved.mdx | 8 ++++---- confluence-mdx/tests/reverse-sync/544112846/improved.mdx | 2 +- confluence-mdx/tests/reverse-sync/544376183/improved.mdx | 2 +- confluence-mdx/tests/reverse-sync/544376265/improved.mdx | 2 +- confluence-mdx/tests/reverse-sync/544379393/improved.mdx | 4 ++-- confluence-mdx/tests/reverse-sync/568852692/improved.mdx | 4 ++-- confluence-mdx/tests/reverse-sync/862093313/improved.mdx | 2 +- confluence-mdx/tests/reverse-sync/920944732/improved.mdx | 4 ++-- 10 files changed, 16 insertions(+), 16 deletions(-) diff --git a/confluence-mdx/tests/reverse-sync/1177321474/improved.mdx b/confluence-mdx/tests/reverse-sync/1177321474/improved.mdx index 73e552417..b53aa352c 100644 --- a/confluence-mdx/tests/reverse-sync/1177321474/improved.mdx +++ b/confluence-mdx/tests/reverse-sync/1177321474/improved.mdx @@ -18,7 +18,7 @@ import { Callout } from 'nextra/components' 기존 설치 과정은 이 문서를 참조하세요: [설치 가이드 - 간단한 구성](installation-guide-simple-configuration) 이 설치 방식은 실제 운영 환경에서 사용하기에는 적합하지 않습니다. -실제 운영 환경에 사용하기에 적합한 설치 방법은 별도로 제공되는 [QueryPie Installation Guide]를 참고하십시오. +실제 운영 환경에 사용하기에 적합한 설치 방법은 별도로 제공되는 [QueryPie Installation Guide]를 참조하세요. QueryPie 10.3.0 또는 이후 버전을 대상으로 하는 PoC 용도의 설치 가이드입니다. diff --git a/confluence-mdx/tests/reverse-sync/1297383451/improved.mdx b/confluence-mdx/tests/reverse-sync/1297383451/improved.mdx index f7dc180e5..6bad97bfa 100644 --- a/confluence-mdx/tests/reverse-sync/1297383451/improved.mdx +++ b/confluence-mdx/tests/reverse-sync/1297383451/improved.mdx @@ -107,7 +107,7 @@ Created symlink /home/ec2-user/.config/systemd/user/default.target.wants/podman- 별도 구성된 MySQL 을 사용하는 경우 -기본 제공되는 `./querypie//compose.yml` 을 이용해, 하나의 리눅스 서버에서 MySQL 를 실행하지 않고, 별도로 구성된 MySQL 을 사용하는 경우, systemd service 작동 범위를 변경하면 됩니다. +기본 제공되는 `./querypie//compose.yml` 을 이용해, 하나의 리눅스 서버에서 MySQL 를 실행하지 않고, 별도로 구성된 MySQL을 사용하는 경우, systemd service 작동 범위를 변경하면 됩니다. `podman-querypie-database.service` 를 작동시키지 않으면 됩니다. 작동 중인 systemd service 를 다음의 명령으로 끌 수 있습니다. diff --git a/confluence-mdx/tests/reverse-sync/1907294209/improved.mdx b/confluence-mdx/tests/reverse-sync/1907294209/improved.mdx index 43dbf2982..96e04b967 100644 --- a/confluence-mdx/tests/reverse-sync/1907294209/improved.mdx +++ b/confluence-mdx/tests/reverse-sync/1907294209/improved.mdx @@ -19,7 +19,7 @@ import { Callout } from 'nextra/components' Web Console 에 접근하기 위한 QueryPie 의 URL 주소입니다. (예시. `https://querypie.customer.com`) 이 URL 은 QueryPie 의 Base URL 이라고 부르기도 합니다. -이 URL 은 `/` 로 끝나지 않아야 합니다. `https://querypie.customer.com/` 와 같이 URL 의 마지막에 `/` 를 붙이지 않도록 주의하여 주세요. +이 URL 은 `/` 로 끝나지 않아야 합니다. `https://querypie.customer.com/` 와 같이 URL 의 마지막에 `/` 를 붙이지 않도록 주의해 주세요. 이 URL 은 아래의 용도로 사용됩니다. @@ -53,10 +53,10 @@ Database 연결 설정 과정에서 QueryPie MySQL 의 Hostname, Username, Passw * setup.sh 로 설치한 경우: `compose-env` 파일 환경변수 파일에 설정된 값 중 `DB_PASSWORD`, `REDIS_PASSWORD`, `KEY_ENCRYPTION_KEY` 등은 안전하게 보관하여야 합니다. -다른 사람에게 이 값을 노출하지 않도록 주의하여 주세요. +다른 사람에게 이 값을 노출하지 않도록 주의해 주세요. -아래 `` 부분을 고객사의 Proxy 접속 IP 혹은 도메인으로 갈음하여 쿼리를 수행합니다. +아래 `` 부분을 고객사의 Proxy 접속 IP 혹은 도메인으로 대체하여 쿼리를 수행합니다. 해당 주소는 `http` `https` 와 같은 Scheme 을 붙여서는 안 됩니다. @@ -84,7 +84,7 @@ DAC/SAC Proxy 접속 주소 설정 화면 QueryPie Database 에 접속하여, KAC 의 Proxy 접속을 위한 주소를 등록합니다. -아래 `` 부분을 고객사의 Proxy 접속 IP 혹은 도메인으로 갈음하여 쿼리를 수행합니다. +아래 `` 부분을 고객사의 Proxy 접속 IP 혹은 도메인으로 대체하여 쿼리를 수행합니다. 특이사항으로 DAC/SAC 설정과는 다르게 `http` `https` 와 같은 Scheme을 자유롭게 입력 가능합니다. diff --git a/confluence-mdx/tests/reverse-sync/544112846/improved.mdx b/confluence-mdx/tests/reverse-sync/544112846/improved.mdx index 7a5d6109a..ec7802ec6 100644 --- a/confluence-mdx/tests/reverse-sync/544112846/improved.mdx +++ b/confluence-mdx/tests/reverse-sync/544112846/improved.mdx @@ -59,7 +59,7 @@ Drawer 내 Mapped List by Allowed Zones 영역에서 Allowed Zone이 할당된 D ### Allowed Zone 추가하기 -Allowed Zone 목록 페이지에서 `Create Allowed Zone` 버튼을 클릭하면 Allowed Zone 입력 항목이 출력됩니다. +Allowed Zone 목록 페이지에서 `Create Allowed Zone` 버튼을 클릭하면 Allowed Zone 입력 항목이 표시됩니다.
Create Allowed Zone 생성 시 출력되는 입력항목 diff --git a/confluence-mdx/tests/reverse-sync/544376183/improved.mdx b/confluence-mdx/tests/reverse-sync/544376183/improved.mdx index 3fdc83308..f4b9cb6ef 100644 --- a/confluence-mdx/tests/reverse-sync/544376183/improved.mdx +++ b/confluence-mdx/tests/reverse-sync/544376183/improved.mdx @@ -60,7 +60,7 @@ Administrator > General > User Management > Authentication 1. Administrator > General > User Management > Authentication 메뉴로 이동합니다. 2. 인증 Type 항목에서 **SAML** 을 선택합니다. 3. 애플리케이션 > 작업 > 구성 편집 화면에서 IAM Identity Center SAML 메타데이터 파일을 다운로드합니다. -4. 다운로드 받은 XML 정보를 Identity Provider Metadata 항목에 붙여넣기합니다. +4. 다운로드 받은 XML 정보를 Identity Provider Metadata 항목에 붙여 넣습니다. 5. `Save Changes` 버튼을 클릭하여 저장합니다. ### QueryPie에서 SAML 로그인 diff --git a/confluence-mdx/tests/reverse-sync/544376265/improved.mdx b/confluence-mdx/tests/reverse-sync/544376265/improved.mdx index 311b1c743..6149d52df 100644 --- a/confluence-mdx/tests/reverse-sync/544376265/improved.mdx +++ b/confluence-mdx/tests/reverse-sync/544376265/improved.mdx @@ -35,7 +35,7 @@ Administrator > General > User Management > Provisioning 4. Access Token 발급을 위해 우측의 `Generate Token` 버튼을 클릭합니다. 5. 팝업창이 나타나면 해당 Access Token 값을 향후 IdP 측 토큰 정보에 기입할 수 있도록 복사해둡니다. 1. 이 토큰 값은 다시 조회가 어려우므로 해당 창을 닫지 않고 바로 원장이 될 Identity Provider로 넘어가는 것을 권장합니다. ([ **Okta-QueryPie Provisioning 연동** ](okta-provisioning-integration-guide) 스텝 참고) - 2. 혹시라도 토큰 값을 분실한 경우, 기존의 토큰을 삭제하고 다시 4번 단계를 통해 새로 발급받기 바랍니다. + 2. 혹시라도 토큰 값을 분실한 경우, 기존의 토큰을 삭제하고 다시 4번 단계에서 새로 발급받으세요. 6. `Confirm` 버튼을 눌러 창을 닫습니다. diff --git a/confluence-mdx/tests/reverse-sync/544379393/improved.mdx b/confluence-mdx/tests/reverse-sync/544379393/improved.mdx index e71463748..e09438213 100644 --- a/confluence-mdx/tests/reverse-sync/544379393/improved.mdx +++ b/confluence-mdx/tests/reverse-sync/544379393/improved.mdx @@ -40,7 +40,7 @@ Administrator > General > System > Integrations > Syslog > Config 1. **Destination Name** : syslog를 수신하는 주체를 식별할 수 있도록 적당한 이름을 입력합니다. 2. **Protocol** : syslog에서 선택 가능한 프로토콜은 TCP(기본값)와 UDP입니다. UDP는 패킷의 길이 제약사항이 있고 보안적으로 취약하므로 TCP 사용을 권장합니다. 3. **Destination Address (Hostname)** : syslog를 수신하는 syslog server의 IP address 또는 hostname을 입력합니다. - 4. **Port** : sylog server에서 listen 하는 port를 입력합니다. (기본값 514) + 4. **Port** : syslog server에서 listen하는 port를 입력합니다. (기본값 514) 5. **Test Connection 버튼** : TCP는 syslog 서버와 통신상태를 점검할 수 있습니다. * UDP는 프로토콜 특성상 통신 상태 점검이 불가능하여, Test Connection 버튼이 비활성화됩니다. 6. **Select Event Items** : 이벤트 항목을 선택적으로 전송할 수 있습니다. 아래에 있는 "Select all event items, including those that may be added later.” 체크박스를 선택하면 전송 가능한 모든 이벤트를 전송합니다. @@ -51,7 +51,7 @@ Administrator > General > System > Integrations > Syslog > Config 3. 전송 시작을 하려면 페이지 좌측 상단에 있는 토글 버튼을 `ON`으로 전환합니다. 1. 이 전송 토글 버튼은 유지 보수 등 다양한 상황에서 일시적으로 전송을 중지해야 하는 경우 사용할 수 있습니다. 4. 만약 더 이상 Syslog 전송이 필요하지 않을 경우 Delete 버튼을 통해 설정을 제거할 수 있습니다. - 1. 단, 전송 중인 상태에서는 삭제할 수 없으므로 전송 토글 버튼을 :토글off: 로 변경한 후 삭제해 주시기 바랍니다. + 1. 단, 전송 중인 상태에서는 삭제할 수 없으므로 전송 토글 버튼을 :토글off: 로 변경한 후 삭제해 주세요. 11.3.0에서 Timezone 설정이 추가되었습니다. diff --git a/confluence-mdx/tests/reverse-sync/568852692/improved.mdx b/confluence-mdx/tests/reverse-sync/568852692/improved.mdx index 668bd35a6..e5e905177 100644 --- a/confluence-mdx/tests/reverse-sync/568852692/improved.mdx +++ b/confluence-mdx/tests/reverse-sync/568852692/improved.mdx @@ -27,7 +27,7 @@ Amazon DocumentDB 전용 상세 설정 가이드를 이곳에서 제공합니다 AWS에서 새로운 DocumentDB를 생성하면 TLS를 사용하여 전송구간 암호화를 사용할 수 있고 사용자가 선택적으로 옵션을 끌 수 있습니다. Amazon DocumentDB 클러스터에 대한 전송 중 데이터 암호화는 클러스터 파라미터 그룹의 TLS 파라미터를 통해 관리됩니다. -AWS Management Console 또는 AWS Command Line Interface (AWS CLI)를 사용하여 Amazon DocumentDB 클러스터 TLS 설정을 관리할 수 있습니다. [참고](https://docs.aws.amazon.com/ko_kr/documentdb/latest/developerguide/security.encryption.ssl.html#security.encryption.ssl.managing)
Amazon DocumentDB에서 TLS가 활성화 되어 있는 경우 접속을 위해 AWS에서 제공하는 CA 번들 인증서가 필요합니다. +AWS Management Console 또는 AWS Command Line Interface (AWS CLI)를 사용하여 Amazon DocumentDB 클러스터 TLS 설정을 관리할 수 있습니다. [참고](https://docs.aws.amazon.com/ko_kr/documentdb/latest/developerguide/security.encryption.ssl.html#security.encryption.ssl.managing)
Amazon DocumentDB에서 TLS가 활성화되어 있는 경우 접속을 위해 AWS에서 제공하는 CA 번들 인증서가 필요합니다. #### CA 번들 인증서 등록하기 @@ -52,7 +52,7 @@ AWS에서는 region에 상관없이 공동으로 사용할 수 있는 [global #### DocumentDB에 인증서 매핑하기 -1. Adminstrator > Databases > Connection Management > DB Connections 메뉴로 이동합니다. +1. Administrator > Databases > Connection Management > DB Connections 메뉴로 이동합니다. 2. 클라우드 동기화를 통해 생성되어 있는 DocumentDB 커넥션을 선택합니다. 3. 아래로 스크롤하여 **SSL / SSH Setting** 탭으로 이동합니다. 4. `Use SSL` 체크박스를 체크하여 활성화시킨 뒤 **SSL Configurations** 에서 앞단계(CA 번들 인증서 등록하기)에서 등록한 설정 이름을 선택합니다. diff --git a/confluence-mdx/tests/reverse-sync/862093313/improved.mdx b/confluence-mdx/tests/reverse-sync/862093313/improved.mdx index 2a6c3f637..84bd2dad8 100644 --- a/confluence-mdx/tests/reverse-sync/862093313/improved.mdx +++ b/confluence-mdx/tests/reverse-sync/862093313/improved.mdx @@ -55,7 +55,7 @@ QueryPie Server 는 두 가지 컴포넌트를 필요로 합니다. QueryPie Database 는 QueryPie Server 의 작동을 위한 데이터를 저장합니다. QueryPie 의 User Account, Admin Account, 연결 대상 시스템의 정보, 접근제어 정책 등을 저장합니다. -뿐만 아니라, User 의 Query Log, System Access Log 등 Audit 정보를 저장합니다. +뿐만 아니라, User의 Query Log, System Access Log 등 Audit 정보를 저장합니다. MySQL, MariaDB 또는 호환되는 Database 를 QueryPie Database 로 사용할 수 있습니다. diff --git a/confluence-mdx/tests/reverse-sync/920944732/improved.mdx b/confluence-mdx/tests/reverse-sync/920944732/improved.mdx index 0e77bbc5c..02ffd335b 100644 --- a/confluence-mdx/tests/reverse-sync/920944732/improved.mdx +++ b/confluence-mdx/tests/reverse-sync/920944732/improved.mdx @@ -17,11 +17,11 @@ import { Callout } from 'nextra/components' * 시스템에 인증 방식(Auth Provider)과 관계없이 Owner 권한을 가진 계정이 최소 1개 이상 존재해야 합니다. * 이유는 OKTA와 LDAP으로 연동된 유저인 경우, IdP에서 삭제가 되면 Owner 계정이 한 개도 없는 경우가 발생할 수 있기 때문입니다. -* 조건 미충족 시(QueryPie 인증 방식의 Owner 유저가 1명도 없을 경우), 삭제 버튼 비활성화 됩니다. +* 조건 미충족 시(QueryPie 인증 방식의 Owner 유저가 1명도 없을 경우), 삭제 버튼이 비활성화됩니다. ### qp-admin 계정 삭제 방법 -1. Admin > General > User Management > Users 메뉴 접속합니다. +1. Admin > General > User Management > Users 메뉴에 접속합니다.
<br/>
From 1d1932b588fb8896d65c7464ae292965f6fbc7ba Mon Sep 17 00:00:00 2001 From: JK Date: Wed, 18 Feb 2026 19:25:24 +0900 Subject: [PATCH 4/4] =?UTF-8?q?confluence-mdx:=20improved.mdx=20=EA=B5=90?= =?UTF-8?q?=EC=A0=95=20=EC=A0=81=EC=9A=A9=20=EB=B0=8F=20mapping.yaml/pages?= =?UTF-8?q?.yaml=20=EC=97=85=EB=8D=B0=EC=9D=B4=ED=8A=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 10건의 improved.mdx에 proofreading skill 기반 교정 적용 - verify 실행으로 mapping.yaml 재생성 (11건) - pages.yaml expected_status 및 title/description 업데이트 - 568852692, 920944732, 1177321474: expected_status → pass - 현재 결과: 11 failed, 6 passed / 17 total Co-Authored-By: Claude Opus 4.6 --- .../reverse-sync/1177321474/mapping.yaml | 230 +++++++-------- .../reverse-sync/1297383451/mapping.yaml | 242 ++++++++-------- .../reverse-sync/1907294209/mapping.yaml | 239 ++++++++-------- .../tests/reverse-sync/544112846/mapping.yaml | 157 ++++++----- .../tests/reverse-sync/544376183/mapping.yaml | 108 ++++---- .../tests/reverse-sync/544376265/mapping.yaml | 70 +++-- .../tests/reverse-sync/544379393/mapping.yaml | 94 ++++--- .../tests/reverse-sync/544383693/mapping.yaml | 37 ++- .../tests/reverse-sync/568852692/mapping.yaml | 110 ++++---- .../tests/reverse-sync/862093313/mapping.yaml | 262 +++++++++--------- .../tests/reverse-sync/920944732/mapping.yaml | 79 +++--- confluence-mdx/tests/reverse-sync/pages.yaml | 54 ++-- 12 files changed, 854 insertions(+), 828 deletions(-) diff --git a/confluence-mdx/tests/reverse-sync/1177321474/mapping.yaml b/confluence-mdx/tests/reverse-sync/1177321474/mapping.yaml index 372f039aa..de0da3f7f 100644 --- a/confluence-mdx/tests/reverse-sync/1177321474/mapping.yaml +++ b/confluence-mdx/tests/reverse-sync/1177321474/mapping.yaml @@ -1,165 +1,165 @@ -version: 1 -source_page_id: '1177321474' -generated_at: '2026-02-14T15:16:03Z' -mdx_file: installation-guide-setupv2sh.mdx mappings: -- xhtml_xpath: p[1] +- mdx_blocks: [] xhtml_type: paragraph - mdx_blocks: - - 4 -- xhtml_xpath: macro-toc[1] + xhtml_xpath: p[1] +- mdx_blocks: [] xhtml_type: html_block - mdx_blocks: + xhtml_xpath: macro-toc[1] +- mdx_blocks: - 7 -- xhtml_xpath: h1[1] xhtml_type: heading - mdx_blocks: + xhtml_xpath: h1[1] +- mdx_blocks: - 9 -- xhtml_xpath: p[2] xhtml_type: paragraph - mdx_blocks: + xhtml_xpath: p[2] +- mdx_blocks: - 11 -- xhtml_xpath: p[3] xhtml_type: paragraph - mdx_blocks: + xhtml_xpath: p[3] +- mdx_blocks: - 13 -- xhtml_xpath: p[4] xhtml_type: paragraph - mdx_blocks: + xhtml_xpath: p[4] +- mdx_blocks: - 15 -- xhtml_xpath: macro-info[1] xhtml_type: html_block - mdx_blocks: - - 16 -- xhtml_xpath: h1[2] + xhtml_xpath: macro-info[1] +- mdx_blocks: + - 17 xhtml_type: heading - mdx_blocks: - - 18 -- xhtml_xpath: p[5] + xhtml_xpath: h1[2] +- mdx_blocks: + - 19 xhtml_type: paragraph - mdx_blocks: - - 20 -- xhtml_xpath: ul[1] + xhtml_xpath: p[5] +- mdx_blocks: + - 21 xhtml_type: list - mdx_blocks: - - 22 -- xhtml_xpath: p[6] + xhtml_xpath: ul[1] +- mdx_blocks: + - 23 xhtml_type: paragraph - mdx_blocks: - - 24 -- xhtml_xpath: h1[3] + xhtml_xpath: p[6] +- mdx_blocks: + - 25 xhtml_type: heading - mdx_blocks: - - 26 -- xhtml_xpath: p[7] + xhtml_xpath: h1[3] +- mdx_blocks: + - 27 xhtml_type: paragraph - mdx_blocks: - - 28 -- xhtml_xpath: h1[4] + xhtml_xpath: p[7] +- mdx_blocks: + - 29 xhtml_type: heading - mdx_blocks: - - 30 -- xhtml_xpath: h2[1] + xhtml_xpath: h1[4] +- mdx_blocks: + - 31 xhtml_type: heading - mdx_blocks: - - 32 -- xhtml_xpath: p[8] + xhtml_xpath: h2[1] +- mdx_blocks: + - 33 xhtml_type: paragraph - mdx_blocks: + xhtml_xpath: p[8] +- mdx_blocks: - 34 -- xhtml_xpath: macro-code[1] xhtml_type: code - mdx_blocks: - - 35 -- xhtml_xpath: p[9] + xhtml_xpath: macro-code[1] +- mdx_blocks: + - 36 xhtml_type: paragraph - mdx_blocks: + xhtml_xpath: p[9] +- mdx_blocks: - 37 -- xhtml_xpath: macro-code[2] xhtml_type: code - mdx_blocks: - - 38 -- xhtml_xpath: p[10] + xhtml_xpath: macro-code[2] +- mdx_blocks: + - 39 xhtml_type: paragraph - mdx_blocks: - - 40 -- xhtml_xpath: p[11] + xhtml_xpath: p[10] +- mdx_blocks: + - 41 xhtml_type: paragraph - mdx_blocks: + xhtml_xpath: p[11] +- mdx_blocks: - 42 -- xhtml_xpath: macro-code[3] xhtml_type: code - mdx_blocks: - - 43 -- xhtml_xpath: h2[2] + xhtml_xpath: macro-code[3] +- mdx_blocks: + - 44 xhtml_type: heading - mdx_blocks: - - 45 -- xhtml_xpath: p[12] + xhtml_xpath: h2[2] +- mdx_blocks: + - 46 xhtml_type: paragraph - mdx_blocks: - - 47 -- xhtml_xpath: p[13] + xhtml_xpath: p[12] +- mdx_blocks: + - 48 xhtml_type: paragraph - mdx_blocks: - - 49 -- xhtml_xpath: ul[2] + xhtml_xpath: p[13] +- mdx_blocks: + - 50 xhtml_type: list - mdx_blocks: - - 51 -- xhtml_xpath: p[14] + xhtml_xpath: ul[2] +- mdx_blocks: + - 52 xhtml_type: paragraph - mdx_blocks: - - 53 -- xhtml_xpath: h2[3] + xhtml_xpath: p[14] +- mdx_blocks: + - 54 xhtml_type: heading - mdx_blocks: - - 55 -- xhtml_xpath: p[15] + xhtml_xpath: h2[3] +- mdx_blocks: + - 56 xhtml_type: paragraph - mdx_blocks: - - 57 -- xhtml_xpath: ol[1] + xhtml_xpath: p[15] +- mdx_blocks: + - 58 xhtml_type: list - mdx_blocks: - - 59 -- xhtml_xpath: p[16] + xhtml_xpath: ol[1] +- mdx_blocks: + - 60 xhtml_type: paragraph - mdx_blocks: + xhtml_xpath: p[16] +- mdx_blocks: - 61 -- xhtml_xpath: macro-code[4] xhtml_type: code - mdx_blocks: - - 62 -- xhtml_xpath: h2[4] + xhtml_xpath: macro-code[4] +- mdx_blocks: + - 63 xhtml_type: heading - mdx_blocks: - - 64 -- xhtml_xpath: p[17] + xhtml_xpath: h2[4] +- mdx_blocks: + - 65 xhtml_type: paragraph - mdx_blocks: - - 66 -- xhtml_xpath: p[18] + xhtml_xpath: p[17] +- mdx_blocks: + - 67 xhtml_type: paragraph - mdx_blocks: - - 68 -- xhtml_xpath: h2[5] + xhtml_xpath: p[18] +- mdx_blocks: + - 69 xhtml_type: heading - mdx_blocks: - - 70 -- xhtml_xpath: p[19] + xhtml_xpath: h2[5] +- mdx_blocks: + - 71 xhtml_type: paragraph - mdx_blocks: - - 72 -- xhtml_xpath: ac:image[1] + xhtml_xpath: p[19] +- mdx_blocks: + - 73 xhtml_type: html_block - mdx_blocks: - - 74 -- xhtml_xpath: h1[5] + xhtml_xpath: ac:image[1] +- mdx_blocks: + - 75 xhtml_type: heading - mdx_blocks: - - 76 -- xhtml_xpath: p[20] + xhtml_xpath: h1[5] +- mdx_blocks: + - 77 + xhtml_type: paragraph + xhtml_xpath: p[20] +- mdx_blocks: [] xhtml_type: paragraph - mdx_blocks: - - 78 + xhtml_xpath: p[21] +mdx_file: page.mdx +source_page_id: '1177321474' +version: 2 diff --git a/confluence-mdx/tests/reverse-sync/1297383451/mapping.yaml b/confluence-mdx/tests/reverse-sync/1297383451/mapping.yaml index 6b9c7c091..eb1d40061 100644 --- a/confluence-mdx/tests/reverse-sync/1297383451/mapping.yaml +++ b/confluence-mdx/tests/reverse-sync/1297383451/mapping.yaml @@ -1,173 +1,173 @@ -version: 1 -source_page_id: '1297383451' -generated_at: '2026-02-14T15:16:02Z' -mdx_file: configuring-rootless-mode-with-podman.mdx mappings: -- xhtml_xpath: macro-toc[1] +- mdx_blocks: [] xhtml_type: html_block - mdx_blocks: - - 2 -- xhtml_xpath: p[1] - xhtml_type: paragraph - mdx_blocks: + xhtml_xpath: macro-toc[1] +- mdx_blocks: - 4 -- xhtml_xpath: h2[1] - xhtml_type: heading - mdx_blocks: - - 6 -- xhtml_xpath: p[2] xhtml_type: paragraph - mdx_blocks: + xhtml_xpath: p[1] +- mdx_blocks: + - 6 + xhtml_type: heading + xhtml_xpath: h2[1] +- mdx_blocks: - 8 -- xhtml_xpath: p[3] xhtml_type: paragraph - mdx_blocks: + xhtml_xpath: p[2] +- mdx_blocks: - 10 -- xhtml_xpath: macro-code[1] - xhtml_type: code - mdx_blocks: - - 11 -- xhtml_xpath: p[4] xhtml_type: paragraph - mdx_blocks: + xhtml_xpath: p[3] +- mdx_blocks: + - 11 + xhtml_type: code + xhtml_xpath: macro-code[1] +- mdx_blocks: - 13 -- xhtml_xpath: ul[1] - xhtml_type: list - mdx_blocks: - - 15 -- xhtml_xpath: p[5] xhtml_type: paragraph - mdx_blocks: - - 17 -- xhtml_xpath: ul[2] + xhtml_xpath: p[4] +- mdx_blocks: + - 15 xhtml_type: list - mdx_blocks: + xhtml_xpath: ul[1] +- mdx_blocks: + - 17 + xhtml_type: paragraph + xhtml_xpath: p[5] +- mdx_blocks: - 19 -- xhtml_xpath: h2[2] - xhtml_type: heading - mdx_blocks: + xhtml_type: list + xhtml_xpath: ul[2] +- mdx_blocks: - 21 -- xhtml_xpath: p[6] - xhtml_type: paragraph - mdx_blocks: + xhtml_type: heading + xhtml_xpath: h2[2] +- mdx_blocks: - 23 -- xhtml_xpath: macro-code[2] - xhtml_type: code - mdx_blocks: - - 24 -- xhtml_xpath: p[7] xhtml_type: paragraph - mdx_blocks: + xhtml_xpath: p[6] +- mdx_blocks: + - 24 + xhtml_type: code + xhtml_xpath: macro-code[2] +- mdx_blocks: - 26 -- xhtml_xpath: p[8] xhtml_type: paragraph - mdx_blocks: + xhtml_xpath: p[7] +- mdx_blocks: - 28 -- xhtml_xpath: p[9] xhtml_type: paragraph - mdx_blocks: + xhtml_xpath: p[8] +- mdx_blocks: - 30 -- xhtml_xpath: macro-code[3] - xhtml_type: code - mdx_blocks: + xhtml_type: paragraph + xhtml_xpath: p[9] +- mdx_blocks: - 31 -- xhtml_xpath: h2[3] - xhtml_type: heading - mdx_blocks: + xhtml_type: code + xhtml_xpath: macro-code[3] +- mdx_blocks: - 33 -- xhtml_xpath: p[10] - xhtml_type: paragraph - mdx_blocks: + xhtml_type: heading + xhtml_xpath: h2[3] +- mdx_blocks: - 35 -- xhtml_xpath: p[11] xhtml_type: paragraph - mdx_blocks: + xhtml_xpath: p[10] +- mdx_blocks: - 37 -- xhtml_xpath: macro-code[4] - xhtml_type: code - mdx_blocks: - - 38 -- xhtml_xpath: p[12] xhtml_type: paragraph - mdx_blocks: - - 40 -- xhtml_xpath: macro-code[5] + xhtml_xpath: p[11] +- mdx_blocks: + - 38 xhtml_type: code - mdx_blocks: - - 41 -- xhtml_xpath: p[13] + xhtml_xpath: macro-code[4] +- mdx_blocks: + - 40 xhtml_type: paragraph - mdx_blocks: + xhtml_xpath: p[12] +- mdx_blocks: + - 41 + xhtml_type: code + xhtml_xpath: macro-code[5] +- mdx_blocks: - 43 -- xhtml_xpath: h3[1] - xhtml_type: heading - mdx_blocks: - - 45 -- xhtml_xpath: p[14] xhtml_type: paragraph - mdx_blocks: + xhtml_xpath: p[13] +- mdx_blocks: + - 45 + xhtml_type: heading + xhtml_xpath: h3[1] +- mdx_blocks: - 47 -- xhtml_xpath: p[15] xhtml_type: paragraph - mdx_blocks: + xhtml_xpath: p[14] +- mdx_blocks: - 49 -- xhtml_xpath: p[16] xhtml_type: paragraph - mdx_blocks: + xhtml_xpath: p[15] +- mdx_blocks: - 51 -- xhtml_xpath: p[17] xhtml_type: paragraph - mdx_blocks: + xhtml_xpath: p[16] +- mdx_blocks: - 53 -- xhtml_xpath: p[18] xhtml_type: paragraph - mdx_blocks: + xhtml_xpath: p[17] +- mdx_blocks: - 55 -- xhtml_xpath: macro-code[6] - xhtml_type: code - mdx_blocks: - - 56 -- xhtml_xpath: p[19] xhtml_type: paragraph - mdx_blocks: - - 58 -- xhtml_xpath: macro-code[7] + xhtml_xpath: p[18] +- mdx_blocks: + - 56 xhtml_type: code - mdx_blocks: - - 59 -- xhtml_xpath: p[20] + xhtml_xpath: macro-code[6] +- mdx_blocks: + - 58 xhtml_type: paragraph - mdx_blocks: - - 61 -- xhtml_xpath: macro-code[8] + xhtml_xpath: p[19] +- mdx_blocks: + - 59 xhtml_type: code - mdx_blocks: - - 62 -- xhtml_xpath: p[21] + xhtml_xpath: macro-code[7] +- mdx_blocks: + - 61 xhtml_type: paragraph - mdx_blocks: + xhtml_xpath: p[20] +- mdx_blocks: + - 62 + xhtml_type: code + xhtml_xpath: macro-code[8] +- mdx_blocks: - 64 -- xhtml_xpath: p[22] xhtml_type: paragraph - mdx_blocks: - - 66 -- xhtml_xpath: p[23] + xhtml_xpath: p[21] +- mdx_blocks: [] xhtml_type: paragraph - mdx_blocks: + xhtml_xpath: p[22] +- mdx_blocks: - 68 -- xhtml_xpath: macro-code[9] - xhtml_type: code - mdx_blocks: - - 69 -- xhtml_xpath: p[24] xhtml_type: paragraph - mdx_blocks: + xhtml_xpath: p[23] +- mdx_blocks: + - 69 + xhtml_type: code + xhtml_xpath: macro-code[9] +- mdx_blocks: - 71 -- xhtml_xpath: h2[4] - xhtml_type: heading - mdx_blocks: + xhtml_type: paragraph + xhtml_xpath: p[24] +- mdx_blocks: - 73 -- xhtml_xpath: ul[3] - xhtml_type: list - mdx_blocks: + xhtml_type: heading + xhtml_xpath: h2[4] +- mdx_blocks: - 75 + xhtml_type: list + xhtml_xpath: ul[3] +- mdx_blocks: [] + xhtml_type: paragraph + xhtml_xpath: p[25] +mdx_file: page.mdx +source_page_id: '1297383451' +version: 2 diff --git a/confluence-mdx/tests/reverse-sync/1907294209/mapping.yaml b/confluence-mdx/tests/reverse-sync/1907294209/mapping.yaml index 65fec4200..369b5513b 100644 --- a/confluence-mdx/tests/reverse-sync/1907294209/mapping.yaml +++ b/confluence-mdx/tests/reverse-sync/1907294209/mapping.yaml @@ -1,166 +1,163 @@ -version: 1 -source_page_id: '1907294209' -generated_at: '2026-02-14T15:16:04Z' -mdx_file: post-installation-setup.mdx mappings: -- xhtml_xpath: macro-toc[1] +- mdx_blocks: [] xhtml_type: html_block - mdx_blocks: - - 4 -- xhtml_xpath: p[1] - xhtml_type: paragraph - mdx_blocks: + xhtml_xpath: macro-toc[1] +- mdx_blocks: - 6 -- xhtml_xpath: h2[1] - xhtml_type: heading - mdx_blocks: - - 8 -- xhtml_xpath: p[2] xhtml_type: paragraph - mdx_blocks: - - 10 -- xhtml_xpath: h3[1] + xhtml_xpath: p[1] +- mdx_blocks: + - 8 xhtml_type: heading - mdx_blocks: + xhtml_xpath: h2[1] +- mdx_blocks: + - 10 + xhtml_type: paragraph + xhtml_xpath: p[2] +- mdx_blocks: - 12 -- xhtml_xpath: blockquote[1] - xhtml_type: html_block - mdx_blocks: + xhtml_type: heading + xhtml_xpath: h3[1] +- mdx_blocks: - 14 -- xhtml_xpath: p[3] + xhtml_type: html_block + xhtml_xpath: blockquote[1] +- mdx_blocks: + - 15 xhtml_type: paragraph - mdx_blocks: - - 16 -- xhtml_xpath: p[4] + xhtml_xpath: p[3] +- mdx_blocks: + - 17 xhtml_type: paragraph - mdx_blocks: - - 18 -- xhtml_xpath: p[5] + xhtml_xpath: p[4] +- mdx_blocks: + - 19 xhtml_type: paragraph - mdx_blocks: - - 20 -- xhtml_xpath: ul[1] + xhtml_xpath: p[5] +- mdx_blocks: + - 21 xhtml_type: list - mdx_blocks: - - 23 -- xhtml_xpath: p[6] + xhtml_xpath: ul[1] +- mdx_blocks: [] xhtml_type: paragraph - mdx_blocks: - - 25 -- xhtml_xpath: ac:image[1] + xhtml_xpath: p[6] +- mdx_blocks: + - 24 xhtml_type: html_block - mdx_blocks: - - 27 -- xhtml_xpath: h2[2] + xhtml_xpath: ac:image[1] +- mdx_blocks: + - 26 xhtml_type: heading - mdx_blocks: - - 29 -- xhtml_xpath: h3[2] + xhtml_xpath: h2[2] +- mdx_blocks: + - 28 xhtml_type: heading - mdx_blocks: - - 31 -- xhtml_xpath: p[7] - xhtml_type: paragraph - mdx_blocks: - - 33 -- xhtml_xpath: macro-info[1] + xhtml_xpath: h3[2] +- mdx_blocks: + - 30 + xhtml_type: paragraph + xhtml_xpath: p[7] +- mdx_blocks: + - 32 + - 34 xhtml_type: html_block - mdx_blocks: - - 35 -- xhtml_xpath: p[8] + xhtml_xpath: macro-info[1] +- mdx_blocks: [] xhtml_type: paragraph - mdx_blocks: + xhtml_xpath: p[8] +- mdx_blocks: + - 36 - 37 -- xhtml_xpath: macro-note[1] xhtml_type: html_block - mdx_blocks: - - 38 -- xhtml_xpath: macro-code[1] + xhtml_xpath: macro-note[1] +- mdx_blocks: [] xhtml_type: code - mdx_blocks: - - 40 -- xhtml_xpath: p[9] + xhtml_xpath: macro-code[1] +- mdx_blocks: + - 39 xhtml_type: paragraph - mdx_blocks: - - 42 -- xhtml_xpath: macro-code[2] + xhtml_xpath: p[9] +- mdx_blocks: + - 40 xhtml_type: code - mdx_blocks: - - 43 -- xhtml_xpath: p[10] + xhtml_xpath: macro-code[2] +- mdx_blocks: + - 42 xhtml_type: paragraph - mdx_blocks: - - 45 -- xhtml_xpath: ac:image[2] + xhtml_xpath: p[10] +- mdx_blocks: + - 44 xhtml_type: html_block - mdx_blocks: + xhtml_xpath: ac:image[2] +- mdx_blocks: - 46 -- xhtml_xpath: h3[3] xhtml_type: heading - mdx_blocks: + xhtml_xpath: h3[3] +- mdx_blocks: - 48 -- xhtml_xpath: p[11] xhtml_type: paragraph - mdx_blocks: - - 50 -- xhtml_xpath: p[12] + xhtml_xpath: p[11] +- mdx_blocks: [] xhtml_type: paragraph - mdx_blocks: + xhtml_xpath: p[12] +- mdx_blocks: - 52 -- xhtml_xpath: p[13] xhtml_type: paragraph - mdx_blocks: + xhtml_xpath: p[13] +- mdx_blocks: - 54 -- xhtml_xpath: macro-note[2] + - 55 xhtml_type: html_block - mdx_blocks: - - 56 -- xhtml_xpath: macro-code[3] + xhtml_xpath: macro-note[2] +- mdx_blocks: [] xhtml_type: code - mdx_blocks: - - 58 -- xhtml_xpath: ac:image[3] + xhtml_xpath: macro-code[3] +- mdx_blocks: + - 57 xhtml_type: html_block - mdx_blocks: - - 60 -- xhtml_xpath: p[14] + xhtml_xpath: ac:image[3] +- mdx_blocks: [] xhtml_type: paragraph - mdx_blocks: - - 61 -- xhtml_xpath: h3[4] + xhtml_xpath: p[14] +- mdx_blocks: + - 60 xhtml_type: heading - mdx_blocks: - - 63 -- xhtml_xpath: blockquote[2] + xhtml_xpath: h3[4] +- mdx_blocks: + - 62 xhtml_type: html_block - mdx_blocks: - - 66 -- xhtml_xpath: p[15] + xhtml_xpath: blockquote[2] +- mdx_blocks: + - 63 xhtml_type: paragraph - mdx_blocks: - - 68 -- xhtml_xpath: p[16] + xhtml_xpath: p[15] +- mdx_blocks: + - 65 xhtml_type: paragraph - mdx_blocks: - - 70 -- xhtml_xpath: macro-note[3] + xhtml_xpath: p[16] +- mdx_blocks: + - 67 xhtml_type: html_block - mdx_blocks: - - 72 - - 73 -- xhtml_xpath: p[17] + xhtml_xpath: macro-note[3] +- mdx_blocks: [] xhtml_type: paragraph - mdx_blocks: - - 76 -- xhtml_xpath: h2[3] + xhtml_xpath: p[17] +- mdx_blocks: + - 70 xhtml_type: heading - mdx_blocks: - - 78 -- xhtml_xpath: p[18] + xhtml_xpath: h2[3] +- mdx_blocks: + - 72 xhtml_type: paragraph - mdx_blocks: - - 80 -- xhtml_xpath: p[19] + xhtml_xpath: p[18] +- mdx_blocks: + - 74 xhtml_type: paragraph - mdx_blocks: - - 82 + xhtml_xpath: p[19] +- mdx_blocks: + - 76 + xhtml_type: list + xhtml_xpath: ul[2] +mdx_file: page.mdx +source_page_id: '1907294209' +version: 2 diff --git a/confluence-mdx/tests/reverse-sync/544112846/mapping.yaml b/confluence-mdx/tests/reverse-sync/544112846/mapping.yaml index 6a34f7cb3..0de724865 100644 --- a/confluence-mdx/tests/reverse-sync/544112846/mapping.yaml +++ b/confluence-mdx/tests/reverse-sync/544112846/mapping.yaml @@ -1,105 +1,104 @@ -version: 1 -source_page_id: '544112846' -generated_at: '2026-02-14T15:15:02Z' -mdx_file: allowed-zones.mdx +lost_info: + filenames: + - normalized: screenshot-20240730-220112.png + original: 스크린샷 2024-07-30 오후 10.01.12.png mappings: -- xhtml_xpath: h2[1] - xhtml_type: heading - mdx_blocks: - - 4 -- xhtml_xpath: p[1] - xhtml_type: paragraph - mdx_blocks: +- mdx_blocks: - 6 -- xhtml_xpath: macro-info[1] - xhtml_type: html_block - mdx_blocks: + xhtml_type: heading + xhtml_xpath: h2[1] +- mdx_blocks: - 8 -- xhtml_xpath: p[2] xhtml_type: paragraph - mdx_blocks: + xhtml_xpath: p[1] +- mdx_blocks: - 10 -- xhtml_xpath: h2[2] + xhtml_type: html_block + xhtml_xpath: macro-info[1] +- mdx_blocks: [] + xhtml_type: paragraph + xhtml_xpath: p[2] +- mdx_blocks: + - 13 xhtml_type: heading - mdx_blocks: - - 11 -- xhtml_xpath: p[3] + xhtml_xpath: h2[2] +- mdx_blocks: + - 15 xhtml_type: paragraph - mdx_blocks: - - 14 -- xhtml_xpath: macro-info[2] + xhtml_xpath: p[3] +- mdx_blocks: + - 17 xhtml_type: html_block - mdx_blocks: - - 16 -- xhtml_xpath: ac:image[1] + xhtml_xpath: macro-info[2] +- mdx_blocks: + - 19 xhtml_type: html_block - mdx_blocks: - - 18 -- xhtml_xpath: h2[3] + xhtml_xpath: ac:image[1] +- mdx_blocks: + - 21 xhtml_type: heading - mdx_blocks: - - 19 -- xhtml_xpath: p[4] + xhtml_xpath: h2[3] +- mdx_blocks: + - 23 xhtml_type: paragraph - mdx_blocks: - - 21 -- xhtml_xpath: ac:image[2] + xhtml_xpath: p[4] +- mdx_blocks: + - 25 xhtml_type: html_block - mdx_blocks: - - 23 -- xhtml_xpath: h3[1] + xhtml_xpath: ac:image[2] +- mdx_blocks: + - 27 xhtml_type: heading - mdx_blocks: - - 25 -- xhtml_xpath: p[5] + xhtml_xpath: h3[1] +- mdx_blocks: + - 29 xhtml_type: paragraph - mdx_blocks: - - 27 -- xhtml_xpath: ul[1] + xhtml_xpath: p[5] +- mdx_blocks: + - 31 xhtml_type: list - mdx_blocks: - - 29 -- xhtml_xpath: macro-info[3] + xhtml_xpath: ul[1] +- mdx_blocks: + - 33 xhtml_type: html_block - mdx_blocks: - - 31 -- xhtml_xpath: p[6] + xhtml_xpath: macro-info[3] +- mdx_blocks: [] xhtml_type: paragraph - mdx_blocks: - - 33 -- xhtml_xpath: h2[4] + xhtml_xpath: p[6] +- mdx_blocks: + - 36 xhtml_type: heading - mdx_blocks: - - 35 -- xhtml_xpath: p[7] + xhtml_xpath: h2[4] +- mdx_blocks: + - 38 xhtml_type: paragraph - mdx_blocks: - - 36 -- xhtml_xpath: ac:image[3] + xhtml_xpath: p[7] +- mdx_blocks: + - 40 xhtml_type: html_block - mdx_blocks: - - 37 -- xhtml_xpath: ul[2] + xhtml_xpath: ac:image[3] +- mdx_blocks: + - 42 xhtml_type: list - mdx_blocks: - - 40 -- xhtml_xpath: p[8] + xhtml_xpath: ul[2] +- mdx_blocks: [] xhtml_type: paragraph - mdx_blocks: - - 42 -- xhtml_xpath: h2[5] + xhtml_xpath: p[8] +- mdx_blocks: + - 45 xhtml_type: heading - mdx_blocks: - - 44 -- xhtml_xpath: p[9] + xhtml_xpath: h2[5] +- mdx_blocks: + - 47 xhtml_type: paragraph - mdx_blocks: - - 46 -- xhtml_xpath: ac:image[4] - xhtml_type: html_block - mdx_blocks: + xhtml_xpath: p[9] +- mdx_blocks: - 49 -- xhtml_xpath: p[10] + xhtml_type: html_block + xhtml_xpath: ac:image[4] +- mdx_blocks: [] xhtml_type: paragraph - mdx_blocks: - - 51 + xhtml_xpath: p[10] +mdx_file: page.mdx +source_page_id: '544112846' +version: 2 diff --git a/confluence-mdx/tests/reverse-sync/544376183/mapping.yaml b/confluence-mdx/tests/reverse-sync/544376183/mapping.yaml index 83c5b5a5d..e59a79dfa 100644 --- a/confluence-mdx/tests/reverse-sync/544376183/mapping.yaml +++ b/confluence-mdx/tests/reverse-sync/544376183/mapping.yaml @@ -1,73 +1,71 @@ -version: 1 -source_page_id: '544376183' -generated_at: '2026-02-14T15:15:06Z' -mdx_file: integrating-with-aws-sso.mdx mappings: -- xhtml_xpath: h2[1] - xhtml_type: heading - mdx_blocks: - - 2 -- xhtml_xpath: p[1] - xhtml_type: paragraph - mdx_blocks: +- mdx_blocks: - 4 -- xhtml_xpath: h2[2] xhtml_type: heading - mdx_blocks: + xhtml_xpath: h2[1] +- mdx_blocks: - 6 -- xhtml_xpath: ac:image[1] - xhtml_type: html_block - mdx_blocks: + xhtml_type: paragraph + xhtml_xpath: p[1] +- mdx_blocks: - 8 -- xhtml_xpath: ol[1] + xhtml_type: heading + xhtml_xpath: h2[2] +- mdx_blocks: [] + xhtml_type: html_block + xhtml_xpath: ac:image[1] +- mdx_blocks: + - 12 xhtml_type: list - mdx_blocks: - - 10 -- xhtml_xpath: p[2] + xhtml_xpath: ol[1] +- mdx_blocks: [] xhtml_type: paragraph - mdx_blocks: - - 12 -- xhtml_xpath: h2[3] - xhtml_type: heading - mdx_blocks: + xhtml_xpath: p[2] +- mdx_blocks: - 15 -- xhtml_xpath: ac:image[2] + xhtml_type: heading + xhtml_xpath: h2[3] +- mdx_blocks: [] xhtml_type: html_block - mdx_blocks: - - 17 -- xhtml_xpath: ol[2] - xhtml_type: list - mdx_blocks: + xhtml_xpath: ac:image[2] +- mdx_blocks: - 19 -- xhtml_xpath: table[1] - xhtml_type: table - mdx_blocks: + xhtml_type: list + xhtml_xpath: ol[2] +- mdx_blocks: - 21 -- xhtml_xpath: p[3] - xhtml_type: paragraph - mdx_blocks: + xhtml_type: table + xhtml_xpath: table[1] +- mdx_blocks: - 23 -- xhtml_xpath: h2[4] - xhtml_type: heading - mdx_blocks: + xhtml_type: paragraph + xhtml_xpath: p[3] +- mdx_blocks: - 25 -- xhtml_xpath: ac:image[3] - xhtml_type: html_block - mdx_blocks: + xhtml_type: heading + xhtml_xpath: h2[4] +- mdx_blocks: - 27 -- xhtml_xpath: ol[3] - xhtml_type: list - mdx_blocks: + xhtml_type: html_block + xhtml_xpath: ac:image[3] +- mdx_blocks: - 29 -- xhtml_xpath: h2[5] - xhtml_type: heading - mdx_blocks: + xhtml_type: list + xhtml_xpath: ol[3] +- mdx_blocks: - 31 -- xhtml_xpath: ac:image[4] + xhtml_type: heading + xhtml_xpath: h2[5] +- mdx_blocks: [] xhtml_type: html_block - mdx_blocks: - - 33 -- xhtml_xpath: p[4] - xhtml_type: paragraph - mdx_blocks: + xhtml_xpath: ac:image[4] +- mdx_blocks: - 35 + xhtml_type: paragraph + xhtml_xpath: p[4] +- mdx_blocks: [] + xhtml_type: paragraph + xhtml_xpath: p[5] +mdx_file: page.mdx +source_page_id: '544376183' +version: 2 diff --git a/confluence-mdx/tests/reverse-sync/544376265/mapping.yaml b/confluence-mdx/tests/reverse-sync/544376265/mapping.yaml index 51eaed3e9..bce6ec0e1 100644 --- a/confluence-mdx/tests/reverse-sync/544376265/mapping.yaml +++ b/confluence-mdx/tests/reverse-sync/544376265/mapping.yaml @@ -1,45 +1,55 @@ -version: 1 -source_page_id: '544376265' -generated_at: '2026-02-14T15:15:08Z' -mdx_file: activating-provisioning.mdx +lost_info: + adf_extensions: + - panel_type: note + raw: 'note

SCIM + 전용 토큰 안내

  1. Access Token은 Generate Token 버튼을 + 통해 생성할 수 있으며, 최대 2개까지만 발급 가능합니다.

  2. 토큰 값은 생성 당시 1회에 한해 노출되며 이후에는 + 노출되지 않습니다.

  3. SCIM API전용으로만 사용 가능하며 /api/scim/v2 외 다른 엔드포인트 호출이 + 불가합니다.

  4. 새로 생성된 토큰은 발급일 yyyy-MM-dd 기준으로 1년까지만 유효합니다.

    1. 만료일이 + 도래하면 토큰은 Expired 처리되어 SCIM API 이용이 + 불가합니다.

    2. 관리자는 만료일이 도달하기 이전에 신규 토큰을 발급하여 기존의 IdP에 설정된 토큰을 변경해주어야 + 합니다.

  5. 토큰을 선택하고 DELETE 버튼을 클릭하여 토큰 삭제가 + 가능합니다.

  6. 만일 관리자가 토큰을 발급받았던 상태에서 Provisioning을 비활성화 했다가 다시 활성화 했을 + 경우, 기존의 토큰은 모두 비활성화 타이밍에 삭제 처리되므로, 관리자는 새로 유효한 토큰을 발급해야 합니다.

' mappings: -- xhtml_xpath: h2[1] +- mdx_blocks: + - 6 xhtml_type: heading - mdx_blocks: - - 4 -- xhtml_xpath: p[1] + xhtml_xpath: h2[1] +- mdx_blocks: + - 8 xhtml_type: paragraph - mdx_blocks: - - 6 -- xhtml_xpath: p[2] + xhtml_xpath: p[1] +- mdx_blocks: [] xhtml_type: paragraph - mdx_blocks: - - 8 -- xhtml_xpath: h2[2] - xhtml_type: heading - mdx_blocks: + xhtml_xpath: p[2] +- mdx_blocks: - 11 -- xhtml_xpath: ul[1] - xhtml_type: list - mdx_blocks: + xhtml_type: heading + xhtml_xpath: h2[2] +- mdx_blocks: - 13 -- xhtml_xpath: p[3] + xhtml_type: list + xhtml_xpath: ul[1] +- mdx_blocks: [] xhtml_type: paragraph - mdx_blocks: + xhtml_xpath: p[3] +- mdx_blocks: - 16 -- xhtml_xpath: h2[3] xhtml_type: heading - mdx_blocks: + xhtml_xpath: h2[3] +- mdx_blocks: - 18 -- xhtml_xpath: ac:image[1] xhtml_type: html_block - mdx_blocks: + xhtml_xpath: ac:image[1] +- mdx_blocks: - 20 -- xhtml_xpath: ol[1] xhtml_type: list - mdx_blocks: + xhtml_xpath: ol[1] +- mdx_blocks: - 22 -- xhtml_xpath: ac:adf-extension[1] xhtml_type: html_block - mdx_blocks: - - 23 + xhtml_xpath: ac:adf-extension[1] +mdx_file: page.mdx +source_page_id: '544376265' +version: 2 diff --git a/confluence-mdx/tests/reverse-sync/544379393/mapping.yaml b/confluence-mdx/tests/reverse-sync/544379393/mapping.yaml index 2a7faca1e..6c5249698 100644 --- a/confluence-mdx/tests/reverse-sync/544379393/mapping.yaml +++ b/confluence-mdx/tests/reverse-sync/544379393/mapping.yaml @@ -1,55 +1,65 @@ -version: 1 -source_page_id: '544379393' -generated_at: '2026-02-14T15:15:10Z' -mdx_file: integrating-with-syslog.mdx +lost_info: + emoticons: + - emoji_id: c6944598-13c8-42e8-b810-62f2dd0f3ae2 + fallback: ':토글off:' + name: blue-star + raw: + shortname: ':토글off:' + filenames: + - normalized: screenshot-20240723-093628.png + original: 스크린샷 2024-07-23 오전 9.36.28.png mappings: -- xhtml_xpath: h2[1] - xhtml_type: heading - mdx_blocks: - - 4 -- xhtml_xpath: p[1] - xhtml_type: paragraph - mdx_blocks: +- mdx_blocks: - 6 -- xhtml_xpath: ul[1] - xhtml_type: list - mdx_blocks: + xhtml_type: heading + xhtml_xpath: h2[1] +- mdx_blocks: - 8 -- xhtml_xpath: p[2] xhtml_type: paragraph - mdx_blocks: + xhtml_xpath: p[1] +- mdx_blocks: - 10 -- xhtml_xpath: h2[2] - xhtml_type: heading - mdx_blocks: - - 13 -- xhtml_xpath: ol[1] xhtml_type: list - mdx_blocks: + xhtml_xpath: ul[1] +- mdx_blocks: [] + xhtml_type: paragraph + xhtml_xpath: p[2] +- mdx_blocks: + - 13 + xhtml_type: heading + xhtml_xpath: h2[2] +- mdx_blocks: - 15 -- xhtml_xpath: macro-note[1] - xhtml_type: html_block - mdx_blocks: - - 17 - - 18 -- xhtml_xpath: ol[2] xhtml_type: list - mdx_blocks: - - 20 -- xhtml_xpath: ac:image[1] + xhtml_xpath: ol[1] +- mdx_blocks: + - 17 xhtml_type: html_block - mdx_blocks: - - 22 -- xhtml_xpath: ol[3] + xhtml_xpath: macro-note[1] +- mdx_blocks: + - 19 xhtml_type: list - mdx_blocks: - - 24 -- xhtml_xpath: macro-info[1] + xhtml_xpath: ol[2] +- mdx_blocks: + - 21 xhtml_type: html_block - mdx_blocks: - - 26 + xhtml_xpath: ac:image[1] +- mdx_blocks: + - 23 + xhtml_type: list + xhtml_xpath: ol[3] +- mdx_blocks: + - 25 - 27 -- xhtml_xpath: ac:image[2] xhtml_type: html_block - mdx_blocks: - - 29 + xhtml_xpath: macro-info[1] +- mdx_blocks: [] + xhtml_type: html_block + xhtml_xpath: ac:image[2] +- mdx_blocks: [] + xhtml_type: paragraph + xhtml_xpath: p[3] +mdx_file: page.mdx +source_page_id: '544379393' +version: 2 diff --git a/confluence-mdx/tests/reverse-sync/544383693/mapping.yaml b/confluence-mdx/tests/reverse-sync/544383693/mapping.yaml index e79eaf4bc..10fe83acd 100644 --- a/confluence-mdx/tests/reverse-sync/544383693/mapping.yaml +++ b/confluence-mdx/tests/reverse-sync/544383693/mapping.yaml @@ -1,33 +1,32 @@ -version: 1 -source_page_id: '544383693' -generated_at: '2026-02-14T15:15:51Z' -mdx_file: pod-session-recordings.mdx mappings: -- xhtml_xpath: h2[1] +- mdx_blocks: + - 0 xhtml_type: heading - mdx_blocks: + xhtml_xpath: h2[1] +- mdx_blocks: - 2 -- xhtml_xpath: p[1] xhtml_type: paragraph - mdx_blocks: + xhtml_xpath: p[1] +- mdx_blocks: - 4 -- xhtml_xpath: h2[2] xhtml_type: heading - mdx_blocks: + xhtml_xpath: h2[2] +- mdx_blocks: - 6 -- xhtml_xpath: ac:image[1] xhtml_type: html_block - mdx_blocks: + xhtml_xpath: ac:image[1] +- mdx_blocks: - 8 -- xhtml_xpath: ol[1] xhtml_type: list - mdx_blocks: + xhtml_xpath: ol[1] +- mdx_blocks: - 10 -- xhtml_xpath: h2[3] xhtml_type: heading - mdx_blocks: + xhtml_xpath: h2[3] +- mdx_blocks: - 12 -- xhtml_xpath: ol[2] xhtml_type: list - mdx_blocks: - - 14 + xhtml_xpath: ol[2] +mdx_file: page.mdx +source_page_id: '' +version: 2 diff --git a/confluence-mdx/tests/reverse-sync/568852692/mapping.yaml b/confluence-mdx/tests/reverse-sync/568852692/mapping.yaml index 1f06d92b5..73eeba9de 100644 --- a/confluence-mdx/tests/reverse-sync/568852692/mapping.yaml +++ b/confluence-mdx/tests/reverse-sync/568852692/mapping.yaml @@ -1,77 +1,71 @@ -version: 1 -source_page_id: '568852692' -generated_at: '2026-02-14T15:15:18Z' -mdx_file: documentdb-specific-guide.mdx mappings: -- xhtml_xpath: macro-info[1] +- mdx_blocks: + - 6 xhtml_type: html_block - mdx_blocks: - - 4 -- xhtml_xpath: macro-toc[1] + xhtml_xpath: macro-info[1] +- mdx_blocks: [] xhtml_type: html_block - mdx_blocks: - - 6 -- xhtml_xpath: h2[1] + xhtml_xpath: macro-toc[1] +- mdx_blocks: + - 8 xhtml_type: heading - mdx_blocks: - - 7 -- xhtml_xpath: p[1] + xhtml_xpath: h2[1] +- mdx_blocks: + - 10 xhtml_type: paragraph - mdx_blocks: - - 9 -- xhtml_xpath: p[2] + xhtml_xpath: p[1] +- mdx_blocks: + - 12 xhtml_type: paragraph - mdx_blocks: - - 11 -- xhtml_xpath: ac:image[1] + xhtml_xpath: p[2] +- mdx_blocks: [] xhtml_type: html_block - mdx_blocks: - - 13 -- xhtml_xpath: h2[2] + xhtml_xpath: ac:image[1] +- mdx_blocks: + - 16 xhtml_type: heading - mdx_blocks: - - 15 -- xhtml_xpath: p[3] + xhtml_xpath: h2[2] +- mdx_blocks: + - 18 xhtml_type: paragraph - mdx_blocks: - - 17 -- xhtml_xpath: h3[1] + xhtml_xpath: p[3] +- mdx_blocks: + - 20 xhtml_type: heading - mdx_blocks: - - 19 -- xhtml_xpath: p[4] + xhtml_xpath: h3[1] +- mdx_blocks: + - 22 xhtml_type: paragraph - mdx_blocks: - - 21 -- xhtml_xpath: ol[1] + xhtml_xpath: p[4] +- mdx_blocks: + - 24 xhtml_type: list - mdx_blocks: - - 23 -- xhtml_xpath: ac:image[2] + xhtml_xpath: ol[1] +- mdx_blocks: [] xhtml_type: html_block - mdx_blocks: - - 25 -- xhtml_xpath: ol[2] + xhtml_xpath: ac:image[2] +- mdx_blocks: + - 28 xhtml_type: list - mdx_blocks: - - 27 -- xhtml_xpath: ac:image[3] + xhtml_xpath: ol[2] +- mdx_blocks: [] xhtml_type: html_block - mdx_blocks: - - 29 -- xhtml_xpath: h3[2] + xhtml_xpath: ac:image[3] +- mdx_blocks: + - 32 xhtml_type: heading - mdx_blocks: - - 31 -- xhtml_xpath: ol[3] + xhtml_xpath: h3[2] +- mdx_blocks: + - 34 xhtml_type: list - mdx_blocks: - - 33 -- xhtml_xpath: ac:image[4] + xhtml_xpath: ol[3] +- mdx_blocks: [] xhtml_type: html_block - mdx_blocks: - - 35 -- xhtml_xpath: ol[4] + xhtml_xpath: ac:image[4] +- mdx_blocks: + - 38 xhtml_type: list - mdx_blocks: - - 37 + xhtml_xpath: ol[4] +mdx_file: page.mdx +source_page_id: '568852692' +version: 2 diff --git a/confluence-mdx/tests/reverse-sync/862093313/mapping.yaml b/confluence-mdx/tests/reverse-sync/862093313/mapping.yaml index 77a690f21..0cf207961 100644 --- a/confluence-mdx/tests/reverse-sync/862093313/mapping.yaml +++ b/confluence-mdx/tests/reverse-sync/862093313/mapping.yaml @@ -1,197 +1,207 @@ -version: 1 -source_page_id: '862093313' -generated_at: '2026-02-14T15:16:04Z' -mdx_file: system-architecture-and-network-access-control.mdx mappings: -- xhtml_xpath: p[1] +- mdx_blocks: [] xhtml_type: paragraph - mdx_blocks: - - 2 -- xhtml_xpath: macro-toc[1] + xhtml_xpath: p[1] +- mdx_blocks: [] xhtml_type: html_block - mdx_blocks: + xhtml_xpath: macro-toc[1] +- mdx_blocks: - 5 -- xhtml_xpath: h2[1] xhtml_type: heading - mdx_blocks: + xhtml_xpath: h2[1] +- mdx_blocks: - 7 -- xhtml_xpath: p[2] xhtml_type: paragraph - mdx_blocks: + xhtml_xpath: p[2] +- mdx_blocks: - 9 -- xhtml_xpath: h3[1] xhtml_type: heading - mdx_blocks: + xhtml_xpath: h3[1] +- mdx_blocks: - 11 -- xhtml_xpath: p[3] xhtml_type: paragraph - mdx_blocks: + xhtml_xpath: p[3] +- mdx_blocks: - 13 -- xhtml_xpath: ac:image[1] xhtml_type: html_block - mdx_blocks: + xhtml_xpath: ac:image[1] +- mdx_blocks: [] + xhtml_type: paragraph + xhtml_xpath: p[4] +- mdx_blocks: - 15 -- xhtml_xpath: p[4] xhtml_type: paragraph - mdx_blocks: + xhtml_xpath: p[5] +- mdx_blocks: - 17 -- xhtml_xpath: p[5] - xhtml_type: paragraph - mdx_blocks: - - 19 -- xhtml_xpath: h3[2] xhtml_type: heading - mdx_blocks: + xhtml_xpath: h3[2] +- mdx_blocks: + - 19 + xhtml_type: paragraph + xhtml_xpath: p[6] +- mdx_blocks: - 21 -- xhtml_xpath: p[6] xhtml_type: paragraph - mdx_blocks: + xhtml_xpath: p[7] +- mdx_blocks: - 23 -- xhtml_xpath: p[7] - xhtml_type: paragraph - mdx_blocks: - - 25 -- xhtml_xpath: h3[3] xhtml_type: heading - mdx_blocks: + xhtml_xpath: h3[3] +- mdx_blocks: + - 25 + xhtml_type: paragraph + xhtml_xpath: p[8] +- mdx_blocks: - 27 -- xhtml_xpath: p[8] xhtml_type: paragraph - mdx_blocks: + xhtml_xpath: p[9] +- mdx_blocks: - 29 -- xhtml_xpath: p[9] - xhtml_type: paragraph - mdx_blocks: - - 31 -- xhtml_xpath: h3[4] xhtml_type: heading - mdx_blocks: + xhtml_xpath: h3[4] +- mdx_blocks: + - 31 + xhtml_type: paragraph + xhtml_xpath: p[10] +- mdx_blocks: - 33 -- xhtml_xpath: p[10] xhtml_type: paragraph - mdx_blocks: + xhtml_xpath: p[11] +- mdx_blocks: - 35 -- xhtml_xpath: p[11] - xhtml_type: paragraph - mdx_blocks: - - 37 -- xhtml_xpath: ul[1] xhtml_type: list - mdx_blocks: - - 39 -- xhtml_xpath: h3[5] + xhtml_xpath: ul[1] +- mdx_blocks: + - 37 xhtml_type: heading - mdx_blocks: + xhtml_xpath: h3[5] +- mdx_blocks: + - 39 + xhtml_type: paragraph + xhtml_xpath: p[12] +- mdx_blocks: - 41 -- xhtml_xpath: p[12] xhtml_type: paragraph - mdx_blocks: + xhtml_xpath: p[13] +- mdx_blocks: - 43 -- xhtml_xpath: p[13] - xhtml_type: paragraph - mdx_blocks: - - 45 -- xhtml_xpath: ul[2] xhtml_type: list - mdx_blocks: - - 47 -- xhtml_xpath: h3[6] + xhtml_xpath: ul[2] +- mdx_blocks: + - 45 xhtml_type: heading - mdx_blocks: - - 49 -- xhtml_xpath: p[14] + xhtml_xpath: h3[6] +- mdx_blocks: + - 47 xhtml_type: paragraph - mdx_blocks: - - 51 -- xhtml_xpath: h3[7] + xhtml_xpath: p[14] +- mdx_blocks: + - 49 xhtml_type: heading - mdx_blocks: - - 53 -- xhtml_xpath: p[15] + xhtml_xpath: h3[7] +- mdx_blocks: + - 51 xhtml_type: paragraph - mdx_blocks: - - 55 -- xhtml_xpath: h3[8] + xhtml_xpath: p[15] +- mdx_blocks: + - 53 xhtml_type: heading - mdx_blocks: - - 57 -- xhtml_xpath: p[16] + xhtml_xpath: h3[8] +- mdx_blocks: + - 55 xhtml_type: paragraph - mdx_blocks: - - 59 -- xhtml_xpath: p[17] + xhtml_xpath: p[16] +- mdx_blocks: [] xhtml_type: paragraph - mdx_blocks: - - 61 -- xhtml_xpath: h2[2] + xhtml_xpath: p[17] +- mdx_blocks: + - 57 xhtml_type: heading - mdx_blocks: - - 63 -- xhtml_xpath: h3[9] + xhtml_xpath: h2[2] +- mdx_blocks: + - 59 xhtml_type: heading - mdx_blocks: - - 65 -- xhtml_xpath: p[18] + xhtml_xpath: h3[9] +- mdx_blocks: + - 61 xhtml_type: paragraph - mdx_blocks: - - 67 -- xhtml_xpath: ul[3] + xhtml_xpath: p[18] +- mdx_blocks: + - 63 xhtml_type: list - mdx_blocks: + xhtml_xpath: ul[3] +- mdx_blocks: + - 65 + xhtml_type: heading + xhtml_xpath: h3[10] +- mdx_blocks: + - 67 + xhtml_type: table + xhtml_xpath: table[1] +- mdx_blocks: - 69 -- xhtml_xpath: h3[10] xhtml_type: heading - mdx_blocks: + xhtml_xpath: h3[11] +- mdx_blocks: - 71 -- xhtml_xpath: table[1] - xhtml_type: table - mdx_blocks: + xhtml_type: paragraph + xhtml_xpath: p[19] +- mdx_blocks: - 73 -- xhtml_xpath: h3[11] xhtml_type: heading - mdx_blocks: + xhtml_xpath: h3[12] +- mdx_blocks: - 75 -- xhtml_xpath: p[19] - xhtml_type: paragraph - mdx_blocks: + xhtml_type: table + xhtml_xpath: table[2] +- mdx_blocks: - 77 -- xhtml_xpath: h3[12] xhtml_type: heading - mdx_blocks: + xhtml_xpath: h3[13] +- mdx_blocks: - 79 -- xhtml_xpath: table[2] xhtml_type: table - mdx_blocks: + xhtml_xpath: table[3] +- mdx_blocks: - 81 -- xhtml_xpath: h3[13] xhtml_type: heading - mdx_blocks: + xhtml_xpath: h3[14] +- mdx_blocks: - 83 -- xhtml_xpath: table[3] xhtml_type: table - mdx_blocks: + xhtml_xpath: table[4] +- mdx_blocks: - 85 -- xhtml_xpath: h3[14] xhtml_type: heading - mdx_blocks: + xhtml_xpath: h3[15] +- mdx_blocks: - 87 -- xhtml_xpath: table[4] xhtml_type: table - mdx_blocks: + xhtml_xpath: table[5] +- mdx_blocks: - 89 -- xhtml_xpath: h3[15] xhtml_type: heading - mdx_blocks: + xhtml_xpath: h3[16] +- mdx_blocks: - 91 -- xhtml_xpath: table[5] xhtml_type: table - mdx_blocks: + xhtml_xpath: table[6] +- mdx_blocks: - 93 -- xhtml_xpath: h3[16] xhtml_type: heading - mdx_blocks: + xhtml_xpath: h2[3] +- mdx_blocks: - 95 -- xhtml_xpath: table[6] - xhtml_type: table - mdx_blocks: + xhtml_type: paragraph + xhtml_xpath: p[20] +- mdx_blocks: - 97 + xhtml_type: table + xhtml_xpath: table[7] +- mdx_blocks: [] + xhtml_type: paragraph + xhtml_xpath: p[21] +mdx_file: page.mdx +source_page_id: '862093313' +version: 2 diff --git a/confluence-mdx/tests/reverse-sync/920944732/mapping.yaml b/confluence-mdx/tests/reverse-sync/920944732/mapping.yaml index 470a63e83..b14641331 100644 --- a/confluence-mdx/tests/reverse-sync/920944732/mapping.yaml +++ b/confluence-mdx/tests/reverse-sync/920944732/mapping.yaml @@ -1,49 +1,58 @@ -version: 1 -source_page_id: '920944732' -generated_at: '2026-02-14T15:15:04Z' -mdx_file: password-change-enforcement-and-account-deletion-feature-for-qp-admin-default-account.mdx +lost_info: + filenames: + - normalized: Screenshot-2025-04-09-at-7.12.08-PM.png + original: Screenshot 2025-04-09 at 7.12.08 PM.png + - normalized: Screenshot-2025-04-09-at-7.14.25-PM.png + original: Screenshot 2025-04-09 at 7.14.25 PM.png + - normalized: Screenshot-2025-04-09-at-7.16.29-PM.png + original: Screenshot 2025-04-09 at 7.16.29 PM.png + - normalized: Screenshot-2025-04-09-at-7.18.40-PM.png + original: Screenshot 2025-04-09 at 7.18.40 PM.png mappings: -- xhtml_xpath: h2[1] - xhtml_type: heading - mdx_blocks: - - 4 -- xhtml_xpath: p[1] - xhtml_type: paragraph - mdx_blocks: +- mdx_blocks: - 6 -- xhtml_xpath: h2[2] xhtml_type: heading - mdx_blocks: + xhtml_xpath: h2[1] +- mdx_blocks: - 8 -- xhtml_xpath: ul[1] - xhtml_type: list - mdx_blocks: + xhtml_type: paragraph + xhtml_xpath: p[1] +- mdx_blocks: - 10 -- xhtml_xpath: h2[3] xhtml_type: heading - mdx_blocks: + xhtml_xpath: h2[2] +- mdx_blocks: - 12 -- xhtml_xpath: ol[1] xhtml_type: list - mdx_blocks: + xhtml_xpath: ul[1] +- mdx_blocks: - 14 -- xhtml_xpath: macro-note[1] - xhtml_type: html_block - mdx_blocks: - - 16 -- xhtml_xpath: h2[4] xhtml_type: heading - mdx_blocks: + xhtml_xpath: h2[3] +- mdx_blocks: + - 16 + xhtml_type: list + xhtml_xpath: ol[1] +- mdx_blocks: - 18 -- xhtml_xpath: ul[2] + xhtml_type: html_block + xhtml_xpath: macro-note[1] +- mdx_blocks: + - 20 + xhtml_type: heading + xhtml_xpath: h2[4] +- mdx_blocks: + - 22 xhtml_type: list - mdx_blocks: - - 19 -- xhtml_xpath: h2[5] + xhtml_xpath: ul[2] +- mdx_blocks: + - 24 xhtml_type: heading - mdx_blocks: - - 20 -- xhtml_xpath: ol[2] + xhtml_xpath: h2[5] +- mdx_blocks: + - 26 xhtml_type: list - mdx_blocks: - - 22 + xhtml_xpath: ol[2] +mdx_file: page.mdx +source_page_id: '920944732' +version: 2 diff --git a/confluence-mdx/tests/reverse-sync/pages.yaml b/confluence-mdx/tests/reverse-sync/pages.yaml index 143c8ed3d..0e5891163 100644 --- a/confluence-mdx/tests/reverse-sync/pages.yaml +++ b/confluence-mdx/tests/reverse-sync/pages.yaml @@ -2,7 +2,7 @@ # 출처: reverse_sync_verify_fix_proofread-mdx.02140728.log # 브랜치: fix/proofread-mdx (original: main, improved: fix/proofread-mdx) # -# 현재 결과 (2026-02-15): 15 failed, 2 passed / 17 total +# 현재 결과 (2026-02-18): 11 failed, 6 passed / 17 total # make test-reverse-sync-bugs 로 실행 testcases: @@ -116,12 +116,12 @@ testcases: 568852692: failure_type: 11 severity: medium - title: "교정 내용 원복 — 띄어쓰기 (DataGrip 등)" + title: "교정 내용 원복 — 띄어쓰기 (활성화 되어→활성화되어)" description: > MDX 교정 시 수정한 띄어쓰기가 XHTML 원본 기준으로 되돌아감. - 예: DataGrip등 → DataGrip 등 (교정) → DataGrip등 (원복) + 예: 활성화 되어 → 활성화되어 (교정) → 활성화 되어 (원복) mdx_path: administrator-manual/databases/connection-management/db-connections/documentdb-specific-guide.mdx - expected_status: fail + expected_status: pass 954172219: failure_type: 11 @@ -136,69 +136,69 @@ testcases: 544112846: failure_type: 11 severity: medium - title: "교정 내용 원복 — 어미 변경 (가능하도록→구성할 수 있도록)" + title: "교정 내용 원복 — 용어 변경 (출력됩니다→표시됩니다)" description: > - 어미·표현 수정이 XHTML 원본 기준으로 되돌아감. - 예: 다중 설정이 가능하도록 → 다중으로 구성할 수 있도록 + 용어 교정이 XHTML 원본 기준으로 되돌아감. + 예: 출력됩니다 → 표시됩니다 (교정) → 출력됩니다 (원복) mdx_path: administrator-manual/general/company-management/allowed-zones.mdx expected_status: fail 544376183: failure_type: 11 severity: medium - title: "교정 내용 원복 — 경어체 통일 (진행하여 주시기 바랍니다)" + title: "교정 내용 원복 — 띄어쓰기 (붙여넣기합니다→붙여 넣습니다)" description: > - 경어체 교정이 XHTML 원본 기준으로 되돌아감. - 예: 진행하여 주시기 바랍니다 → 진행하기 바랍니다 + 띄어쓰기 교정이 XHTML 원본 기준으로 되돌아감. + 예: 붙여넣기합니다 → 붙여 넣습니다 (교정) → 붙여넣기합니다 (원복) mdx_path: administrator-manual/general/user-management/authentication/integrating-with-aws-sso.mdx expected_status: fail 920944732: failure_type: 11 severity: medium - title: "교정 내용 원복 — 띄어쓰기 (Static IP삭제하기)" + title: "교정 내용 원복 — 조사 누락 (삭제 버튼 비활성화→삭제 버튼이 비활성화)" description: > - MDX 교정 시 수정한 띄어쓰기가 XHTML 원본 기준으로 되돌아감. - 예: Static IP삭제하기 → Static IP 삭제하기 + 조사 추가 교정이 XHTML 원본 기준으로 되돌아감. + 예: 삭제 버튼 비활성화 됩니다 → 삭제 버튼이 비활성화됩니다 (교정) mdx_path: administrator-manual/general/user-management/users/password-change-enforcement-and-account-deletion-feature-for-qp-admin-default-account.mdx - expected_status: fail + expected_status: pass 1177321474: failure_type: 11 severity: medium - title: "교정 내용 원복 — 어미 변경 (참조하여 주세요)" + title: "교정 내용 원복 — 경어체 통일 (참고하십시오→참조하세요)" description: > - 어미 교정이 XHTML 원본 기준으로 되돌아감. - 예: 참조하여 주세요 → 참조해 주세요 + 경어체 교정이 XHTML 원본 기준으로 되돌아감. + 예: 참고하십시오 → 참조하세요 (교정) mdx_path: installation/installation/installation-guide-setupv2sh.mdx - expected_status: fail + expected_status: pass 1907294209: failure_type: 11 severity: medium - title: "교정 내용 원복 — 조사 띄어쓰기 (QueryPie ACP 를)" + title: "교정 내용 원복 — 어휘·표현 변경 (갈음하여→대체하여, 주의하여→주의해)" description: > - 조사 붙여쓰기 교정이 XHTML 원본 기준으로 되돌아감. - 예: QueryPie ACP 를 → QueryPie ACP를 + 어휘·표현 교정이 XHTML 원본 기준으로 되돌아감. + 예: 갈음하여 → 대체하여, 주의하여 주세요 → 주의해 주세요 mdx_path: installation/post-installation-setup.mdx expected_status: fail 862093313: failure_type: 11 severity: medium - title: "교정 내용 원복 — 어휘 변경 (갈음하여)" + title: "교정 내용 원복 — 조사 띄어쓰기 (User 의→User의)" description: > - 어휘 교정이 XHTML 원본 기준으로 되돌아감. - 예: 갈음하여 → 대체하여 + 조사 붙여쓰기 교정이 XHTML 원본 기준으로 되돌아감. + 예: User 의 → User의 (교정) → User 의 (원복) mdx_path: installation/system-architecture-and-network-access-control.mdx expected_status: fail 1297383451: failure_type: 11 severity: medium - title: "교정 내용 원복 — 날짜 형식 (Aug 29, 2025)" + title: "교정 내용 원복 — 조사 띄어쓰기 (MySQL 을→MySQL을)" description: > - 날짜 형식 교정이 XHTML 원본 기준으로 되돌아감. - 예: Aug 29, 2025 → 2025년 08월 29일 + 조사 붙여쓰기 교정이 XHTML 원본 기준으로 되돌아감. + 예: MySQL 을 → MySQL을 (교정) → MySQL 을 (원복) mdx_path: installation/prerequisites/configuring-rootless-mode-with-podman.mdx expected_status: fail