문서 메뉴
문서 홈
/
MongoDB 매뉴얼
/ / /

데이터 암호화 키 관리

이 페이지의 내용

  • 데이터 암호화 키 생성
  • 데이터 암호화 키의 대체 이름 관리
  • 데이터 암호화 키 제거
  • 기존 데이터 암호화 키 조회

버전 4.2에 추가되었습니다.

클라이언트 사이드 필드 수준 암호화는 암호화 및 암호 해독에 데이터 암호화 키를 사용합니다. mongosh 헬퍼 메서드 getKeyVault() 는 데이터 암호화 키를 생성, 수정 및 삭제하기 위한 Key Vault 객체를 반환합니다.

이 페이지에서는 mongosh 을 사용한 클라이언트 사이드 필드 레벨 암호화에 대해 설명하며, 공식 MongoDB 4 는 참조하지 않습니다 .2+ 호환 드라이버. 드라이버별 데이터 암호화 키 관리 방법 및 구문은 관련 설명서 를 참조하세요.

다음 절차에서는 mongosh 를 사용하여 클라이언트 사이드 필드 수준 암호화 및 암호 해독에 사용할 데이터 암호화 키를 만듭니다. 4.2+ 호환 드라이버를 사용한 데이터 암호화 키 관리에 대한 지침은 드라이버 설명서 를 대신 참조하세요.

아래 탭을 사용하여 배포에 적합한 KMS 를 선택합니다.

1

AWS KMS에 대한 클라이언트 사이드 필드 레벨 암호화를 구성하려면 AWS 액세스 키 ID와 관련 시크릿 액세스 키가 필요합니다. AWS 액세스 키는 KMS 서비스에 대한 모든 목록읽기 권한이 있는 IAM 사용자와 일치해야 합니다.

이러한 자격 증명이 로그로 유출될 위험을 줄이기 위해 다음 절차에서는 환경 변수를 사용하여 mongosh 에 값을 전달합니다.

먼저 플랫폼 설명서에 따라 다음 환경 변수를 구성했는지 확인합니다.

  • AWS_ACCESS_KEY_ID

  • AWS_SECRET_ACCESS_KEY

다음으로 ,mongosh --shell--eval --nodb 옵션을 사용하여 세션을 생성합니다.

mongosh --eval "
var AWS_ACCESS_KEY_ID = '$AWS_ACCESS_KEY_ID'
var AWS_SECRET_ACCESS_KEY = '$AWS_SECRET_ACCESS_KEY'
" \
--shell --nodb

이 예에서는 MongoDB 데이터베이스에 연결하지 않고 을(를)mongosh 엽니다.--eval 옵션은 의 AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEY mongosh 변수를 해당 환경 변수의 값으로 설정합니다. 지정된 변수는 AWS CLI에서도 지원됩니다.

2

mongosh 에서 클라이언트 사이드 필드 수준 암호화 구성 문서를 저장하기 위한 새 ClientSideFieldLevelEncryptionOptions 변수를 만듭니다.

var ClientSideFieldLevelEncryptionOptions = {
"keyVaultNamespace" : "encryption.__dataKeys",
"kmsProviders" : {
"aws" : {
"accessKeyId" : AWS_ACCESS_KEY_ID,
"secretAccessKey" : AWS_SECRET_ACCESS_KEY
}
}
}
3

mongosh 에서 Mongo() 생성자를 사용하여 대상 클러스터에 대한 데이터베이스 연결을 설정합니다. ClientSideFieldLevelEncryptionOptions 문서를 Mongo() 생성자의 두 번째 매개 변수로 지정하여 클라이언트 사이드 필드 수준 암호화를 위한 연결을 구성합니다.

csfleDatabaseConnection = Mongo(
"mongodb://replaceMe.example.net:27017/?replicaSet=myMongoCluster",
ClientSideFieldLevelEncryptionOptions
)

replaceMe.example.net URI 를 대상 cluster에 대한 연결 문자열로 바꿉니다.

클라이언트 사이드 필드 수준 암호화 shell 메서드에 액세스하려면 csfleDatabaseConnection 객체를 사용합니다.

클라이언트 사이드 필드 수준 암호화를 위해 구성된 데이터베이스 연결 설정에 대한 전체 문서는 Mongo() 참고 생성자를 참고하세요.

4

csfleDatabaseConnection 데이터베이스 연결 객체에서 getKeyVault() 메서드를 사용하여 keyVault 객체를 생성합니다.

keyVault = csfleDatabaseConnection.getKeyVault();

중요

클라이언트 사이드 필드 수준 암호화는 서버에서 적용되는 키 대체 이름의 고유성에 따라 달라집니다. getKeyVault() keyAltNames getKeyVault() 에 고유 인덱스 가 없는 경우 해당 인덱스를 생성합니다. 에 의해 생성된 고유 인덱스 를삭제하지 마세요 .

5

keyVault 객체에서 KeyVault.createKey() 메서드를 사용하여 키 볼트에 새 데이터 암호화 키를 생성합니다.

keyVault.createKey(
"aws",
"arn:aws:kms:region:account:key/keystring",
[ "keyAlternateName" ]
)

구제척으로:

  • 구성된 Amazon Web Services KMS를 지정하려면 첫 번째 파라미터가 반드시 "aws"이어야 합니다.

  • 두 번째 매개변수는 전체 Amazon 리소스 이름(ARN) 이어야 합니다. 고객 마스터 키(CMK). MongoDB는 지정된 CMK를 사용하여 데이터 암호화 키를 암호화합니다.

  • 세 번째 매개변수는 데이터 암호화 키에 대한 하나 이상의 keyAltNames 배열 일 수 있습니다. 각 키 대체 이름은 고유 해야 합니다. getKeyVault() 은(는) keyAltNames고유 인덱스 를 생성하여 필드가 아직 존재하지 않는 경우 고유성을 적용합니다. 키 대체 이름을 사용하면 데이터 암호화 키를 쉽게 찾을 수 있습니다.

성공하면 createKey() 는 새 데이터 암호화 키의 UUID 를 반환합니다. UUID 는 데이터 암호화 키를 고유하게 식별하는 하위 유형 4 를 가진 BSON Binary (BinData) 객체입니다. UUID 문자열은 기본 바이너리 데이터를 16진수로 표현한 것입니다.

자동 MongoDB 클라이언트 사이드 필드 수준 암호화 를 구성하기 위해 공식 드라이버에 데이터 암호화 키를 제공하는 base64 경우 의 표현을 사용해야 UUID string 합니다.

mongosh 에서 다음 작업을 실행하여 UUID 16진수 string 을 base64 표현으로 변환할 수 있습니다.

UUID("b4b41b33-5c97-412e-a02b-743498346079").base64()

위의 createKey() 에서 반환되거나 기존 데이터 암호화 키 조회에 설명된 대로 이 명령에 자체 데이터 암호화 키의 UUID 를 제공합니다.

1

Azure Key Vault에 대한 클라이언트 사이드 필드 수준 암호화를 구성하려면 유효한 테넌트 ID, 클라이언트 ID 및 클라이언트 비밀이 필요합니다.

이러한 자격 증명이 로그로 유출될 위험을 줄이기 위해 다음 절차에서는 환경 변수를 사용하여 mongosh 에 값을 전달합니다.

먼저 플랫폼 설명서에 따라 다음 환경 변수를 구성했는지 확인합니다.

  • AZURE_TENANT_ID

  • AZURE_CLIENT_ID

  • AZURE_CLIENT_SECRET

다음으로 ,mongosh --shell--eval --nodb 옵션을 사용하여 세션을 생성합니다.

mongosh --eval "
var AZURE_TENANT_ID = '$AZURE_TENANT_ID'
var AZURE_CLIENT_ID = '$AZURE_CLIENT_ID'
var AZURE_CLIENT_SECRET = '$AZURE_CLIENT_SECRET'
" \
--shell --nodb

이 예에서는 MongoDB 데이터베이스에 연결하지 않고 mongosh 을(를) 엽니다. --eval 옵션은 { mongosh } 의 AZURE_TENANT_ID, AZURE_CLIENT_IDAZURE_CLIENT_SECRET 변수를 해당 환경 변수의 값으로 설정합니다.

2

mongosh 에서 클라이언트 사이드 필드 수준 암호화 구성 문서를 저장하기 위한 새 ClientSideFieldLevelEncryptionOptions 변수를 만듭니다.

var ClientSideFieldLevelEncryptionOptions = {
"keyVaultNamespace" : "encryption.__dataKeys",
"kmsProviders" : {
"azure" : {
"tenantId" : AZURE_TENANT_ID,
"clientId" : AZURE_CLIENT_ID,
"clientSecret" : AZURE_CLIENT_SECRET
}
}
}
3

mongosh 에서 Mongo() 생성자를 사용하여 대상 클러스터에 대한 데이터베이스 연결을 설정합니다. ClientSideFieldLevelEncryptionOptions 문서를 Mongo() 생성자의 두 번째 매개 변수로 지정하여 클라이언트 사이드 필드 수준 암호화를 위한 연결을 구성합니다.

csfleDatabaseConnection = Mongo(
"mongodb://replaceMe.example.net:27017/?replicaSet=myMongoCluster",
ClientSideFieldLevelEncryptionOptions
)

replaceMe.example.net URI 를 대상 cluster에 대한 연결 문자열로 바꿉니다.

클라이언트 사이드 필드 수준 암호화 shell 메서드에 액세스하려면 csfleDatabaseConnection 객체를 사용합니다.

클라이언트 사이드 필드 수준 암호화를 위해 구성된 데이터베이스 연결 설정에 대한 전체 문서는 Mongo() 참고 생성자를 참고하세요.

4

csfleDatabaseConnection 데이터베이스 연결 객체에서 getKeyVault() 메서드를 사용하여 keyVault 객체를 생성합니다.

keyVault = csfleDatabaseConnection.getKeyVault();

중요

클라이언트 사이드 필드 수준 암호화는 서버에서 적용되는 키 대체 이름의 고유성에 따라 달라집니다. getKeyVault() keyAltNames getKeyVault() 에 고유 인덱스 가 없는 경우 해당 인덱스를 생성합니다. 에 의해 생성된 고유 인덱스 를삭제하지 마세요 .

5

keyVault 객체에서 KeyVault.createKey() 메서드를 사용하여 키 볼트에 새 데이터 암호화 키를 생성합니다.

keyVault.createKey(
"azure",
{ keyName: "keyvaultname", keyVaultEndpoint: "endpointname" },
[ "keyAlternateName" ]
)

구제척으로:

  • 구성된 Azure Key Vault를 지정하려면 첫 번째 매개 변수가 "azure" 이어야 합니다 .

  • 두 번째 매개변수는 다음을 포함하는 문서 여야 합니다 .

  • 세 번째 매개변수는 데이터 암호화 키에 대한 하나 이상의 keyAltNames 배열 일 수 있습니다. 각 키 대체 이름은 고유 해야 합니다. getKeyVault() 은(는) keyAltNames고유 인덱스 를 생성하여 필드가 아직 존재하지 않는 경우 고유성을 적용합니다. 키 대체 이름을 사용하면 데이터 암호화 키를 쉽게 찾을 수 있습니다.

성공하면 createKey() 는 새 데이터 암호화 키의 UUID 를 반환합니다. UUID 는 데이터 암호화 키를 고유하게 식별하는 하위 유형 4 를 가진 BSON Binary (BinData) 객체입니다. UUID 문자열은 기본 바이너리 데이터를 16진수로 표현한 것입니다.

자동 MongoDB 클라이언트 사이드 필드 수준 암호화 를 구성하기 위해 공식 드라이버에 데이터 암호화 키를 제공하는 base64 경우 의 표현을 사용해야 UUID string 합니다.

mongosh 에서 다음 작업을 실행하여 UUID 16진수 string 을 base64 표현으로 변환할 수 있습니다.

UUID("b4b41b33-5c97-412e-a02b-743498346079").base64()

위의 createKey() 에서 반환되거나 기존 데이터 암호화 키 조회에 설명된 대로 이 명령에 자체 데이터 암호화 키의 UUID 를 제공합니다.

1

GCP KMS에 대한 클라이언트 사이드 필드 수준 암호화를 구성하려면 GCP 이메일 및 관련 비공개 키가 필요합니다.

이러한 자격 증명이 로그로 유출될 위험을 줄이기 위해 다음 절차에서는 환경 변수를 사용하여 mongosh 에 값을 전달합니다.

먼저 플랫폼 설명서에 따라 다음 환경 변수를 구성했는지 확인합니다.

  • GCP_EMAIL

  • GCP_PRIVATEKEY

다음으로 ,mongosh --shell--eval --nodb 옵션을 사용하여 세션을 생성합니다.

mongosh --eval "
var GCP_EMAIL = '$GCP_EMAIL'
var GCP_PRIVATEKEY = '$GCP_PRIVATEKEY'
" \
--shell --nodb

이 예에서는 MongoDB 데이터베이스에 연결하지 않고 mongosh 을(를) 엽니다. --eval 옵션은 mongoshGCP_EMAILGCP_PRIVATEKEY 변수를 해당 환경 변수의 값으로 설정합니다.

2

mongosh 에서 클라이언트 사이드 필드 수준 암호화 구성 문서를 저장하기 위한 새 ClientSideFieldLevelEncryptionOptions 변수를 만듭니다.

var ClientSideFieldLevelEncryptionOptions = {
"keyVaultNamespace" : "encryption.__dataKeys",
"kmsProviders" : {
"gcp" : {
"email" : GCP_EMAIL,
"privateKey" : GCP_PRIVATEKEY
}
}
}
3

mongosh 에서 Mongo() 생성자를 사용하여 대상 클러스터에 대한 데이터베이스 연결을 설정합니다. ClientSideFieldLevelEncryptionOptions 문서를 Mongo() 생성자의 두 번째 매개 변수로 지정하여 클라이언트 사이드 필드 수준 암호화를 위한 연결을 구성합니다.

csfleDatabaseConnection = Mongo(
"mongodb://replaceMe.example.net:27017/?replicaSet=myMongoCluster",
ClientSideFieldLevelEncryptionOptions
)

replaceMe.example.net URI 를 대상 cluster에 대한 연결 문자열로 바꿉니다.

클라이언트 사이드 필드 수준 암호화 shell 메서드에 액세스하려면 csfleDatabaseConnection 객체를 사용합니다.

클라이언트 사이드 필드 수준 암호화를 위해 구성된 데이터베이스 연결 설정에 대한 전체 문서는 Mongo() 참고 생성자를 참고하세요.

4

csfleDatabaseConnection 데이터베이스 연결 객체에서 getKeyVault() 메서드를 사용하여 keyVault 객체를 생성합니다.

keyVault = csfleDatabaseConnection.getKeyVault();

중요

클라이언트 사이드 필드 수준 암호화는 서버에서 적용되는 키 대체 이름의 고유성에 따라 달라집니다. getKeyVault() keyAltNames getKeyVault() 에 고유 인덱스 가 없는 경우 해당 인덱스를 생성합니다. 에 의해 생성된 고유 인덱스 를삭제하지 마세요 .

5

keyVault 객체에서 KeyVault.createKey() 메서드를 사용하여 키 볼트에 새 데이터 암호화 키를 생성합니다.

keyVault.createKey(
"gcp",
{
projectId: "projectid",
location: "locationname",
keyRing: "keyringname",
keyName: "keyname"
},
[ "keyAlternateName" ]
)

구제척으로:

  • 구성된 Google Cloud KMS를 지정하려면 첫 번째 매개변수가 "gcp" 이어야 합니다 .

  • 두 번째 매개변수는 반드시 다음을 포함하는 문서여야 합니다.

    • projectid 다음과 같은 GCP 프로젝트의 이름입니다. my-project

    • locationname 다음과 같은 KMS 키링의 위치입니다. global

    • keyringname 다음과 같은 KMS 키링의 이름입니다. my-keyring

    • keyname 키의 이름입니다.

  • 세 번째 매개변수는 데이터 암호화 키에 대한 하나 이상의 keyAltNames 배열 일 수 있습니다. 각 키 대체 이름은 고유 해야 합니다. getKeyVault() 은(는) keyAltNames고유 인덱스 를 생성하여 필드가 아직 존재하지 않는 경우 고유성을 적용합니다. 키 대체 이름을 사용하면 데이터 암호화 키를 쉽게 찾을 수 있습니다.

성공하면 createKey() 는 새 데이터 암호화 키의 UUID 를 반환합니다. UUID 는 데이터 암호화 키를 고유하게 식별하는 하위 유형 4 를 가진 BSON Binary (BinData) 객체입니다. UUID 문자열은 기본 바이너리 데이터를 16진수로 표현한 것입니다.

자동 MongoDB 클라이언트 사이드 필드 수준 암호화 를 구성하기 위해 공식 드라이버에 데이터 암호화 키를 제공하는 base64 경우 의 표현을 사용해야 UUID string 합니다.

mongosh 에서 다음 작업을 실행하여 UUID 16진수 string 을 base64 표현으로 변환할 수 있습니다.

UUID("b4b41b33-5c97-412e-a02b-743498346079").base64()

위의 createKey() 에서 반환되거나 기존 데이터 암호화 키 조회에 설명된 대로 이 명령에 자체 데이터 암호화 키의 UUID 를 제공합니다.

1

로컬로 관리되는 키에 대해 클라이언트 사이드 필드 수준 암호화를 구성하려면 줄 바꿈 없이 기본64인코딩된 96바이트 문자열을 지정해야 합니다.

이러한 자격 증명이 로그로 유출될 위험을 줄이기 위해 다음 절차에서는 환경 변수를 사용하여 mongosh 에 값을 전달합니다.

다음 작업은 명시된 요구 사항을 충족하는 키를 생성하고 사용자의 ~/.profile 에 추가합니다. DEV_LOCAL_KEY 키가 이미 존재하는 경우 이 작업을 건너뜁니다.

echo "export DEV_LOCAL_KEY=\"$(head -c 96 /dev/urandom | base64 | tr -d '\n')\"" >> ~/.profile

로드된 환경 변수를 새로 고치려면 호스트 운영 체제에서 로그아웃했다가 다시 로그인해야 할 수 있습니다. 또는 source ~/.profile 명령을 사용하여 셸을 수동으로 새로 고칠 수 있습니다.

참고

특정 호스트 운영 체제 또는 셸에는 영구 환경 변수를 설정하는 절차가 다를 수 있습니다. 더 구체적인 절차는 호스트 OS 또는 셸의 설명서를 참조하세요.

2

, 및 mongosh --eval --shell --nodb 옵션을 사용하여 세션을 생성합니다.

mongosh --eval "var LOCAL_KEY = '$DEV_LOCAL_KEY' " \
--shell --nodb

이 예제에서는 MongoDB 데이터베이스에 연결하지 않고도 mongosh 를 자동으로 엽니다. --eval 옵션은 mongoshLOCAL_KEY 변수를 해당 환경 변수의 값으로 설정합니다.

3

mongosh 에서 클라이언트 사이드 필드 수준 암호화 구성 문서를 저장하기 위한 새 ClientSideFieldLevelEncryptionOptions 변수를 만듭니다.

var ClientSideFieldLevelEncryptionOptions = {
"keyVaultNamespace" : "encryption.__dataKeys",
"kmsProviders" : {
"local" : {
"key" : BinData(0, LOCAL_KEY)
}
}
}
4

mongosh 에서 Mongo() 생성자를 사용하여 대상 클러스터에 대한 데이터베이스 연결을 설정합니다. ClientSideFieldLevelEncryptionOptions 문서를 Mongo() 생성자의 두 번째 매개 변수로 지정하여 클라이언트 사이드 필드 수준 암호화를 위한 연결을 구성합니다.

csfleDatabaseConnection = Mongo(
"mongodb://replaceMe.example.net:27017/?replicaSet=myMongoCluster",
ClientSideFieldLevelEncryptionOptions
)

replaceMe.example.net URI 를 대상 cluster에 대한 연결 문자열로 바꿉니다.

클라이언트 사이드 필드 수준 암호화 shell 메서드에 액세스하려면 csfleDatabaseConnection 객체를 사용합니다.

클라이언트 사이드 필드 수준 암호화를 위해 구성된 데이터베이스 연결 설정에 대한 전체 문서는 Mongo() 참고 생성자를 참고하세요.

5

csfleDatabaseConnection 데이터베이스 연결 객체에서 getKeyVault() 메서드를 사용하여 keyVault 객체를 생성합니다.

keyVault = csfleDatabaseConnection.getKeyVault();

중요

클라이언트 사이드 필드 수준 암호화는 서버에서 적용되는 키 대체 이름의 고유성에 따라 달라집니다. getKeyVault() keyAltNames getKeyVault() 에 고유 인덱스 가 없는 경우 해당 인덱스를 생성합니다. 에 의해 생성된 고유 인덱스 를삭제하지 마세요 .

6

keyVault 객체에서 KeyVault.createKey() 메서드를 사용하여 키 볼트에 새 데이터 암호화 키를 생성합니다.

keyVault.createKey(
"local",
[ "keyAlternateName" ]
)

구제척으로:

  • 구성된 로컬 관리 키를 지정하려면 첫 번째 매개 변수가 local 이어야 합니다 .

  • 두 번째 매개변수는 데이터 암호화 키에 대한 하나 이상의 keyAltNames 배열 일 수 있습니다. 각 키 대체 이름은 고유 해야 합니다. getKeyVault()keyAltNames 에 고유 인덱스를 생성하여 필드가 아직 존재하지 않는 경우 고유성을 적용합니다. 키 대체 이름을 사용하면 데이터 암호화 키를 쉽게 찾을 수 있습니다.

성공하면 createKey() 는 새 데이터 암호화 키의 UUID 를 반환합니다. UUID 는 데이터 암호화 키를 고유하게 식별하는 하위 유형 4 를 가진 BSON Binary (BinData) 객체입니다. UUID 문자열은 기본 바이너리 데이터를 16진수로 표현한 것입니다.

자동 MongoDB 클라이언트 사이드 필드 수준 암호화 를 구성하기 위해 공식 드라이버에 데이터 암호화 키를 제공하는 base64 경우 의 표현을 사용해야 UUID string 합니다.

mongosh 에서 다음 작업을 실행하여 UUID 16진수 string 을 base64 표현으로 변환할 수 있습니다.

UUID("b4b41b33-5c97-412e-a02b-743498346079").base64()

위의 createKey() 에서 반환되거나 기존 데이터 암호화 키 조회에 설명된 대로 이 명령에 자체 데이터 암호화 키의 UUID 를 제공합니다.

다음 절차에서는 mongosh 를 사용하여 데이터 암호화 키의 대체 이름을 관리합니다. 4.2+ 호환 드라이버를 사용한 데이터 암호화 키 관리에 대한 지침은 드라이버 설명서 를 대신 참조하세요.

아직 위 의 데이터 암호화 키 생성 단계에서 구성된 mongosh 세션 내에 있는 경우 단계로 바로 건너뛸 5 수 있습니다.

아래 탭을 사용하여 배포에 적합한 KMS 를 선택하세요.

1

AWS KMS에 대한 클라이언트 사이드 필드 레벨 암호화를 구성하려면 AWS 액세스 키 ID와 관련 시크릿 액세스 키가 필요합니다. AWS 액세스 키는 KMS 서비스에 대한 모든 목록읽기 권한이 있는 IAM 사용자와 일치해야 합니다.

이러한 자격 증명이 로그로 유출될 위험을 줄이기 위해 다음 절차에서는 환경 변수를 사용하여 mongosh 에 값을 전달합니다.

먼저 플랫폼 설명서에 따라 다음 환경 변수를 구성했는지 확인합니다.

  • AWS_ACCESS_KEY_ID

  • AWS_SECRET_ACCESS_KEY

다음으로 ,mongosh --shell--eval --nodb 옵션을 사용하여 세션을 생성합니다.

mongosh --eval "
var AWS_ACCESS_KEY_ID = '$AWS_ACCESS_KEY_ID'
var AWS_SECRET_ACCESS_KEY = '$AWS_SECRET_ACCESS_KEY'
" \
--shell --nodb

이 예에서는 MongoDB 데이터베이스에 연결하지 않고 을(를)mongosh 엽니다.--eval 옵션은 의 AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEY mongosh 변수를 해당 환경 변수의 값으로 설정합니다. 지정된 변수는 AWS CLI에서도 지원됩니다.

2

mongosh 에서 클라이언트 사이드 필드 수준 암호화 구성 문서를 저장하기 위한 새 ClientSideFieldLevelEncryptionOptions 변수를 만듭니다.

var ClientSideFieldLevelEncryptionOptions = {
"keyVaultNamespace" : "encryption.__dataKeys",
"kmsProviders" : {
"aws" : {
"accessKeyId" : AWS_ACCESS_KEY_ID,
"secretAccessKey" : AWS_SECRET_ACCESS_KEY
}
}
}
3

mongosh 에서 Mongo() 생성자를 사용하여 대상 클러스터에 대한 데이터베이스 연결을 설정합니다. ClientSideFieldLevelEncryptionOptions 문서를 Mongo() 생성자의 두 번째 매개 변수로 지정하여 클라이언트 사이드 필드 수준 암호화를 위한 연결을 구성합니다.

csfleDatabaseConnection = Mongo(
"mongodb://replaceMe.example.net:27017/?replicaSet=myMongoCluster",
ClientSideFieldLevelEncryptionOptions
)

replaceMe.example.net URI 를 대상 cluster에 대한 연결 문자열로 바꿉니다.

클라이언트 사이드 필드 수준 암호화 shell 메서드에 액세스하려면 csfleDatabaseConnection 객체를 사용합니다.

클라이언트 사이드 필드 수준 암호화를 위해 구성된 데이터베이스 연결 설정에 대한 전체 문서는 Mongo() 참고 생성자를 참고하세요.

4

csfleDatabaseConnection 데이터베이스 연결 객체에서 getKeyVault() 메서드를 사용하여 keyVault 객체를 생성합니다.

keyVault = csfleDatabaseConnection.getKeyVault();

중요

클라이언트 사이드 필드 수준 암호화는 서버에서 적용되는 키 대체 이름의 고유성에 따라 달라집니다. getKeyVault() keyAltNames getKeyVault() 에 고유 인덱스 가 없는 경우 해당 인덱스를 생성합니다. 에 의해 생성된 고유 인덱스 를삭제하지 마세요 .

5

아래 단계를 사용하여 기존 키 대체 이름을 추가하거나 제거합니다.

키 대체 이름 추가

중요

클라이언트 사이드 필드 수준 암호화는 서버에서 적용되는 키 대체 이름의 고유성에 따라 달라집니다. 새 키 대체 이름을 추가 하기 keyAltNames 전에 에 고유 인덱스가 있는지 확인합니다. 고유 인덱스가 삭제된 경우 키 대체 이름을 추가하기 전에 다시 생성 해야 합니다.

KeyVault.addKeyAlternateName() 를 사용하여 데이터 암호화 키에 새 대체 이름을 추가합니다.

keyVault.addKeyAlternateName(
UUID("<Replace Me With The UUID Of The Key To Modify"),
"NewKeyAltNameForMyFirstCSFLEDataKey"
)

구제척으로:

  • 첫 번째 매개변수는 수정할 데이터 암호화 키의 UUID 여야 합니다 .

  • 두 번째 매개변수는 고유한 문자열 이어야 합니다. getKeyVault()keyAltNames 에 고유 인덱스를 생성하여 키 대체 이름의 고유성을 적용합니다.

KeyVault.addKeyAlternateName() 은(는) 수정 전의 데이터 암호화 키 문서를 반환합니다. KeyVault.getKey() 를 사용하여 수정된 데이터 암호화 키를 조회합니다.

키 대체 이름 제거

데이터 암호화 키에서 키 대체 이름을 제거하려면 KeyVault.removeKeyAlternateName() 를 사용합니다.

keyVault.removeKeyAlternateName(
UUID("<Replace Me With The UUID Of The Key To Modify"),
"NewKeyAltNameForMyFirstCSFLEDataKey"
)

구제척으로:

  • 첫 번째 매개변수는 수정할 데이터 암호화 키의 UUID 여야 합니다 .

  • 두 번째 매개변수는 문자열 키 대체 이름 이어야 합니다 .

KeyVault.removeKeyAlternateName() 은(는) 수정 전의 데이터 암호화 키를 반환합니다. KeyVault.getKey() 를 사용하여 수정된 데이터 암호화 키를 조회합니다.

1

Azure Key Vault에 대한 클라이언트 사이드 필드 수준 암호화를 구성하려면 유효한 테넌트 ID, 클라이언트 ID 및 클라이언트 비밀이 필요합니다.

이러한 자격 증명이 로그로 유출될 위험을 줄이기 위해 다음 절차에서는 환경 변수를 사용하여 mongosh 에 값을 전달합니다.

먼저 플랫폼 설명서에 따라 다음 환경 변수를 구성했는지 확인합니다.

  • AZURE_TENANT_ID

  • AZURE_CLIENT_ID

  • AZURE_CLIENT_SECRET

다음으로 ,mongosh --shell--eval --nodb 옵션을 사용하여 세션을 생성합니다.

mongosh --eval "
var AZURE_TENANT_ID = '$AZURE_TENANT_ID'
var AZURE_CLIENT_ID = '$AZURE_CLIENT_ID'
var AZURE_CLIENT_SECRET = '$AZURE_CLIENT_SECRET'
" \
--shell --nodb

이 예에서는 MongoDB 데이터베이스에 연결하지 않고 mongosh 을(를) 엽니다. --eval 옵션은 { mongosh } 의 AZURE_TENANT_ID, AZURE_CLIENT_IDAZURE_CLIENT_SECRET 변수를 해당 환경 변수의 값으로 설정합니다.

2

mongosh 에서 클라이언트 사이드 필드 수준 암호화 구성 문서를 저장하기 위한 새 ClientSideFieldLevelEncryptionOptions 변수를 만듭니다.

var ClientSideFieldLevelEncryptionOptions = {
"keyVaultNamespace" : "encryption.__dataKeys",
"kmsProviders" : {
"azure" : {
"tenantId" : AZURE_TENANT_ID,
"clientId" : AZURE_CLIENT_ID,
"clientSecret" : AZURE_CLIENT_SECRET
}
}
}
3

mongosh 에서 Mongo() 생성자를 사용하여 대상 클러스터에 대한 데이터베이스 연결을 설정합니다. ClientSideFieldLevelEncryptionOptions 문서를 Mongo() 생성자의 두 번째 매개 변수로 지정하여 클라이언트 사이드 필드 수준 암호화를 위한 연결을 구성합니다.

csfleDatabaseConnection = Mongo(
"mongodb://replaceMe.example.net:27017/?replicaSet=myMongoCluster",
ClientSideFieldLevelEncryptionOptions
)

replaceMe.example.net URI 를 대상 cluster에 대한 연결 문자열로 바꿉니다.

클라이언트 사이드 필드 수준 암호화 shell 메서드에 액세스하려면 csfleDatabaseConnection 객체를 사용합니다.

클라이언트 사이드 필드 수준 암호화를 위해 구성된 데이터베이스 연결 설정에 대한 전체 문서는 Mongo() 참고 생성자를 참고하세요.

4

csfleDatabaseConnection 데이터베이스 연결 객체에서 getKeyVault() 메서드를 사용하여 keyVault 객체를 생성합니다.

keyVault = csfleDatabaseConnection.getKeyVault();

중요

클라이언트 사이드 필드 수준 암호화는 서버에서 적용되는 키 대체 이름의 고유성에 따라 달라집니다. getKeyVault() keyAltNames getKeyVault() 에 고유 인덱스 가 없는 경우 해당 인덱스를 생성합니다. 에 의해 생성된 고유 인덱스 를삭제하지 마세요 .

5

아래 단계를 사용하여 기존 키 대체 이름을 추가하거나 제거합니다.

키 대체 이름 추가

중요

클라이언트 사이드 필드 수준 암호화는 서버에서 적용되는 키 대체 이름의 고유성에 따라 달라집니다. 새 키 대체 이름을 추가 하기 keyAltNames 전에 에 고유 인덱스가 있는지 확인합니다. 고유 인덱스가 삭제된 경우 키 대체 이름을 추가하기 전에 다시 생성 해야 합니다.

KeyVault.addKeyAlternateName() 를 사용하여 데이터 암호화 키에 새 대체 이름을 추가합니다.

keyVault.addKeyAlternateName(
UUID("<Replace Me With The UUID Of The Key To Modify"),
"NewKeyAltNameForMyFirstCSFLEDataKey"
)

구제척으로:

  • 첫 번째 매개변수는 수정할 데이터 암호화 키의 UUID 여야 합니다 .

  • 두 번째 매개변수는 고유한 문자열 이어야 합니다. getKeyVault()keyAltNames 에 고유 인덱스를 생성하여 키 대체 이름의 고유성을 적용합니다.

KeyVault.addKeyAlternateName() 은(는) 수정 전의 데이터 암호화 키 문서를 반환합니다. KeyVault.getKey() 를 사용하여 수정된 데이터 암호화 키를 조회합니다.

키 대체 이름 제거

데이터 암호화 키에서 키 대체 이름을 제거하려면 KeyVault.removeKeyAlternateName() 를 사용합니다.

keyVault.removeKeyAlternateName(
UUID("<Replace Me With The UUID Of The Key To Modify"),
"NewKeyAltNameForMyFirstCSFLEDataKey"
)

구제척으로:

  • 첫 번째 매개변수는 수정할 데이터 암호화 키의 UUID 여야 합니다 .

  • 두 번째 매개변수는 문자열 키 대체 이름 이어야 합니다 .

KeyVault.removeKeyAlternateName() 은(는) 수정 전의 데이터 암호화 키를 반환합니다. KeyVault.getKey() 를 사용하여 수정된 데이터 암호화 키를 조회합니다.

1

GCP KMS에 대한 클라이언트 사이드 필드 수준 암호화를 구성하려면 GCP 이메일 및 관련 비공개 키가 필요합니다.

이러한 자격 증명이 로그로 유출될 위험을 줄이기 위해 다음 절차에서는 환경 변수를 사용하여 mongosh 에 값을 전달합니다.

먼저 플랫폼 설명서에 따라 다음 환경 변수를 구성했는지 확인합니다.

  • GCP_EMAIL

  • GCP_PRIVATEKEY

다음으로 ,mongosh --shell--eval --nodb 옵션을 사용하여 세션을 생성합니다.

mongosh --eval "
var GCP_EMAIL = '$GCP_EMAIL'
var GCP_PRIVATEKEY = '$GCP_PRIVATEKEY'
" \
--shell --nodb

이 예에서는 MongoDB 데이터베이스에 연결하지 않고 mongosh 을(를) 엽니다. --eval 옵션은 mongoshGCP_EMAILGCP_PRIVATEKEY 변수를 해당 환경 변수의 값으로 설정합니다.

2

mongosh 에서 클라이언트 사이드 필드 수준 암호화 구성 문서를 저장하기 위한 새 ClientSideFieldLevelEncryptionOptions 변수를 만듭니다.

var ClientSideFieldLevelEncryptionOptions = {
"keyVaultNamespace" : "encryption.__dataKeys",
"kmsProviders" : {
"gcp" : {
"email" : GCP_EMAIL,
"privateKey" : GCP_PRIVATEKEY
}
}
}
3

mongosh 에서 Mongo() 생성자를 사용하여 대상 클러스터에 대한 데이터베이스 연결을 설정합니다. ClientSideFieldLevelEncryptionOptions 문서를 Mongo() 생성자의 두 번째 매개 변수로 지정하여 클라이언트 사이드 필드 수준 암호화를 위한 연결을 구성합니다.

csfleDatabaseConnection = Mongo(
"mongodb://replaceMe.example.net:27017/?replicaSet=myMongoCluster",
ClientSideFieldLevelEncryptionOptions
)

replaceMe.example.net URI 를 대상 cluster에 대한 연결 문자열로 바꿉니다.

클라이언트 사이드 필드 수준 암호화 shell 메서드에 액세스하려면 csfleDatabaseConnection 객체를 사용합니다.

클라이언트 사이드 필드 수준 암호화를 위해 구성된 데이터베이스 연결 설정에 대한 전체 문서는 Mongo() 참고 생성자를 참고하세요.

4

csfleDatabaseConnection 데이터베이스 연결 객체에서 getKeyVault() 메서드를 사용하여 keyVault 객체를 생성합니다.

keyVault = csfleDatabaseConnection.getKeyVault();

중요

클라이언트 사이드 필드 수준 암호화는 서버에서 적용되는 키 대체 이름의 고유성에 따라 달라집니다. getKeyVault() keyAltNames getKeyVault() 에 고유 인덱스 가 없는 경우 해당 인덱스를 생성합니다. 에 의해 생성된 고유 인덱스 를삭제하지 마세요 .

5

아래 단계를 사용하여 기존 키 대체 이름을 추가하거나 제거합니다.

키 대체 이름 추가

중요

클라이언트 사이드 필드 수준 암호화는 서버에서 적용되는 키 대체 이름의 고유성에 따라 달라집니다. 새 키 대체 이름을 추가 하기 keyAltNames 전에 에 고유 인덱스가 있는지 확인합니다. 고유 인덱스가 삭제된 경우 키 대체 이름을 추가하기 전에 다시 생성 해야 합니다.

KeyVault.addKeyAlternateName() 를 사용하여 데이터 암호화 키에 새 대체 이름을 추가합니다.

keyVault.addKeyAlternateName(
UUID("<Replace Me With The UUID Of The Key To Modify"),
"NewKeyAltNameForMyFirstCSFLEDataKey"
)

구제척으로:

  • 첫 번째 매개변수는 수정할 데이터 암호화 키의 UUID 여야 합니다 .

  • 두 번째 매개변수는 고유한 문자열 이어야 합니다. getKeyVault()keyAltNames 에 고유 인덱스를 생성하여 키 대체 이름의 고유성을 적용합니다.

KeyVault.addKeyAlternateName() 은(는) 수정 전의 데이터 암호화 키 문서를 반환합니다. KeyVault.getKey() 를 사용하여 수정된 데이터 암호화 키를 조회합니다.

키 대체 이름 제거

데이터 암호화 키에서 키 대체 이름을 제거하려면 KeyVault.removeKeyAlternateName() 를 사용합니다.

keyVault.removeKeyAlternateName(
UUID("<Replace Me With The UUID Of The Key To Modify"),
"NewKeyAltNameForMyFirstCSFLEDataKey"
)

구제척으로:

  • 첫 번째 매개변수는 수정할 데이터 암호화 키의 UUID 여야 합니다 .

  • 두 번째 매개변수는 문자열 키 대체 이름 이어야 합니다 .

KeyVault.removeKeyAlternateName() 은(는) 수정 전의 데이터 암호화 키를 반환합니다. KeyVault.getKey() 를 사용하여 수정된 데이터 암호화 키를 조회합니다.

1

로컬로 관리되는 키에 대해 클라이언트 사이드 필드 수준 암호화를 구성하려면 줄 바꿈 없이 기본64인코딩된 96바이트 문자열을 지정해야 합니다.

이러한 자격 증명이 로그로 유출될 위험을 줄이기 위해 다음 절차에서는 환경 변수를 사용하여 mongosh 에 값을 전달합니다.

다음 작업은 명시된 요구 사항을 충족하는 키를 생성하고 사용자의 ~/.profile 에 추가합니다. DEV_LOCAL_KEY 키가 이미 존재하는 경우 이 작업을 건너뜁니다.

echo "export DEV_LOCAL_KEY=\"$(head -c 96 /dev/urandom | base64 | tr -d '\n')\"" >> ~/.profile

로드된 환경 변수를 새로 고치려면 호스트 운영 체제에서 로그아웃했다가 다시 로그인해야 할 수 있습니다. 또는 source ~/.profile 명령을 사용하여 셸을 수동으로 새로 고칠 수 있습니다.

참고

특정 호스트 운영 체제 또는 셸에는 영구 환경 변수를 설정하는 절차가 다를 수 있습니다. 더 구체적인 절차는 호스트 OS 또는 셸의 설명서를 참조하세요.

2

, 및 mongosh --eval --shell --nodb 옵션을 사용하여 세션을 생성합니다.

mongosh --eval "var LOCAL_KEY = '$DEV_LOCAL_KEY' " \
--shell --nodb

이 예제에서는 MongoDB 데이터베이스에 연결하지 않고도 mongosh 를 자동으로 엽니다. --eval 옵션은 mongoshLOCAL_KEY 변수를 해당 환경 변수의 값으로 설정합니다.

3

mongosh 에서 클라이언트 사이드 필드 수준 암호화 구성 문서를 저장하기 위한 새 ClientSideFieldLevelEncryptionOptions 변수를 만듭니다.

var ClientSideFieldLevelEncryptionOptions = {
"keyVaultNamespace" : "encryption.__dataKeys",
"kmsProviders" : {
"local" : {
"key" : BinData(0, LOCAL_KEY)
}
}
}
4

mongosh 에서 Mongo() 생성자를 사용하여 대상 클러스터에 대한 데이터베이스 연결을 설정합니다. ClientSideFieldLevelEncryptionOptions 문서를 Mongo() 생성자의 두 번째 매개 변수로 지정하여 클라이언트 사이드 필드 수준 암호화를 위한 연결을 구성합니다.

csfleDatabaseConnection = Mongo(
"mongodb://replaceMe.example.net:27017/?replicaSet=myMongoCluster",
ClientSideFieldLevelEncryptionOptions
)

replaceMe.example.net URI 를 대상 cluster에 대한 연결 문자열로 바꿉니다.

클라이언트 사이드 필드 수준 암호화 shell 메서드에 액세스하려면 csfleDatabaseConnection 객체를 사용합니다.

클라이언트 사이드 필드 수준 암호화를 위해 구성된 데이터베이스 연결 설정에 대한 전체 문서는 Mongo() 참고 생성자를 참고하세요.

5

csfleDatabaseConnection 데이터베이스 연결 객체에서 getKeyVault() 메서드를 사용하여 keyVault 객체를 생성합니다.

keyVault = csfleDatabaseConnection.getKeyVault();

중요

클라이언트 사이드 필드 수준 암호화는 서버에서 적용되는 키 대체 이름의 고유성에 따라 달라집니다. getKeyVault() keyAltNames getKeyVault() 에 고유 인덱스 가 없는 경우 해당 인덱스를 생성합니다. 에 의해 생성된 고유 인덱스 를삭제하지 마세요 .

6

아래 단계를 사용하여 기존 키 대체 이름을 추가하거나 제거합니다.

키 대체 이름 추가

중요

클라이언트 사이드 필드 수준 암호화는 서버에서 적용되는 키 대체 이름의 고유성에 따라 달라집니다. 새 키 대체 이름을 추가 하기 keyAltNames 전에 에 고유 인덱스가 있는지 확인합니다. 고유 인덱스가 삭제된 경우 키 대체 이름을 추가하기 전에 다시 생성 해야 합니다.

KeyVault.addKeyAlternateName() 를 사용하여 데이터 암호화 키에 새 대체 이름을 추가합니다.

keyVault.addKeyAlternateName(
UUID("<Replace Me With The UUID Of The Key To Modify"),
"NewKeyAltNameForMyFirstCSFLEDataKey"
)

구제척으로:

  • 첫 번째 매개변수는 수정할 데이터 암호화 키의 UUID 여야 합니다 .

  • 두 번째 매개변수는 고유한 문자열 이어야 합니다. getKeyVault()keyAltNames 에 고유 인덱스를 생성하여 키 대체 이름의 고유성을 적용합니다.

KeyVault.addKeyAlternateName() 은(는) 수정 전의 데이터 암호화 키 문서를 반환합니다. KeyVault.getKey() 를 사용하여 수정된 데이터 암호화 키를 조회합니다.

키 대체 이름 제거

데이터 암호화 키에서 키 대체 이름을 제거하려면 KeyVault.removeKeyAlternateName() 를 사용합니다.

keyVault.removeKeyAlternateName(
UUID("<Replace Me With The UUID Of The Key To Modify"),
"NewKeyAltNameForMyFirstCSFLEDataKey"
)

구제척으로:

  • 첫 번째 매개변수는 수정할 데이터 암호화 키의 UUID 여야 합니다 .

  • 두 번째 매개변수는 문자열 키 대체 이름 이어야 합니다 .

KeyVault.removeKeyAlternateName() 은(는) 수정 전의 데이터 암호화 키를 반환합니다. KeyVault.getKey() 를 사용하여 수정된 데이터 암호화 키를 조회합니다.

경고

데이터 암호화 키를 삭제하면 해당 키를 사용하여 암호화된 모든 필드를 영구적으로 읽을 수 없는 상태로 만듭니다.

다음 절차에서는 mongosh 를 사용하여 키 볼트에서 데이터 암호화 키를 제거합니다. 4 를 사용한 데이터 암호화 키 관리에 대한 지침입니다.2+ 호환 드라이버에 대해서는 드라이버 설명서 를 대신 참조하세요.

아직 위 의 데이터 암호화 키 생성 단계에서 구성된 mongosh 세션 내에 있는 경우 단계로 바로 건너뛸 5 수 있습니다.

아래 탭을 사용하여 배포에 적합한 KMS 를 선택하세요.

1

AWS KMS에 대한 클라이언트 사이드 필드 레벨 암호화를 구성하려면 AWS 액세스 키 ID와 관련 시크릿 액세스 키가 필요합니다. AWS 액세스 키는 KMS 서비스에 대한 모든 목록읽기 권한이 있는 IAM 사용자와 일치해야 합니다.

이러한 자격 증명이 로그로 유출될 위험을 줄이기 위해 다음 절차에서는 환경 변수를 사용하여 mongosh 에 값을 전달합니다.

먼저 플랫폼 설명서에 따라 다음 환경 변수를 구성했는지 확인합니다.

  • AWS_ACCESS_KEY_ID

  • AWS_SECRET_ACCESS_KEY

다음으로 ,mongosh --shell--eval --nodb 옵션을 사용하여 세션을 생성합니다.

mongosh --eval "
var AWS_ACCESS_KEY_ID = '$AWS_ACCESS_KEY_ID'
var AWS_SECRET_ACCESS_KEY = '$AWS_SECRET_ACCESS_KEY'
" \
--shell --nodb

이 예에서는 MongoDB 데이터베이스에 연결하지 않고 을(를)mongosh 엽니다.--eval 옵션은 의 AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEY mongosh 변수를 해당 환경 변수의 값으로 설정합니다. 지정된 변수는 AWS CLI에서도 지원됩니다.

2

mongosh 에서 클라이언트 사이드 필드 수준 암호화 구성 문서를 저장하기 위한 새 ClientSideFieldLevelEncryptionOptions 변수를 만듭니다.

var ClientSideFieldLevelEncryptionOptions = {
"keyVaultNamespace" : "encryption.__dataKeys",
"kmsProviders" : {
"aws" : {
"accessKeyId" : AWS_ACCESS_KEY_ID,
"secretAccessKey" : AWS_SECRET_ACCESS_KEY
}
}
}
3

mongosh 에서 Mongo() 생성자를 사용하여 대상 클러스터에 대한 데이터베이스 연결을 설정합니다. ClientSideFieldLevelEncryptionOptions 문서를 Mongo() 생성자의 두 번째 매개 변수로 지정하여 클라이언트 사이드 필드 수준 암호화를 위한 연결을 구성합니다.

csfleDatabaseConnection = Mongo(
"mongodb://replaceMe.example.net:27017/?replicaSet=myMongoCluster",
ClientSideFieldLevelEncryptionOptions
)

replaceMe.example.net URI 를 대상 cluster에 대한 연결 문자열로 바꿉니다.

클라이언트 사이드 필드 수준 암호화 shell 메서드에 액세스하려면 csfleDatabaseConnection 객체를 사용합니다.

클라이언트 사이드 필드 수준 암호화를 위해 구성된 데이터베이스 연결 설정에 대한 전체 문서는 Mongo() 참고 생성자를 참고하세요.

4

csfleDatabaseConnection 데이터베이스 연결 객체에서 getKeyVault() 메서드를 사용하여 keyVault 객체를 생성합니다.

keyVault = csfleDatabaseConnection.getKeyVault();

중요

클라이언트 사이드 필드 수준 암호화는 서버에서 적용되는 키 대체 이름의 고유성에 따라 달라집니다. getKeyVault() keyAltNames getKeyVault() 에 고유 인덱스 가 없는 경우 해당 인덱스를 생성합니다. 에 의해 생성된 고유 인덱스 를삭제하지 마세요 .

5

키 볼트에서 데이터 키를 삭제하려면 keyVault 객체에서 KeyVault.deleteKey() 메서드를 사용합니다.

keyVault.deleteKey(UUID("<Replace Me With The UUID Of The Key To Delete"))
1

Azure Key Vault에 대한 클라이언트 사이드 필드 수준 암호화를 구성하려면 유효한 테넌트 ID, 클라이언트 ID 및 클라이언트 비밀이 필요합니다.

이러한 자격 증명이 로그로 유출될 위험을 줄이기 위해 다음 절차에서는 환경 변수를 사용하여 mongosh 에 값을 전달합니다.

먼저 플랫폼 설명서에 따라 다음 환경 변수를 구성했는지 확인합니다.

  • AZURE_TENANT_ID

  • AZURE_CLIENT_ID

  • AZURE_CLIENT_SECRET

다음으로 ,mongosh --shell--eval --nodb 옵션을 사용하여 세션을 생성합니다.

mongosh --eval "
var AZURE_TENANT_ID = '$AZURE_TENANT_ID'
var AZURE_CLIENT_ID = '$AZURE_CLIENT_ID'
var AZURE_CLIENT_SECRET = '$AZURE_CLIENT_SECRET'
" \
--shell --nodb

이 예에서는 MongoDB 데이터베이스에 연결하지 않고 mongosh 을(를) 엽니다. --eval 옵션은 { mongosh } 의 AZURE_TENANT_ID, AZURE_CLIENT_IDAZURE_CLIENT_SECRET 변수를 해당 환경 변수의 값으로 설정합니다.

2

mongosh 에서 클라이언트 사이드 필드 수준 암호화 구성 문서를 저장하기 위한 새 ClientSideFieldLevelEncryptionOptions 변수를 만듭니다.

var ClientSideFieldLevelEncryptionOptions = {
"keyVaultNamespace" : "encryption.__dataKeys",
"kmsProviders" : {
"azure" : {
"tenantId" : AZURE_TENANT_ID,
"clientId" : AZURE_CLIENT_ID,
"clientSecret" : AZURE_CLIENT_SECRET
}
}
}
3

mongosh 에서 Mongo() 생성자를 사용하여 대상 클러스터에 대한 데이터베이스 연결을 설정합니다. ClientSideFieldLevelEncryptionOptions 문서를 Mongo() 생성자의 두 번째 매개 변수로 지정하여 클라이언트 사이드 필드 수준 암호화를 위한 연결을 구성합니다.

csfleDatabaseConnection = Mongo(
"mongodb://replaceMe.example.net:27017/?replicaSet=myMongoCluster",
ClientSideFieldLevelEncryptionOptions
)

replaceMe.example.net URI 를 대상 cluster에 대한 연결 문자열로 바꿉니다.

클라이언트 사이드 필드 수준 암호화 shell 메서드에 액세스하려면 csfleDatabaseConnection 객체를 사용합니다.

클라이언트 사이드 필드 수준 암호화를 위해 구성된 데이터베이스 연결 설정에 대한 전체 문서는 Mongo() 참고 생성자를 참고하세요.

4

csfleDatabaseConnection 데이터베이스 연결 객체에서 getKeyVault() 메서드를 사용하여 keyVault 객체를 생성합니다.

keyVault = csfleDatabaseConnection.getKeyVault();

중요

클라이언트 사이드 필드 수준 암호화는 서버에서 적용되는 키 대체 이름의 고유성에 따라 달라집니다. getKeyVault() keyAltNames getKeyVault() 에 고유 인덱스 가 없는 경우 해당 인덱스를 생성합니다. 에 의해 생성된 고유 인덱스 를삭제하지 마세요 .

5

키 볼트에서 데이터 키를 삭제하려면 keyVault 객체에서 KeyVault.deleteKey() 메서드를 사용합니다.

keyVault.deleteKey(UUID("<Replace Me With The UUID Of The Key To Delete"))
1

GCP KMS에 대한 클라이언트 사이드 필드 수준 암호화를 구성하려면 GCP 이메일 및 관련 비공개 키가 필요합니다.

이러한 자격 증명이 로그로 유출될 위험을 줄이기 위해 다음 절차에서는 환경 변수를 사용하여 mongosh 에 값을 전달합니다.

먼저 플랫폼 설명서에 따라 다음 환경 변수를 구성했는지 확인합니다.

  • GCP_EMAIL

  • GCP_PRIVATEKEY

다음으로 ,mongosh --shell--eval --nodb 옵션을 사용하여 세션을 생성합니다.

mongosh --eval "
var GCP_EMAIL = '$GCP_EMAIL'
var GCP_PRIVATEKEY = '$GCP_PRIVATEKEY'
" \
--shell --nodb

이 예에서는 MongoDB 데이터베이스에 연결하지 않고 mongosh 을(를) 엽니다. --eval 옵션은 mongoshGCP_EMAILGCP_PRIVATEKEY 변수를 해당 환경 변수의 값으로 설정합니다.

2

mongosh 에서 클라이언트 사이드 필드 수준 암호화 구성 문서를 저장하기 위한 새 ClientSideFieldLevelEncryptionOptions 변수를 만듭니다.

var ClientSideFieldLevelEncryptionOptions = {
"keyVaultNamespace" : "encryption.__dataKeys",
"kmsProviders" : {
"gcp" : {
"email" : GCP_EMAIL,
"privateKey" : GCP_PRIVATEKEY
}
}
}
3

mongosh 에서 Mongo() 생성자를 사용하여 대상 클러스터에 대한 데이터베이스 연결을 설정합니다. ClientSideFieldLevelEncryptionOptions 문서를 Mongo() 생성자의 두 번째 매개 변수로 지정하여 클라이언트 사이드 필드 수준 암호화를 위한 연결을 구성합니다.

csfleDatabaseConnection = Mongo(
"mongodb://replaceMe.example.net:27017/?replicaSet=myMongoCluster",
ClientSideFieldLevelEncryptionOptions
)

replaceMe.example.net URI 를 대상 cluster에 대한 연결 문자열로 바꿉니다.

클라이언트 사이드 필드 수준 암호화 shell 메서드에 액세스하려면 csfleDatabaseConnection 객체를 사용합니다.

클라이언트 사이드 필드 수준 암호화를 위해 구성된 데이터베이스 연결 설정에 대한 전체 문서는 Mongo() 참고 생성자를 참고하세요.

4

csfleDatabaseConnection 데이터베이스 연결 객체에서 getKeyVault() 메서드를 사용하여 keyVault 객체를 생성합니다.

keyVault = csfleDatabaseConnection.getKeyVault();

중요

클라이언트 사이드 필드 수준 암호화는 서버에서 적용되는 키 대체 이름의 고유성에 따라 달라집니다. getKeyVault() keyAltNames getKeyVault() 에 고유 인덱스 가 없는 경우 해당 인덱스를 생성합니다. 에 의해 생성된 고유 인덱스 를삭제하지 마세요 .

5

키 볼트에서 데이터 키를 삭제하려면 keyVault 객체에서 KeyVault.deleteKey() 메서드를 사용합니다.

keyVault.deleteKey(UUID("<Replace Me With The UUID Of The Key To Delete"))
1

로컬로 관리되는 키에 대해 클라이언트 사이드 필드 수준 암호화를 구성하려면 줄 바꿈 없이 기본64인코딩된 96바이트 문자열을 지정해야 합니다.

이러한 자격 증명이 로그로 유출될 위험을 줄이기 위해 다음 절차에서는 환경 변수를 사용하여 mongosh 에 값을 전달합니다.

다음 작업은 명시된 요구 사항을 충족하는 키를 생성하고 사용자의 ~/.profile 에 추가합니다. DEV_LOCAL_KEY 키가 이미 존재하는 경우 이 작업을 건너뜁니다.

echo "export DEV_LOCAL_KEY=\"$(head -c 96 /dev/urandom | base64 | tr -d '\n')\"" >> ~/.profile

로드된 환경 변수를 새로 고치려면 호스트 운영 체제에서 로그아웃했다가 다시 로그인해야 할 수 있습니다. 또는 source ~/.profile 명령을 사용하여 셸을 수동으로 새로 고칠 수 있습니다.

참고

특정 호스트 운영 체제 또는 셸에는 영구 환경 변수를 설정하는 절차가 다를 수 있습니다. 더 구체적인 절차는 호스트 OS 또는 셸의 설명서를 참조하세요.

2

, 및 mongosh --eval --shell --nodb 옵션을 사용하여 세션을 생성합니다.

mongosh --eval "var LOCAL_KEY = '$DEV_LOCAL_KEY' " \
--shell --nodb

이 예제에서는 MongoDB 데이터베이스에 연결하지 않고도 mongosh 를 자동으로 엽니다. --eval 옵션은 mongoshLOCAL_KEY 변수를 해당 환경 변수의 값으로 설정합니다.

3

mongosh 에서 클라이언트 사이드 필드 수준 암호화 구성 문서를 저장하기 위한 새 ClientSideFieldLevelEncryptionOptions 변수를 만듭니다.

var ClientSideFieldLevelEncryptionOptions = {
"keyVaultNamespace" : "encryption.__dataKeys",
"kmsProviders" : {
"local" : {
"key" : BinData(0, LOCAL_KEY)
}
}
}
4

mongosh 에서 Mongo() 생성자를 사용하여 대상 클러스터에 대한 데이터베이스 연결을 설정합니다. ClientSideFieldLevelEncryptionOptions 문서를 Mongo() 생성자의 두 번째 매개 변수로 지정하여 클라이언트 사이드 필드 수준 암호화를 위한 연결을 구성합니다.

csfleDatabaseConnection = Mongo(
"mongodb://replaceMe.example.net:27017/?replicaSet=myMongoCluster",
ClientSideFieldLevelEncryptionOptions
)

replaceMe.example.net URI 를 대상 cluster에 대한 연결 문자열로 바꿉니다.

클라이언트 사이드 필드 수준 암호화 shell 메서드에 액세스하려면 csfleDatabaseConnection 객체를 사용합니다.

클라이언트 사이드 필드 수준 암호화를 위해 구성된 데이터베이스 연결 설정에 대한 전체 문서는 Mongo() 참고 생성자를 참고하세요.

5

csfleDatabaseConnection 데이터베이스 연결 객체에서 getKeyVault() 메서드를 사용하여 keyVault 객체를 생성합니다.

keyVault = csfleDatabaseConnection.getKeyVault();

중요

클라이언트 사이드 필드 수준 암호화는 서버에서 적용되는 키 대체 이름의 고유성에 따라 달라집니다. getKeyVault() keyAltNames getKeyVault() 에 고유 인덱스 가 없는 경우 해당 인덱스를 생성합니다. 에 의해 생성된 고유 인덱스 를삭제하지 마세요 .

6

키 볼트에서 데이터 키를 삭제하려면 keyVault 객체에서 KeyVault.deleteKey() 메서드를 사용합니다.

keyVault.deleteKey(UUID("<Replace Me With The UUID Of The Key To Delete"))

키 볼트에서 기존 데이터 암호화 키 문서를 검색하려면 다음 중 하나를 수행합니다.

자동 클라이언트 사이드 필드 수준 암호화 를 구성하기 위해 공식 4.2+ 호환 드라이버에 데이터 암호화 키를 제공하는 경우 UUID string 의 base64 표현을 사용해야 합니다.

mongosh 에서 다음 작업을 실행하여 UUID 16진수 string 을 base64 표현으로 변환할 수 있습니다.

UUID("b4b41b33-5c97-412e-a02b-743498346079").base64()

이 명령에 자체 데이터 암호화 키의 UUID 를 제공합니다.

돌아가기

마스터 키 및 데이터 암호화 키 관리

다음

제한 사항