KeyVault.rerapManyDataKey()
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 배포를 위한 완전 관리형 서비스
MongoDB Enterprise: MongoDB의 구독 기반 자체 관리 버전
MongoDB Community: MongoDB의 소스 사용 가능 무료 자체 관리 버전
구문
KeyVault.rewrapManyDataKey
의 구문은 다음과 같습니다:
let keyVault = db.getMongo().getKeyVault() keyVault.rewrapManyDataKey( <filter>, <options> )
Parameter | 유형 | 설명 |
---|---|---|
| 키 볼트 컬렉션에 대한 쿼리 필터 | |
| 문서 | 이 문서에는 두 개의 필드가 있습니다.
|
행동
이 작업은 원자적이지 않으므로 다른 키 관리 작업과 병렬로 실행해서는 안 됩니다.
데이터베이스 연결 시 클라이언트 측 필드 레벨 암호화 구성 필요
mongosh
클라이언트 사이드 필드 레벨 암호화 메서드를 사용하려면 클라이언트 사이드 필드 레벨 암호화를 활성화한 데이터베이스 연결이 필요합니다. 클라이언트 사이드 필드 레벨 암호화가 활성화된 상태에서 현재 데이터베이스 연결이 시작되지 않은 경우 다음 중 하나를 수행하세요.
예시
이 예제를 사용하면 클라이언트 사이드 필드 수준 암호화를 빠르게 평가할 수 있습니다. 지원되는 각 KMS 제공자를 사용하는 구체적인 예는 암호화 키 관리를 참조하세요.
암호화된 클라이언트 만들기
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 } } } }