Docs Menu
Docs Home
/
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 database 에 연결하지 않고 mongosh 을(를) 엽니다. --eval 옵션은 mongoshAWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEY 변수를 해당 환경 변수의 값으로 설정합니다. 지정된 변수는 에서도 Amazon Web Services 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 를 대상 클러스터 의 연결 string 로 바꿉니다.

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

클라이언트 사이드 필드 수준 암호화 를 위해 구성된 데이터베이스 연결 설정에 대한 전체 문서는 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 string 은 기본 바이너리 데이터를 16진수로 표현한 것입니다.

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

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

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

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

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 database 에 연결하지 않고 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 를 대상 클러스터 의 연결 string 로 바꿉니다.

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

클라이언트 사이드 필드 수준 암호화 를 위해 구성된 데이터베이스 연결 설정에 대한 전체 문서는 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 string 은 기본 바이너리 데이터를 16진수로 표현한 것입니다.

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

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

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

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

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 database 에 연결하지 않고 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 를 대상 클러스터 의 연결 string 로 바꿉니다.

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

클라이언트 사이드 필드 수준 암호화 를 위해 구성된 데이터베이스 연결 설정에 대한 전체 문서는 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" ]
)

구제척으로:

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

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

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

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

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

    • keyname 키의 이름입니다.

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

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

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

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

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

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

1

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

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

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

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

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

참고

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

2

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

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

이 예시 에서는 MongoDB database 에 연결하지 않고도 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 를 대상 클러스터 의 연결 string 로 바꿉니다.

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

클라이언트 사이드 필드 수준 암호화 를 위해 구성된 데이터베이스 연결 설정에 대한 전체 문서는 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 string 은 기본 바이너리 데이터를 16진수로 표현한 것입니다.

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

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

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

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

다음 절차에서는 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 database 에 연결하지 않고 mongosh 을(를) 엽니다. --eval 옵션은 mongoshAWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEY 변수를 해당 환경 변수의 값으로 설정합니다. 지정된 변수는 에서도 Amazon Web Services 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 를 대상 클러스터 의 연결 string 로 바꿉니다.

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

클라이언트 사이드 필드 수준 암호화 를 위해 구성된 데이터베이스 연결 설정에 대한 전체 문서는 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 여야 합니다 .

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

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

키 대체 이름 제거

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

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

구제척으로:

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

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

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 database 에 연결하지 않고 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 를 대상 클러스터 의 연결 string 로 바꿉니다.

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

클라이언트 사이드 필드 수준 암호화 를 위해 구성된 데이터베이스 연결 설정에 대한 전체 문서는 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 여야 합니다 .

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

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

키 대체 이름 제거

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

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

구제척으로:

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

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

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 database 에 연결하지 않고 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 를 대상 클러스터 의 연결 string 로 바꿉니다.

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

클라이언트 사이드 필드 수준 암호화 를 위해 구성된 데이터베이스 연결 설정에 대한 전체 문서는 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 여야 합니다 .

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

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

키 대체 이름 제거

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

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

구제척으로:

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

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

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

1

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

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

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

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

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

참고

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

2

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

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

이 예시 에서는 MongoDB database 에 연결하지 않고도 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 를 대상 클러스터 의 연결 string 로 바꿉니다.

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

클라이언트 사이드 필드 수준 암호화 를 위해 구성된 데이터베이스 연결 설정에 대한 전체 문서는 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 여야 합니다 .

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

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

키 대체 이름 제거

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

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

구제척으로:

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

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

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 database 에 연결하지 않고 mongosh 을(를) 엽니다. --eval 옵션은 mongoshAWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEY 변수를 해당 환경 변수의 값으로 설정합니다. 지정된 변수는 에서도 Amazon Web Services 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 를 대상 클러스터 의 연결 string 로 바꿉니다.

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

클라이언트 사이드 필드 수준 암호화 를 위해 구성된 데이터베이스 연결 설정에 대한 전체 문서는 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 database 에 연결하지 않고 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 를 대상 클러스터 의 연결 string 로 바꿉니다.

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

클라이언트 사이드 필드 수준 암호화 를 위해 구성된 데이터베이스 연결 설정에 대한 전체 문서는 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 database 에 연결하지 않고 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 를 대상 클러스터 의 연결 string 로 바꿉니다.

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

클라이언트 사이드 필드 수준 암호화 를 위해 구성된 데이터베이스 연결 설정에 대한 전체 문서는 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바이트 string 을 지정해야 합니다.

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

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

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

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

참고

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

2

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

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

이 예시 에서는 MongoDB database 에 연결하지 않고도 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 를 대상 클러스터 의 연결 string 로 바꿉니다.

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

클라이언트 사이드 필드 수준 암호화 를 위해 구성된 데이터베이스 연결 설정에 대한 전체 문서는 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 를 제공합니다.

돌아가기

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