X.509를 통한 안전한 내부 인증
이 페이지의 내용
이 가이드에서는 다음을 구성하는 방법에 대해 설명합니다.
cluster 내 MongoDB 노드 간 X.509 내부 인증.
클라이언트에서 MongoDB 인스턴스로의 X.509 인증.
Kubernetes Operator는 클러스터의 MongoDB 노드 간에 다른 인증 체계를 지원하지 않습니다.
참고
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 내부 인증 활성화
시크릿 만들기 X.509 인증서의 경우.
이 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
(으)로 지정해야 합니다.
샘플 복제본 세트 리소스를 복사합니다.
원하는 복제본 세트 구성과 일치하도록 이 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 internalCluster: "X509" 24 ...
복제본 세트 리소스에 대한 일반 X. 설정을509 구성합니다.
배포서버에서 TLS 및 X.509를 활성화하려면 Kubernetes 객체에서 다음 설정을 구성합니다.
복제본 세트 리소스에 대한 내부 X. 설정을509 구성합니다.
배포서버에서 TLS 및 X.509를 활성화하려면 Kubernetes 객체에서 다음 설정을 구성합니다.
키 | 유형 | 필요성 | 설명 | 예제 |
---|---|---|---|---|
문자열 | 필수 사항 | 이 설정을 사용하여 X.509 내부 클러스터 인증을 활성화합니다. 중요내부 cluster 인증은 활성화되면 비활성화할 수 없습니다. | X509 |
복제본 세트 구성 파일을 저장합니다.
변경 사항을 복제본 세트 배포에 적용합니다.
다음 Kubernetes 명령을 호출하여 복제본 세트를 업데이트합니다.
kubectl apply -f <replica-set-conf>.yaml
배포 상태를 추적합니다.
MongoDB
리소스의 상태를 확인하려면 다음 명령어를 사용하세요.
kubectl get mdb <resource-name> -o yaml -w
-w
(watch) 플래그 설정이 적용된 경우, 구성이 변경되면 상태 단계가 Running
상태를 달성할 때까지 출력이 즉시 새로 고침 됩니다. 리소스 배포 상태에 대해 자세히 알아보려면 Kubernetes Operator 문제 해결을 참조하세요.
복제본 세트에 대한 내부 인증 X.509 인증서 갱신
이미 인증서를 생성한 경우 다음 절차에 따라 주기적으로 인증서를 갱신하는 것이 좋습니다.
를 네임스페이스를 기본값으로 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 -
시크릿 갱신 X.509 인증서의 경우.
이 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 -
샤드 클러스터에 대한 X.509 내부 인증 구성
전제 조건
X.509를 사용하여 샤드 cluster를 보호하기 전에 TLS 암호화된 샤드 cluster를 배포합니다.
X.509 내부 인증 활성화
시크릿 만들기 샤드의 X.509 인증서에 해당합니다.
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>
시크릿 만들기 config 서버의 X.509 인증서에 해당합니다.
이 kubectl
명령을 실행하여 새 시크릿 을 생성합니다. 샤드 클러스터 config 서버의 인증서를 저장합니다.
kubectl -n mongodb create secret tls <prefix>-<metadata.name>-config-clusterfile \ --cert=<config-clusterfile-tls-cert> \ --key=<config-clusterfile-tls-cert>
시크릿 만들기 mongos 서버의 X.509 인증서에 해당합니다.
이 kubectl
명령을 실행하여 새 시크릿 을 생성합니다. 샤드 클러스터 mongos
인증서를 저장합니다.
kubectl -n mongodb create secret tls <prefix>-<metadata.name>-mongos-clusterfile \ --cert=<mongos-clusterfile-tls-cert> \ --key=<mongos-clusterfile-tls-cert>
샘플 샤드 클러스터 리소스를 복사합니다.
원하는 샤드 클러스터구성과 일치하도록 이 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 internalCluster: "X509" 27 ...
샤드 클러스터 리소스에 대한 일반 X. 설정을509 구성합니다.
배포서버에서 TLS 및 X.509를 활성화하려면 Kubernetes 객체에서 다음 설정을 구성합니다.
샤드 클러스터 리소스에 대한 내부 X.509 설정을 구성합니다.
배포서버에서 TLS 및 X.509를 활성화하려면 Kubernetes 객체에서 다음 설정을 구성합니다.
키 | 유형 | 필요성 | 설명 | 예제 |
---|---|---|---|---|
문자열 | 필수 사항 | 이 설정을 사용하여 X.509 내부 클러스터 인증을 활성화합니다. 중요내부 cluster 인증은 활성화되면 비활성화할 수 없습니다. | X509 |
샤드 클러스터 배포를 업데이트하고다시 시작합니다.
디렉토리에서 다음 Kubernetes 명령을 호출하여 샤드 클러스터를 업데이트하고 다시 시작합니다.
kubectl apply -f <sharded-cluster-conf>.yaml
배포 상태를 추적합니다.
MongoDB
리소스의 상태를 확인하려면 다음 명령어를 사용하세요.
kubectl get mdb <resource-name> -o yaml -w
-w
(watch) 플래그 설정이 적용된 경우, 구성이 변경되면 상태 단계가 Running
상태를 달성할 때까지 출력이 즉시 새로 고침 됩니다. 리소스 배포 상태에 대해 자세히 알아보려면 Kubernetes Operator 문제 해결을 참조하세요.
샤드 cluster에 대한 내부 인증 X.509 인증서 갱신
이미 인증서를 생성한 경우 다음 절차에 따라 주기적으로 인증서를 갱신하는 것이 좋습니다.
를 네임스페이스를 기본값으로 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 -
시크릿 갱신 mongos 서버의 TLS 인증서에 해당합니다.
이 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 -
시크릿 갱신 샤드의 X. 509 인증서에 해당합니다.
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 -
시크릿 갱신 config 서버의 X. 509 인증서에 해당합니다.
이 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 -
시크릿 갱신 mongos 서버의 X.509 인증서에 해당합니다.
이 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 -