Bring Your Own Key (BYOK) の構成

完了

シナリオ

Key Vault のお客様は、Azure の外部にあるオンプレミスのハードウェア セキュリティ モジュール (HSM) から、Azure Key Vault をサポートする HSM にキーを安全に転送したいと考えています。 Key Vault の外部で生成されたキーをインポートするプロセスは、Bring Your Own Key (BYOK) と呼ばれます。

要件は次のとおりです。

  • 転送するキーは、プレーンテキスト形式の HSM の外部には存在しません。
  • HSM の外部では、転送されるキーは、Azure Key Vault HSM に保持されているキーによって常に保護されます。

用語

キー名 キー種類 オリジン 説明
キー交換キー (KEK) RSA Azure Key Vault HSM Azure Key Vault で生成された HSM ベースの RSA キー ペア
ラッピングキー AES ベンダー HSM オンプレミスの HSM によって生成された [エフェメラル] AES キー
ターゲット キー RSA、EC、AES (Managed HSM のみ) ベンダー HSM Azure Key Vault HSM に転送するキー

Key Exchange Key (KEK): これは、BYOK (Bring Your Own Key) キーのインポートを目的とした、ユーザーが生成し、HSM によって保護されたキー・ボールト内のキーです。 KEK には、次のプロパティが必要です。

  • 4096 ビット、3072 ビット、または 2048 ビットのサイズの RSA-HSM キーである必要があります。
  • その主要な操作 (key_ops) は 'import' に制限されており、BYOK プロセス中にのみ使用できます。
  • ターゲット キーがインポートされるのと同じコンテナー内に存在する必要があります。

ユーザーステップ

キー転送を実行するには:

  1. KEK を生成します。
  2. KEK の公開キーを取得します。
  3. BYOK ツールで提供される HSM ベンダーを使用して、KEK をターゲット HSM にインポートし、KEK によって保護されているターゲット キーをエクスポートします。
  4. 保護されたターゲット キーを Azure Key Vault にインポートします。

お客様は、手順 3. を完了するために、HSM ベンダーが提供する BYOK ツールとドキュメントを使用します。 キー転送 BLOB (".byok" ファイル) が生成されます。

HSM 制約

既存の HSM は、次のような、管理するキーに制約を適用できます。

  • HSM は、キーラップベースのエクスポートを許可するように構成する必要がある場合があります
  • HSM が制御されたエクスポートを許可するには、ターゲットキーを Cryptoki 属性 (CKA)_EXTRACTABLE としてマークする必要がある場合があります。
  • 場合によっては、KEK キーとラップ キーを CKA_TRUSTED としてマークする必要があります。これにより、HSM でキーをラップするために使用できます。

ソース HSM の構成は、通常、この仕様の範囲外です。 Microsoft では、HSM ベンダーが BYOK ツールに付属するドキュメントを作成し、そのような構成手順を含める必要があります。

手記

これらの手順のいくつかは、Azure PowerShell や Azure portal などの他のインターフェイスを使用して実行できます。 また、Key Vault SDK で同等の関数を使用してプログラムで実行することもできます。

KEK の生成

az keyvault key create コマンドを使用して、インポートするキー操作を設定して KEK を作成します。 次のコマンドから返されたキー識別子 'kid' をメモしておきます。

az keyvault key create --kty RSA-HSM --size 4096 --name KEKforBYOK --ops import --vault-name ContosoKeyVaultHSM




サービスでは、さまざまな KEK の長さがサポートされます。たとえば、Azure SQL では、2048 バイトまたは 3072 バイトのキー長のみがサポートされます。

KEK の公開キーを取得する

KEK の公開キー部分をダウンロードし、PEM ファイルに格納します。

az keyvault key download --name KEKforBYOK --vault-name ContosoKeyVaultHSM --file KEKforBYOK.publickey.pem




HSM ベンダーが提供する BYOK ツールを使用してキー転送 BLOB を生成する

HSM ベンダーが提供する BYOK ツールを使用して、キー転送 BLOB (".byok" ファイルとして格納) を作成します。 KEK 公開キーを として使用します。Privacy-Enhanced メール (.pem ファイル) は、このツールへの入力の 1 つになります。

キー転送ブロブ

長期的には、Microsoft は PKCS#11 CKM_RSA_AES_KEY_WRAP メカニズムを使用してターゲット キーを Azure Key Vault に転送したいと考えています。これは、このメカニズムによって 1 つの BLOB が生成され、さらに重要なのは、中間 AES キーが 2 つの HSM によって処理され、一時的であることが保証されるためです。 現在、このメカニズムは一部の HSM では使用できませんが、AES キーを使用してターゲット キーとCKM_AES_KEY_WRAP_PADを保護し、CKM_RSA_PKCS_OAEPで AES キーを保護すると、同等の BLOB が生成されます。

ターゲット キーのプレーンテキストは、キーの種類によって異なります。

  • RSA キーの場合、秘密キー ASN.1 DER エンコード [RFC3447] が PKCS#8 でラップされている [RFC5208]
  • EC キーの場合、秘密キー ASN.1 DER エンコード [RFC5915] が PKCS#8 でラップされている [RFC5208]
  • オクテット キーの場合、キーの生バイト

その後、プレーンテキスト キーのバイトは、CKM_RSA_AES_KEY_WRAP メカニズムを使用して変換されます。

  • エフェメラル AES キーは生成され、その後、SHA1 を用いた RSA-OAEP 方式によってラップ用 RSA キーで暗号化されます。
  • エンコードされたプレーンテキスト キーは、AES キーラップとパディングを使用して AES キーを使用して暗号化されます。
  • 暗号化された AES キーと暗号化されたプレーンテキスト キーが連結され、最終的な暗号テキスト BLOB が生成されます。

転送 BLOB の形式では、JSON Web Encryption コンパクト シリアル化 (RFC7516) が主に、正しい復号化のために必要なメタデータをサービスに配信するための手段として使用されます。