【AWS CloudHSM】初めてのAWS CloudHSMのM of N アクセス制御　#AWS #SAP


# AWS CloudHSMのM of N アクセス制御についてわかりやすく解説
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3806193/04cfad58-0fbe-2c11-bdde-26abc5a8560b.png)

今回は、AWS CloudHSMの「M of Nアクセス制御」について、初心者の方にもわかりやすく説明します。
SAPで時々出題されるのですが、KMSとの違いいまいちよくわからず、、、。ということでまとめてみました！


## ◆一言要約
::: note info
AWS CloudHSMの「M of Nアクセス制御」は、複数人が共同で承認しないと重要な操作ができない仕組みです。例えば、4人のうち2人以上の承認がないと設定変更できないようにすることで、セキュリティを強化します。
:::

公式ドキュメントだと…
https://docs.aws.amazon.com/ja_jp/cloudhsm/latest/userguide/quorum-authentication.html

>AWS CloudHSM クラスターHSMsの はクォーラム認証をサポートしています。これは M of N アクセスコントロールとも呼ばれます。クォーラム認証では、 の 1 人のユーザーが でクォーラム制御オペレーションを実行HSMすることはできませんHSM。代わりに、これらの操作を実行するには、最小数のHSMユーザー (少なくとも 2) が協力する必があります。クォーラム認証では、複数のHSMユーザーからの承認を要求することで、保護レイヤーを追加できます。

## ◆おすすめの理解の順序
**①CloudHSM
②M of Nアクセス制御（クォーラム認証）
③KMSとHSMの比較**

分かるところは読み飛ばしてください～！

### ① CloudHSMとは
まず、AWS CloudHSMとは何かから見ていきましょう。CloudHSMはクラウド上で利用できるハードウェアセキュリティモジュール（HSM）で、データや暗号鍵を守るための仕組みです。特に、金融や医療などの厳しいセキュリティ要件を持つ分野に適しています。

> **具体例**  
例えば、銀行が顧客データを保護するためにCloudHSMを使うと、データを守るための鍵を厳重に管理できるのです。この鍵を銀行自身が管理するため、外部からの不正アクセスにも強くなります。

### ② M of N アクセス制御（クォーラム認証）とは
次に、「M of Nアクセス制御」という仕組みについて説明します。これは「クォーラム認証」とも呼ばれ、重要な操作をする際に複数人の承認が必要になる仕組みです。「M」は承認に必要な人数、「N」は全体の人数を表しています。

> **具体例**  
例えば、病院で患者データを管理する場合、1人だけの判断で重要なデータを変更できるとリスクが高いです。「5人の担当者のうち、少なくとも3人の承認が必要」という設定にすることで、不正やミスを防ぎ、安心してデータを守れる仕組みができるのです。

## ◆もう少し詳しく(M of Nアクセス制御を設定)

- **cloudhsm_mgmt_util ツール**：HSMの設定や管理を行うためのコマンドラインツールです。
- **registerMofnPubKey コマンド**：各担当者（承認者）の「署名用のキー」をHSMに登録するためのコマンドです。
このツールとコマンドを使って、M of Nアクセス制御を設定していきます

### cloudhsm_mgmt_util ツールとは？
**cloudhsm_mgmt_util**（クラウドエイチエスエム・マネジメント・ユーティル) は、AWS CloudHSM（ハードウェアセキュリティモジュール）を管理・操作するための専用ツール（プログラム）です。HSMはデータを厳重に守るための装置ですが、その設定や管理には特別なコマンドを使う必要があります。このツールを使うことで、HSMに対して「こういう設定にしてほしい」といった指示を出すことができます。

#### どうしてこのツールを使うの？
AWS CloudHSMの一部の設定や高度な管理機能は、通常のAWSコンソール（画面）からは変更できません。そのため、「cloudhsm_mgmt_util」という専用ツールを使って、コマンドを入力し、HSMに直接指示を送ることが必要です。

> **具体例**  
例えば、金庫のセキュリティ設定を調整したり、鍵の登録をしたりする場合に、このツールを使って「セキュリティの担当者が承認した内容をHSMに登録する」ような操作をします。

### registerMofnPubKey コマンドとは？
**registerMofnPubKey**（レジスター・エムオブエヌ・パブキー）コマンドは、「承認が必要な担当者（＝署名用のキー）をHSMに登録する」ためのコマンドです。これにより、HSMは「この人たちが許可を持っている担当者だ」と認識するようになります。

例えば、会社の金庫を開けるのに「誰が開ける許可を持っているか」を金庫に教える必要があります。このコマンドを使って「この担当者が許可を持っている人です」とHSMに知らせます。

>**具体例**  
5人の担当者がいるとして、そのうち3人の許可があれば重要な操作ができるように設定する場合、まず「この5人が担当者です」とHSMに登録する必要があります。これを「署名用のキー」を登録することで実現するのが`registerMofnPubKey`コマンドです。


---

例えば、ある会社で次のような状況を考えます。
- 担当者A、B、C、Dの4人が承認者である。
- セキュリティ上の理由で「少なくとも2人の承認」が必要とされている。
##### 手順の流れ
1. cloudhsm_mgmt_util ツールでHSMにアクセスし、COとしてログインします。
2. 各担当者がregisterMofnPubKey コマンドを使って、自分の署名用キー（公開鍵）を登録します。たとえば、AさんはregisterMofnPubKey a_pub_key.pem、BさんはregisterMofnPubKey b_pub_key.pemといった形です。
3. すべての担当者のキーが登録されたら、setMValue 2 として、2人の承認が必要であることをHSMに設定します。
##### 結果
これにより、Aさん、Bさん、Cさん、Dさんのうち2人が承認しないと、HSMの管理設定変更ができなくなり、セキュリティが強化されます。
### 具体的な設定の流れ

では、具体例を交えながら手順を見ていきましょう。

#### ステップ1：cloudhsm_mgmt_util ツールでHSMにアクセスする

まず、HSMにアクセスするために**cloudhsm_mgmt_util**というツールを使います。このツールを使うことで、HSMに直接ログインし、設定変更や管理ができるようになります。

```
 cloudhsm_mgmt_util
```
このコマンドを実行すると、ツールが起動し、HSMにログインできるようになります。

#### ステップ2：CO（Crypto Officer）としてログインする
CloudHSMの管理者として操作を行うために、「CO（Crypto Officer）」としてログインします。この操作により、HSM上での管理者権限を持って設定ができるようになります。

```
loginHSM CO <COユーザー名>
```
※ <COユーザー名> は実際のユーザー名に置き換えて入力します。

#### ステップ3：registerMofnPubKey コマンドで署名用のキーを登録する
各担当者（承認者）は、自分の署名キー（公開鍵）を作成し、それをHSMに登録します。このキーの登録にはregisterMofnPubKeyというコマンドを使用します。このコマンドを実行することで、HSMは「この人が承認者だ」という情報を記憶し、設定された人数分の署名が集まらないとシステムの変更ができないように設定されます。

```
registerMofnPubKey <署名用の公開鍵>
```
例：
```
registerMofnPubKey my_pub_key.pem
```
※ `my_pub_key.pem` は実際の公開鍵ファイルです。

#### ステップ4：setMValue コマンドでクォーラムの最小人数を設定する
次に、最低何人の承認が必要かを設定します。例えば、4人のうち2人の承認が必要な場合は、setMValue 2 として設定します。この値（M値）を設定することで、システム変更に必要な承認人数が確定します。

```
setMValue 2
```
これで、「少なくとも2人の承認がないとシステムの設定変更ができない」というM of Nアクセス制御が実現されます。


## ◆KMSとの比較
AWS KMSは、AWSが全体の管理を行い、シンプルに暗号化を利用できるのが特徴です。一方、CloudHSMはユーザーが鍵の管理を行うため、より高いセキュリティ対策が可能です。シングルテナント方式で独自のセキュリティが必要な場合に適しています。

| 機能                           | AWS KMS                                | AWS CloudHSM                          |
|--------------------------------|----------------------------------------|---------------------------------------|
| **セキュリティレベル**         | FIPS140-2 Level 2                     | FIPS140-2 Level 3                     |
| **テナンシー**                 | マルチテナント                        | シングルテナント                      |
| **連携可能なAWSサービス数**     | 50以上                                | KMS経由でAWSサービスと連携             |
| **対応する暗号鍵**             | 共通鍵のみ                            | 共通鍵と公開鍵                        |
| **管理責任**                   | AWSが管理                             | ユーザーが管理                         |
| **特徴**                       | 運用が簡単でAWSサービスと統合しやすい | 高いセキュリティレベルで柔軟な管理が可能 |




## ◆AWS Black Beltでより詳しく
<iframe width="560" height="315" src="https://www.youtube.com/embed/MmW22gUI5VY?si=YWUizwNqwthVb4ta" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>

<iframe width="560" height="315" src="https://www.youtube.com/embed/BLnuUtjJNLE?si=jToexd7Lty8Q5FFe" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>

## まとめ
AWS CloudHSMのM of Nアクセス制御を使えば、複数人の承認が必要な操作のみを許可することで、不正アクセスや操作ミスのリスクを軽減できます。AWS KMSと比較して、CloudHSMは特に高いセキュリティが求められる場面で力を発揮します。用途に応じてどちらのサービスが適しているかを選ぶと良いでしょう。