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

SCRAM 인증을 사용하여 데이터베이스 사용자 관리

이 페이지의 내용

  • 고려 사항
  • 전제 조건
  • 데이터베이스 사용자 추가
  • 데이터베이스 사용자 삭제
  • 인증 메커니즘 변경

Kubernetes 연산자는 MongoDB deployments에서 SCRAM 인증을 사용하여 데이터베이스 사용자를 관리할 수 있도록 지원합니다.

SCRAM 을(를) 인증 메커니즘으로 지정할 때 사용되는 SCRAM의 구현은 다음에 따라 달라집니다.

  • MongoDB 버전 및

  • 데이터베이스가 애플리케이션 데이터베이스 또는 다른 데이터베이스인 경우.

MongoDB 버전
데이터베이스
SCRAM 구현
3.6 또는 이전 버전
애플리케이션 데이터베이스를 제외한 모든 버전
SCRAM-SHA-1
4.0 이상
애플리케이션 데이터베이스를 제외한 모든 버전
SCRAM-SHA-256
모든
애플리케이션 데이터베이스
SCRAM-SHA-1

Kubernetes Operator는 생성하는 배포에서 SCRAM, LDAP 및 X.509 인증 메커니즘을 지원합니다. Kubernetes 연산자 생성 배포에서는 MongoDB Ops Manager 를 사용하여 다음을 수행할 수 없습니다.

  • 배포를 위한 다른 인증 메커니즘을 구성합니다.

  • SCRAM, LDAP 또는 X.509 인증을 사용 하지 않는 사용자를 managed합니다.

SCRAM 인증을 활성화한 후 Ops Manager 인터페이스를 사용하거나 CustomResourceDefinition 에서 사용자를 구성하여 SCRAM 사용자를 추가할 수 있습니다. MongoDB 사용자 리소스 사양을 기반으로 합니다.

데이터베이스 사용자를 관리하기 전에 독립형, 복제본 세트 또는 cluster를 배포해야 합니다.

다중 Kubernetes 클러스터 MongoDB 배포의 경우 복제본 세트를 배포해야 합니다. 여러 클러스터 배포를 참조하세요.

중요

하나 이상의 MongoDB 독립형, 복제본 세트 또는 cluster 에 동일한 데이터베이스 사용자를 할당할 수 없습니다. 여기에는 admin 역할을 가진 데이터베이스 사용자가 포함됩니다.

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

일반 텍스트 비밀번호를 사용하도록 선택할 수 있습니다.

1---
2apiVersion: v1
3kind: Secret
4metadata:
5 name: <mms-user-1-password>
6 # corresponds to user.spec.passwordSecretKeyRef.name
7type: Opaque
8stringData:
9 password: <my-plain-text-password>
10 # corresponds to user.spec.passwordSecretKeyRef.key
11data:
12 password: <base-64-encoded-password>
13 # corresponds to user.spec.passwordSecretKeyRef.key
14...

또는 Base64로 인코딩된 비밀번호를 사용하도록 선택할 수 있습니다.

1---
2apiVersion: v1
3kind: Secret
4metadata:
5 name: <mms-user-1-password>
6 # corresponds to user.spec.passwordSecretKeyRef.name
7type: Opaque
8stringData:
9 password: <my-plain-text-password>
10 # corresponds to user.spec.passwordSecretKeyRef.key
11data:
12 password: <base-64-encoded-password>
13 # corresponds to user.spec.passwordSecretKeyRef.key
14...

참고

원하는 비밀번호 구성을 복사합니다. 일반 텍스트 비밀번호는 stringData.password 을 사용하고 Base64로 인코딩된 비밀번호는 data.password을 사용합니다.

3
  1. 원하는 텍스트 편집기를 엽니다.

  2. 이 사용자 암호를 새 텍스트 파일에 붙여넣습니다.

HashiCorp Vault 를 사용하는 경우 대신 볼트 시크릿을 생성 할 수 있습니다.

시크릿 스토리지 옵션에 대한 자세한 내용은 시크릿 스토리지 구성을 참조하세요.

4

다음 표를 사용하여 Secret에서 강조 표시된 줄을 변경하는 방법을 안내합니다.

유형
설명
예제
metadata.name
문자열

데이터베이스 비밀번호 시크릿의 이름입니다.

리소스 이름은 44자 이내여야 합니다.

mms-scram-user-1-password
stringData.password
문자열

원하는 사용자의 일반 텍스트 비밀번호입니다.

참고

이 옵션과 값 또는 data.password 을 사용합니다. 둘 다 사용할 수는 없습니다.

<my-plain-text-password>
data.password
문자열

원하는 사용자의 Base64로 인코딩된 비밀번호입니다.

참고

  • 이 옵션과 값 또는 stringData.password 을 사용합니다. 둘 다 사용할 수는 없습니다.

  • 비밀번호를 Base64로 직접 인코딩한 다음 이 옵션을 사용하여 결과 값을 붙여넣어야 합니다. 대부분의 모든 플랫폼에 사용할 수 있는 도구와 여러 웹 기반 도구를 사용할 수 있습니다.

<my-base64-encoded-password>
5
1
---
apiVersion: mongodb.com/v1
kind: MongoDBUser
metadata:
name: <mms-scram-user-1>
spec:
passwordSecretKeyRef:
name: <mms-user-1-password>
# Match to metadata.name of the User Secret
key: password
username: "<mms-scram-user-1>"
db: "admin" #
mongodbResourceRef:
name: "<my-replica-set>"
# Match to MongoDB resource using authenticaiton
roles:
- db: "admin"
name: "clusterAdmin"
- db: "admin"
name: "userAdminAnyDatabase"
- db: "admin"
name: "readWrite"
- db: "admin"
name: "userAdminAnyDatabase"
...
2
  1. 원하는 텍스트 편집기를 엽니다.

  2. 이 MongoDBUser를 새 YAML 파일에 붙여넣습니다.

3

다음 표를 사용하여 MongoDB 사용자 리소스 사양에서 강조 표시된 줄을 변경하는 방법을 안내합니다.

유형
설명
예제
metadata.name
문자열

데이터베이스 사용자 리소스의 이름입니다.

리소스 이름은 44자 이내여야 합니다.

mms-scram-user-1
spec.username
문자열
데이터베이스 사용자의 이름입니다.
mms-scram-user-1
spec.passwordSecretKeyRef.name
문자열
metadata.name 사용자의 비밀번호를 저장하는 시크릿의 값입니다.
my-resource
spec.mongodbResourceRef.name
문자열
이 사용자가 연결된 MongoDB 리소스 의 이름입니다.
my-resource
spec.roles.db
문자열
역할 이 작동할 수 있는 데이터베이스입니다.
admin
spec.roles.name
문자열
데이터베이스 사용자에게 부여할 역할 의 이름입니다. 역할 이름은 MongoDB Cloud Manager 기본 제공 역할 또는 또는 MongoDB Ops Manager에 존재하는 사용자 지정 역할 일 수 있습니다.
readWriteAnyDatabase
4

이 사용자에게 추가 역할을 부여할 수 있습니다.

5
6

다음 Kubernetes 명령을 호출하여 데이터베이스 사용자를 생성합니다.

kubectl apply -f <database-user-conf>.yaml

새 MongoDB database 사용자를 생성하면 Operator가 새 시크릿Kubernetes 을 자동으로 Kubernetes 생성합니다. . Kubernetes 시크릿 에는 새 데이터베이스 사용자에 대한 다음 정보가 포함되어 있습니다.

  • username: 데이터베이스 사용자의 사용자 이름

  • password: 데이터베이스 사용자의 비밀번호

  • connectionString.standard: 이 데이터베이스 사용자로 데이터베이스에 연결할 수 있는 표준 연결 string 입니다.

  • connectionString.standardSrv: 이 데이터베이스 사용자로 데이터베이스에 연결할 수 있는 DNS 시드 목록 연결 string 입니다.

참고

또는 MongoDB 사용자 리소스 사양 에 선택 사항인 spec.connectionStringSecretName 필드를 지정하여 Kubernetes 연산자가 생성하는 연결 문자열 시크릿의 이름을 지정할 수 있습니다.

이러한 자격 증명을 사용하여 Kubernetes 내부에서 MongoDB 데이터베이스 리소스에 연결할 수 있습니다.

7

Cloud Manager 또는 Ops Manager에서 새로 생성된 사용자를 볼 수 있습니다.

  1. 프로젝트의 Deployment 보기에서 Security 탭을 클릭합니다.

  2. 중첩된 MongoDB Users 탭을 클릭합니다.

데이터베이스 사용자를 삭제하려면 사용자 MongoDBUser의 metadata.name 를 다음 명령으로 전달합니다.

kubectl delete mdbu <metadata.name>

사용자 인증 메커니즘을 SCRAM으로 변경하려면 다음을 수행합니다.

  1. 인증을 비활성화합니다.

    spec.security.authentication 아래에서 enabledfalse 로 변경합니다.

    spec:
    security:
    authentication:
    enabled : false
  2. 사용자의 리소스 정의를 다시 적용합니다.

  3. MongoDBResource가 running 상태에 도달할 때까지 기다립니다.

  4. SCRAM 인증을 활성화합니다.

    spec.security.authentication 아래에서 enabledtrue 로 변경하고 spec.security.authentication.modes 를 `` ["SCRAM"]`` 로 설정합니다.

    spec:
    security:
    authentication:
    enabled : true
    modes: ["SCRAM"]
  5. MongoDBUser 리소스를 다시 적용합니다.

  6. MongoDBResource가 running 상태에 도달할 때까지 기다립니다.