Key-Value Store
- NGINX+기능
- NGINX Plus 의 InMemory DB 활용, 일부 데이터 값 기입
공식 정보
- https://www.nginx.com/blog/nginx-plus-key-value-store-to-secure-ephemeral-ssl-keys-from-hashicorp-vault/
- http://nginx.org/en/docs/http/ngx_http_keyval_module.html
활용 용도
- IP Allow/Deny List
- 인증서 등록하여 활용 ( 별도 File 로 저장하는 것이 아닌, 메모리 내에 저장 )
- 별도FIle 로도 관리 가능
- 별도의 server_name 설정 없이, 인증서 여러개 저장 후, 자동으로 SSL 처리
How to Usage Key-Value Store
Keyval
key-value 데이터베이스의 키로 값을 조회하는 새 $variable을 생성
Sample
keyval $remote_addr $target zone=allowlist_zone;
# allowlist_zone 의 KeyVal_zone 에 저장된 $target 을 NGINX 에서 $remote_addr 변수로 활용
Keyval_zone
key-value 데이터베이스를 유지하는 공유 메모리 영역의 이름과 크기를 설정
해당 항목애 Key : Value 형태로 데이터 저장 ( {”Value#1”,”Value#2”} )
Sample
#keyval_zone zone=name:size [state=file] [timeout=time] [type=string|ip|prefix] [sync];
keyval_zone zone=allowlist_zone:1m type=ip state=/var/lib/nginx/state/one.keyval;
Key-Value Store 값 저장 방법
API 활용 값 저장
- curl -X GET http://127.0.0.1:8080/api/6/http/keyvals/allowlist_zone
- curl -X POST -d '{"10.250.11.99":"1"}' -s http://localhost:8080/api/6/http/keyvals/allowlist_zone
- 파일을 직접 수정 및 저장하는 것은 권고하지 않음
Sample Use-Case
Sample Code
Code
# IP ACL
keyval_zone zone=allowlist_zone:1m type=ip state=allowlist_zone.keyval;
keyval $remote_addr $target zone=allowlist_zone;
# SSL
keyval_zone zone=ssl_crt:10m; # Key-value store for certificate data
keyval_zone zone=ssl_key:10m; # Key-value store for private key data
keyval $ssl_server_name $crt_pem zone=ssl_crt; # Use SNI as key to obtain cert
keyval $ssl_server_name $key_pem zone=ssl_key;
Key-Value Store with IP ACL List
- Key-Value Store 에 있는 IP 에 대해서 Allow /Deny 설정
- Code
keyval_zone zone=allowlist_zone:1m type=ip
state=/var/lib/nginx/state/allowlist_zone.keyval;
server {
listen 8443;
index index.html;
if ($target = 1) {
return 403;
}
location / {
root /opt/services/App1;
}
}
###Key-Value Store
#curl -X POST -d '{"10.250.11.99":"1"}' -s http://localhost:8005/api/6/http/keyvals/allowlist_zone
#curl -X GET http://127.0.0.1:8005/api/6/http/keyvals/allowlist_zone