클라이언트 사이드 필드 레벨 암호화
이 페이지의 내용
MongoDB Enterprise 또는 MongoDB Atlas cluster 로 작업할 때 mongosh
를 사용하여 클라이언트 측 필드 레벨 암호화 를 구성하고 암호화 지원에 연결할 수 있습니다. 클라이언트 사이드 필드 수준 암호화는 필드 값의 암호화 및 복호화를 지원하기 위해 데이터 암호화 키를 사용하고, 이 암호화 키 자료를 KMS(KMS)에 저장합니다.
mongosh
클라이언트 측 필드 레벨 암호화에 사용할 수 있도록 다음과 같은 KMS 제공자를 지원합니다.
Amazon Web Services KMS
Azure Key Vault
Google Cloud Platform KMS
로컬로 관리되는 키 파일
데이터 암호화 키 생성
다음 절차에서는 mongosh
를 사용하여 클라이언트측 필드 레벨 암호화 및 암호 해독에 사용할 데이터 암호화 키를 만듭니다.
아래 탭을 사용하여 배포에 적합한 KMS 를 선택합니다.
셸 을 mongosh
shell 시작합니다.
--nodb
옵션을 사용하여 실행 데이터베이스 에 연결하지 않고 mongosh
세션을 생성합니다.
mongosh --nodb
암호화 구성을 생성합니다.
AWS KMS에 대한 클라이언트 사이드 필드 레벨 암호화를 구성하려면 AWS 액세스 키 ID와 관련 시크릿 액세스 키가 필요합니다. AWS 액세스 키는 KMS 서비스에 대한 모든 목록 및 읽기 권한이 있는 IAM 사용자와 일치해야 합니다.
mongosh
에서 다음 자격 증명이 포함된 클라이언트 사이드 필드 레벨 암호화 구성을 저장하기 위한 새 AutoEncryptionOpts 변수를 생성합니다.
var autoEncryptionOpts = { "keyVaultNamespace" : "encryption.__dataKeys", "kmsProviders" : { "aws" : { "accessKeyId" : "YOUR_AWS_ACCESS_KEY_ID", "secretAccessKey" : "YOUR_AWS_SECRET_ACCESS_KEY" } } }
YOUR_AWS_ACCESS_KEY_ID
및 YOUR_AWS_SECRET_ACCESS_KEY
의 값을 적절하게 입력합니다.
암호화 지원팀에 연결하세요.
mongosh
에서 Mongo()
생성자를 사용하여 대상 클러스터에 대한 데이터베이스 연결을 설정합니다. 클라이언트 사이드 필드 레벨 암호화에 대한 연결을 구성하려면 AutoEncryptionOpts 문서를 Mongo()
생성자의 두 번째 매개변수로 지정합니다.
csfleDatabaseConnection = Mongo( "mongodb://replaceMe.example.net:27017/?replicaSet=myMongoCluster", autoEncryptionOpts )
replaceMe.example.net
URI을 대상 클러스터의 연결 문자열로 바꿉니다.
키 볼트 객체를 만듭니다.
getKeyVault()
shell 메서드를 사용하여 keyVault
객체를 만듭니다.
keyVault = csfleDatabaseConnection.getKeyVault();
암호화 키를 생성합니다.
createKey()
shell 메서드를 사용하여 데이터 암호화 키를 생성합니다.
keyVault.createKey( "aws", { region: "regionname", key: "awsarn" }, [ "keyAlternateName" ] )
구제척으로:
구성된 Amazon Web Services KMS를 지정하려면 첫 번째 파라미터가 반드시
"aws"
이어야 합니다.두 번째 매개변수는 반드시 다음을 포함하는 문서여야 합니다.
연결하려는 Amazon Web Services 리전
us-west-2
Amazon 리소스 이름(ARN) Amazon Web Services 고객 마스터 키(CMK)에 추가합니다.
세 번째 매개변수는 데이터 암호화 키에 대한 하나 이상의
keyAltNames
배열일 수도 있습니다. 각 키 대체 이름은 반드시 고유해야 합니다.getKeyVault()
은(는) 필드가 아직 존재하지 않는 경우 필드에 고유성을 적용하기 위해keyAltNames
에 고유 인덱스를 생성합니다. 키 대체 이름을 사용하면 데이터 암호화 키를 쉽게 찾을 수 있습니다.
성공하면 createKey()
은(는) 새 데이터 암호화 키의 UUID를 반환합니다. 키 볼트에서 새 데이터 암호화 키 문서를 검색하려면 다음 중 하나를 수행합니다.
getKey()
를 사용하여 UUID 로 생성된 키를 조회 하거나,getKeyByAltName()
을(를) 사용하여 대체 이름(지정된 경우)으로 키를 검색합니다.
셸 을 mongosh
shell 시작합니다.
--nodb
옵션을 사용하여 실행 중인 데이터베이스에 연결하지 않고 mongosh
세션을 생성합니다.
mongosh --nodb
암호화 구성을 생성합니다.
Azure Key Vault에 대한 클라이언트 사이드 필드 수준 암호화를 구성하려면 유효한 테넌트 ID, 클라이언트 ID 및 클라이언트 비밀이 필요합니다.
mongosh
에서 다음 자격 증명이 포함된 클라이언트 사이드 필드 레벨 암호화 구성을 저장하기 위한 새 AutoEncryptionOpts 변수를 생성합니다.
var autoEncryptionOpts = { "keyVaultNamespace" : "encryption.__dataKeys", "kmsProviders" : { "azure" : { "tenantId" : "YOUR_TENANT_ID", "clientId" : "YOUR_CLIENT_ID", "clientSecret" : "YOUR_CLIENT_SECRET" } } }
YOUR_TENANT_ID
, YOUR_CLIENT_ID
및 YOUR_CLIENT_SECRET
의 값을 적절히 입력합니다.
암호화 지원팀에 연결하세요.
mongosh
에서 Mongo()
생성자를 사용하여 대상 클러스터에 대한 데이터베이스 연결을 설정합니다. 클라이언트 사이드 필드 레벨 암호화에 대한 연결을 구성하려면 AutoEncryptionOpts 문서를 Mongo()
생성자의 두 번째 매개변수로 지정합니다.
csfleDatabaseConnection = Mongo( "mongodb://replaceMe.example.net:27017/?replicaSet=myMongoCluster", autoEncryptionOpts )
replaceMe.example.net
URI을 대상 클러스터의 연결 문자열로 바꿉니다.
키 볼트 객체를 만듭니다.
getKeyVault()
shell 메서드를 사용하여 keyVault
객체를 만듭니다.
keyVault = csfleDatabaseConnection.getKeyVault();
암호화 키를 생성합니다.
createKey()
shell 메서드를 사용하여 데이터 암호화 키를 생성합니다.
keyVault.createKey( "azure", { keyName: "keyvaultname", keyVaultEndpoint: "endpointname" }, [ "keyAlternateName" ] )
구제척으로:
구성된 Azure Key Vault 를 지정하려면 첫 번째 매개변수가
"azure"
이어야 합니다 .두 번째 매개변수는 다음을 포함하는 문서 여야 합니다 .
사용할 Azure Key Vault의 DNS 이름(예:
my-key-vault.vault.azure.net
)
세 번째 매개변수는 데이터 암호화 키에 대한 하나 이상의
keyAltNames
배열일 수도 있습니다. 각 키 대체 이름은 반드시 고유해야 합니다.getKeyVault()
은(는) 필드가 아직 존재하지 않는 경우 필드에 고유성을 적용하기 위해keyAltNames
에 고유 인덱스를 생성합니다. 키 대체 이름을 사용하면 데이터 암호화 키를 쉽게 찾을 수 있습니다.
성공하면 createKey()
은(는) 새 데이터 암호화 키의 UUID를 반환합니다. 키 볼트에서 새 데이터 암호화 키 문서를 검색하려면 다음 중 하나를 수행합니다.
getKey()
를 사용하여 UUID 로 생성된 키를 조회 하거나,getKeyByAltName()
을(를) 사용하여 대체 이름(지정된 경우)으로 키를 검색합니다.
셸 을 mongosh
shell 시작합니다.
--nodb
옵션을 사용하여 실행 중인 데이터베이스에 연결하지 않고 mongosh
세션을 생성합니다.
mongosh --nodb
암호화 구성을 생성합니다.
GCP KMS 에 대한 클라이언트 사이드 필드 수준 암호화 를 구성하려면 GCP 이메일 및 관련 비공개 키가 필요합니다.
mongosh
에서 다음 자격 증명이 포함된 클라이언트 사이드 필드 레벨 암호화 구성을 저장하기 위한 새 AutoEncryptionOpts 변수를 생성합니다.
var autoEncryptionOpts = { "keyVaultNamespace" : "encryption.__dataKeys", "kmsProviders" : { "gcp" : { "email" : "YOUR_GCP_EMAIL", "privateKey" : "YOUR_GCP_PRIVATEKEY" } } }
YOUR_GCP_EMAIL
및 YOUR_GCP_PRIVATEKEY
의 값을 적절하게 입력합니다.
암호화 지원팀에 연결하세요.
mongosh
에서 Mongo()
생성자를 사용하여 대상 클러스터에 대한 데이터베이스 연결을 설정합니다. 클라이언트 사이드 필드 레벨 암호화에 대한 연결을 구성하려면 AutoEncryptionOpts 문서를 Mongo()
생성자의 두 번째 매개변수로 지정합니다.
csfleDatabaseConnection = Mongo( "mongodb://replaceMe.example.net:27017/?replicaSet=myMongoCluster", autoEncryptionOpts )
replaceMe.example.net
URI을 대상 클러스터의 연결 문자열로 바꿉니다.
키 볼트 객체를 만듭니다.
getKeyVault()
shell 메서드를 사용하여 keyVault
객체를 만듭니다.
keyVault = csfleDatabaseConnection.getKeyVault();
암호화 키를 생성합니다.
createKey()
shell 메서드를 사용하여 데이터 암호화 키를 생성합니다.
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를 반환합니다. 키 볼트에서 새 데이터 암호화 키 문서를 검색하려면 다음 중 하나를 수행합니다.
getKey()
를 사용하여 UUID 로 생성된 키를 조회 하거나,getKeyByAltName()
을(를) 사용하여 대체 이름(지정된 경우)으로 키를 검색합니다.
셸 을 mongosh
shell 시작합니다.
--nodb
옵션을 사용하여 실행 중인 데이터베이스에 연결하지 않고 mongosh
세션을 생성합니다.
mongosh --nodb
암호화 구성을 생성합니다.
mongosh
에서 클라이언트 사이드 필드 수준 암호화 구성을 저장하기 위한 새 AutoEncryptionOpts 변수를 생성하고 MY_LOCAL_KEY
을(를) 1 단계에서 생성된 키로 바꿉니다.
var autoEncryptionOpts = { "keyVaultNamespace" : "encryption.__dataKeys", "kmsProviders" : { "local" : { "key" : BinData(0, "MY_LOCAL_KEY") } } }
암호화 지원팀에 연결하세요.
mongosh
에서 Mongo()
생성자를 사용하여 대상 클러스터에 대한 데이터베이스 연결을 설정합니다. 클라이언트 사이드 필드 레벨 암호화에 대한 연결을 구성하려면 AutoEncryptionOpts 문서를 Mongo()
생성자의 두 번째 매개변수로 지정합니다.
csfleDatabaseConnection = Mongo( "mongodb://replaceMe.example.net:27017/?replicaSet=myMongoCluster", autoEncryptionOpts )
키 볼트 객체를 만듭니다.
getKeyVault()
shell 메서드를 사용하여 keyVault
객체를 만듭니다.
keyVault = csfleDatabaseConnection.getKeyVault();
암호화 키를 생성합니다.
createKey()
shell 메서드를 사용하여 데이터 암호화 키를 생성합니다.
keyVault.createKey( "local", [ "keyAlternateName" ] )
구제척으로:
구성된 로컬 관리형 키를 지정하려면 첫 번째 매개변수가 반드시
local
여야 합니다.두 번째 매개변수는 데이터 암호화 키 에 대한 하나 이상의
keyAltNames
배열 일 수 있습니다. 각 키 대체 이름은 고유 해야 합니다.getKeyVault()
는keyAltNames
에 고유 인덱스 를 생성하여 필드 가 아직 존재하지 않는 경우 고유성을 시행하다 합니다. 키 대체 이름을 사용하면 데이터 암호화 키 를 쉽게 찾을 수 있습니다.
성공하면 createKey()
은(는) 새 데이터 암호화 키의 UUID를 반환합니다. 키 볼트에서 새 데이터 암호화 키 문서를 검색하려면 다음 중 하나를 수행합니다.
getKey()
를 사용하여 UUID 로 생성된 키를 조회 하거나,getKeyByAltName()
을(를) 사용하여 대체 이름(지정된 경우)으로 키를 검색합니다.