Verschlüsselungs-Plug-In-Bibliothek für Azure Cosmos DB Java SDK für Java
Das Azure Cosmos Encryption-Plug-In wird verwendet, um Daten mit einem vom Benutzer bereitgestellten Schlüssel zu verschlüsseln, bevor sie in Cosmos DB gespeichert und beim Lesen aus der Datenbank entschlüsselt werden.
Quellcode | Paket (Maven) | API-Referenzdokumentation | Produktdokumentation | Proben
Erste Schritte
Einschließen des Pakets
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-cosmos-encryption</artifactId>
<version>2.6.0</version>
</dependency>
Weitere Informationen finden Sie unter maven central für frühere Releases.
Weitere Informationen zum Paket finden Sie unter javadocs .
Voraussetzungen
- Java Development Kit (JDK) mit Version 8 oder höher
- Ein aktives Azure-Konto. Wenn Sie keines besitzen, können Sie sich für ein kostenloses Kontoregistrieren. Zu Entwicklungs- und Testzwecken können Sie alternativ den Azure Cosmos DB-Emulator verwenden. Da das HTTPS-Zertifikat des Emulators selbstsigniert ist, müssen Sie das Zertifikat in den vertrauenswürdigen Java-Zertifikatspeicher importieren, wie hier erläutert.
- (Optional) SLF4J ist eine Protokollierungsfassade.
- (Optional) Die SLF4J-Bindung wird verwendet, um SLF4J ein bestimmtes Protokollierungsframework zuzuordnen.
- (Optional) Maven
SLF4J ist nur erforderlich, wenn Sie die Protokollierung verwenden möchten. Laden Sie außerdem eine SLF4J-Bindung herunter, um die SLF4J-API mit der Protokollierungsimplementierung Ihrer Wahl zu verknüpfen. Weitere Informationen finden Sie im SLF4J-Benutzerhandbuch.
Das SDK stellt Reactor Core-basierte asynchrone APIs bereit. Weitere Informationen zu den Reaktorkern- und Flux/Mono-Typen finden Sie hier.
Wichtige Begriffe
Das Azure Cosmos Encryption-Plug-In wird verwendet, um Daten mit einem vom Benutzer bereitgestellten Schlüssel zu verschlüsseln, bevor sie in Cosmos DB gespeichert und beim Lesen aus der Datenbank entschlüsselt werden. Darunter wird das Azure Cosmos DB Java SDK verwendet, das clientseitige logische Darstellungen für den Zugriff auf die Azure Cosmos DB-SQL-API bereitstellt. Ein Cosmos DB-Konto enthält null oder mehr Datenbanken, eine Datenbank (DB) null oder mehr Container und ein Container null oder mehr Elemente. Weitere Informationen zu Datenbanken, Containern und Elementen finden Sie hier. Einige wichtige Eigenschaften werden auf Der Ebene des Containers definiert, darunter der bereitgestellte Durchsatz und der Partitionsschlüssel.
Beispiele
Der folgende Abschnitt enthält mehrere Codeausschnitte, die einige der gängigsten Aufgaben der Cosmos Encryption-API behandeln, einschließlich:
- Erstellen eines Cosmos Encryption-Clients
- Erstellen einer Cosmos Encryption-Datenbank
- Erstellen eines Verschlüsselungscontainers
- CRUD-Vorgang für Elemente
Erstellen eines Cosmos Encryption-Clients
// Create a new CosmosEncryptionAsyncClient
CosmosAsyncClient cosmosAsyncClient = new CosmosClientBuilder()
.endpoint("<YOUR ENDPOINT HERE>")
.key("<YOUR KEY HERE>")
.buildAsyncClient();
KeyEncryptionKeyClientBuilder keyEncryptionKeyClientBuilder = new KeyEncryptionKeyClientBuilder().credential(tokenCredentials);
CosmosEncryptionAsyncClient cosmosEncryptionAsyncClient =
new CosmosEncryptionClientBuilder().cosmosAsyncClient(cosmosAsyncClient).keyEncryptionKeyResolver(
keyEncryptionKeyClientBuilder).keyEncryptionKeyResolverName(CosmosEncryptionClientBuilder.KEY_RESOLVER_NAME_AZURE_KEY_VAULT).buildAsyncClient();
Erstellen einer Cosmos Encryption-Datenbank
Sie müssen zuerst eine Datenbank erstellen und mithilfe des cosmos-Verschlüsselungsclients, der im vorherigen Beispiel erstellt wurde, ein Proxyobjekt der Cosmos-Verschlüsselungsdatenbank wie folgt erstellen:
// This will create a database with the regular cosmosAsyncClient.
CosmosEncryptionAsyncDatabase cosmosEncryptionAsyncDatabase = cosmosEncryptionAsyncClient.getCosmosAsyncClient()
.createDatabaseIfNotExists("<YOUR DATABASE NAME>")
// TIP: Our APIs are Reactor Core based, so try to chain your calls
.map(databaseResponse ->
// Get a reference to the encryption database
// This will create a cosmos encryption database proxy object.
cosmosEncryptionAsyncClient.getCosmosEncryptionAsyncDatabase(databaseResponse.getProperties().getId()))
.block(); // Blocking for demo purposes (avoid doing this in production unless you must)
Erstellen eines Cosmos-Verschlüsselungscontainers
Sie müssen zunächst einen Container mit ClientEncryptionPolicy erstellen, und mithilfe des im vorherigen Beispiel erstellten Cosmos-Verschlüsselungsdatenbankobjekts können Sie ein Cosmos-Verschlüsselungscontainerproxyobjekt wie folgt erstellen:
//Create Client Encryption Key
EncryptionKeyWrapMetadata metadata = new EncryptionKeyWrapMetadata(this.cosmosEncryptionAsyncClient.getKeyEncryptionKeyResolverName(), "key", "tempmetadata", EncryptionAlgorithm.RSA_OAEP.toString());
CosmosEncryptionAsyncContainer cosmosEncryptionAsyncContainer = cosmosEncryptionAsyncDatabase
.createClientEncryptionKey("key", CosmosEncryptionAlgorithm.AEAD_AES_256_CBC_HMAC_SHA256.getName(), metadata)
// TIP: Our APIs are Reactor Core based, so try to chain your calls
.then(Mono.defer(() -> {
//Create Encryption Container
ClientEncryptionIncludedPath includedPath = new ClientEncryptionIncludedPath();
includedPath.setClientEncryptionKeyId("key");
includedPath.setPath("/sensitiveString");
includedPath.setEncryptionType(CosmosEncryptionType.DETERMINISTIC.toString());
includedPath.setEncryptionAlgorithm(CosmosEncryptionAlgorithm.AEAD_AES_256_CBC_HMAC_SHA256.getName());
List<ClientEncryptionIncludedPath> paths = new ArrayList<>();
paths.add(includedPath);
ClientEncryptionPolicy clientEncryptionPolicy = new ClientEncryptionPolicy(paths);
CosmosContainerProperties properties = new CosmosContainerProperties("<YOUR CONTAINER NAME>", "/mypk");
properties.setClientEncryptionPolicy(clientEncryptionPolicy);
return cosmosEncryptionAsyncDatabase.getCosmosAsyncDatabase().createContainer(properties);
}))
.map(containerResponse ->
// Create a reference to the encryption container
// This will create a cosmos encryption container proxy object.
cosmosEncryptionAsyncDatabase.getCosmosEncryptionAsyncContainer(containerResponse.getProperties().getId()))
.block(); // Blocking for demo purposes (avoid doing this in production unless you must)
CRUD-Vorgang für Elemente
// Create an item
Pojo pojo = new Pojo();
pojo.setSensitiveString("Sensitive Information need to be encrypted");
cosmosEncryptionAsyncContainer.createItem(pojo)
.flatMap(response -> {
System.out.println("Created item: " + response.getItem());
// Read that item 👓
return cosmosEncryptionAsyncContainer.readItem(response.getItem().getId(),
new PartitionKey(response.getItem().getId()),
Pojo.class);
})
.flatMap(response -> {
System.out.println("Read item: " + response.getItem());
// Replace that item 🔁
Pojo p = response.getItem();
pojo.setSensitiveString("New Sensitive Information");
return cosmosEncryptionAsyncContainer.replaceItem(p, response.getItem().getId(),
new PartitionKey(response.getItem().getId()));
})
// delete that item 💣
.flatMap(response -> cosmosEncryptionAsyncContainer.deleteItem(response.getItem().getId(),
new PartitionKey(response.getItem().getId())))
.subscribe();
Hier finden Sie eine Erste Schritte-Beispiel-App.
Problembehandlung
Allgemein
Azure Cosmos DB ist eine schnelle und flexible verteilte Datenbank mit nahtloser Skalierung, garantierter Latenz und garantiertem Durchsatz. Die Skalierung Ihrer Datenbank mit Azure Cosmos DB erfordert weder aufwendige Änderungen an der Architektur noch das Schreiben von komplexem Code. Zentrales Hoch- und Herunterskalieren ist ebenso problemlos möglich wie das Aufrufen einer einzelnen API oder SDK-Methode. Da der Zugriff auf Azure Cosmos DB jedoch über Netzwerkaufrufe erfolgt, können Sie bei der Verwendung des Azure Cosmos DB Java SDK v4 clientseitige Optimierungen vornehmen, um eine optimale Leistung zu erzielen.
Der Leistungsleitfaden behandelt diese clientseitigen Optimierungen.
Der Leitfaden zur Problembehandlung behandelt häufige Probleme, Problemumgehungen, Diagnoseschritte und Tools, wenn Sie azure Cosmos DB Java SDK v4 mit Azure Cosmos DB SQL-API-Konten verwenden.
Aktivieren der Clientprotokollierung
Das Azure Cosmos DB Java SDK v4 verwendet SLF4j als Protokollierungsfassade, die die Anmeldung bei gängigen Protokollierungsframeworks wie log4j und logback unterstützt.
Wenn Sie beispielsweise log4j als Protokollierungsframework verwenden möchten, fügen Sie Ihrem Java-Klassenpfad die folgenden Bibliotheken hinzu:
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>${slf4j.version}</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>${log4j.version}</version>
</dependency>
Fügen Sie außerdem eine log4j-Konfiguration hinzu.
# this is a sample log4j configuration
# Set root logger level to INFO and its only appender to A1.
log4j.rootLogger=INFO, A1
log4j.category.com.azure.cosmos=INFO
#log4j.category.io.netty=OFF
#log4j.category.io.projectreactor=OFF
# A1 is set to be a ConsoleAppender.
log4j.appender.A1=org.apache.log4j.ConsoleAppender
# A1 uses PatternLayout.
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=%d %5X{pid} [%t] %-5p %c - %m%n
Nächste Schritte
- Cosmos-Verschlüsselungsbeispielprogramm ist hier
- Schnellstart: Schnellstart des Cosmos DB Core Java SDK: Erstellen einer Java-App zum Verwalten von Cosmos DB SQL-API-Daten
- Weitere Informationen zu Azure Cosmos DB Service
Mitwirken
Beiträge und Vorschläge für dieses Projekt sind willkommen. Für die meisten Beiträge ist die Zustimmung zu einer Lizenzvereinbarung für Mitwirkende (Contributor License Agreement, CLA) erforderlich, in der Sie erklären, dass Sie dazu berechtigt sind, uns die Rechte für die Nutzung Ihres Beitrags zu erteilen, und dies auch tun.
Wenn Sie einen Pull Request (PR) übermitteln, überprüft ein CLA-Bot automatisch, ob Sie eine Lizenzvereinbarung bereitstellen und den PR entsprechend ergänzen müssen (z.B. mit einer Bezeichnung oder einem Kommentar). Führen Sie einfach die Anweisungen des Bots aus. Sie müssen dies nur einmal für alle Repositorys ausführen, die unsere CLA verwenden.
Für dieses Projekt gelten die Microsoft-Verhaltensregeln für Open Source (Microsoft Open Source Code of Conduct). Weitere Informationen finden Sie in den häufig gestellten Fragen zum Verhaltenskodex. Sie können sich auch an opencode@microsoft.com wenden, wenn Sie weitere Fragen oder Anmerkungen haben.