Azure Attestation を使用して Always Encrypted の構成証明を構成する
適用対象: Azure SQL Database
Microsoft Azure Attestation は、Intel Software Guard Extensions (Intel SGX) エンクレーブなどの高信頼実行環境 (TEE) を証明するためのソリューションです。
Azure SQL Database でのセキュリティで保護されたエンクレーブが設定された Always Encrypted に対して使用される Intel SGX エンクレーブを証明するために Azure Attestation を使用するには、次のことを行う必要があります。
構成証明プロバイダーを作成し、推奨される構成証明ポリシーを使用して構成します。
構成証明の URL を特定し、アプリケーション管理者との間で共有します。
重要
Azure SQL Database の Intel SGX エンクレーブでは、構成証明が必須であり、Microsoft Azure Attestation が必要です。 現在、Azure SQL Database の仮想化ベースのセキュリティ (VBS) エンクレーブでは、構成証明はサポートされていません。 この記事は、Intel SGX エンクレーブにのみ適用されます。
Note
構成証明の構成は、構成証明管理者が行います。 「Intel SGX エンクレーブと構成証明を構成する場合のロールと責任」をご覧ください。
構成証明プロバイダーを作成して構成する
構成証明プロバイダーは、構成証明ポリシーに対して構成証明要求を評価し、構成証明トークンを発行する Azure Attestation のリソースです。
構成証明ポリシーは、要求規則の文法を使用して指定します。
重要
構成証明プロバイダーは、エンクレーブ内で実行されているコードを検証しない、Intel SGX エンクレーブの既定のポリシーを使用して作成されます。 Microsoft は、セキュリティで保護されたエンクレーブが設定された Always Encrypted には、次の出力で使われている推奨されるポリシーを設定するようにし、既定のポリシーは使わないことを強くお勧めします。
Azure SQL Database の Always Encrypted に使用される Intel SGX エンクレーブを証明するには、次のポリシーをお勧めします。
version= 1.0;
authorizationrules
{
[ type=="x-ms-sgx-is-debuggable", value==false ]
&& [ type=="x-ms-sgx-product-id", value==4639 ]
&& [ type=="x-ms-sgx-svn", value>= 2 ]
&& [ type=="x-ms-sgx-mrsigner", value=="e31c9e505f37a58de09335075fc8591254313eb20bb1a27e5443cc450b6e33e5"]
=> permit();
[ type=="x-ms-sgx-is-debuggable", value==false ]
&& [ type=="x-ms-sgx-product-id", value==4639 ]
&& [ type=="x-ms-sgx-svn", value>= 2 ]
&& [ type=="x-ms-sgx-mrsigner", value=="a0f8e7f72092fb6a5d5752ffccd47fb3af7027ffb589b24e921e81f5703f3a9a"]
=> permit();
};
ポリシーでは次の検証が行われます。
Azure SQL Database 内のエンクレーブはデバッグに対応していません。
エンクレーブは、デバッグが無効でも有効でも読み込むことができます。 デバッグ サポートは、開発者がエンクレーブで実行されているコードの問題を解決できるように設計されています。 実稼働システムでは、エンクレーブが提供する保護レベルを下げるようなコンテンツがエンクレーブに含まれていれば、デバッグによって管理者はそれを調べることができます。 悪意のある管理者がエンクレーブ マシンを乗っ取り、デバッグ サポートをオンにしようとした場合、構成証明に失敗するよう、方針としてはデバッグを無効にすることが推奨されます。
エンクレーブの製品 ID は、セキュリティで保護されたエンクレーブが設定された Always Encrypted に割り当てられた製品 ID に一致します。
エンクレーブにはそれぞれ、他のエンクレーブと区別するための一意の製品 ID が与えられます。 Always Encrypted エンクレーブに割り当てられた製品 ID は 4639 です。
ライブラリのセキュリティ バージョン番号 (SVN) が 2 以上である。
この SVN によって、Microsoft はエンクレーブ コードで特定された潜在的なセキュリティ バグに対応できます。 セキュリティ上の問題が検出されて修正された場合、Microsoft は、新しいバージョンのエンクレーブを新しい (1 つ大きい) SVN で展開します。 推奨されるポリシーが、新しい SVN を反映するように更新されます。 推奨されるポリシーに合わせて自分のポリシーを更新することで、悪意のある管理者が古くて安全ではないエンクレーブを読み込もうとしたとき、構成証明を失敗させることができます。
エンクレーブ内のライブラリが Microsoft 署名キーを使用して署名されている (x-ms-sgx-mrsigner 要求の値が署名キーのハッシュである)。
構成証明の主な目標の 1 つは、エンクレーブ内で実行されるバイナリが、実行されるべきバイナリであることをクライアントに認識させることにあります。 構成証明ポリシーからは、この目的のために 2 つのメカニズムが提供されます。 1 つは mrenclave 要求です。これは、エンクレーブで実行されることになっているバイナリのハッシュです。 mrenclave の問題は、コードをほんの少し変えただけでもバイナリ ハッシュが変わることにあります。エンクレーブ内で実行されているコードの改訂が難しくなります。 そのため、mrsigner の使用を推奨しています。これは、エンクレーブ バイナリの署名に使用されるキーのハッシュです。 Microsoft がエンクレーブを改訂するとき、署名キーが変わらない限り、mrsigner も同じままです。 この方法で、顧客のアプリケーションを壊すことなく、更新後のバイナリをデプロイすることが可能になります。
重要
Always Encrypted エンクレーブ バイナリへの署名に使用するキーのローテーションが必要になる場合がありますが、これはまれな事例であると想定されています。 新しいキーで署名されたエンクレーブ バイナリの新しいバージョンが Azure SQL Database に展開される前に、この記事は更新され、推奨される新しい構成証明ポリシーが提供されます。また、アプリケーションが中断なく機能し続けるようにするために、構成証明プロバイダーでポリシーを更新する方法も示されます。
構成証明プロバイダーを作成して構成証明ポリシーで構成する方法については、以下を参照してください。
- クイック スタート: Azure portal を使用して Azure Attestation を設定する
重要
Azure portal で構成証明ポリシーを構成する場合は、[構成証明の種類] を [
SGX-IntelSDK
] に設定します。 - クイック スタート:Azure PowerShell を使用して Azure Attestation を設定する
重要
Azure PowerShell で構成証明ポリシーを構成する場合は、
Tee
パラメーターをSgxEnclave
に設定します。 - クイックスタート: Azure CLI を使用して Azure Attestation を設定する
重要
Azure CLI で構成証明ポリシーを構成する場合は、
attestation-type
パラメーターをSGX-IntelSDK
に設定します。
構成証明ポリシーの構成証明 URL を確認する
構成証明ポリシーを構成したら、構成証明 URL を、Azure SQL Database のセキュア エンクレーブが設定された Always Encrypted を使用するアプリケーションの管理者と共有する必要があります。 構成証明 URL は、構成証明ポリシーを含む構成証明プロバイダーの Attest URI
です。これは、https://MyAttestationProvider.wus.attest.azure.net
のようになります。
Azure portal を使用して構成証明 URL を確認する
構成証明プロバイダーの [概要] ペインで、Attest URI
プロパティの値をクリップボードにコピーします。
PowerShell を使用して構成証明の URL を確認する
Get-AzAttestation
コマンドレットを使用して、AttestURI を含む、構成証明プロバイダーのプロパティを取得します。
Get-AzAttestation -Name $attestationProviderName -ResourceGroupName $attestationResourceGroupName
詳細については、「構成証明プロバイダーを作成して管理する」を参照してください。