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
ClientEncryption
메서드를 사용하려면 사용 중 암호화 활성화된 데이터베이스 연결이 필요합니다. 사용 중 암호화 활성화된 상태에서 현재 데이터베이스 연결이 시작되지 않은 경우 다음 중 하나를 수행합니다.
예시
이 예제를 사용하면 클라이언트 사이드 필드 수준 암호화를 빠르게 평가할 수 있습니다. 지원되는 각 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 } } } }