Join us Sept 17 at .local NYC! Use code WEB50 to save 50% on tickets. Learn more >
MongoDB Event
Docs Menu
Docs Home
/
데이터베이스 매뉴얼
/ / /

KeyVault.rerapManyDataKey() (mongosh 메서드)

KeyVault.rewrapManyDataKey(filter, options)

Decrypts multiple Data Encryption Keys (DEK) and re-encrypts them with a new Customer Master Key (CMK). 이 방법을 사용하여 DEK를 암호화하는 CMK 를 순환합니다. CMK 및 DEK에 학습 보려면 암호화 키 및 키 볼트를 참조하세요.

masterKey 매개변수를 통해 고객 마스터 키를 지정합니다. masterKey 인수를 포함하지 않으면 메서드는 해당 DEK의 메타데이터에 참고된 고객 마스터 키를 사용하여 각 DEK를 해독하고 암호화합니다. DEK의 메타데이터에 대해 자세히 알아보려면 암호 해독에 사용되는 메타데이터를 참조하세요.

반환합니다:영향을 받은 데이터 키의 수를 보고하는 BulkWriteResult 객체입니다.

경고

키 볼트 컬렉션 백업

데이터 암호화 키를 순환시키기 전에 키 볼트 collection의 백업을 만들어야 합니다. 데이터 암호화 키에 대한 액세스 권한을 잃게 되면 암호화된 모든 데이터를 잃게 됩니다.

컬렉션 의 백업 을 만드는 방법을 학습 보려면 MongoDB 도구를 사용하여 자체 관리 배포서버 백업 및 복원을 참조하세요.

이 명령은 다음 환경에서 호스팅되는 배포에서 사용할 수 있습니다.

  • MongoDB Atlas: 클라우드에서의 MongoDB 배포를 위한 완전 관리형 서비스

KeyVault.rewrapManyDataKey 의 구문은 다음과 같습니다:

let keyVault = db.getMongo().getKeyVault()
keyVault.rewrapManyDataKey(
<filter>,
<options>
)
Parameter
유형
설명

filter

키 볼트 컬렉션에 대한 쿼리 필터

options

문서

이 문서에는 두 개의 필드가 있습니다.

  • provider: KMS provider (Amazon Web Services KMS, Azure Key Vault, GCP KMS, 로컬 제공자 또는 KMIP)

  • masterKey: 새 데이터 키를 암호화하는 데 사용되는 KMS 전용 키입니다.

중요

키 순환 지원

키 로테이션 API에 대한 드라이버의 종속성을 보려면 호환성을 참조하세요.

이 작업은 원자적이지 않으므로 다른 키 관리 작업과 병렬로 실행해서는 안 됩니다.

mongosh ClientEncryption 메서드를 사용하려면 사용 중 암호화 활성화된 데이터베이스 연결이 필요합니다. 사용 중 암호화 활성화된 상태에서 현재 데이터베이스 연결이 시작되지 않은 경우 다음 중 하나를 수행합니다.

이 예제를 사용하면 클라이언트 사이드 필드 수준 암호화를 빠르게 평가할 수 있습니다. 지원되는 각 KMS 제공자를 사용하는 구체적인 예는 암호화 키 관리를 참조하세요.

1

mongosh 클라이언트를 시작합니다.

mongosh --nodb
2

로컬로 managed 키에 대한 클라이언트 사이드 필드 수준 암호화를 구성하려면 줄바꿈 없이 base64로 인코딩된 96바이트 문자열을 생성합니다.

const TEST_LOCAL_KEY = require("crypto").randomBytes(96).toString("base64")
3

생성된 로컬 키 문자열을 사용하여 클라이언트 사이드 필드 수준 암호화 옵션을 생성합니다.

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

Mongo() 생성자를 클라이언트 사이드 필드 수준 암호화 옵션과 함께 사용하여 데이터베이스 연결을 생성합니다. mongodb://myMongo.example.net URI를 대상 cluster의 연결 문자열 URI 로 바꿉니다.

encryptedClient = Mongo(
"mongodb://myMongo.example.net:27017/?replSetName=myMongo",
autoEncryptionOpts
)

KeyVault 객체를 검색하고 KeyVault.rewrapManyDataKey() 메서드를 사용하여 기존 키를 새 masterKey 로 다시 래핑합니다. 새 masterKey 이(가) 지정되지 않으면 각 데이터 키는 각각의 현재 masterKey 을(를) 유지합니다.

다음 예는 각 데이터 키를 해당 현재 masterKey 으로 다시 래핑하는 방법을 보여줍니다.

let keyVault = mongo.getKeyVault()
keyVault.rewrapManyDataKey()

다음 예에서는 각 데이터 키를 새 masterKey 로 다시 래핑하는 방법을 보여 줍니다.

let keyVault = mongo.getKeyVault()
keyVault.rewrapManyDataKey({}, {
provider: 'aws',
masterKey: {
region: 'us-east-2',
key: 'arn:aws:kms:us-east-2:...'
}
})

다음 예는 이전 30일 동안 다시 래핑되지 않은 데이터 키를 다시 래핑하는 방법을 보여줍니다.

let keyVault = mongo.getKeyVault()
const thirtyDaysAgo = new Date(Date.now() - 30 * 24 * 60 * 60 * 1000);
keyVault.rewrapManyDataKey({ updateDate: { $lt: thirtyDaysAgo } });

KeyVault.rewrapManyDataKey() 은 영향을 받은 데이터 키의 수를 자세히 설명하는 BulkWriteResult 객체를 반환합니다.

{
bulkWriteResult: BulkWriteResult {
result: {
ok: 1,
writeErrors: [],
writeConcernErrors: [],
insertedIds: [],
nInserted: 0,
nUpserted: 0,
nMatched: 3,
nModified: 3,
nRemoved: 0,
upserted: [],
opTime: { ts: Timestamp({ t: 1655840760, i: 3 }), t: 23 }
}
}
}

돌아가기

KeyVault.removeKeyAltName

이 페이지의 내용