ノート:

Oracle Cloud Infrastructure Virtual Vaultsでの非対称キーの冗長性の作成

イントロダクション

今日のペースの速いデジタル世界では、データ・セキュリティが最も重要です。組織がクラウドベースのインフラストラクチャに依存するようになるにつれ、機密情報の機密性が最も重要になります。これを実現するために、多くの場合、セキュアな鍵管理を必要とする暗号化を使用します。ただし、キー管理では、特に冗長性と可用性に関して重要な課題が生じる可能性があります。このブログ投稿では、仮想ボールト内の非対称キーに関する冗長性を実現する方法と、2つの異なるリージョン内のアプリケーションがこれを暗号化および復号化のためにどのように活用するかについて説明します。

Oracle Cloud Infrastructure (OCI)は、データの暗号化、復号化および署名に使用されるキーを一元的に管理できるフルマネージド・キー管理サービスであるVirtual Private Vault(VPV)を提供しています。VPVの最も重要な機能の1つは、リージョン間のバックアップとリストアです。この機能を使用すると、リージョン間でキーをバックアップおよびリストアできるため、作成場所とは異なるリージョンでキーを使用できます。

バックアップおよびリストアは、OCIで提供される別のキー管理サービスであるVirtual Vault (VV)ではなく、VPにのみ機能することに注目してください。また、Virtual Vaultでハードウェア・セキュリティ・モジュール(HSM)のキーをバックアップする方法はありません。ただし、キー持込み(BYOK)/インポート・キー・オプションを使用すると、2つの異なるリージョンのボールトに同じキー・マテリアルをインポートできます。リージョンが完全に停止している場合でも、別のリージョンのコピーはバックアップとして機能します。この冗長性により、リージョンで停止や障害が発生した場合でも、キーを常に使用できるようになります。また、主要な冗長性およびディザスタ・リカバリを義務付ける規制要件およびコンプライアンス要件を満たすこともできます。

目標

このチュートリアルでは、同じRSAキーを2つの異なるリージョンにある仮想ボールトにインポートする手順の概要を説明します。キー・インポートはステップバイステップの手順を使用して1つのリージョンで実行され、スクリプトはインポートの他のリージョンで使用されます。キーをインポートした後、あるリージョンのキーを使用してテスト・データを暗号化し、他のリージョンにあるボールト内の同じキーを使用して結果の暗号テキストを復号化します。

前提条件

ボールトおよびキーを作成および管理するためのアクセス権を持つOCIアカウント。

ノート:「Bring your own key (BYOK)」シナリオでは、OpenSSLにパッチを適用する必要があります。OpenSSLにパッチを適用するには、必要なシェル・コマンドを実行するための特権アクセスが必要です。特権アクセスを持つLinuxボックスでシェル・コマンドを実行することをお薦めします。OCI CLIコマンドは、クラウド・シェルまたはOCI CLIがインストールおよび構成されているLinuxボックスで実行できます。この手順に従って、LinuxボックスにOCI CLIをインストールおよび構成します。

タスク1: 最初のリージョンのボールトへのキーのインポート(例: フェニックス)

非対称キー(RSA)を仮想Vaultにインポートするには、この手順に従います。

  1. OpenSSLにパッチを適用します: 「Bring your own key(BYOK)」シナリオでは、RSA_OAEP_AES_SHA256ラッピング用にOpenSSLにパッチを適用する必要があります。この手順に従って、OpenSSLにパッチを適用します。

  2. キー・マテリアルの生成: 要件に基づいてツールまたはソースによって生成されたキー・マテリアルを使用します。このチュートリアルでは、OpenSSLを使用してキー・マテリアルを生成します。

    $HOME/local/bin/openssl.sh genrsa -out PRIVATEKEY.pem 2048
    
    
  3. 公開RSAラップ・キーを取得します。

    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
    
    
  4. CLIインタフェースを使用してキー・マテリアルをラップするには、AESとともにRSA-OAEPを適用します。

    a.一時AESキーを生成します。

    openssl rand -out <temporary_AES_key_path> 32
    
    
    $HOME/local/bin/openssl.sh rand -out TEMP_AES_KEY.key 32
    
    

    b.SHA-256のRSA-OAEPを使用して、一時AESキーを公開ラッピング・キーでラップします。

    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.一時的なAES鍵資料の16進数を生成します。

    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.インポートするRSA秘密キーがPEMフォーマットの場合は、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.RSA秘密キーを一時AESキーでラップします。

    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.ラップされた両方のキーを連結して、ラップされたキー・マテリアルを作成します。

    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ラップされたキー・マテリアルにbase64エンコーディングを適用してからインポートし、CLIを介してキーを作成します。

    base64 WRAPPED_KEY_MATERIAL.bin -w 0 > WRAPPED_KEY_MATERIAL.base64
    
    
  5. OCI CLIを使用して、キー・マテリアルを外部キーとしてインポートします。

    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
    
    

タスク2: 2番目のリージョンの仮想ボールトへの同じキーのインポート(例: アッシュバーン)

タスク3: データの暗号化と復号化

ボールトにキーが作成されたため、それを使用してデータを暗号化および復号化できます。

  1. 最初のリージョンのボールトに存在するRSAキーを使用して暗号化します。

    oci kms crypto encrypt --key-id <key_ocid> --plaintext <plaintext Base64 Encoded> --encryption-algorithm <Encryption Algorithm> --endpoint <Vault Crypto Endpoint>

    • RSAキー暗号化を使用して暗号化するには、アルゴリズムは必須パラメータで、受け入れられる値はRSA_OAEP_SHA_1、RSA_OAEP_SHA_256です

      ピクチャ 1

  2. 2番目のリージョンのボールトに存在するRSAキーを使用して復号化します。

    oci kms crypto decrypt --key-id <key_ocid> --ciphertext <cipher text> --encryption-algorithm <Encryption Algorithm> --endpoint <Vault Crypto Endpoint>

    ピクチャ 2

OCI Key Managementは、キーの冗長性を実現し、暗号化キーを安全に管理できる堅牢な機能を提供します。仮想ボールト用の仮想プライベートVaultおよびBYOK/キー・インポート・オプションのリージョン間バックアップ、リストアおよびレプリケーションでは、1つのリージョンが完全に停止している場合でも、データが安全であることを確認できます。異なるリージョンでホストされるアプリケーションでは、これらの機能を利用して、異なるリージョン間でデータを安全に暗号化および復号化できます。

謝辞

作成者 - Chaitanya Chintala(クラウド・セキュリティ・アドバイザ)

その他の学習リソース

docs.oracle.com/learnで他のラボをご覧いただくか、Oracle Learning YouTubeチャネルでより無料のラーニング・コンテンツにアクセスしてください。また、education.oracle.com/learning-explorerにアクセスして、Oracle Learning Explorerになります。

製品ドキュメントについては、Oracle Help Centerを参照してください。