HSM インスタンスクラスターは、同一リージョン内の異なるゾーンに配置された HSM インスタンスをグループ化します。複数のインスタンスが同一ワークロードを処理する場合、アプリケーションはポーリングアルゴリズムを用いて暗号操作をクラスター全体に分散します。これにより、アプリケーションコードを変更することなく、高可用性、負荷分散、および水平スケーリングを実現できます。
本番環境へのデプロイメントでは、同一リージョン内で少なくとも 2 つの HSM インスタンスを異なるゾーンに配置してください。これにより、単一ゾーン障害によるサービス停止を回避できます。
KMS ハードウェアキー管理インスタンス向けに HSM クラスターを作成するには、「ハードウェアキー管理タイプの KMS インスタンス向け HSM クラスターの構成」をご参照ください。
仕組み
クラスターは 1 台のマスター HSM と 1 台以上の子 HSM で構成されます。すべてのインスタンスは同一の Virtual Private Cloud (VPC) を共有する必要がありますが、サブネットやゾーンは異なっていても構いません。
GVSM の購入時にクラスター情報を設定した場合、CloudHSM は自動的に設定に基づいたクラスターを作成します。この手順はスキップ可能です。
クラスター同期では、マスター HSM からすべての子 HSM へ、鍵、SSL 証明書、およびユーザーデータがコピーされます。同期方法は HSM の購入日によって異なります:
| 購入日 | デフォルトの同期方法 |
|---|---|
| 2025 年 1 月 9 日以降 | 自動 — マスター HSM での変更後、即座にデータが同期されます |
| 2025 年 1 月 9 日以前 | 手動 — マスター HSM での各変更後に、クラスターを手動で同期する必要があります |
手動同期から自動同期へアップグレードするには、お問い合わせください。
このアップグレードはロールバックできません。ピーク時を避けて実行してください。
KMS ハードウェアキー管理インスタンスのユーザーの場合:
コントロールプレーン(鍵の作成および削除):アップグレード中は利用不可となり、完了後に自動的に再開されます
データプレーン(暗号化および復号):影響を受けません
その他のユーザーの場合:アップグレード前に、アプリケーションが依存する HSM ソフトウェア開発キット(SDK)のバージョンをアップグレードしてください
コントロールプレーン:アップグレード中は利用不可となり、完了後に自動的に再開されます
データプレーン:一部のアーキテクチャではサービス中断のリスクがあります
前提条件
開始する前に、以下の条件を満たしていることを確認してください。
HSM インスタンス。「HSM インスタンスの購入」をご参照ください。
HSM と同じ VPC 内の Windows Elastic Compute Service (ECS) インスタンス。このインスタンスは HSM 管理ツールを実行しますが、業務サーバーではありません。詳細については、「Windows インスタンスの使い始め」をご参照ください。
ステップ 1:クラスターの作成および有効化
汎用仮想セキュリティモジュール(GVSM)インスタンスの購入時にクラスター情報を設定した場合、Cloud Hardware Security Module(CloudHSM)が自動的にクラスターを作成します。この手順はスキップ可能です。
マスター HSM を有効化します。
CloudHSM コンソールの VSM ページに移動します。上部ナビゲーションバーからリージョンを選択します。
HSM を見つけ、有効化 をクリックします(操作 列)。
HSM インスタンスの構成 ダイアログボックスで、以下のパラメーターを設定し、OK をクリックします。構成が成功すると、HSM のステータスは 有効 に変わります。
パラメーター 説明 VPC ID HSM にバインドする VPC。ECS インスタンスと同じ VPC である必要があります。 VPC サブネット VPC 内で HSM に割り当てるサブネット。 プライベート IP アドレス HSM に割り当てるプライベート IP アドレス。割り当てられたサブネットに属している必要があります。システムは末尾が 253、254、255 のアドレスを予約していますので、これらのアドレスは使用しないでください。 HSM ホワイトリストの構成 この HSM へのアクセスを許可する IP アドレスおよび CIDR ブロック。1 行につき 1 アドレスまたは 1 ブロックを入力し、最大 10 行まで入力可能です。空白のままにした場合、すべての IP アドレスからのアクセスが許可されます。エントリーが追加された場合、記載されたアドレスのみが許可されます。注意: 0.0.0.0/0を入力すると、すべての IP アドレスが許可されます。これはホワイトリストを空白のままにするのと同等です。セキュリティ上の観点から、0.0.0.0/0を入力する代わりに、ホワイトリストを空白のままにしてください。重要: クラスターホワイトリストは HSM ホワイトリストをオーバーライドします。たとえば、HSM ホワイトリストに10.10.10.10が含まれ、クラスターホワイトリストに172.16.0.1が含まれている場合、HSM へのアクセスは172.16.0.1のみ許可されます。
クラスターを作成します。
マスター HSM を見つけ、クラスターの作成 をクリックします(操作 列)。
クラスターの作成および有効化 パネルで、以下のパラメーターを設定します:
パラメーター 説明 クラスター名 最大 24 文字のユニークな名前。 ホワイトリストの構成 クラスターへのアクセスを許可する IP アドレスおよび CIDR ブロック。1 行につき 1 アドレスまたは 1 ブロックを入力し、最大 10 行まで入力可能です。空白のままにした場合、すべての IP アドレスからのアクセスが許可されます。重要: クラスターホワイトリストは各 HSM のホワイトリストをオーバーライドします。 0.0.0.0/0を入力するとすべての IP アドレスが許可されます。無制限のアクセスを許可したい場合は、ホワイトリストを空白のままにしてください。vSwitch の指定 クラスター用の vSwitch。クラスターの作成および有効化には、最低 2 つの vSwitch を選択してください。
マスター HSM を初期化した後、次へ をクリックします。クラスターは、マスター HSM のステータスが 初期化済み の場合にのみ有効化できます。以下のいずれかの方法を選択してください:
方法 手順 方法 1:数回のクリックで初期化(GVSM のみ、UKEY 不要) パネルで、[数回のクリックでマスター HSM を初期化] をクリックします。[ヒント] ダイアログボックスで、[OK] をクリックします。初期化には 1~5 分かかります。「Selected Master HSM:」の横にある
アイコンをクリックして、ステータスをリフレッシュします。ステータスが「初期化済み」と表示されたら、HSM を再初期化しないでください。方法 2:HSM 管理ツールの使用(Windows のみ) パネルで HSM 管理ツールのダウンロード をクリックします。パッケージを解凍し、同封のユーザーマニュアルの「3.2.1 初期設定」の章に従って操作してください。 プロンプトに従って子 HSM をクラスターに追加し、完了 をクリックします。
ステップ 2:相互 TLS 認証の構成(任意)
相互 TLS(mTLS)認証では、お客様が管理する認証局(CA)を使用して、クライアントと HSM クラスター間の信頼関係を暗号的に確立します。お客様が生成またはダウンロードした CA 証明書は、すべてのクラスター接続における暗号的信頼のルートになります。クラスター内のすべてのクライアントおよびサーバーは、この CA に対して検証されます。CA の秘密鍵は、安全なオフラインマシンに保存し、アクセスを厳しく制限してください。
シナリオ 1:購入時に HSM が証明書を自動生成
証明書の自動生成は GVSM インスタンスのみがサポートしています。このシナリオでは、CloudHSM がサーバー側 HSM に証明書を自動的に生成・展開します。お客様はクライアント証明書のみを展開する必要があります。
HSM 詳細ページで、クラスター証明書の取得 をクリックします。ダウンロードされたフォルダーには、以下のファイルが含まれます:
certs/ ├── client.p12 (PKCS12 形式のクライアント証明書。秘密鍵を含む) ├── client.pem (PEM 形式のクライアント証明書) ├── rootca.key (CA 秘密鍵) ├── rootca.pem (PEM 形式の CA 証明書) ├── server.p12 (PKCS12 形式のサーバー証明書) └── passphrase (.p12 証明書のパスフレーズ)client.p12およびrootca.pemをクライアントに展開します。クライアントの構成ファイルで、client.p12およびrootca.pemのファイルパスとパスフレーズを設定してください。詳細については、ダウンロードしたパッケージに含まれるドキュメントをご参照ください。
CloudHSM が証明書を HSM に自動的に展開します。サーバー側での操作は不要です。
サーバー証明書の有効期限はデフォルトで 10 年です。CloudHSM は有効期限切れ前に新しい証明書を自動生成し、ローテーションを行います。HSM 管理ツールを使用して UKEY 管理者を作成しないでください。これにより、証明書のローテーションが失敗する可能性があります。
シナリオ 2:手動による証明書生成
GVSM インスタンスは証明書の自動生成をサポートしていますが、購入時にこの機能を有効化しなかった場合、以下の手順に従って手動で証明書を生成および展開できます。
GVSM インスタンスの購入時に証明書の自動生成が有効化されていなかった場合、証明書を手動で生成および展開してください。
証明書の生成
証明書生成ツール(dkms_cert_tool)をダウンロード します。
このツールの動作環境には制限はありません。ローカルコンピューター、ECS インスタンス、またはツールの要件を満たすその他の環境で実行できます。CA、クライアント、およびサーバー証明書をこのツールなしで生成できる場合は、独自の方法を使用しても構いません。このツールは任意です。
ダウンロードしたファイルを解凍し、ご利用のオペレーティングシステムに対応するツールを実行します。ツールは
certsフォルダー内に証明書ファイルを生成します。重要本番クラスターでは、CA の秘密鍵を安全なオフラインマシンで生成し、安全に保管してください。開発およびテスト用途では、ツールの要件を満たす任意の環境で十分です。
Windows
オプション A —
hsm_certificate_generate.exeをWindowsフォルダー内でダブルクリックします。デフォルトのパスフレーズ12345678で証明書が生成されます。オプション B — 次のコマンドを実行してカスタムパスフレーズを指定します:
./hsm_certificate_generate -dir ./certs -pswd 12345678
Linux
Linuxフォルダーを含むディレクトリに移動し、次のコマンドを実行します:./hsm_certificate_generate -dir ./certs -pswd 12345678macOS
darwinフォルダーを含むディレクトリに移動し、次のコマンドを実行します:./hsm_certificate_generate -dir ./certs -pswd 12345678-dirフラグは出力パスを指定します。-pswdフラグは PKCS12(.p12)証明書ファイルおよび CA 秘密鍵ファイル(.key)のパスフレーズを指定します。コマンドの実行が完了すると、
certsフォルダーには以下が含まれます:certs/ ├── client.p12 (PKCS12 形式のクライアント証明書。秘密鍵を含む) ├── client.pem (PEM 形式のクライアント証明書) ├── rootca.key (CA 秘密鍵) ├── rootca.pem (PEM 形式の CA 証明書) ├── server.p12 (PKCS12 形式のサーバー証明書) └── server.pem (PEM 形式のサーバー証明書)
クライアント証明書の展開
client.p12 および rootca.pem をクライアントに展開します。クライアントの構成ファイルで、証明書生成時に指定したファイルパスおよびパスフレーズを設定してください。詳細については、ダウンロードしたパッケージに含まれるドキュメントをご参照ください。
サーバー証明書の展開
HSM 管理ツールは Windows のみで実行可能です。
マスター HSM の [仕様] 列にあるダウンロードアイコン
をクリックして、HSM 管理ツールをダウンロードします。
パッケージを解凍し、
PKIManager-X.X.X.X.exeを見つけ、それを Windows ECS インスタンスに転送します。「リモートデスクトップ接続を使用した Windows インスタンスへのファイル転送」をご参照ください。ECS インスタンス上で
PKIManager-X.X.X.X.exeをダブルクリックします。システム > TCP/IP 接続 を選択します。TCP/IP 接続 ダイアログボックスで、マスター HSM の IP アドレス および ポート を入力します。ポートは
8020です。IP アドレスはコンソールで確認できます。
接続 をクリックします。PKIManager ダイアログボックスで OK をクリックし、その後 ログイン をクリックします。
ログイン後、より高いセキュリティを確保するために管理者アカウントを登録してください。「GVSM ユーザーマネジメントマニュアル」(ツールに同封)の「2.1.3 管理者の登録」および「2.1.2 管理者ログイン」の項をご参照ください。
HSM 管理ツールで以下の構成を完了します:
構成 手順 クライアント証明書( client.pem)鍵管理 > クライアント管理 を選択します。クライアント証明書管理 ダイアログボックスで、証明書のインポート をクリックします。証明書タイプ を 国際 TLS クライアント RSA 証明書 [pem] に設定し、 client.pemを選択して、インポート をクリックします。サーバー証明書( server.p12)鍵管理 > サーバー管理 を選択します。サーバー P12 証明書管理 ダイアログボックスで、証明書のインポート をクリックします。証明書タイプ を 国際 TLS サーバー RSA 証明書 [p12] に設定し、 server.p12を選択し、証明書パスフレーズ(生成時に設定したパスフレーズ。デフォルトは12345678)を入力して、インポート をクリックします。GVSM デバイスポートプロパティ デバイス管理 > ホストポートプロパティ を選択します。以下の値を設定します:Socket KeepAlive Time: 60、Message Header Length:0、Message Encoding Format:ASCII、Host Service Communication Mode:双方向通信、Host Service Communication Protocol:TLSv1.2。その後、リセット をクリックし、今すぐ再起動 および OK をクリックします。
ステップ 3:クラスターのデータ同期
同期動作はクラスターのタイプによって異なります:
自動クラスタ同期 — 特に操作は必要ありません。マスター HSM 上の鍵、SSL 証明書、およびユーザーデータは、子 HSM に自動的に同期されます。
手動クラスタ同期 — クラスターの作成および有効化後、およびマスター HSM 上のデータ変更後にクラスターを同期する必要があります。クラスターのスケールアウト時には同期は不要です。
クラスター同期には約 5 分かかります。ピーク時を避けて実行してください。
手動クラスターを同期するには:
VSM ページでマスター HSM を見つけ、クラスターのタイプが 手動クラスタ同期 であることを確認します。

操作 列で クラスターの同期 をクリックします。ダイアログボックスで、再度 クラスターの同期 をクリックします。
ステップ 4:接続および暗号操作の実行
HSM ソフトウェアパッケージには、開発者ガイドおよび SDK テストプログラムが含まれています。ガイドに記載された API を使用して、暗号操作を実行してください。
ソフトウェアパッケージをダウンロードするには、[VSM] ページで必要な HSM を見つけ、[仕様列] の横にある
をクリックし、その後パッケージを解凍します。
以下の例では GVSM を使用します。Alibaba Cloud GVSM ソフトウェアパッケージ > SDK > JAVA > Server HSM インターフェイス資料 > テストデモディレクトリ > テストケース APITest.java に移動し、テストケースを実行します。
192.168.XX.XX を、ご利用の HSM に割り当てられたプライベート IP アドレスに置き換えてください。package cn.tass.hsm;
import cn.tass.SJJ1507.devices.RasKeyUtils;
import cn.tass.common.kits.Padding;
import cn.tass.exceptions.TAException;
import cn.tass.hsm.GHSMAPI;
import cn.tass.kits.Forms;
import cn.tass.hsm.Host;
import cn.tass.hsm.LogConfig;
import cn.tass.util.encoders.Base64;
import org.junit.Test;
import javax.naming.ConfigurationException;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class APITest {
LogConfig logConfig = new LogConfig("error", "./");
Host host1 = new Host("GHSM", -3, "192.168.XX.XX", 8019, 5);
List<Host> hosts = new ArrayList<Host>() {{
add(host1);
}};
String config =
"{"
+ "[LOGGER];"
+ "logsw=debug,error;logPath=./;"
+ "[HOST 1];"
+ "hsmModel=GHSM;"
+ "host=192.168.XX.XX;linkNum=-3;"
+ "port=8019;"
+ "timeout=5;"
+ "}";
// GHSMAPI api = GHSMAPI.getInstance(hosts, logConfig);
GHSMAPI api = GHSMAPI.getInstance(config);
/**
* ローカルマスターキー(LMK)で暗号化された対称キー
*/
byte[] symmetricKey = Forms.hexStringToByteArray("669C1CEDDAFA267CC5D727EA727558B5");
byte[] verifyValue = Forms.hexStringToByteArray("BD8596C22E5A4D88");
byte[] symmetricKey1 = Forms.hexStringToByteArray("93EF12C95813586FEC3EFDBC7B37642D");
byte[] verifyValue1 = Forms.hexStringToByteArray("78306FD68851B8E6");
/**
* LMK で暗号化されたセッションキーの暗号文
*/
byte[] symmetricKeyKEK = Forms.hexStringToByteArray("2E80A42018F186BCCBCF639F644629E8");
/**
* セッションキーのチェックサム値
*/
byte[] verifyValueMAC = Forms.hexStringToByteArray("734D092CD8C23E38");
/**
* 保護キーで保護された暗号文
*/
byte[] protectionKey = Forms.hexStringToByteArray("2EACE685C5EB2638D1208742F3BE60CD44210B43C894A77C");
/**
* 保護キーで保護された暗号文のメッセージ認証コード(MAC)
*/
byte[] protectionMAC = Forms.hexStringToByteArray("0CB8702D41CBE487");
/**
* RSA DER エンコード形式の公開鍵
*/
byte[] publicKeyRSA = Forms.hexStringToByteArray("308186028180E14CAAFFCEC6D014457D7CA3E943DBABA1299BDBC17690C8E70F7BFA10EA02450805DA4C6CDC38BFBF1349C95B81A88177BA31C08E366EF965CA41EB36A2DACE611B80A752615A094B8291AAB6F8BB3A5894E72842371F34FA04C10DF42C2FEA95C51B9D49BE8B795E10474954FE01BAAC63532520069465FA62EDB266AADEBB020103");
public APITest() throws TAException, ConfigurationException {
}
/**
* 対称キーの生成
*/
@Test
public void genSymmKey() throws TAException {
ArrayList<byte[]> bytes = api.genSymmKey(3);
System.out.println("LMK で暗号化された対称キー:" + Forms.byteToHexString(bytes.get(0)));
System.out.println("対称キーのチェックサム値:" + Forms.byteToHexString(bytes.get(1)));
}
/**
* 対称キーによるデータの暗号化および復号
*/
@Test
public void generalDataEnc() throws TAException {
byte[] bytes1 = api.generalDataDec(Forms.hexStringToByte("789F01F9CC1BE0FF7429D7EAB215ABA1"),TACryptConst.ENC_MODE_CBC, TACryptConst.KEY_TYPE_RULE, TACryptConst.KEY_ALG_AES128,
Forms.hexStringToByte("AE6BA9133D0D4BB0090882E33F03D905D779785299F12C241936CB6AE45B9D2CB5C6B4E6C96D74BEB7D4A53684A18E0764DBE6A2383FB43C8CCCBDC1E84DF4D593141B302CB0F96074B32E06924F54AC342584EF47D41EF0022362A89F07B96071D3D0910C7A581FE0F7BC564F28107C9EBDD060AB11DC0700E3577606BCD666C93207E2AFDCF84E6FA7FE84A60BB39B0B0489EDDBEFB1C95768EA9010C993B2D51B8A752396FE585422F766CBAC3CCC7301C92483D726DEF325A685D861ABFFABF2C91022DB984D8E606CAA8AEE01DA969C72F81F0D13E96DCDE0DEAAF4309517618FB4C5BA6281F262C511E3A90F9ED952FD6D0ACEB6CCD4F5FA96DD6C15A2A2B848C1A224AAE1081102FC7313EB233112B1C0079352310E974EB1155A759374004095E2256B0ADC3BFFFF150AF071"), b);
System.out.println("AES 復号結果:" + Forms.byteToHexString(bytes1));
}
/**
* RSA 署名の生成および検証
*/
@Test
public void RSAencdata() throws TAException {
byte[] bytes = api.RSAPubEncData(11, 1, TACryptConst.DIGEST_ALG_SHA256, new byte[0], Forms.hexStringToByte("{createTime=1606380202000, createUserId=144, ip=124.204.XX.XX, key=SYJHD202011266020179058, orderNumber=SYJHD202011266020179058, productId=161391, scene=SYJHD}"));
System.out.println("公開鍵暗号化結果:" + Forms.byteToHexString(bytes));
byte[] bytes1 = api.RSAPriDecData(11, 1, TACryptConst.DIGEST_ALG_SHA256, new byte[0], bytes);
System.out.println("秘密鍵復号結果:" + Forms.byteToHexString(bytes1));
}
/**
* SM2 鍵ペアの生成および LMK による秘密鍵の暗号化
*/
@Test
public void generateSM2Key() throws TAException {
ArrayList<byte[]> bytes = api.genSM2Key();
System.out.println("DER エンコード形式の公開鍵:" + Forms.byteToHexString(bytes.get(0)));
System.out.println("LMK で暗号化された秘密鍵:" + Forms.byteToHexString(bytes.get(1)));
}
/**
* 乱数の生成
*/
@Test
public void genRandom() throws TAException {
String s = api.genRandom(15);
System.out.println(s);
}
/**
* HSM ステータスの確認
*/
@Test
public void getHSMstatus() throws TAException {
String hsMstatus = api.getHSMstatus();
System.out.println(hsMstatus);
}
}その他の操作
クラスターのスケールアウト
既存のクラスターに、異なるゾーンの HSM インスタンスを追加することで、容量および可用性を向上させることができます。HSM の追加は、以下のすべての条件が満たされた場合にのみ可能です:
HSM が初期化されていないこと
HSM のステータスが 有効 または 新規 であること
HSM のタイプがマスター HSM と同じであること
HSM に vSwitch が構成されていないか、またはマスター HSM と同じ vSwitch を使用していること
既存のホワイトリストを持つ HSM をクラスターに追加した場合、クラスターホワイトリストが HSM ホワイトリストを置き換え、元の HSM ホワイトリストはクリアされます。
KMS ハードウェアキー管理インスタンス向けの HSM クラスターをスケールアウトするには、クラスター同期方法が自動である必要があります。同期が手動の場合、スケールアウト前に Alibaba Cloud テクニカルサポートにお問い合わせください。
スケールアウト手順は以下のとおりです:
VSM ページでマスター HSM を見つけ、クラスターの拡張 をクリックします(操作 列)。
以下のいずれかの方法で HSM を追加します:
利用可能な HSM がない場合: HSM の追加 ダイアログボックスで、HSM インスタンスの購入 をクリックします。購入された HSM はクラスターに自動的に追加されます — CloudHSM が IP アドレスを割り当て、クラスターのデータを同期します。
利用可能な HSM がある場合: HSM の追加 ダイアログボックスで HSM を選択し、
アイコンをクリックして OK をクリックします。
クラスターからのインスタンスの削除
マスター HSM を削除する前に、子 HSM を削除してください。マスター HSM のみが残っている場合は、直接削除できます。マスター HSM を削除すると、クラスターは自動的に削除されます。
削除する各 HSM について、以下の手順を実行します:
VSM ページで HSM を見つけ、無効化 をクリックします(操作 列)。ダイアログボックスで、再度 無効化 をクリックします。
クラスターから削除 をクリックします(操作 列)。ダイアログボックスで、再度 クラスターから削除 をクリックします。
クラスター名およびアクセスホワイトリストの変更
VSM ページで、クラスター内の任意の HSM(マスターまたは子)のインスタンス ID をクリックします。
詳細 タブで、クラスター名およびアクセスホワイトリストを編集します。1 行につき 1 つの IP アドレスまたは CIDR ブロックを入力し、最大 10 個まで入力可能です。ホワイトリストが設定されていない場合、すべての IP アドレスからのアクセスが許可されます。エントリーが存在する場合、記載されたアドレスのみが許可されます。
重要- クラスターホワイトリストは、クラスター内の各 HSM のホワイトリストをオーバーライドします。たとえば、HSM ホワイトリストに
10.10.10.10が含まれ、クラスターホワイトリストに172.16.0.1が含まれている場合、HSM へのアクセスは172.16.0.1のみ許可されます。 -0.0.0.0/0を入力すると、すべての IP アドレスが許可されます。無制限のアクセスを許可したい場合は、ホワイトリストを空白のままにしてください。
マスターおよび子 HSM の切り替え
子 HSM を手動でマスターに昇格させます。この操作は、手動同期を使用するクラスターでのみ利用可能です。
VSM ページで子 HSM を見つけ、マスターに切り替え をクリックします(操作 列)。
ダイアログボックスで、切り替え をクリックします。