X.509를 사용한 보안 클라이언트 인증
이 페이지의 내용
MongoDB Enterprise Kubernetes Operator는 X.509 인증서를 사용하여 클라이언트 애플리케이션을 MongoDB deployment에 인증할 수 있습니다.
이 가이드에서는 클라이언트에서 MongoDB 인스턴스로 X.509 인증을 구성하는 방법에 대해 설명합니다.
참고
Kubernetes cluster에서 MongoDB의 독립형 인스턴스를 보호할 수 없습니다.
일반 전제 조건
TLS 암호화를 사용하여 MongoDB 배포를 보호하기 전에 다음을 완료하세요.
프로젝트 수준에서 X.509 인증을 활성화하면 모든 에이전트가 MongoDB 배포서버와 통신할 때 X.509 클라이언트 인증을 사용하도록 구성됩니다.
X.509 클라이언트 인증에는 다음 중 하나가 필요합니다.
클라우드 매니저
Ops Manager 4.1.7 이상
Ops Manager 4.0.11 이상
복제본 세트에 대한 X.509 클라이언트 인증 구성
전제 조건
X.509를 사용하여 복제본 세트를 보호하기 전에 TLS로 암호화된 복제본 세트를 배포하세요.
X.509 클라이언트 인증 활성화
샘플 복제본 세트 리소스 를 복사합니다.
원하는 복제본 세트 구성과 일치하도록 이 YAML파일의 설정을 변경합니다.
1 2 apiVersion: mongodb.com/v1 3 kind: MongoDB 4 metadata: 5 name: <my-replica-set> 6 spec: 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 ...
복사한 예시 섹션을 기존 복제본 세트 리소스 에 붙여넣습니다.
원하는 텍스트 편집기를 열고 섹션의 리소스 파일 끝에 객체 사양을 붙여넣습니다. spec
복제본 세트 리소스 에509 대한 일반 X. 설정을 구성합니다.
배포서버에서 TLS 및 X.509를 활성화하려면 Kubernetes 객체에서 다음 설정을 구성합니다.
복제본 세트 구성 파일 을 저장합니다.
복제본 세트 배포서버 에 변경 사항을 적용합니다.
다음 Kubernetes 명령을 호출하여 복제본 세트를 업데이트합니다.
kubectl apply -f <replica-set-conf>.yaml
배포 상태를 추적합니다.
MongoDB
리소스의 상태를 확인하려면 다음 명령어를 사용하세요.
kubectl get mdb <resource-name> -o yaml -w
-w
(watch) 플래그 설정이 적용된 경우, 구성이 변경되면 상태 단계가 Running
상태를 달성할 때까지 출력이 즉시 새로 고침 됩니다. 리소스 배포 상태에 대해 자세히 알아보려면 Kubernetes Operator 문제 해결을 참조하세요.
복제본 세트에 대한 X.509 인증서 갱신
이미 인증서를 생성한 경우 다음 절차에 따라 주기적으로 인증서를 갱신하는 것이 좋습니다.
참고
Ops Manager 배포에 대한 인증서 갱신을 자동화하려면 인증서-관리자 통합을 설정하는 것이 좋습니다.
네임스페이스 kubectl
를 기본값 으로 구성합니다.
아직 실행하지 않았다면 다음 명령을 실행하여 생성한 네임스페이스에서 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>
TLS 인증서의 시크릿을 갱신합니다.
이 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 -
샤드 cluster에 대한 X.509 클라이언트 인증 구성
전제 조건
X.509를 사용하여 샤드 cluster를 보호하기 전에 TLS 암호화된 샤드 cluster를 배포합니다.
X.509 클라이언트 인증 활성화
샘플 샤딩된 클러스터 리소스 를 복사합니다.
원하는 샤드 클러스터구성과 일치하도록 이 YAML 파일의 설정을 변경합니다.
1 2 apiVersion: mongodb.com/v1 3 kind: MongoDB 4 metadata: 5 name: <my-sharded-cluster> 6 spec: 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 ...
샤딩된 클러스터 리소스 에509 대한 일반 X. 설정을 구성합니다.
배포서버에서 TLS 및 X.509를 활성화하려면 Kubernetes 객체에서 다음 설정을 구성합니다.
샤딩된 클러스터 구성 파일 을 저장합니다.
배포 상태를 추적합니다.
MongoDB
리소스의 상태를 확인하려면 다음 명령어를 사용하세요.
kubectl get mdb <resource-name> -o yaml -w
-w
(watch) 플래그 설정이 적용된 경우, 구성이 변경되면 상태 단계가 Running
상태를 달성할 때까지 출력이 즉시 새로 고침 됩니다. 리소스 배포 상태에 대해 자세히 알아보려면 Kubernetes Operator 문제 해결을 참조하세요.
샤드 cluster에 대한 X.509 인증서 갱신
이미 인증서를 생성한 경우 다음 절차에 따라 주기적으로 인증서를 갱신하는 것이 좋습니다.
참고
Ops Manager 배포에 대한 인증서 갱신을 자동화하려면 인증서-관리자 통합을 설정하는 것이 좋습니다.
네임스페이스 kubectl
를 기본값 으로 구성합니다.
아직 실행하지 않았다면 다음 명령을 실행하여 생성한 네임스페이스에서 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>
샤드의 TLS 인증서에 대한 시크릿을 갱신합니다.
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 -
config 서버의 TLS 인증서에 대한 시크릿을 갱신합니다.
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 -