1. はじめに
Hyper Protect Crypto Services(HPCS) は Unified Key Orchestrator(UKO)を利用することで、HPCSで生成した鍵を他社クラウドにBYOKするための機能を提供している。
https://cloud.ibm.com/docs/hs-crypto?topic=hs-crypto-uko-use-cases
HPCSの初期化作業については、以下の記事がよくまとまっているが、(私自身がやったことがなかったので)念の為その記事をなぞる形でコマンド結果を載せている。
Hyper Protect Crypto Servicesを使ってみた その1(初期化)
Hyper Protect Crypto Servicesを使ってみた その2(ROKS連携)
HPCSの初期化作業について興味がない人は、3章をスキップして4章から参照してもらうと良い。本稿ではAWSへのBYOKを試してみた。以下の手順は、
https://cloud.ibm.com/docs/hs-crypto?topic=hs-crypto-get-started
における、Step1, Step2, Step 3 (Unified Key Orchestrator Plan only)を順に追う形で試している。
2. 注文
東京リージョンおよび、プランとしてUnified Key Orchestrator
を選択する。東京リージョンでは、Failover region
は選択できないため、最小構成の以下で注文する。
3. HPCSの初期化
3-1. 暗号化ユニットを表示
$ ibmcloud plugin install tke
$ ibmcloud plugin update tke
$ mkdir tke-files
$ export CLOUDTKEFILES=/Users/syasuda/tke-files
$ ibmcloud target -r jp-tok -g Default
$ ibmcloud tke cryptounits
Verifying the OA certificate chain for serial number 93AACH95...
Successfully verified the OA certificate chain for 93AACH95.
Verifying the OA certificate chain for serial number 93AAB5FR...
Successfully verified the OA certificate chain for 93AAB5FR.
API endpoint: https://cloud.ibm.com
Region: jp-tok
User: xxxxxxx@xx.xxx.xxx
Account: xxx (xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
Resource group: Default
SERVICE INSTANCE: 2f3b5e36-3ab8-4946-aee6-192d1a71bee3
CRYPTO UNIT NUM SELECTED LOCATION
1 false [jp-tok].[AZ2-tok2-qz1-sr2-rk071-a01].[06].[04]
2 false [jp-tok].[AZ3-tok3-qz1-sr2-rk048-a01].[05].[03]
Note: all crypto units in a service instance must be configured the same.
Use 'ibmcloud tke cryptounit-compare' to check how crypto units are configured.
3-2. 操作対象とする暗号化ユニットを選択
$ ibmcloud tke cryptounit-add
API endpoint: https://cloud.ibm.com
Region: jp-tok
User: xxxxxxx@xx.xxx.xxx
Account: xxx (xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
Resource group: Default
SERVICE INSTANCE: 2f3b5e36-3ab8-4946-aee6-192d1a71bee3
CRYPTO UNIT NUM SELECTED LOCATION
1 false [jp-tok].[AZ2-tok2-qz1-sr2-rk071-a01].[06].[04]
2 false [jp-tok].[AZ3-tok3-qz1-sr2-rk048-a01].[05].[03]
Note: all crypto units in a service instance must be configured the same.
Use 'ibmcloud tke cryptounit-compare' to check how crypto units are configured.
Enter a list of CRYPTO UNIT NUM to add, separated by spaces:
> 1 2
OK
API endpoint: https://cloud.ibm.com
Region: jp-tok
User: xxxxxxx@xx.xxx.xxx
Account: xxx (xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
Resource group: Default
SERVICE INSTANCE: 2f3b5e36-3ab8-4946-aee6-192d1a71bee3
CRYPTO UNIT NUM SELECTED LOCATION
1 true [jp-tok].[AZ2-tok2-qz1-sr2-rk071-a01].[06].[04]
2 true [jp-tok].[AZ3-tok3-qz1-sr2-rk048-a01].[05].[03]
Note: all crypto units in a service instance must be configured the same.
Use 'ibmcloud tke cryptounit-compare' to check how crypto units are configured.
$ ibmcloud tke cryptounits
API endpoint: https://cloud.ibm.com
Region: jp-tok
User: xxxxxxx@xx.xxx.xxx
Account: xxx (xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
Resource group: Default
SERVICE INSTANCE: 2f3b5e36-3ab8-4946-aee6-192d1a71bee3
CRYPTO UNIT NUM SELECTED LOCATION
1 true [jp-tok].[AZ2-tok2-qz1-sr2-rk071-a01].[06].[04]
2 true [jp-tok].[AZ3-tok3-qz1-sr2-rk048-a01].[05].[03]
Note: all crypto units in a service instance must be configured the same.
Use 'ibmcloud tke cryptounit-compare' to check how crypto units are configured.
$ ibmcloud tke cryptounit-compare
SIGNATURE THRESHOLDS
SERVICE INSTANCE: 2f3b5e36-3ab8-4946-aee6-192d1a71bee3
CRYPTO UNIT NUM SIGNATURE THRESHOLD REVOCATION THRESHOLD
1 0 0
2 0 0
==> Crypto units with a signature threshold of 0 are in IMPRINT MODE. <==
CRYPTO UNIT ADMINISTRATORS
SERVICE INSTANCE: 2f3b5e36-3ab8-4946-aee6-192d1a71bee3
CRYPTO UNIT NUM ADMIN NAME SUBJECT KEY IDENTIFIER
1 No administrators
2 No administrators
NEW MASTER KEY REGISTER
SERVICE INSTANCE: 2f3b5e36-3ab8-4946-aee6-192d1a71bee3
CRYPTO UNIT NUM STATUS VERIFICATION PATTERN
1 Empty 00000000000000000000000000000000
00000000000000000000000000000000
2 Empty 00000000000000000000000000000000
00000000000000000000000000000000
CURRENT MASTER KEY REGISTER
SERVICE INSTANCE: 2f3b5e36-3ab8-4946-aee6-192d1a71bee3
CRYPTO UNIT NUM STATUS VERIFICATION PATTERN
1 Empty 00000000000000000000000000000000
00000000000000000000000000000000
2 Empty 00000000000000000000000000000000
00000000000000000000000000000000
CONTROL POINTS
SERVICE INSTANCE: 2f3b5e36-3ab8-4946-aee6-192d1a71bee3
CRYPTO UNIT NUM XCP_CPB_ALG_EC_25519 XCP_CPB_BTC XCP_CPB_ECDSA_OTHER
1 Set Set Set
2 Set Set Set
==> All crypto units are configured the same. <==
3-3. マスターキーのロード
3-3-1. signature keyの作成
$ ibmcloud tke sigkeys
No files containing a signature key were found.
To create a file containing a signature key, use the 'ibmcloud tke sigkey-add' command.
$ ibmcloud tke sigkey-add
Enter an administrator name to be associated with the signature key:
> syasuda
Enter a password to protect the signature key:
>
Re-enter the password to confirm:
>
OK
A signature key was created.
The available signature keys on this workstation are:
KEYNUM DESCRIPTION SUBJECT KEY IDENTIFIER
1 syasuda 4f834177b192f433e8adb188445166...
No KEYNUM are selected as current signature keys.
$ ibmcloud tke sigkeys
KEYNUM DESCRIPTION SUBJECT KEY IDENTIFIER
1 syasuda 4f834177b192f433e8adb188445166...
No KEYNUM are selected as current signature keys.
$ ibmcloud tke sigkey-sel
KEYNUM DESCRIPTION SUBJECT KEY IDENTIFIER
1 syasuda 4f834177b192f433e8adb188445166...
No KEYNUM are selected as current signature keys.
Enter the KEYNUM values to select as current signature keys, separated by spaces:
> 1
Enter the password for KEYNUM 1:
>
OK
KEYNUM 1 has been made the current signature key.
$ ibmcloud tke sigkeys
KEYNUM DESCRIPTION SUBJECT KEY IDENTIFIER
1 syasuda 4f834177b192f433e8adb188445166...
KEYNUM 1 is selected as the current signature key.
3-3-2. 暗号化ユニットにadministratorを追加
$ ibmcloud tke cryptounit-admins
No crypto unit administrators for service instance 2f3b5e36-3ab8-4946-aee6-192d1a71bee3
$ ibmcloud tke cryptounit-admin-add
KEYNUM DESCRIPTION SUBJECT KEY IDENTIFIER
1 syasuda 4f834177b192f433e8adb188445166...
KEYNUM 1 is selected as the current signature key.
Enter the KEYNUM of the administrator signature key you wish to load:
> 1
Enter the password for the administrator signature key file:
>
OK
The crypto unit administrator was added to the selected crypto units.
$ ibmcloud tke cryptounit-admins
SERVICE INSTANCE: 2f3b5e36-3ab8-4946-aee6-192d1a71bee3
CRYPTO UNIT NUM ADMIN NAME SUBJECT KEY IDENTIFIER
1 syasuda 4f834177b192f433e8adb188445166...
2 syasuda 4f834177b192f433e8adb188445166...
3-3-3. 閾値の設定
$ ibmcloud tke cryptounit-thrhlds
SIGNATURE THRESHOLDS
SERVICE INSTANCE: 2f3b5e36-3ab8-4946-aee6-192d1a71bee3
CRYPTO UNIT NUM SIGNATURE THRESHOLD REVOCATION THRESHOLD
1 0 0
2 0 0
==> Crypto units with a signature threshold of 0 are in IMPRINT MODE. <==
$ ibmcloud tke cryptounit-thrhld-set
Enter the new signature threshold value:
> 1
Enter the new revocation signature threshold value:
> 1
Enter the password for the signature key identified by:
syasuda (4f834177b192f433e8adb188445166...)
>
OK
New signature threshold values have been set in the selected crypto units.
SIGNATURE THRESHOLDS
SERVICE INSTANCE: 2f3b5e36-3ab8-4946-aee6-192d1a71bee3
CRYPTO UNIT NUM SIGNATURE THRESHOLD REVOCATION THRESHOLD
1 1 1
2 1 1
==> Crypto units with a signature threshold of 0 are in IMPRINT MODE. <==
$ ibmcloud tke cryptounit-thrhlds
SIGNATURE THRESHOLDS
SERVICE INSTANCE: 2f3b5e36-3ab8-4946-aee6-192d1a71bee3
CRYPTO UNIT NUM SIGNATURE THRESHOLD REVOCATION THRESHOLD
1 1 1
2 1 1
==> Crypto units with a signature threshold of 0 are in IMPRINT MODE. <==
3-3-4. マスターキーパーツの作成
$ ibmcloud tke mks
No files containing an EP11 master key part were found.
$ ibmcloud tke mk-add --random
Enter a description for the key part:
> masterkeypart01
Enter a password to protect the key part:
>
Re-enter the password to confirm:
>
OK
A key part was created.
The available EP11 master key parts on this workstation are:
KEYNUM DESCRIPTION VERIFICATION PATTERN
1 masterkeypart01 4cf069ff93ee657ef8b946f7ae9d87eb
1381b044df21fe55eb3707b98fcfa649
$ ibmcloud tke mk-add --random
Enter a description for the key part:
> masterkeypart02
Enter a password to protect the key part:
>
Re-enter the password to confirm:
>
OK
A key part was created.
The available EP11 master key parts on this workstation are:
KEYNUM DESCRIPTION VERIFICATION PATTERN
1 masterkeypart01 4cf069ff93ee657ef8b946f7ae9d87eb
1381b044df21fe55eb3707b98fcfa649
2 masterkeypart02 44875df8111694a4e377d54d83b0d5fd
4230feb0ccee04e1cb8bb82bd4254815
$ ibmcloud tke mks
KEYNUM DESCRIPTION VERIFICATION PATTERN
1 masterkeypart01 4cf069ff93ee657ef8b946f7ae9d87eb
1381b044df21fe55eb3707b98fcfa649
2 masterkeypart02 44875df8111694a4e377d54d83b0d5fd
4230feb0ccee04e1cb8bb82bd4254815
3-3-5. master keyのアップロード
$ ibmcloud tke cryptounit-mks
NEW MASTER KEY REGISTER
SERVICE INSTANCE: 2f3b5e36-3ab8-4946-aee6-192d1a71bee3
CRYPTO UNIT NUM STATUS VERIFICATION PATTERN
1 Empty 00000000000000000000000000000000
00000000000000000000000000000000
2 Empty 00000000000000000000000000000000
00000000000000000000000000000000
CURRENT MASTER KEY REGISTER
SERVICE INSTANCE: 2f3b5e36-3ab8-4946-aee6-192d1a71bee3
CRYPTO UNIT NUM STATUS VERIFICATION PATTERN
1 Empty 00000000000000000000000000000000
00000000000000000000000000000000
2 Empty 00000000000000000000000000000000
00000000000000000000000000000000
$ ibmcloud tke cryptounit-mk-load
KEYNUM DESCRIPTION VERIFICATION PATTERN
1 masterkeypart01 4cf069ff93ee657ef8b946f7ae9d87eb
1381b044df21fe55eb3707b98fcfa649
2 masterkeypart02 44875df8111694a4e377d54d83b0d5fd
4230feb0ccee04e1cb8bb82bd4254815
Enter the KEYNUM values of the master key parts you wish to load.
2 or 3 values must be specified, separated by spaces.
> 1 2
Enter the password for the signature key identified by:
syasuda (4f834177b192f433e8adb188445166...)
>
Enter the password for key file 1
>
Enter the password for key file 2
>
OK
The new master key register has been loaded in the selected crypto units.
NEW MASTER KEY REGISTER
SERVICE INSTANCE: 2f3b5e36-3ab8-4946-aee6-192d1a71bee3
CRYPTO UNIT NUM STATUS VERIFICATION PATTERN
1 Full Uncommitted ad4bed6dd9e3c07654762508fd5f969f
0f811f0a27ec8ff3ae031adc6ff92aa4
2 Full Uncommitted ad4bed6dd9e3c07654762508fd5f969f
0f811f0a27ec8ff3ae031adc6ff92aa4
3-3-6. master keyのコミット
$ ibmcloud tke cryptounit-mks
NEW MASTER KEY REGISTER
SERVICE INSTANCE: 2f3b5e36-3ab8-4946-aee6-192d1a71bee3
CRYPTO UNIT NUM STATUS VERIFICATION PATTERN
1 Full Uncommitted ad4bed6dd9e3c07654762508fd5f969f
0f811f0a27ec8ff3ae031adc6ff92aa4
2 Full Uncommitted ad4bed6dd9e3c07654762508fd5f969f
0f811f0a27ec8ff3ae031adc6ff92aa4
CURRENT MASTER KEY REGISTER
SERVICE INSTANCE: 2f3b5e36-3ab8-4946-aee6-192d1a71bee3
CRYPTO UNIT NUM STATUS VERIFICATION PATTERN
1 Empty 00000000000000000000000000000000
00000000000000000000000000000000
2 Empty 00000000000000000000000000000000
00000000000000000000000000000000
$ ibmcloud tke cryptounit-mk-commit
Enter the password for the signature key identified by:
syasuda (4f834177b192f433e8adb188445166...)
>
OK
The new master key register has been committed in the selected crypto units.
NEW MASTER KEY REGISTER
SERVICE INSTANCE: 2f3b5e36-3ab8-4946-aee6-192d1a71bee3
CRYPTO UNIT NUM STATUS VERIFICATION PATTERN
1 Full Committed ad4bed6dd9e3c07654762508fd5f969f
0f811f0a27ec8ff3ae031adc6ff92aa4
2 Full Committed ad4bed6dd9e3c07654762508fd5f969f
0f811f0a27ec8ff3ae031adc6ff92aa4
$ ibmcloud tke cryptounit-mks
NEW MASTER KEY REGISTER
SERVICE INSTANCE: 2f3b5e36-3ab8-4946-aee6-192d1a71bee3
CRYPTO UNIT NUM STATUS VERIFICATION PATTERN
1 Full Committed ad4bed6dd9e3c07654762508fd5f969f
0f811f0a27ec8ff3ae031adc6ff92aa4
2 Full Committed ad4bed6dd9e3c07654762508fd5f969f
0f811f0a27ec8ff3ae031adc6ff92aa4
CURRENT MASTER KEY REGISTER
SERVICE INSTANCE: 2f3b5e36-3ab8-4946-aee6-192d1a71bee3
CRYPTO UNIT NUM STATUS VERIFICATION PATTERN
1 Empty 00000000000000000000000000000000
00000000000000000000000000000000
2 Empty 00000000000000000000000000000000
00000000000000000000000000000000
3-3-7. master keyのactivate
$ ibmcloud tke cryptounit-mk-setimm
Warning! Any key storage associated with the targeted service instance must be prepared to accept the new master key value before running this command. Otherwise, key storage may become unusable.
Do you want to continue?
Answer [y/N]:
> y
Enter the password for the signature key identified by:
syasuda (4f834177b192f433e8adb188445166...)
>
OK
Set immediate completed successfully in the selected crypto units.
NEW MASTER KEY REGISTER
SERVICE INSTANCE: 2f3b5e36-3ab8-4946-aee6-192d1a71bee3
CRYPTO UNIT NUM STATUS VERIFICATION PATTERN
1 Empty 00000000000000000000000000000000
00000000000000000000000000000000
2 Empty 00000000000000000000000000000000
00000000000000000000000000000000
CURRENT MASTER KEY REGISTER
SERVICE INSTANCE: 2f3b5e36-3ab8-4946-aee6-192d1a71bee3
CRYPTO UNIT NUM STATUS VERIFICATION PATTERN
1 Valid ad4bed6dd9e3c07654762508fd5f969f
0f811f0a27ec8ff3ae031adc6ff92aa4
2 Valid ad4bed6dd9e3c07654762508fd5f969f
0f811f0a27ec8ff3ae031adc6ff92aa4
$ ibmcloud tke cryptounit-mks
NEW MASTER KEY REGISTER
SERVICE INSTANCE: 2f3b5e36-3ab8-4946-aee6-192d1a71bee3
CRYPTO UNIT NUM STATUS VERIFICATION PATTERN
1 Empty 00000000000000000000000000000000
00000000000000000000000000000000
2 Empty 00000000000000000000000000000000
00000000000000000000000000000000
CURRENT MASTER KEY REGISTER
SERVICE INSTANCE: 2f3b5e36-3ab8-4946-aee6-192d1a71bee3
CRYPTO UNIT NUM STATUS VERIFICATION PATTERN
1 Valid ad4bed6dd9e3c07654762508fd5f969f
0f811f0a27ec8ff3ae031adc6ff92aa4
2 Valid ad4bed6dd9e3c07654762508fd5f969f
0f811f0a27ec8ff3ae031adc6ff92aa4
3-4. 最終形態でのUI上の表示
Master key not activated
の警告がなくなった。
4. Unified Key Orchestrator(UKO)
4-1. IAMで権限を付与する。
4-2. Vaultの作成
Vaultは
- 鍵
- HPCSと同一インスタンス内のKeystore
- AWS/AzureのようなリモートにあるKeystore
の集まりを管理するための器であり、Vault単位でIAMによるアクセス制御が可能である。
https://cloud.ibm.com/docs/hs-crypto?topic=hs-crypto-create-vaults&interface=ui
https://cloud.ibm.com/docs/hs-crypto?topic=hs-crypto-grant-access-vaults
4-3. Keystoreの作成
- Add keystore
- 先程作成したVaultを選択してNext
- 今回はremote keystoreとしてAWSを利用するため、
AWS keystore
を選択。 -
keystore
の名称や、AWSのリージョン(東京リージョンはap_northeast
)、Access key情報などを入力。Test Connectionによって接続の可否を確認。 - 接続テストがうまくいったらNext
- Add keystore
- 作成完了
4-4 AWSに配布するmanaged keyの作成
- Create key
- 先程作成したVaultを選択
-
AWS Key Management Service
を選択 - 鍵の名称などを選択。Stateは即時に有効するか、後から有効にするかを選択できる。今回は即時に有効にする
Active
を選択。その他expiration dateやタグ情報を入力。本稿執筆時点でのUKOではこのexpiration dateになったからといって勝手にstateが変わる訳ではない。 - 鍵の配置先(配布先)であるkeystoreを選択。
- 最終確認。問題なければ、Create Key。
- 鍵が作成された。
4-5 配布された鍵と関連イベントの確認
以下は、AWS上でのKMSの状態。確かに鍵が配布されている。
また一連のイベントは、IBM Cloud側ではActivity Tracker with LogDNAにて確認が可能である。
https://cloud.ibm.com/docs/hs-crypto?topic=hs-crypto-uko-at-events&interface=ui#uko-at-events-analyze-failed
AWS側では、AWS CloudTrailを使って一連のAPI呼び出し処理の内容が確認可能である。
5. UKOを使った鍵の状態変更に伴うテスト
5-1 Deactivate
- HPCS上でdeactivateする。
- deactivateの確認画面
- deactivateになった(見えない場合は、フィルタリングされている可能性があるので注意)
- AWS上では
Pending Import
になった。
5-2 Activate
5-3 Destroy
- deactivateした後に、destroyする(activate状態から直接destroyはできない)。
- 確認。
- Destroyed状態になった。
- AWS上では、
Pending Deletion
になった。