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의 메타데이터에 대해 자세히 알아보려면 암호 해독에 사용되는 메타데이터를 참조하세요.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 전용 키입니다.
반환합니다: 영향을 받은 데이터 키의 수를 보고하는 BulkWriteResult 객체입니다.
경고
키 볼트 컬렉션 백업
데이터 암호화 키를 순환시키기 전에 키 볼트 collection의 백업을 만들어야 합니다. 데이터 암호화 키에 대한 액세스 권한을 잃게 되면 암호화된 모든 데이터를 잃게 됩니다.
컬렉션 의 백업 을 만드는 방법을 학습 보려면 MongoDB 도구를 사용하여 자체 관리 배포서버 백업 및 복원을 참조하세요.
행동
이 작업은 원자적이지 않으므로 다른 키 관리 작업과 병렬로 실행해서는 안 됩니다.
데이터베이스 연결 시 클라이언트 측 필드 레벨 암호화 구성 필요
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 } } } }