AWS CloudHSMクラスターをバックアップからリストアしてみた

検証が日を跨ぐのであれば一旦HSMを削除してリストアするのもアリ
2022.07.19

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

CloudHSMの料金は結構いい値段

こんにちは、のんピ(@non____97)です。

皆さんはCloudHSMの料金はいい値段だなと思ったことはありますか? 私はあります。

CloudHSMはHSMの稼働時間によって課金されます。東京リージョンの場合、1.81USD/hです。最新の料金はAWS公式の料金表をご覧ください。

加えて、HSMを一時停止すると言うこともできません。

そのため、検証が日を跨いでしまった場合などはは10USDかかってしまうこともあります。

これは困る

ところで、CloudHSMはバックアップを作成できます。

また、2022/7/19時点ではバックアップに料金はかからないようです。

...

......

はい。検証が日を跨いでしまう場合は、バックアップを作成してHSMを削除し、再開時にリストアすれば良いのです。

ということで試してみました。

CloudHSMクラスターのリストア

早速、CloudHSMクラスターのリストアを行います。

以下の検証でCloudHSMクラスターを作成して、検証後に削除しました。

HSMを削除すると、バックアップが作成されます。

バックアップを作成するようサービスに指示することはできませんが、特定の操作を行うことで強制的にバックアップを作成させることは可能です。以下のいずれかのアクションを実行すると、サービスがバックアップを作成します。

  • クラスターをアクティベートするには
  • HSM をアクティブクラスターに追加します。
  • アクティブクラスターから HSM を削除

管理AWS CloudHSMバックアップ - AWS CloudHSM

CloudHSMのコンソールを確認すると、確かにバックアップがありました。バックアップを選択して、バックアップからのクラスターの作成をクリックします。

バックアップからクラスターの作成

VPCとサブネットの設定をして続行をクリックします。

クラスター設定

バックアップの保持期間を入力して続行をクリックします。

バックアップ保持

タグは特に変更せずに確認をクリックします。

タグの追加

設定内容を確認してクラスターの作成をクリックします。

確認

4分ほど待つと、CloudHSMクラスターの作成が完了しました。状態がActiveになっているのでCA証明書のアップロードやPRECOのパスワード初期化などの操作は不要そうですね。HSM自体はまだ空なので、HSMの作成をクリックします。

HSMの作成

HSMを作成するサブネットを選択してCreateをクリックします。

HSMのAZの指定

8分ほどでHSMの作成が完了しました。こちらも状態がActiveになっています。

HSMの作成確認

HSMへの接続

リストアしたHSMに接続します。

HSMのIPアドレスがリストア前後で変わっているので、再設定します。

$ sudo /opt/cloudhsm/bin/configure -a 172.31.43.109
Updating server config in /opt/cloudhsm/etc/cloudhsm_client.cfg
Updating server config in /opt/cloudhsm/etc/cloudhsm_mgmt_util.cfg

IPアドレスの更新をしないと、以下のように接続することができません。

/opt/cloudhsm/bin/key_mgmt_util
Failed to connect socket

        get_peer_version() returned 0x40000040 : LIQUIDSECURITY: Daemon socket connection error

Failed to connect socket

        Cfm3Initialize() returned 0x40000040 : LIQUIDSECURITY: Daemon socket connection error


        Cfm3Initialize() returned app id : ffffffff
Failed to connect socket
Could not retrieve/create Thread Info

        Cfm3CloseSession returned: 0x40000040

        LIQUIDSECURITY: Daemon socket connection error

IPアドレス更新後、CMUでHSMに接続します。

$ /opt/cloudhsm/bin/cloudhsm_mgmt_util /opt/cloudhsm/etc/cloudhsm_mgmt_util.cfg
Ignoring E2E enable flag in the configuration file

Connecting to the server(s), it may take time
depending on the server(s) load, please wait...

Connecting to server '172.31.43.109': hostname '172.31.43.109', port 2225...
Connected to server '172.31.43.109': hostname '172.31.43.109', port 2225.
E2E enabled on server 0(172.31.43.109)
aws-cloudhsm>

接続後、ユーザー一覧を表示します。

aws-cloudhsm>listUser
Users on server 0(172.31.43.109):
Number of users found:3

    User Id             User Type       User Name                          MofnPubKey    LoginFailureCnt         2FA
         1              CO              admin                                    NO               0               NO
         2              AU              app_user                                 NO               0               NO
         3              CU              crypto_user                              NO               0               NO


aws-cloudhsm>quit


disconnecting from servers, please wait...

元々のHSMで追加したcrypto_userと言うユーザーがいることが確認できました。

KMUでHSM上の鍵一覧も表示してみます。

# KMUのサービスの起動
# IPアドレスを更新する前に起動していた場合は、restart で再起動
$ sudo service cloudhsm-client start
Redirecting to /bin/systemctl start cloudhsm-client.service

# KMUで接続
sh-4.2$ /opt/cloudhsm/bin/key_mgmt_util

        Cfm3Initialize() returned app id : 01000000

        session_handle 1000000

        Current FIPS mode is: 00000002


Help Commands Available:

Syntax: <command> -h


   Command               Description
   =======               ===========

   exit                   Exits this application
   help                   Displays this information

        Configuration and Admin Commands
   getHSMInfo             Gets the HSM Information
   getPartitionInfo       Gets the Partition Information
   listUsers              Lists all users of a partition
.
.
(中略)
.
.
   IsValidKeyHandlefile   Checks if private key file has
                          an HSM key handle or a real key
   listAttributes         List all attributes for getAttributes
   listECCCurveIds        List HSM supported ECC CurveIds


# 事前に作成したCUでログイン
Command:  loginHSM -u CU -s crypto_user -p cYoav.j8ZG87D!NmFvU.sjVATb8RwE4r

        Cfm3LoginHSM returned: 0x00 : HSM Return: SUCCESS

        Cluster Status:
        Node id 0 status: 0x00000000 : HSM Return: SUCCESS

# 鍵一覧を表示
Command:  findKey

        Total number of keys present: 3

        Number of matching keys from start index 0::2

        Handles of matching keys:
        6, 7, 9

        Cluster Status:
        Node id 0 status: 0x00000000 : HSM Return: SUCCESS

        Cfm3FindKey returned: 0x00 : HSM Return: SUCCESS

# HSMから切断
Command:  logoutHSM

        Cfm3LogoutHSM returned: 0x00 : HSM Return: SUCCESS

        Cluster Status:
        Node id 0 status: 0x00000000 : HSM Return: SUCCESS

Command:  exit

HSM上で生成したキーペアや、インポートした秘密鍵が確認できました。

検証が日を跨ぐのであれば一旦HSMを削除してリストアするのもアリ

CloudHSMクラスターをバックアップからリストアしました。

新規にHSMを作成するより断然早く、リストア開始15分程度でHSMに接続できました。このぐらいの時間と手間なのであれば、検証の再開まで時間が開く場合は一旦HSMを削除して、検証再開時にリストアするというのもアリだなと思いました。

この記事が誰かの助けになれば幸いです。

以上、AWS事業本部 コンサルティング部の のんピ(@non____97)でした!