본문으로 건너뛰기

KMIP - MongoDB

약 4 분vaultVault EnterpriseKMIPMongoDB

KMIP - MongoDB

Enterprise 기능

Vault - dev mode run (Option)

VAULT_UI=true vault server -dev-root-token-id=root -dev -log-level=trace

export VAULT_ADDR="http://127.0.0.1:8200"
echo "export VAULT_ADDR=$VAULT_ADDR" >> /root/.bashrc
vault status
vault login root

KMIP 구성

KMIP 활성화

$ vault secrets enable kmip

Success! Enabled the kmip secrets engine at: kmip/

KMIP Listner 구성 (5696은 표준 기본 포트 입니다.)

$ vault write kmip/config listen_addrs=0.0.0.0:5696 \
  tls_ca_key_type="rsa" \
  tls_ca_key_bits=2048
  
Success! Data written to: kmip/config

MongoDB에 전달할 KMIP CA 인증서를 저장

$ vault read -format json kmip/ca | jq -r .data.ca_pem > ca.pem

샘플로 "HashiCup" 앱의 관리 개체에 대한 범위를 생성

  • 범위는 KMIP 관리 객체를 여러 명명된 버킷으로 분할합니다. (여기서는 "HashiCup")
  • 버킷 하위의 Role(역할)은 버킷 내에서 관리되며 다양한 허용 KMIP 작업을 할당할 수 있습니다. 여기서는 MongoDB가 수행할 수 있는 허용된 KMIP 작업을 지정하는 "payment" 역할도 생성합니다.
$ vault write -f kmip/scope/hashicups
Success! Data written to: kmip/scope/hashicups

$ vault write kmip/scope/hashicups/role/payments operation_all=true
Success! Data written to: kmip/scope/hashicups/role/payments

리프 인증서와 개인 키 생성

$ vault write -format=json \
  kmip/scope/hashicups/role/payments/credential/generate \
  format=pem > credential.json
$ jq -r .data.certificate < credential.json > cert.pem
$ jq -r .data.private_key < credential.json > key.pem
$ cat cert.pem key.pem > client.pem

MongoDB 구성

KMIP을 사용하기 위한 옵션과 함께 mongoDB를 시작

$ mongod --dbpath /var/lib/mongodb \
  --logpath /var/log/mongodb/mongo.log \
  --enableEncryption \
  --kmipServerName localhost \
  --kmipPort 5696 \
  --kmipServerCAFile ca.pem \
  --kmipClientCertificateFile client.pem

KMIP 적용 확인

$ cat /var/log/mongodb/mongo.log  | grep KMIP | jq
{
  "t": {
    "$date": "2021-07-20T02:03:34.031+00:00"
  },
  "s": "I",
  "c": "STORAGE",
  "id": 24199,
  "ctx": "initandlisten",
  "msg": "Created KMIP key",
  "attr": {
    "keyId": "agZTSeeJyQjVOKJgn3xeGJ6Va8sXfRXP"
  }
}

TEST

샘플 데이터 삽입

$ mongo

MongoDB Enterprise > db.examples.insertOne(
  {
    name: "sue",
    age: 26
  }
)

MongoDB Enterprise > exit

결과 확인

# Collection WiredTiger 파일에 기록된 정보
# KMIP 적용 전
$ cat /var/lib/mongodb/collection-7*
A�#�\�D���1_id`�1�g�~R=��namesueage:@4�D��8�����D��2

# KMIP 적용 후
$ cat /var/lib/mongodb/collection-7*
A�#�\
     ��$�|��H�}l�����(ں?����s�ɛocD��\K�>J������m��N��#����_�������К
�X���ϩ}_�z6��L�nQ���pQ�sO�]�0���h_�     #�Ȟ�߳2