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
합니다. 또한 내부 클러스터 인증 (활성화된 경우)을 위한 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 ...
복사한 예시 섹션을 기존 복제본 세트 리소스 에 붙여넣습니다.
원하는 텍스트 편집기를 열고 객체 를 spec
붙여넣습니다. 섹션의 리소스 파일 끝에 있습니다.
복제본 세트 리소스 에509 대한 일반 X. 설정을 구성합니다.
배포서버에서 TLS 및 X.509를 활성화하려면 Kubernetes 객체에서 다음 설정을 구성합니다.
복제본 세트 리소스 에509 대한 내부 X. 설정을 구성합니다.
배포서버에서 TLS 및 X.509를 활성화하려면 Kubernetes 객체에서 다음 설정을 구성합니다.
키 | 유형 | 필요성 | 설명 | 예시 |
---|---|---|---|---|
문자열 | 필수 사항 | 이 설정을 활성화 X.509 내부 클러스터 인증 을 활성화합니다. 중요: 내부 클러스터 인증 이 활성화되면 비활성화할 수 없습니다. | 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 ...
샤딩된 클러스터 리소스 에509 대한 일반 X. 설정을 구성합니다.
배포서버에서 TLS 및 X.509를 활성화하려면 Kubernetes 객체에서 다음 설정을 구성합니다.
샤딩된 클러스터 리소스 에509 대한 내부 X. 설정을 구성합니다.
배포서버에서 TLS 및 X.509를 활성화하려면 Kubernetes 객체에서 다음 설정을 구성합니다.
키 | 유형 | 필요성 | 설명 | 예시 |
---|---|---|---|---|
문자열 | 필수 사항 | 이 설정을 활성화 X.509 내부 클러스터 인증 을 활성화합니다. 중요: 내부 클러스터 인증 이 활성화되면 비활성화할 수 없습니다. | X509 |
샤딩된 클러스터 구성 파일 을 저장합니다.
배포 상태를 추적합니다.
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 -
샤드의 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 -