문서 메뉴
문서 홈
/
MongoDB 매뉴얼
/ / /

KeyVault.rerapManyDataKey()

이 페이지의 내용

  • 행동
  • 예제
KeyVault.rewrapManyDataKey(filter, options)

여러 DEK(데이터 암호화 키)를 해독하고 새 고객 마스터 키(CMK)로 다시 암호화합니다. 이 방법을 사용하여 DEK를 암호화하는 CMK를 순환합니다. CMK 및 DEK에 대해 자세히 알아보려면 암호화 키 및 키 볼트를 참조하세요.

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

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

let keyVault = db.getMongo().getKeyVault()
keyVault.rewrapManyDataKey(
<filter>,
<options>
)
매개 변수
유형
설명
filter
키 볼트 컬렉션에 대한 쿼리 필터
options
문서

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

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

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

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

경고

키 볼트 컬렉션 백업

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

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

중요

키 순환 지원

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

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

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

이 예제를 사용하면 클라이언트 사이드 필드 수준 암호화를 빠르게 평가할 수 있습니다. 지원되는 각 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

다음

연산자

이 페이지의 내용