문서 메뉴
문서 홈
/
MongoDB Enterprise Kubernetes 연산자
/ /

X.509를 통한 안전한 내부 인증

이 페이지의 내용

  • 일반 전제 조건
  • 복제본 세트에 대한 X.509 내부 인증 구성
  • 전제 조건
  • X.509 내부 인증 활성화
  • 복제본 세트에 대한 내부 인증 X.509 인증서 갱신
  • 샤드 클러스터에 대한 X.509 내부 인증 구성
  • 전제 조건
  • X.509 내부 인증 활성화
  • 샤드 cluster에 대한 내부 인증 X.509 인증서 갱신

이 가이드에서는 다음을 구성하는 방법에 대해 설명합니다.

  • cluster 내 MongoDB 노드 간 X.509 내부 인증.

  • 클라이언트에서 MongoDB 인스턴스로의 X.509 인증.

Kubernetes Operator는 클러스터의 MongoDB 노드 간에 다른 인증 체계를 지원하지 않습니다.

참고

Kubernetes cluster에서 MongoDB의 독립형 인스턴스를 보호할 수 없습니다.

TLS 암호화를 사용하여 MongoDB 배포를 보호하기 전에 다음을 완료하세요.

  • Kubernetes 연산자 설치

  • Kubernetes 연산자에 대한 자격 증명 생성

프로젝트 수준에서 X.509 인증을 활성화하면 모든 에이전트가 MongoDB 배포서버와 통신할 때 X.509 클라이언트 인증을 사용하도록 구성됩니다.

X.509 클라이언트 인증에는 다음 중 하나가 필요합니다.

  • 클라우드 매니저

  • Ops Manager 4.1.7 이상

  • Ops Manager 4.0.11 이상

X.509를 사용하여 복제본 세트를 보호하기 전에 TLS로 암호화된 복제본 세트를 배포하세요.

1

kubectl 명령을 실행하여 새 시크릿 을 생성합니다. 복제본 세트의 인증서를 저장합니다.

kubectl create secret tls <prefix>-<metadata.name>-clusterfile \
--cert=<replica-set-clusterfile-tls-cert> \
--key=<replica-set-clusterfile-tls-key>

참고

시크릿 앞에 <prefix>-<metadata.name> 을(를) 붙여야 합니다.

예제

배포서버 my-deployment을(를) 호출하고 접두사를 mdb(으)로 설정하면 클라이언트 TLS 통신에 대한 TLS 시크릿 이름을 mdb-my-deployment-cert(으)로 지정해야 합니다. 또한 내부 cluster 인증(허용한 경우)을 위한 TLS 시크릿 이름을 mdb-my-deployment-clusterfile(으)로 지정해야 합니다.

2

원하는 복제본 세트 구성과 일치하도록 이 YAML파일의 설정을 변경합니다.

1---
2apiVersion: mongodb.com/v1
3kind: MongoDB
4metadata:
5 name: <my-replica-set>
6spec:
7 members: 3
8 version: "4.2.2-ent"
9 opsManager:
10 configMapRef:
11 # Must match metadata.name in ConfigMap file
12 name: <configMap.metadata.name>
13 credentials: <mycredentials>
14 type: ReplicaSet
15 persistent: true
16 security:
17 tls:
18 ca: <custom-ca>
19 certsSecretPrefix: <prefix>
20 authentication:
21 enabled: true
22 modes: ["X509"]
23 internalCluster: "X509"
24...
3

원하는 텍스트 편집기를 열고 객체spec 붙여넣습니다. 섹션의 리소스 파일 끝에 있습니다.

4

배포서버에서 TLS 및 X.509를 활성화하려면 Kubernetes 객체에서 다음 설정을 구성합니다.

유형
필요성
설명
예제
spec.security
.authentication
부울
필수 사항
MongoDB deployment에서 인증을 사용하려면 이 값을 true 로 설정합니다.
true
spec.security
.authentication
배열
조건부
이 값을 ["X509"] 로 설정합니다.
["X509"]
5

배포서버에서 TLS 및 X.509를 활성화하려면 Kubernetes 객체에서 다음 설정을 구성합니다.

유형
필요성
설명
예제
spec.security
.authentication
문자열
필수 사항

이 설정을 사용하여 X.509 내부 클러스터 인증을 활성화합니다.

중요

내부 cluster 인증은 활성화되면 비활성화할 수 없습니다.

X509
6
7

다음 Kubernetes 명령을 호출하여 복제본 세트를 업데이트합니다.

kubectl apply -f <replica-set-conf>.yaml
8

MongoDB 리소스의 상태를 확인하려면 다음 명령어를 사용하세요.

kubectl get mdb <resource-name> -o yaml -w

-w(watch) 플래그 설정이 적용된 경우, 구성이 변경되면 상태 단계가 Running 상태를 달성할 때까지 출력이 즉시 새로 고침 됩니다. 리소스 배포 상태에 대해 자세히 알아보려면 Kubernetes Operator 문제 해결을 참조하세요.

이미 인증서를 생성한 경우 다음 절차에 따라 주기적으로 인증서를 갱신하는 것이 좋습니다.

1

아직 실행하지 않았다면 다음 명령을 실행하여 생성한 네임스페이스에서 kubectl 명령을 모두 실행합니다.

참고

다중 Kubernetes 클러스터 MongoDB deployment에서 MongoDB Ops Manager 리소스를 배포하는 경우:

  • context을 중앙 클러스터의 이름(예: kubectl config set context "$MDB_CENTRAL_CLUSTER_FULL_NAME")으로 설정합니다.

  • --namespace 를 다중 Kubernetes 클러스터 MongoDB 배포에 사용한 것과 동일한 범위 (예: kubectl config --namespace "mongodb" 로 설정합니다.

kubectl config set-context $(kubectl config current-context) --namespace=<metadata.namespace>
2

kubectl 명령을 실행하여 복제본 집합의 인증서를 저장하는 기존 암호를 갱신합니다.

kubectl create secret tls <prefix>-<metadata.name>-cert \
--cert=<replica-set-tls-cert> \
--key=<replica-set-tls-key> \
--dry-run=client \
-o yaml |
kubectl apply -f -
3

kubectl 명령을 실행하여 기존 시크릿 을 갱신합니다. 복제본 세트의 인증서를 저장합니다.

kubectl create secret tls <prefix>-<metadata.name>-clusterfile \
--cert=<replica-set-clusterfile-tls-cert> \
--key=<replica-set-clusterfile-tls-key> \
--dry-run=client \
-o yaml |
kubectl apply -f -
4

kubectl 명령을 실행하여 기존 시크릿 을 갱신합니다. 에이전트의 X.509 인증서를 저장합니다.

kubectl create secret tls <prefix>-<metadata.name>-agent-certs \
--cert=<agent-tls-cert> \
--key=<agent-tls-key> \
--dry-run=client \
-o yaml |
kubectl apply -f -

X.509를 사용하여 샤드 cluster를 보호하기 전에 TLS 암호화된 샤드 cluster를 배포합니다.

1

kubectl 명령을 실행하여 샤딩된 클러스터의 샤드 인증서를 저장하는 새 시크릿을 생성합니다.

kubectl -n mongodb create secret tls <prefix>-<metadata.name>-0-clusterfile \
--cert=<shard-0-clusterfile-tls-cert> \
--key=<shard-0-clusterfile-tls-cert>
kubectl -n mongodb create secret tls <prefix>-<metadata.name>-1-clusterfile \
--cert=<shard-1-clusterfile-tls-cert> \
--key=<shard-1-clusterfile-tls-cert>
2

kubectl 명령을 실행하여 새 시크릿 을 생성합니다. 샤드 클러스터 config 서버의 인증서를 저장합니다.

kubectl -n mongodb create secret tls <prefix>-<metadata.name>-config-clusterfile \
--cert=<config-clusterfile-tls-cert> \
--key=<config-clusterfile-tls-cert>
3

kubectl 명령을 실행하여 새 시크릿 을 생성합니다. 샤드 클러스터 mongos 인증서를 저장합니다.

kubectl -n mongodb create secret tls <prefix>-<metadata.name>-mongos-clusterfile \
--cert=<mongos-clusterfile-tls-cert> \
--key=<mongos-clusterfile-tls-cert>
4

원하는 샤드 클러스터구성과 일치하도록 이 YAML 파일의 설정을 변경합니다.

1---
2apiVersion: mongodb.com/v1
3kind: MongoDB
4metadata:
5 name: <my-sharded-cluster>
6spec:
7 shardCount: 2
8 mongodsPerShardCount: 3
9 mongosCount: 2
10 configServerCount: 3
11 version: "4.2.2-ent"
12 opsManager:
13 configMapRef:
14 name: <configMap.metadata.name>
15 # Must match metadata.name in ConfigMap file
16 credentials: <mycredentials>
17 type: ShardedCluster
18 persistent: true
19 security:
20 tls:
21 ca: <custom-ca>
22 certsSecretPrefix: <prefix>
23 authentication:
24 enabled: true
25 modes: ["X509"]
26 internalCluster: "X509"
27...
5

원하는 텍스트 편집기를 열고 객체spec 붙여넣습니다. 섹션의 리소스 파일 끝에 있습니다.

6

배포서버에서 TLS 및 X.509를 활성화하려면 Kubernetes 객체에서 다음 설정을 구성합니다.

유형
필요성
설명
예제
spec.security
.authentication
부울
필수 사항
MongoDB deployment에서 인증을 사용하려면 이 값을 true 로 설정합니다.
true
spec.security
.authentication
배열
조건부
이 값을 ["X509"] 로 설정합니다.
["X509"]
7

배포서버에서 TLS 및 X.509를 활성화하려면 Kubernetes 객체에서 다음 설정을 구성합니다.

유형
필요성
설명
예제
spec.security
.authentication
문자열
필수 사항

이 설정을 사용하여 X.509 내부 클러스터 인증을 활성화합니다.

중요

내부 cluster 인증은 활성화되면 비활성화할 수 없습니다.

X509
8
9

디렉토리에서 다음 Kubernetes 명령을 호출하여 샤드 클러스터를 업데이트하고 다시 시작합니다.

kubectl apply -f <sharded-cluster-conf>.yaml
10

MongoDB 리소스의 상태를 확인하려면 다음 명령어를 사용하세요.

kubectl get mdb <resource-name> -o yaml -w

-w(watch) 플래그 설정이 적용된 경우, 구성이 변경되면 상태 단계가 Running 상태를 달성할 때까지 출력이 즉시 새로 고침 됩니다. 리소스 배포 상태에 대해 자세히 알아보려면 Kubernetes Operator 문제 해결을 참조하세요.

이미 인증서를 생성한 경우 다음 절차에 따라 주기적으로 인증서를 갱신하는 것이 좋습니다.

1

아직 실행하지 않았다면 다음 명령을 실행하여 생성한 네임스페이스에서 kubectl 명령을 모두 실행합니다.

참고

다중 Kubernetes 클러스터 MongoDB deployment에서 MongoDB Ops Manager 리소스를 배포하는 경우:

  • context을 중앙 클러스터의 이름(예: kubectl config set context "$MDB_CENTRAL_CLUSTER_FULL_NAME")으로 설정합니다.

  • --namespace 를 다중 Kubernetes 클러스터 MongoDB 배포에 사용한 것과 동일한 범위 (예: kubectl config --namespace "mongodb" 로 설정합니다.

kubectl config set-context $(kubectl config current-context) --namespace=<metadata.namespace>
2

kubectl 명령을 실행하여 샤딩된 클러스터의 샤드 인증서를 저장하는 기존 시크릿을 갱신합니다.

kubectl -n mongodb create secret tls <prefix>-<metadata.name>-0-cert \
--cert=<shard-0-tls-cert> \
--key=<shard-0-tls-key> \
--dry-run=client \
-o yaml |
kubectl apply -f -
kubectl -n mongodb create secret tls <prefix>-<metadata.name>-1-cert \
--cert=<shard-1-tls-cert> \
--key=<shard-1-tls-key> \
--dry-run=client \
-o yaml |
kubectl apply -f -
3

kubectl 명령을 실행하여 샤딩된 클러스터 config 서버의 인증서를 저장하는 기존 시크릿을 갱신합니다.

kubectl -n mongodb create secret tls <prefix>-<metadata.name>-config-cert \
--cert=<config-tls-cert> \
--key=<config-tls-key> \
--dry-run=client \
-o yaml |
kubectl apply -f -
4

kubectl 명령을 실행하여 기존 시크릿 을 갱신합니다. 샤드 클러스터 mongos 인증서를 저장합니다.

kubectl -n mongodb create secret tls <prefix>-<metadata.name>-mongos-cert \
--cert=<mongos-tls-cert> \
--key=<mongos-tls-key> \
--dry-run=client \
-o yaml |
kubectl apply -f -
5

kubectl 명령을 실행하여 샤딩된 클러스터의 샤드 인증서를 저장하는 기존 시크릿을 갱신합니다.

kubectl -n mongodb create secret tls <prefix>-<metadata.name>-0-clusterfile \
--cert=<shard-0-clusterfile-tls-cert> \
--key=<shard-0-clusterfile-tls-cert> \
--dry-run=client \
-o yaml |
kubectl apply -f -
kubectl -n mongodb create secret tls <prefix>-<metadata.name>-1-clusterfile \
--cert=<shard-1-clusterfile-tls-cert> \
--key=<shard-1-clusterfile-tls-cert> \
--dry-run=client \
-o yaml |
kubectl apply -f -
6

kubectl 명령을 실행하여 기존 시크릿 을 갱신합니다. 샤드 클러스터 config 서버의 인증서를 저장합니다.

kubectl -n mongodb create secret tls <prefix>-<metadata.name>-config-clusterfile \
--cert=<config-clusterfile-tls-cert> \
--key=<config-clusterfile-tls-cert> \
--dry-run=client \
-o yaml |
kubectl apply -f -
7

kubectl 명령을 실행하여 기존 시크릿 을 갱신합니다. 샤드 클러스터 mongos 인증서를 저장합니다.

kubectl -n mongodb create secret tls <prefix>-<metadata.name>-mongos-clusterfile \
--cert=<mongos-clusterfile-tls-cert> \
--key=<mongos-clusterfile-tls-cert> \
--dry-run=client \
-o yaml |
kubectl apply -f -
8

kubectl 명령을 실행하여 기존 시크릿 을 갱신합니다. 에이전트의 X.509 인증서를 저장합니다.

kubectl create secret tls <prefix>-<metadata.name>-agent-certs \
--cert=<agent-tls-cert> \
--key=<agent-tls-key> \
--dry-run=client \
-o yaml |
kubectl apply -f -