MongoDB는 구성 파일에서 확장 지시문을 사용하여 외부 소스 값을 로드하는 기능을 지원합니다. 확장 지시문은 특정 구성 파일 옵션의 값을 로드하거나 또는 전체 구성 파일을 로드할 수 있습니다. 확장 지시문은 보안 인증서와 비밀번호와 같은 기밀 정보를 가리는 데 도움이 됩니다.
storage: dbPath: "/var/lib/mongo" systemLog: destination: file path: "/var/log/mongodb/mongod.log" net: bindIp: __exec: "python /home/user/getIPAddresses.py" type: "string" trim: "whitespace" digest: 85fed8997aac3f558e779625f2e51b4d142dff11184308dc6aca06cff26ee9ad digest_key: 68656c6c30303030307365637265746d796f6c64667269656e64 tls: mode: requireTLS certificateKeyFile: "/etc/tls/mongod.pem" certificateKeyFilePassword: __rest: "https://myrestserver.example.net/api/config/myCertKeyFilePassword" type: "string" digest: b08519162ba332985ac18204851949611ef73835ec99067b85723e10113f5c26 digest_key: 6d795365637265744b65795374756666
확장 지시문을 사용하려면 사용된 확장 지시문의 전체 목록과 함께 --configExpand 명령줄 옵션을 지정해야 합니다.
mongod --config "/path/to/config/mongod.conf" --configExpand "rest,exec"
--configExpand 옵션을 생략하거나 구성 파일 에 사용된 확장 지시문의 전체 목록을 지정하지 않으면 오류를 반환하고 mongod 종료됩니다.--configExpand 명령줄 에서는 옵션만 지정할 수 있습니다.
__rest 확장 지시문 사용
확장 지시문은 엔드포인트에서 __rest 구성 파일 값을 로드합니다.REST __rest 는 구성 파일 의 특정 값 로드 또는 전체 구성 파일 로드를 지원합니다.
다음 구성 파일 확장 지시문을 사용하여 __rest 외부 엔드포인트에서 설정 net.tls.certificateKeyFilePassword 값을 REST 로드합니다.
storage: dbPath: "/var/lib/mongo" systemLog: destination: file path: "/var/log/mongodb/mongod.log" net: bindIp: 192.51.100.24,127.0.0.1 tls: mode: requireTLS certificateKeyFile: "/etc/tls/mongod.pem" certificateKeyFilePassword: __rest: "https://myrestserver.example.net/api/config/myCertKeyFilePassword" type: "string"
- 파일 권한
구성 파일 확장 포함된
__rest경우 Linux /macOS에서 구성 파일 에 대한 읽기 액세스 / 프로세스 실행 사용자로만 제한되어야mongodmongos합니다.- 확장 구문 분석
블록을 구문
__restmongod--configExpand "rest"분석하려면 옵션으로 를 시작합니다.가 지정된 URL 에 대해 요청 실행합니다. 성공적인 하면 가
mongodGETmongod의certificateKeyFilePassword값을 반환된 값으로 바꿉니다. URL 확인되지 않거나REST엔드포인트가 잘못된 값을 반환하면 이(가) 오류를 발생시키고mongod종료됩니다.
다음 구성 파일 확장 지시문을 사용하여 __rest 외부 엔드포인트에서 구성 파일 REST 로드합니다. 확장 지시문과 해당 옵션은 구성 파일 에 지정된 유일한 값이어야 합니다.
__rest: "https://myrestserver.example.net/api/config/fullConfig" type: "yaml"
- 파일 권한
구성 파일 확장 포함된
__rest경우 Linux /macOS에서 구성 파일 에 대한 읽기 액세스 / 프로세스 실행 사용자로만 제한되어야mongodmongos합니다.- 확장 구문 분석
블록을 구문
__restmongod--configExpand "rest"분석하려면 옵션으로 를 시작합니다.mongod이(가) 지정된 URL 에 대해GET요청 실행합니다. 성공적인 하면mongod는 반환된 구성yaml파일 구문 분석하여 스타트업 중에 사용합니다. URL 이 올바른 형식의yaml파일 확인하거나 반환하지 못하면mongod오류가 발생하고 종료됩니다.
중요
지정된 엔드포인트에서 반환된 값에는 REST 추가 확장 지시문이 포함될 수 없습니다. 는 mongod 반환된 데이터에 대해 추가 처리 수행하지 않으며, 반환된 데이터에 추가 확장 지시문이 포함된 경우 오류 코드와 함께 종료됩니다.
__exec 확장 지시문 사용
__exec 확장 지시문은 셸 또는 터미널 명령에서 구성 파일 값을 로드합니다. __exec 는 구성 파일 의 특정 값 로드 또는 전체 구성 파일 로드를 지원합니다.
다음 예시 구성 파일 __exec 확장 지시문을 net.tls.certificateKeyFilePassword 사용하여 셸 또는 터미널 명령의 출력에서 설정 값을 로드합니다.
storage: dbPath: "/var/lib/mongo" systemLog: destination: file path: "/var/log/mongodb/mongod.log" net: bindIp: 192.51.100.24,127.0.0.1 tls: mode: requireTLS certificateKeyFile: "/etc/tls/mongod.pem" certificateKeyFilePassword: __exec: "python /home/myUserName/getPEMPassword.py" type: "string"
- 파일 권한
구성 파일 확장 포함된
__exec경우 Linux /macOS에서 구성 파일 에 대한 쓰기 (write) 액세스mongod는mongos/ 프로세스 실행 사용자로만 제한되어야 합니다.- 확장 구문 분석
블록을 구문
__execmongod--configExpand "exec"분석하려면 옵션으로 를 시작합니다.mongod는 지정된 작업을 실행하려고 시도합니다. 명령이 성공적으로 실행되면mongod는certificateKeyFilePassword의 값을 반환된 값으로 바꿉니다. 명령이 실패하거나 구성 파일 설정에 대해 잘못된 값을 반환하면mongod오류가 발생하고 종료됩니다.
다음 예시 구성 파일 확장 지시문을 사용하여 __exec 셸 또는 터미널 명령의 출력에서 구성 파일 로드합니다.__exec 확장 지시문과 해당 옵션은 구성 파일 에 지정된 유일한 값이어야 합니다.
__exec: "python /home/myUserName/getFullConfig.py" type: "yaml"
중요
지정된 문자열을 실행하여 반환된 __exec 데이터에는 추가 확장 지시문이 포함될 수 없습니다. 는 mongod 반환된 데이터에 대해 추가 처리 수행하지 않으며, 반환된 데이터에 추가 확장 지시문이 포함된 경우 오류 코드와 함께 종료됩니다.
확장 지시문 참조
__rest확장 지시문은 엔드포인트에서 구성 파일 값을
__restREST__rest로드합니다. 은(는) 구성 파일 의 특정 값 로드 또는 전체 구성 파일 로드를 지원합니다. 그런mongod다음 는 외부 소스 값을 구성의 일부로 사용하기 시작합니다.__rest확장 지시문에는 다음과 같은 구문이 있습니다.특정 구성 파일 설정에 대해
REST엔드포인트를 지정하려면 다음을 수행합니다.<some configuration file setting>: __rest: "<string>" type: "string" trim: "none|whitespace" digest: "<string>" digest_key: "<string>" 전체 구성 파일에 대해
REST엔드포인트를 지정하려면 다음 안내를 따르세요.__rest: "<string>" type: "yaml" trim: "none|whitespace" REST엔드포인트를 통해 전체 구성 파일을 지정하는 경우 반드시 확장 지시문과 해당 옵션이 구성 파일에 지정된 유일한 값이어야 합니다.
__rest은(는) 다음 필드를 사용합니다.필드유형설명문자열
필수 가
mongodGET외부 소스 값을 조회 하기 위해 요청 실행하는 URL 입니다.로컬 호스트가 아닌 엔드포인트(예: 원격 서버
REST에서 호스팅되는REST엔드포인트)의 경우 에는__rest호스팅하다https://시스템과 원격 서버 모두 TLS 를 지원 암호화됨 () URL이 1 필요합니다.1 이상입니다.URL 에 지정된 엔드포인트에 인증 필요한 경우
REST표준 RFC 3986 사용자 정보 형식을 사용하여 자격 증명 URL 에 인코딩합니다.로컬 호스트
REST엔드포인트(예:REST호스팅하다 컴퓨터에서 수신 대기 중인 엔드포인트)의 경우 은(는) 암호화되지__rest않은http://() URL을 허용합니다.중요: 지정된 엔드포인트에서 반환한 값에는
REST추가 확장 지시문이 포함될 수 없습니다. 는mongod반환된 데이터에 대해 추가 처리 수행하지 않으며, 반환된 데이터에 추가 확장 지시문이 포함된 경우 오류 코드와 함께 종료됩니다.type문자열
trim문자열
whitespace__rest선택 사항" ""\r"을"\n"지정하여"\t"가 선행 또는 후행 공백, 특히,,,,"\v"및 의 발생을 잘라내도록"\f"지시합니다. 기본값은 이거나 트리밍이none없습니다.문자열
선택 사항. 확장 결과의 HMAC-SHA256 출력은
HMAC-SHA256(digest_key, message)로 계산되며, 여기서message는 조회할 구성 설정의 값입니다.명시된 경우 digest_key도 지정해야 합니다.
문자열
선택 사항.64 32256 확장 결과의 HMAC-SHA 다이제스트를 계산하는 데 사용되는 바이트 키의 문자 16진수 문자열 표현입니다.
명시된 경우 다이제스트도 지정해야 합니다.
예를 들어
certificateKeyFilePassword이 "superSecret123"이라고 가정해 봅시다. REST 요청 또는 exec 서비스 호출을 사용하여 이 비밀번호를 조회하려면 다이제스트 키를 생성하고 이 키를 사용하여 비밀번호의 다이제스트를 계산해야 합니다.터미널에서 다음 코드를 실행하여 32바이트 다이젬트 키를 생성합니다.
openssl rand -hex 32 f38d0d5adfcf1a0575f9fa9051c70a2f88b1bb7562513c9efd7686e9c21ad304 다이젬트 키를 생성한 후에 이 키를 사용하여 암호의 다이젬트를 계산할 수 있습니다.
echo -ne "superSecret123" | openssl dgst -sha256 -mac hmac -macopt hexkey:f38d0d5adfcf1a0575f9fa9051c70a2f88b1bb7562513c9efd7686e9c21ad304 8ca2f57caef0bb23b76e45b3fd1e899b7e306b8ba93f406a56d8969846ca9122 참고
확장 지시어의 구문 분석을 활성화
__rest하려면 옵션으로 를mongod--configExpand "rest"시작합니다.
__exec__exec확장 지시문은 셸 또는 터미널 명령의 출력에서 구성 파일 값을 로드합니다.__exec는 구성 파일 의 특정 값을 로드하거나 전체 구성 파일 로드하는 기능을 지원합니다. 그런 다음mongod는 외부 소스 값을 구성의 일부로 사용하기 시작합니다.__exec확장 지시문에는 다음과 같은 구문이 있습니다.특정 구성 파일 설정 또는 설정에 대한 셸 또는 터미널 명령을 지정하려면 다음을 수행합니다.
<some configuration file setting>: __exec: "<string>" type: "string" trim: "none|whitespace" 전체 구성 파일에 대해 shell 또는 터미널 명령을 지정하려면 다음을 수행합니다.
__exec: "<string>" type: "yaml" trim: "none|whitespace" 터미널 또는 shell 명령을 통해 전체 구성 파일을 지정하는 경우 확장 지시어와 해당 옵션은 반드시 구성 파일에 지정된 유일한 값이어야 합니다.
__exec은(는) 다음 필드를 사용합니다.필드유형설명__exec문자열
필수 가
mongod외부 소스 값을 조회 하기 위해 터미널 또는 셸 에서 실행하는 문자열입니다.Linux 및 OSX 호스트에서 실행은 POSIX
popen()을 통해 처리됩니다. Windows 호스트에서 실행은 프로세스 제어 API를 통해 처리됩니다.__exec는mongod또는mongos를 시작한 사용자와 동일한 사용자로 읽기 전용 파이프를 엽니다.중요: 지정된 명령을 실행하여 반환되는 데이터에는 추가 확장 지시문이 포함될 수 없습니다. 는 반환된 데이터에 대해 추가 처리 수행하지 않으며, 반환된 데이터에 추가 확장 지시문이 포함된 경우 오류 코드와 함께
mongod종료됩니다.type문자열
trim문자열
whitespace__exec선택 사항" ""\r"을"\n"지정하여"\t"가 선행 또는 후행 공백, 특히,,,,"\v"및 의 발생을 잘라내도록"\f"지시합니다. 기본값은 이거나 트리밍이none없습니다.문자열
선택 사항. 확장 결과의 HMAC-SHA256 출력은
HMAC-SHA256(digest_key, message)로 계산되며, 여기서message는 조회할 구성 설정의 값입니다.명시된 경우 digest_key도 지정해야 합니다.
문자열
선택 사항.64 32256 확장 결과의 HMAC-SHA 다이제스트를 계산하는 데 사용되는 바이트 키의 문자 16진수 문자열 표현입니다.
지정하는 경우 다이제스트도 지정해야 합니다.
예를 들어
certificateKeyFilePassword이 "superSecret123"이라고 가정해 봅시다. REST 요청 또는 exec 서비스 호출을 사용하여 이 비밀번호를 조회하려면 다이제스트 키를 생성하고 이 키를 사용하여 비밀번호의 다이제스트를 계산해야 합니다.터미널에서 다음 코드를 실행하여 32바이트 다이젬트 키를 생성합니다.
openssl rand -hex 32 f38d0d5adfcf1a0575f9fa9051c70a2f88b1bb7562513c9efd7686e9c21ad304 다이젬트 키를 생성한 후에 이 키를 사용하여 암호의 다이젬트를 계산할 수 있습니다.
echo -ne "superSecret123" | openssl dgst -sha256 -mac hmac -macopt hexkey:f38d0d5adfcf1a0575f9fa9051c70a2f88b1bb7562513c9efd7686e9c21ad304 8ca2f57caef0bb23b76e45b3fd1e899b7e306b8ba93f406a56d8969846ca9122 참고
확장 지시어의 구문 분석을 활성화
__exec하려면 옵션으로 를mongod--configExpand "exec"시작합니다.
완료된 확장 명령어 값이 있는 구성 파일 출력하기
옵션으로 를 mongod --outputConfig 시작하여 하나 이상의 확장 지시문을 지정하는 구성 mongod 파일 의 최종 출력을 테스트할 수 있습니다. 로 시작된 --outputConfig 은 확인된 YAML 구성 문서 로 출력하고 stdout 중지합니다. 구성 파일 에 지정된 확장 지시어가 추가 확장 지시문을 반환하는 경우 mongod 오류가 발생하고 종료됩니다.
경고
--outputConfig 옵션은 확장 지시문을 사용하여 모든 필드에 대해 확인된 값을 반환합니다. 여기에는 이전에 구성 옵션에 외부 소스를 사용하여 가려졌던 모든 개인정보 또는 민감한 정보가 포함됩니다.
예시 들어 다음 구성 파일 mongod.conf 에는 __rest 확장 지시문이 포함되어 있습니다.
storage: dbPath: "/var/lib/mongo" systemLog: destination: file path: "/var/log/mongodb/mongod.log" net: port: __rest: "https://mongoconf.example.net:8080/record/1" type: string
지정된 URL에 기록된 문자열은 다음과 같습니다. 20128
구성 파일 확장 포함된 __rest 경우 Linux /macOS에서 구성 파일 에 대한 읽기 액세스 / 프로세스 실행 사용자로만 제한되어야 mongod mongos 합니다.
--configExpand "rest" 및 --outputConfig 옵션을 사용하여 mongod를 시작합니다.
mongod -f mongod.conf --configExpand rest --outputConfig
mongod는 종료하기 전에 stdout에 다음을 출력합니다.
config: mongod.conf storage: dbPath: "/var/lib/mongo" systemLog: destination: file path: "/var/log/mongodb/mongod.log" net: port: 20128 outputConfig: true