Hinweis:
- Dieses Tutorial erfordert Zugriff auf Oracle Cloud. Informationen zum Anmelden für einen kostenlosen Account finden Sie unter Erste Schritte mit Oracle Cloud Infrastructure Free Tier.
- Es verwendet Beispielwerte für Oracle Cloud Infrastructure-Zugangsdaten, -Mandanten und -Compartments. Wenn Sie Ihre Übung abgeschlossen haben, ersetzen Sie diese Werte durch die Werte, die für Ihre Cloud-Umgebung spezifisch sind.
Redundanz für asymmetrische Schlüssel in virtuellen Oracle Cloud Infrastructure-Vaults erstellen
Einführung
In der digitalen Welt von heute ist Datensicherheit von größter Bedeutung. Unternehmen verlassen sich zunehmend auf cloudbasierte Infrastruktur, um die Vertraulichkeit sensibler Informationen zu gewährleisten. Dazu verwenden sie oft Verschlüsselung, die eine sichere Schlüsselverwaltung erfordert. Das Schlüsselmanagement kann jedoch vor allem bei Redundanz und Verfügbarkeit erhebliche Herausforderungen stellen. In diesem Blogpost werden wir untersuchen, wie Sie Redundanz für asymmetrische Schlüssel in virtuellen Vaults erreichen können und wie Anwendungen in zwei verschiedenen Regionen dies für Verschlüsselung und Entschlüsselung nutzen können.
Oracle Cloud Infrastructure (OCI) bietet Virtual Private Vault (VPV), einen vollständig verwalteten Schlüsselverwaltungsservice, mit dem Sie Schlüssel für Datenverschlüsselung, -entschlüsselung und -signatur zentral verwalten können. Eines der wichtigsten Features von VPV ist regionsübergreifendes Backup und Restore. Mit diesem Feature können Sie Schlüssel regionsübergreifend sichern und wiederherstellen. So können Sie sie für die Verwendung in einer anderen Region als der Region verfügbar machen, in der sie erstellt wurden.
Es lohnt sich daran zu denken, dass Backup und Restore nur für VPV funktionieren, nicht für Virtual Vault (VV), einen anderen Schlüsselverwaltungsservice von OCI. Darüber hinaus gibt es keine Möglichkeit, HSM-(Hardware Security Module-)Schlüssel in Virtual Vault zu sichern. Mit der Option "Bring Your Own Key (BYOK)/Import Key" können Sie jedoch dasselbe Schlüsselmaterial in den Vaults zweier verschiedener Regionen importieren. Selbst wenn eine Region vollständig heruntergefahren ist, dient die Kopie in einer anderen Region als Backup. Diese Redundanz stellt sicher, dass Ihre Schlüssel immer verfügbar sind, auch wenn in einer Region ein Ausfall oder eine Katastrophe auftritt. Außerdem können Sie damit behördliche und Compliance-Anforderungen erfüllen, die wichtige Redundanz und Disaster Recovery erfordern.
Zielsetzung
In diesem Tutorial werden die allgemeinen Schritte zum Importieren desselben RSA-Schlüssels in virtuelle Vaults in zwei verschiedenen Regionen erläutert. Der Schlüsselimport wird Schritt für Schritt in einer Region ausgeführt, während ein Skript in der anderen Region für den Import verwendet wird. Nach dem Importieren des Schlüssels werden Testdaten mit dem Schlüssel in einer Region verschlüsselt. Anschließend wird der resultierende Cipher-Text mit demselben Schlüssel im Vault in der anderen Region entschlüsselt.
Voraussetzungen
Ein OCI-Account mit Zugriff zum Erstellen und Verwalten von Vaults und Schlüsseln.
Hinweis: Für das Szenario "Bring Your Own Key (BYOK)" müssen Sie OpenSSL patchen. Zum Patchen von OpenSSL ist der privilegierte Zugriff erforderlich, um die erforderlichen Shellbefehle auszuführen. Es wird empfohlen, die Shellbefehle in einem Linux-Feld mit privilegiertem Zugriff auszuführen. OCI-CLI-Befehle können entweder in der cloud shell oder in einem Linux-Feld ausgeführt werden, in dem OCI CLI installiert und konfiguriert ist. Befolgen Sie diese Prozedur, um OCI CLI auf einem Linux-Feld zu installieren und zu konfigurieren.
Aufgabe 1: Schlüssel in einen Vault in der ersten Region importieren (Beispiel:Phoenix)
Führen Sie die folgenden Schritte aus, um einen asymmetrischen Schlüssel (RSA) in einen virtuellen Vault zu importieren.
-
Patch für OpenSSL: Für das Szenario "Bring your own key(BYOK)" müssen Sie OpenSSL für das Wrapping
RSA_OAEP_AES_SHA256
patchen. Befolgen Sie diese Prozedur, um die OpenSSL zu patchen. -
Schlüsselmaterial generieren: Verwenden Sie Schlüsselmaterial, das von einem Tool oder einer Quelle basierend auf Ihren Anforderungen generiert wird. In diesem Tutorial generieren wir das Schlüsselmaterial mit OpenSSL.
$HOME/local/bin/openssl.sh genrsa -out PRIVATEKEY.pem 2048
-
Rufen Sie den öffentlichen RSA-Wrap-Schlüssel ab.
oci kms management wrapping-key get --endpoint <control_plane_URL>
oci kms management wrapping-key get --endpoint https://abcdefghijk-management.kms.us-phoenix-1.oraclecloud.com --raw-output --query 'data."public-key"' > VAULT_PUBLIC_WRAPPING_KEY.pem
-
Wenden Sie RSA-OAEP mit AES an, um Schlüsselmaterial mit der CLI-Schnittstelle zu wrappen.
a. Generieren Sie einen temporären AES-Schlüssel.
openssl rand -out <temporary_AES_key_path> 32
$HOME/local/bin/openssl.sh rand -out TEMP_AES_KEY.key 32
b. Wrappen Sie den temporären AES-Schlüssel mit dem öffentlichen umschließenden Schlüssel, und verwenden Sie RSA-OAEP mit SHA-256.
openssl pkeyutl -encrypt -in <temporary_AES_key_path> -inkey <vault_public_wrapping_key_path> -pubin -out <wrapped_temporary_AES_key_file> -pkeyopt rsa_padding_mode:oaep -pkeyopt rsa_oaep_md:sha256
$HOME/local/bin/openssl.sh pkeyutl -encrypt -in TEMP_AES_KEY.key -inkey VAULT_PUBLIC_WRAPPING_KEY.pem -pubin -out WRAPPED_TEMP_AES_KEY.bin -pkeyopt rsa_padding_mode:oaep -pkeyopt rsa_oaep_md:sha256
c. Hexadezimalwert des temporären AES-Schlüsselmaterials erzeugen
temporary_AES_key_hexdump=$(hexdump -v -e '/1 "%02x"' < temporary_AES_key_path)
TEMPORARY_AES_KEY_HEXDUMP=$(hexdump -v -e '/1 "%02x"' < TEMP_AES_KEY.key)
d. Wenn der zu importierende RSA-Private Key im PEM-Format vorliegt, konvertieren Sie ihn in DER.
${OpenSSL_path} pkcs8 -topk8 -nocrypt -inform PEM -outform DER -in <your_pem_RSA_private_key_path> -out <your_RSA_private_key_file>
$HOME/local/bin/openssl.sh pkcs8 -topk8 -nocrypt -inform PEM -outform DER -in PRIVATEKEY.pem -out TARGET_KEY.key
e. Wrappen Sie Ihren RSA-Private Key mit dem temporären AES-Schlüssel.
openssl enc -id-aes256-wrap-pad -iv A65959A6 -K temporary_AES_key_hexdump -in <your_RSA_private_key_file> -out <wrapped_target_key_file>
$HOME/local/bin/openssl.sh enc -id-aes256-wrap-pad -iv A65959A6 -K $TEMPORARY_AES_KEY_HEXDUMP -in TARGET_KEY.key -out WRAPPED_TARGET_KEY.bin
f. Erstellen Sie das gewrappte Schlüsselmaterial, indem Sie beide gewrappten Schlüssel verketten.
cat <wrapped_temporary_AES_key_file> <wrapped_target_key_file> > <wrapped_key_material_file>
cat WRAPPED_TEMP_AES_KEY.bin WRAPPED_TARGET_KEY.bin > WRAPPED_KEY_MATERIAL.bin
g. Wenden Sie die base64-Codierung auf das gewrappte Schlüsselmaterial an, und importieren Sie es, um einen Schlüssel über CLI zu erstellen.
base64 WRAPPED_KEY_MATERIAL.bin -w 0 > WRAPPED_KEY_MATERIAL.base64
-
Schlüsselmaterial mit OCI CLI als externen Schlüssel importieren.
oci kms management key import --wrapped-import-key <wrapped_key_material> --compartment-id <compartment_id> --display-name <key_name> --endpoint <control_plane_URL> --key-shape <key_encryption_information> --protection-mode <key_protection_mode>
echo "{ \"wrappingAlgorithm\": \"RSA_OAEP_AES_SHA256\", \"keyMaterial\": \"$(cat WRAPPED_KEY_MATERIAL.base64)\" }" > WRAPPED_IMPORT_KEY.json
echo "{ \"algorithm\": \"RSA\", \"length\": \"256\" }" > KEY_SHAPE.json
oci kms management key import --wrapped-import-key file://WRAPPED_IMPORT_KEY.json --compartment-id ocid1.compartment.oc1..aaaaaaaabbbbbbbbbccccccccdddddddeeeeeefffff --display-name IMPORTEDKEY --endpoint https://abcdefghijk-management.kms.us-phoenix-1.oraclecloud.com --key-shape file://KEY_SHAPE.json --protection-mode SOFTWARE
Aufgabe 2: denselben Schlüssel in einen virtuellen Vault in der zweiten Region importieren (Beispiel: Ashburn)
-
Verwenden Sie das folgende Skript zum Importieren eines asymmetrischen Schlüssels (RSA) in einen virtuellen Vault.
-
Öffnen Sie eine Eingabeaufforderung, und führen Sie dann das folgende Skript aus. Ersetzen Sie dabei die Beispieldateinamen und -werte nach Bedarf.
#!/bin/bash #This script is for demonstration purposes only. It provides #a functioning set of calls to show how to import RSA keys #into the OCI Vault service. set -e; #set -x; #OPENSSL_PATH="<path to patched openssl.sh>" #PRIVATE_KEY="<path to target private key which needs to be imported>" #KEY_SIZE="<key size in bytes>" #DISPLAY_NAME="<Display Name>" #VAULT_KEYMANAGEMENT_ENDPOINT="<Vault Management Endpoint>" #COMPARTMENT_ID="<Compartment OCID>" #Sample OPENSSL_PATH="$HOME/local/bin/openssl.sh" PRIVATE_KEY="$HOME/local/bin/PRIVATEKEY.pem" KEY_SIZE="256" DISPLAY_NAME="IMPORTEDKEY" VAULT_KEYMANAGEMENT_ENDPOINT="https://abceefghijk-management.kms.us-ashburn-1.oraclecloud.com" COMPARTMENT_ID="ocid1.compartment.oc1..aaaaaaaabbbbbbccccccccdddddddeeeeeeeffffffff" WORK_DIR=$(mktemp -d -t kms_XXXX) BASE64="base64" echo "Openssl Path: ${OPENSSL_PATH}" echo "Work Dir: ${WORK_DIR}" #Getting Vault Public RSA Wrapping Key oci kms management wrapping-key get --endpoint ${VAULT_KEYMANAGEMENT_ENDPOINT} --raw-output --query 'data."public-key"' > ${WORK_DIR}/vault_public_wrapping_key.pem WRAPPING_KEY="${WORK_DIR}/vault_public_wrapping_key.pem" #Convert the private key to PKCS8 DER format. target_key_path=${WORK_DIR}/target_key.key ${OPENSSL_PATH} pkcs8 -topk8 -nocrypt -inform PEM -outform DER -in ${PRIVATE_KEY} -out ${target_key_path} #Generate a temporary AES key. temp_aes_key_path=${WORK_DIR}/temp_aes_key.key ${OPENSSL_PATH} rand -out ${temp_aes_key_path} 32 #Wrap the temporary AES key by using RSA-OAEP with SHA-256. wrapped_temp_aes_key=${WORK_DIR}/wrapped_temp_aes_key.bin ${OPENSSL_PATH} pkeyutl -encrypt -in ${temp_aes_key_path} -inkey ${WRAPPING_KEY} -pubin -out ${wrapped_temp_aes_key} -pkeyopt rsa_padding_mode:oaep -pkeyopt rsa_oaep_md:sha256 #Wrap the target RSA key. wrapped_target_key=${WORK_DIR}/wrapped_target_key.bin temp_aes_key_hexdump=$(hexdump -v -e '/1 "%02x"' < ${temp_aes_key_path}) ${OPENSSL_PATH} enc -id-aes256-wrap-pad -iv A65959A6 -K ${temp_aes_key_hexdump} -in ${target_key_path} -out ${wrapped_target_key} #Create the wrapped key material. wrapped_key_material_bin=${WORK_DIR}/wrapped_key_material.bin cat ${wrapped_temp_aes_key} ${wrapped_target_key} > ${wrapped_key_material_bin} echo "Binary wrapped key for console is available at: ${wrapped_key_material_bin}" #Import the wrapped key to the Vault service after base64 encoding the payload. wrapped_key_material_base64=${WORK_DIR}/wrapped_key_material.base64 ${BASE64} ${wrapped_key_material_bin} -w 0 > ${wrapped_key_material_base64} echo "Base64 encoded wrapped key for CLI or API is available at: ${wrapped_key_material_base64}" #####1. IMPORT NEW KEY USING CONSOLE ##### #browse and upload ${WORK_DIR}/wrapped_key_material.bin file in key import section on console. #####2. IMPORT NEW KEY USING OCI_CLI ##### key_material=$(${BASE64} ${wrapped_key_material_bin}) echo "{ \"wrappingAlgorithm\": \"RSA_OAEP_AES_SHA256\", \"keyMaterial\": \"$(cat ${wrapped_key_material_base64})\" }" > wrapped_import_key.json echo "{ \"algorithm\": \"RSA\", \"length\": ${KEY_SIZE} }" > key_shape.json oci kms management key import --wrapped-import-key file://wrapped_import_key.json --compartment-id ${COMPARTMENT_ID} --display-name ${DISPLAY_NAME} --endpoint ${VAULT_KEYMANAGEMENT_ENDPOINT} --key-shape file://key_shape.json --protection-mode SOFTWARE
Aufgabe 3: Daten verschlüsseln und entschlüsseln
Nachdem Sie einen Schlüssel in Ihrem Vault erstellt haben, können Sie damit Ihre Daten verschlüsseln und entschlüsseln.
-
Rufen Sie die Schlüssel-ID für den von Ihnen erstellten Schlüssel ab. Sie finden die Schlüssel-ID, indem Sie im Vault auf Ihren Schlüssel klicken und dann im Schlüsseldetailbereich nach dem Feld "Schlüssel-ID" suchen.
-
Mit den Schlüsseln können Sie Daten verschlüsseln und entschlüsseln. Der in der Beispielanforderung enthaltene Klartext ist ein base64-encoded-Wert einer UTF-8-Zeichenfolge.
-
Nur Text: OCI ist eine sicherheitsorientierte Public Cloud-Infrastruktur
-
Base64: T0NJIGlzIGEgc2VjdXJpdHktZmlyc3QgcHVibGljIGNsb3VkIGluZnJhc3RydWN0dXJl
-
-
Mit dem im Vault vorhandenen RSA-Schlüssel für die erste Region verschlüsseln.
oci kms crypto encrypt --key-id <key_ocid> --plaintext <plaintext Base64 Encoded> --encryption-algorithm <Encryption Algorithm> --endpoint <Vault Crypto Endpoint>
-
Zur Verschlüsselung mit dem RSA-Schlüsselverschlüsselungsalgorithmus ist der obligatorische Parameter, und die akzeptierten Werte sind RSA_OAEP_SHA_1, RSA_OAEP_SHA_256
-
-
Entschlüsseln Sie den RSA-Schlüssel im Vault für die zweite Region.
oci kms crypto decrypt --key-id <key_ocid> --ciphertext <cipher text> --encryption-algorithm <Encryption Algorithm> --endpoint <Vault Crypto Endpoint>
OCI Key Management bietet robuste Features, mit denen Sie Schlüsselredundanz erreichen und Ihre Verschlüsselungsschlüssel sicher verwalten können. Mit regionsübergreifendem Backup, Restore und Replikation für Virtual Private Vault und BYOK/key-Importoption für Virtual Vault können Sie sicherstellen, dass Ihre Daten sicher bleiben, auch wenn eine Region vollständig heruntergefahren ist. Anwendungen, die in verschiedenen Regionen gehostet werden, können diese Features nutzen, um Daten regionsübergreifend sicher zu verschlüsseln und zu entschlüsseln.
Verwandte Links
Danksagungen
Autor - Chaitanya Chintala (Cloud Security Advisor)
Weitere Lernressourcen
Sehen Sie sich andere Übungen zu docs.oracle.com/learn an, oder greifen Sie auf weitere kostenlose Lerninhalte im Oracle Learning YouTube-Kanal zu. Besuchen Sie außerdem die Website education.oracle.com/learning-explorer, um Oracle Learning Explorer zu werden.
Produktdokumentation finden Sie im Oracle Help Center.
Create redundancy for Asymmetric Keys in Oracle Cloud Infrastructure Virtual Vaults
F82529-01
June 2023
Copyright © 2023, Oracle and/or its affiliates.