Azure Key Vaultのサポート
Citrix ADCアプライアンスは、オンプレミス展開用の外部HSM(SafeNetおよびThales)と統合します。クラウド展開の場合、ADC アプライアンスは Azure Key Vault と統合されます。アプライアンスは、パブリッククラウドドメインでのプライベートキーの管理とセキュリティを容易にするために、秘密鍵をKey Vaultに保存します。複数のデータ・センターやクラウド・プロバイダーにまたがって配置されたADCアプライアンスでは、キーを異なる場所に保管して管理する必要がなくなりました。
ADC と Azure Key Vault プレミアムの価格レベルを使用すると、HSM でバックアップされたキーが提供され、FIPS 140-2 レベル 2 のコンプライアンスが実現されます。
Azure Key Vaultは、Microsoftの標準製品です。Azure Key Vaultの詳細については、Microsoft Azure のドキュメントを参照してください。
注: Azure Key VaultとのCitrix ADC 統合は、TLS 1.3プロトコルでサポートされています。
アーキテクチャの概要
Azure Key Vault は、Azure クラウドにシークレットを安全に保存するためのサービスです。Azure Key Vault にキーを保存することで、キーが盗まれる可能性を減らすことができます。Key Vault が設定されたら、その中にキーを格納できます。ADCアプライアンスの仮想サーバーを構成して、Key Vaultで秘密鍵操作を実行します。ADCアプライアンスは、各SSLハンドシェイクのキーにアクセスします。
次の図は、認証後に Azure Active Directory からアクセストークンを取得するプロセスを示しています。このトークンは、秘密キーを使用した暗号操作のための REST API 呼び出しで使用されます。
次の図は、一般的なRSAハンドシェイクを示しています。公開キーを使用して暗号化されたクライアントキー交換 (CKE) メッセージは、Key Vault に格納された秘密キーを使用して復号化されます。
ECDHEハンドシェイクでは、Citrix ADCアプライアンスによって送信されたサーバーキー交換(SKE)メッセージは、Key Vaultに保存された秘密キーを使用して署名されます。
前提条件
-
Azure サブスクリプションが必要です。
-
(省略可能) Linux マシンに Azure CLI をインストールします。手順については、Azure のドキュメントhttps://docs.microsoft.com/en-us/cli/azure/install-azure-cli-apt?view=azure-cli-latestを参照してください。
-
ADC アプライアンスでエンティティを構成する前に、Azure ポータルで構成を完了します。
ADC Azure Key Vaultの統合を構成する
まず、Azure ポータルで構成を実行し、続いて ADC アプライアンスで構成を実行します。
Azure ポータルで次の手順を実行します
次のフローチャートは、Azure Portal で必要な構成の概要フローを示しています。
- Azure Active Directory でアプリとサービスプリンシパルを作成します。
- リソースグループにKey Vaultを作成します。
- Key Vault で署名および復号化操作を実行するようにアプリケーションとサービスプリンシパルを構成します。
-
次のいずれかの方法を使用して、Key Vault にキーを作成します。
- キーファイルをインポートします。
- 証明書を生成する。
上記の手順を構成するコマンドの詳細については、https://docs.microsoft.com/en-us/azure/active-directory/develop/app-objects-and-service-principalsにある Azure のドキュメントを参照してください。
ADCアプライアンスで次の手順を実行します
次のフローチャートは、ADCアプライアンスで必要な構成のための高レベルのフローを示しています。
- DNS サーバを設定します。
- ルート証明書を構成して、Azure によって提示された証明書を確認します。
- Azure アプリケーションを作成します。
- Azure Key Vaultエンティティを作成します。
- HSM キーを作成します。
- 証明書とキーのペアを作成します。
- 証明書とキーのペアを仮想サーバにバインドします。
DNS サーバーを構成する
Key Vaultホストと Azure Active Directory のエンドポイントの名前解決には、DNS サーバーが必要です。
CLI を使用して DNS サーバーを構成するには
コマンドプロンプトで、次のように入力します。
add dns nameserver <IP address>
例:
add dns nameserver 192.0.2.150
GUI を使用して DNS サーバーを構成するには
-
[トラフィック管理] > [DNS] > [ネームサーバー] に移動します。[追加] をクリックします。
- 次のパラメーターの値を入力します。
- IP アドレス-外部ネームサーバの IP アドレス。ローカルパラメータが設定されている場合は、ローカル DNS サーバ (LDNS) の IP アドレス。
- プロトコル:ネーム・サーバが使用するプロトコル。UDP_TCPは、ネーム・サーバがアプライアンスで構成されたDNS仮想サーバである場合、無効です。
- [作成] をクリックします。
ルート証明書の追加とバインド
Azure Key Vaulthttps://<vault_name>.vault.azure.net
と Azure Active Directory (AAD)https://login.microsoftonline.com によって提示された証明書のルート証明書をダウンロードし、ADC アプライアンスにロードします。これらの証明書は、Azure Key Vault および AAD によって提示された証明書を検証するために必要です。1 つ以上の証明書を CA 証明書グループns_callout_certs
にバインドします。
CLI を使用してルート証明書を追加するには
コマンドプロンプトで、次のように入力します。
add ssl certkey <certkeyname> -cert <certname>
bind ssl caCertGroup <caCertGroupName> <certkeyName>
例: 次の例では、Azure Key Vault と AAD によって提示されるルート証明書は同じです。
add ssl certKey rootcert -cert RootCyberTrustRoot.crt
bind ssl cacertGroup ns_callout_certs rootcert
GUI を使用してルート証明書を追加するには
-
[トラフィック管理] > [SSL] > [証明書] > [CA 証明書] に移動します。
- 次のパラメーターの値を入力します。
- 証明書とキーのペア名
- 証明書ファイル名
-
[Install] をクリックします。
-
[トラフィック管理] > [SSL] > [CA 証明書グループ] に移動します。
-
「 ns_callout_certs 」を選択し、「 バインドの表示 」をクリックします。
-
[バインド] をクリックします。
-
前に作成した CA 証明書を選択し、[Select] をクリックします。
- [バインド] をクリックし、[閉じる] をクリックします。
Azure アプリケーションを構成する
Azure アプリケーションエンティティには、Azure Active Directory への認証とアクセストークン取得に必要な資格情報が含まれています。つまり、Key Vault リソースおよび API への認証アクセスを取得するには、ADC アプライアンスに Azure アプリケーション ID、シークレット (パスワード)、テナント ID を追加します。
CLI を使用して Azure アプリケーションエンティティを構成する場合は、パスワードを入力する必要があります。GUI を使用する場合、Azure アプリケーションエンティティには、Azure Active Directory への認証とアクセストークン取得に必要な資格情報が含まれます。
CLI を使用して Azure アプリケーションを構成するには
リリース 13.0-61.x では、アクセストークンがアプリケーションに付与される前に、リソースグループのドメインを取得するためのパラメータである VaultResource がadd azure application
コマンドに追加されています。ドメイン名がリージョンによって異なる可能性があるため、このパラメーターが追加されます。たとえば、ドメインはvault.azure.net
またはvault.usgov.net
になります。
コマンドプロンプトで、次のように入力します。
add azure application <name> -clientID <string> -clientSecret -tenantID <string> -vaultResource <string> [-tokenEndpoint <URL>]
show azure application
例:
add azure application app10 -clientiD 12345t23aaa5 -clientsecret csHzOoEzmuY= -vaultResource example.vault.azure.net -tenantID 33583ee9ca5b
Done
> sh azure application app10
1) Name: app10 ClientID: 12345t23aaa5
TokenEndpoint: "https://login.microsoftonline.com/33583ee9ca5b/"
TenantID: 33583ee9ca5b VaultResource: example.vault.azure.net
Done
GUI を使用して Azure アプリケーションを構成するには
-
[トラフィック管理] > [SSL] > [Azure] > [アプリケーション]に移動します。
-
詳細ウィンドウで、[追加] をクリックします。
-
次のパラメーターの値を入力します。
- 名前 — Citrix ADCアプライアンス上のアプリケーションオブジェクトの名前。
- クライアント ID — Azure CLI または Azure ポータル (GUI) を使用して Azure Active Directory でアプリケーションを作成するときに生成されるアプリケーション ID。
- クライアントシークレット — Azure Active Directory で構成されたアプリケーションのパスワード。パスワードは Azure CLI で指定するか、Azure ポータル (GUI) で生成されます。
- テナント ID — アプリケーションが作成された Azure Active Directory 内のディレクトリの ID。
- Vault リソース-アクセストークンが付与されている Vault リソース。例
vault.azure.net
。 - トークンエンドポイント — アクセストークンを取得できるURL。トークンのエンドポイントが指定されていない場合、デフォルト値は
https://login.microsoftonline.com/<tenant id>
です。
Azure Key Vaultを構成する
ADC アプライアンスでAzure Key Vaultオブジェクトを作成します。
CLI を使用してAzure Key Vaultを構成するには
コマンドプロンプトで、次のように入力します。
add azure keyVault <name> -azureVaultName <string> -azureApplication
<string>
show azure keyvault
例:
add azure keyvault kv1 -azureapplication app10 -azurevaultName pctest.vault.azure.net
> sh azure keyVault
1) Name: kv1 AzureVaultName: pctest.vault.azure.net
AzureApplication: app10 State: "Access token obtained"
Done
次の表に、Azure Key Vault の状態で使用できるさまざまな値と、各状態に関する簡単な説明を示します。
状態 | 説明 |
---|---|
作成済み | Key Vaultオブジェクトの初期状態。認証が試行されていません。 |
トークンのエンドポイントに到達できませんでした | DNS サーバーが構成されていない、発行元の証明書が CA 証明書グループにバインドされていない、またはネットワークの問題のいずれかを示します。 |
認証に失敗しました | アプリケーションの認証情報が正しくありません。 |
トークン解析エラー | Azure Active Directory からの応答が予期された形式ではありません。 |
アクセストークンを取得しました | Azure Active Directory による認証に成功しました。 |
GUI を使用して Azure Key Vaultを構成するには
-
[トラフィック管理] > [SSL] > [Azure] > [Key Vault]に移動します。
-
次のパラメーターの値を入力します。
- 「名前」-Key Vaultの名前。
- Azure Key Vault名-Azure CLI またはドメイン名を持つ Azure ポータル (GUI) のいずれかを使用して Azure クラウドで構成されたKey Vaultの名前。
- Azure アプリケーション名-ADC アプライアンスで作成された Azure アプリケーションオブジェクトの名前。この名前の Azure アプリケーションオブジェクトは、Azure Active Directory での認証に使用されます。
HSM キーの追加
プライベートキーを HSM に保管すると、FIPS 140-2 レベル 2 準拠が可能になります。
CLI を使用して HSM キーを追加するには
コマンドプロンプトで、次のように入力します。
add ssl hsmKey <hsmKeyName> [-hsmType <hsmType>] [-key <string> |
-serialNum <string>] {-password } [-keystore <string>]
例:
add ssl hsmKey h1 -keystore kv1 -key san15key -hsmType KEYVAULT
> sh ssl hsmKey h1
HSM Key Name: h1 Type: KEYVAULT
Key: san15key
Key store: kv1
State: “Created”
Done
次の表に、HSM キーの状態で使用できるさまざまな値と、各状態に関する簡単な説明を示します。
状態 | 説明 |
---|---|
作成済み | HSM キーは ADC アプライアンスに追加されます。キー操作はまだ試行されていません。 |
アクセストークンを使用できません | キー操作を試みたときはアクセストークンを使用できません。 |
未承認 | 構成された Azure アプリケーションに、キー操作を実行するためのアクセス許可がありません。 |
存在しません | キーがAzure Key Vaultに存在しません。 |
到達不可 | Key Vault ホストがネットワーク上で到達できません。 |
マークダウン | HSM キーは、キー操作中のしきい値エラーにより、ADC アプライアンスで DOWN とマークされます。 |
キー操作が成功しました | キー操作のためにKey Vaultから成功応答を受信しました。 |
キー操作が失敗しました | キー・オペレーションのKey Vaultからエラー応答を受信しました。 |
キー操作が抑制されています | キー操作要求は、Key Vault によって調整されます。 |
GUI を使用して HSM キーを追加するには
-
[トラフィック管理] > [SSL] > [HSM] に移動します。
-
次のパラメータの値を入力します。
- HSM キー名-キーの名前。
- HSMタイプ:HSMのタイプ。
- Key store-キーが格納されている HSM を表すキーストアオブジェクトの名前。たとえば、Key Vaultオブジェクトまたは Azure Key Vault認証オブジェクトの名前です。
KEYVAULT
タイプ HSM にのみ適用されます。
-
[追加] をクリックします。
証明書とキーのペアの追加
前に作成した HSM キーを使用して、証明書とキーのペアを追加します。
CLI を使用して証明書とキーのペアを追加するには
コマンドプロンプトで、次のように入力します。
add ssl certKey <certkeyName> (-cert <string> [-password]) -hsmKey <string>]
show ssl certkey
例:
add ssl certKey serverrsa_2048 -cert /nsconfig/ssl/san_certs/san15.pem -hsmKey h1
> sh ssl certkey serverrsa_2048
Name: serverrsa_2048 Status: Valid, Days to expiration:9483
Version: 3
Serial Number: F5CFF9EF1E246022
Signature Algorithm: sha256WithRSAEncryption
Issuer: C=in,O=citrix,CN=ca
Validity
Not Before: Mar 20 05:42:57 2015 GMT
Not After : Mar 12 05:42:57 2045 GMT
Certificate Type: "Server Certificate"
Subject: C=in,O=citrix
Public Key Algorithm: rsaEncryption
Public Key size: 2048
Ocsp Response Status: NONE
Done
GUI を使用して証明書とキーのペアを追加するには
-
[トラフィック管理] > [SSL] > [証明書のインストール (HSM)] に移動します。
-
次のパラメーターの値を入力します。
- 証明書とキーのペア名
- 証明書ファイル名
- HSMキー
-
[Install] をクリックします。
証明書とキーのペアを仮想サーバーにバインドする
SSL トランザクションの処理に使用する証明書は、SSL データを受信する仮想サーバーにバインドする必要があります。
CLI を使用して SSL 証明書とキーのペアを仮想サーバーにバインドするには
コマンドプロンプトで、次のように入力します。
bind ssl vserver <vServerName> -certkeyName <certificate-KeyPairName>
show ssl vserver <vServerName>
例:
bind ssl vserver v1 -certkeyName serverrsa_2048
sh ssl vserver v1
Advanced SSL configuration for VServer v1:
DH: DISABLED
DH Private-Key Exponent Size Limit: DISABLED Ephemeral RSA: ENABLED Refresh Count: 0
Session Reuse: ENABLED Timeout: 120 seconds
Cipher Redirect: DISABLED
ClearText Port: 0
Client Auth: DISABLED
SSL Redirect: DISABLED
Non FIPS Ciphers: DISABLED
SNI: DISABLED
OCSP Stapling: DISABLED
HSTS: DISABLED
HSTS IncludeSubDomains: NO
HSTS Max-Age: 0
HSTS Preload: NO
SSLv3: ENABLED TLSv1.0: ENABLED TLSv1.1: ENABLED TLSv1.2: ENABLED TLSv1.3: DISABLED
Push Encryption Trigger: Always
Send Close-Notify: YES
Strict Sig-Digest Check: DISABLED
Zero RTT Early Data: DISABLED
DHE Key Exchange With PSK: NO
Tickets Per Authentication Context: 1
ECC Curve: P_256, P_384, P_224, P_521
1) CertKey Name: serverrsa_2048 Server Certificate
1) Cipher Name: DEFAULT
Description: Default cipher list with encryption strength >= 128bit
Done
GUI を使用して SSL 証明書とキーのペアを仮想サーバーにバインドするには
-
[トラフィック管理] > [負荷分散] > [仮想サーバー] に移動し、SSL 仮想サーバーを開きます。[証明書] セクション内をクリックします。
-
矢印をクリックして、証明書とキーのペアを選択します。
-
リストから証明書とキーのペアを選択します。
-
証明書とキーのペアを仮想サーバにバインドします。
制限事項
- キー操作に対する Azure Key Vault への同時呼び出しの数には制限があります。ADCアプライアンスのパフォーマンスは、Key Vaultの制限によって異なります。詳しくは、「Microsoft Azure Key Vaultドキュメント」を参照してください。
- EC キーはサポートされていません。
- EDT プロトコルと DTLS プロトコルはサポートされていません。
- インテル Coleto SSL チップを搭載した ADC アプライアンスはサポートされていません。
- クラスタリングおよび管理パーティションはサポートされていません。
- ADC アプライアンスにそれらを追加した後、Azure アプリケーションエンティティ、Azure Key Vault オブジェクト、および HSM 証明書とキーのペアを更新することはできません。
よくある質問
Azure Key Vault と統合されている場合、秘密キーは ADC アプライアンスのメモリに格納されますか?
いいえ、秘密鍵はADCアプライアンスのメモリに保存されません。各SSLトランザクションについて、アプライアンスはKey Vaultにリクエストを送信します。
統合FIPS 140-2レベル2の苦情はありますか?
はい。統合ソリューションは、FIPS 140-2 レベル 2 サポートを提供します。
サポートされているキータイプはどれですか?
RSA キータイプだけがサポートされます。
どのようなキーサイズがサポートされていますか?
1024 ビット、2048 ビット、および 4096 ビット RSA キーがサポートされています。
どの暗号がサポートされていますか?
ECDHEとSHA256のTLSv1.3暗号を含む、ADCアプライアンスでサポートされているすべての暗号がサポートされています。
トランザクションはログに記録されますか?
ADCアプライアンスは、Key Vaultで行われる各トランザクションを記録します。時間、ヴォールト IP アドレス、ポート、接続の成功または失敗、エラーなどの詳細がログに記録されます。 次に、SSL ログ出力の例を示します。
Apr 9 16:35:30 <local0.debug> 10.102.57.30 04/09/2019:16:35:30 GMT 0-PPE-0 : default SSLLOG SSL_HANDSHAKE_SUCCESS 896 0 : Backend SPCBId 30894 - ServerIP 104.211.224.186 - ServerPort 443 - ProtocolVersion TLSv1.2 - CipherSuite "ECDHE-RSA-AES256-GCM-SHA384 TLSv1.2 Non-Export 256-bit" - Session New - SERVER_AUTHENTICATED -SerialNumber "200005A75B04365827852D630000000005A75B" - SignatureAlgorithm "sha256WithRSAEncryption" - ValidFrom "Mar 17 03:28:42 2019 GMT" - ValidTo "Mar 17 03:28:42 2021 GMT" - HandshakeTime 40 ms Apr 9 16:35:30 <local0.debug> 10.102.57.30 04/09/2019:16:35:30 GMT 0-PPE-0 : default SSLLOG SSL_HANDSHAKE_ISSUERNAME 897 0 : SPCBId 30894 - IssuerName " C=US,ST=Washington,L=Redmond,O=Microsoft Corporation,OU=Microsoft IT,CN=Microsoft IT TLS CA 2" Apr 9 16:35:30 <local0.debug> 10.102.57.30 04/09/2019:16:35:30 GMT 0-PPE-0 : default SSLLOG SSL_HANDSHAKE_SUBJECTNAME 898 0 : SPCBId 30894 - SubjectName " CN=vault.azure.net"