

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# CloudHSM CLI를 사용하여 암호화 사용자에 대한 AWS CloudHSM 쿼럼 인증 설정
<a name="key-quorum-auth-chsm-cli-first-time"></a>

이 주제에서는 [Crypto User](understanding-users.md#crypto-user-chsm-cli)의 쿼럼 인증을 위해 CloudHSM을 구성하는 방법을 설명합니다. 초기 설정 중에 이 단계를 한 번 수행합니다. 이후의 키 관리 및 사용은 [CloudHSM CLI AWS CloudHSM 를 사용하여 쿼럼 인증을 활성화한 키 관리 및 사용](key-quorum-auth-chsm-cli-crypto-user.md) 섹션을 참조하세요.

**Topics**
+ [사전 조건](#key-quorum-crypto-user-prerequisites)
+ [1단계. 서명용 키 생성 및 등록](#key-quorum-crypto-user-create-and-register-key)
+ [2단계. 키 생성 중에 키 쿼럼 값 설정](#key-quorum-admin-set-quorum-minimum-value-chsm-cli)

## 사전 조건
<a name="key-quorum-crypto-user-prerequisites"></a>
+ [CloudHSM CLI](cloudhsm_cli.md) 숙지

## 1단계. 서명용 키 생성 및 등록
<a name="key-quorum-crypto-user-create-and-register-key"></a>

쿼럼 인증을 사용하려면 각 Crypto User가 다음 단계를 *모두* 완료해야 합니다.

**Topics**
+ [RSA 키 페어 생성](#key-mofn-key-pair-create-chsm-cli)
+ [등록 토큰 생성](#key-mofn-registration-token-chsm-cli)
+ [서명되지 않은 등록 토큰에 서명](#key-mofn-sign-registration-token-chsm-cli)
+ [HSM에 퍼블릭 키 등록](#key-mofn-register-key-chsm-cli)

### RSA 키 페어 생성
<a name="key-mofn-key-pair-create-chsm-cli"></a>

키 쌍을 생성하고 보호하는 방법에는 여러 가지가 있습니다. 다음 예제에서는 [OpenSSL](https://www.openssl.org/)을 사용한 작업 방법을 보여 줍니다.

**Example — OpenSSL을 사용하여 개인 키를 생성하세요**  
다음 예제는 OpenSSL을 사용하여 2048비트 RSA 키를 생성하는 방법을 보여줍니다. 이 예를 사용하려면 {{<crypto\_user1.key>}}를 키를 저장하려는 파일 이름으로 바꿉니다.  

```
$ openssl genrsa -out {{<crypto_user1.key>}}
Generating RSA private key, 2048 bit long modulus
.....................................+++
.+++
e is 65537 (0x10001)
```

다음으로 방금 생성한 프라이빗 키를 사용하여 퍼블릭 키를 생성합니다.

**Example — OpenSSL로 퍼블릭 키 생성하기**  
다음 예에서는 OpenSSL을 사용하여 방금 생성한 프라이빗 키에서 퍼블릭 키를 생성하는 방법을 보여줍니다.  

```
$ openssl rsa -in crypto_user1.key -outform PEM -pubout -out crypto_user1.pub
writing RSA key
```

### 등록 토큰 생성
<a name="key-mofn-registration-token-chsm-cli"></a>

토큰을 생성하고 이전 단계에서 방금 생성한 프라이빗 키로 서명합니다.

**등록 토큰 생성**

1. 다음 명령을 사용하여 CloudHSM CLI를 시작합니다.

------
#### [ Linux ]

   ```
   $ /opt/cloudhsm/bin/cloudhsm-cli interactive
   ```

------
#### [ Windows ]

   ```
   PS C:\> & "C:\Program Files\Amazon\CloudHSM\bin\cloudhsm-cli.exe" interactive
   ```

------

1. [쿼럼 토큰 서명 생성](cloudhsm_cli-qm-token-gen.md) 명령을 실행하여 등록 토큰을 생성합니다.

   ```
   aws-cloudhsm > quorum token-sign generate --service registration --token /path/tokenfile
   {
     "error_code": 0,
     "data": {
       "path": "/path/tokenfile"
     }
   }
   ```

1. [쿼럼 토큰 서명 생성](cloudhsm_cli-qm-token-gen.md) 명령은 지정된 파일 경로에 등록 토큰을 생성합니다. 토큰 파일 검사:

   ```
   $ cat /path/tokenfile
   {
     "version": "2.0",
     "tokens": [
       {
         "approval_data": {{<approval data in base64 encoding>}},
         "unsigned": {{<unsigned token in base64 encoding>}},
         "signed": ""
       }
     ]
   }
   ```

   토큰 파일은 다음으로 구성됩니다.
   + **approval\_data**: 원시 데이터가 최대 245바이트를 초과하지 않는 base64로 인코딩된 무작위 데이터 토큰입니다.
   + **서명되지 않음**: approval\_data의 base64로 인코딩되고 SHA256 해시 처리된 토큰입니다.
   + **서명됨**: 이전에 OpenSSL로 생성된 RSA 2048비트 개인 키를 사용하여 서명되지 않은 토큰의 base64로 인코딩된 서명된 토큰(서명)입니다.

   개인 키로 서명되지 않은 토큰에 서명하여 개인 키에 액세스할 수 있음을 증명합니다. crypto-user를 AWS CloudHSM 클러스터에 쿼럼 사용자로 등록하려면 서명과 퍼블릭 키로 완전히 채워진 등록 토큰 파일이 필요합니다.

### 서명되지 않은 등록 토큰에 서명
<a name="key-mofn-sign-registration-token-chsm-cli"></a>

1. base64로 인코딩된 서명되지 않은 토큰을 디코딩하여 바이너리 파일에 배치합니다:

   ```
   $ echo -n '6BMUj6mUjjko6ZLCEdzGlWpR5sILhFJfqhW1ej3Oq1g=' | base64 -d > crypto_user.bin
   ```

1. OpenSSL과 개인 키를 사용하여 현재 서명되지 않은 바이너리 등록 토큰에 서명하고 바이너리 서명 파일을 생성합니다.

   ```
   $ openssl pkeyutl -sign \
   -inkey crypto_user1.key \
   -pkeyopt digest:sha256 \
   -keyform PEM \
   -in crypto_user.bin \
   -out crypto_user.sig.bin
   ```

1. 바이너리 서명을 base64로 인코딩합니다.

   ```
   $ base64 -w0 crypto_user.sig.bin > crypto_user.sig.b64
   ```

1. base64로 인코딩된 서명을 복사하여 토큰 파일에 붙여넣습니다.

   ```
   {
     "version": "2.0",
     "tokens": [
       {
         "approval_data": {{<approval data in base64 encoding>}},
         "unsigned": {{<unsigned token in base64 encoding>}},
         "signed": {{<signed token in base64 encoding>}}
       }
     ]
   }
   ```

### HSM에 퍼블릭 키 등록
<a name="key-mofn-register-key-chsm-cli"></a>

키를 생성한 후 crypto-user는 AWS CloudHSM 클러스터에 퍼블릭 키를 등록해야 합니다.

1. CloudHSM CLI 시작:

------
#### [ Linux ]

   ```
   $ /opt/cloudhsm/bin/cloudhsm-cli interactive
   ```

------
#### [ Windows ]

   ```
   PS C:\> & "C:\Program Files\Amazon\CloudHSM\bin\cloudhsm-cli.exe" interactive
   ```

------

1. 등록하려는 퍼블릭 키를 가진 Crypto User로 로그인합니다.

   ```
   aws-cloudhsm > login --username crypto_user1 --role crypto-user
   Enter password:
   {
     "error_code": 0,
     "data": {
       "username": "crypto_user1",
       "role": "crypto-user"
     }
   }
   ```

1. **[CloudHSM CLI를 사용하여 사용자의 token-sign 쿼럼 전략 등록](cloudhsm_cli-user-chqm-token-reg.md)**에 퍼블릭 키를 등록합니다. 자세한 내용은 다음 예제를 참조하거나 **help user change-quorum token-sign register** 명령을 사용하십시오.  
**Example - AWS CloudHSM 클러스터에 퍼블릭 키 등록**  

   다음 예제에서는 CloudHSM CLI의 **user change-quorum token-sign register** 명령을 사용하여 Crypto User의 퍼블릭 키를 HSM에 등록하는 방법을 보여줍니다. 이 명령을 사용하려면 Crypto User가 HSM에 로그인해야 합니다. 이 값들을 사용자의 값으로 대체합니다.

   ```
   aws-cloudhsm > user change-quorum token-sign register --public-key {{</path/crypto_user.pub>}} --signed-token {{</path/tokenfile>}}
   {
     "error_code": 0,
     "data": {
       "username": "crypto_user1",
       "role": "crypto-user"
     }
   }
   ```
**참고**  
**/path/crypto\_user.pub**: 퍼블릭 키 PEM 파일의 파일 경로  
**필수 항목 여부:** 예  
**/path/token\_file**: 사용자 개인 키로 서명된 토큰이 있는 파일 경로  
**필수 항목 여부:** 예

1. 모든 Crypto User가 퍼블릭 키를 등록하면 **user list** 명령 출력의 쿼럼 필드에 활성화된 쿼럼 전략이 사용 중인 것으로 표시됩니다.

    이 예제에서 AWS CloudHSM 클러스터에는 **user list** 명령의 다음 출력과 같이 각각 동일한 crypto-user를 가진 두 개의 HSMs이 있습니다. 사용자 생성에 대한 자세한 내용은 [CloudHSM CLI를 사용하는 사용자 관리](manage-hsm-users-chsm-cli.md) 단원을 참조하십시오.

   ```
   aws-cloudhsm > user list
   {
     "error_code": 0,
     "data": {
       "users": [
         {
           "username": "admin",
           "role": "admin",
           "locked": "false",
           "mfa": [],
           "quorum": [],
           "cluster-coverage": "full"
         },
         {
           "username": "crypto_user1",
           "role": "crypto-user",
           "locked": "false",
           "mfa": [],
           "quorum": [
             {
               "strategy": "token-sign",
               "status": "enabled"
             }
           ],
           "cluster-coverage": "full"
         },
         {
           "username": "crypto_user2",
           "role": "crypto-user",
           "locked": "false",
           "mfa": [],
           "quorum": [
             {
               "strategy": "token-sign",
               "status": "enabled"
             }
           ],
           "cluster-coverage": "full"
         },
         {
           "username": "crypto_user3",
           "role": "crypto-user",
           "locked": "false",
           "mfa": [],
           "quorum": [
             {
               "strategy": "token-sign",
               "status": "enabled"
             }
           ],
           "cluster-coverage": "full"
         },
         {
           "username": "app_user",
           "role": "internal(APPLIANCE_USER)",
           "locked": "false",
           "mfa": [],
           "quorum": [],
           "cluster-coverage": "full"
         }
       ]
     }
   }
   ```

## 2단계. 키 생성 중에 키 쿼럼 값 설정
<a name="key-quorum-admin-set-quorum-minimum-value-chsm-cli"></a>

쿼럼 인증을 사용하려면 Crypto User가 HSM에 로그인한 다음 연결된 *키 쿼럼 값*을 설정해야 합니다. 이는 HSM 키 관리/사용 작업을 수행하는 데 필요한 최소 Crypto User 승인 수입니다. 키 관리 또는 키 사용과 연결된 키 명령에 대한 자세한 내용은 [지원되는 서비스 및 유형](key-quorum-auth-chsm-cli-service-names.md) 섹션을 참조하세요.

**키 쿼럼 값이 설정된 키 페어 생성**

1. 다음 명령을 사용하여 CloudHSM CLI를 시작합니다.

------
#### [ Linux ]

   ```
   $ /opt/cloudhsm/bin/cloudhsm-cli interactive
   ```

------
#### [ Windows ]

   ```
   PS C:\> & "C:\Program Files\Amazon\CloudHSM\bin\cloudhsm-cli.exe" interactive
   ```

------

1. CloudHSM CLI를 사용하여 Crypto User로 로그인합니다.

   ```
   aws-cloudhsm > login --username crypto_user1 --role crypto-user
   Enter password:
   {
     "error_code": 0,
     "data": {
       "username": "crypto_user1",
       "role": "crypto-user"
     }
   }
   ```

이 예제에서는 키 관리 및 키 사용 작업 모두에 대해 키 쿼럼 값을 2로 설정한 RSA 키 페어를 생성합니다. HSM의 총 Crypto User 수까지 0\~8 사이의 값을 선택할 수 있습니다. 이 예제에서 HSM에는 3명의 Crypto User가 있으므로 가능한 최대 값은 3입니다. 이 예제에서는 키 생성 중에 {{<crypto\_user2>}}와 키를 공유합니다. 또한 퍼블릭 키에는 쿼럼 값이 없습니다.

```
aws-cloudhsm > key generate-asymmetric-pair rsa \
--public-exponent 65537 \
--modulus-size-bits 2048 \
--public-label rsa-public-key-example \
--private-label rsa-private-key-example \
--public-attributes verify=true \
--private-attributes sign=true
--share-crypto-users crypto_user2 \
--manage-private-key-quorum-value 2 \
--use-private-key-quorum-value 2
{
  "error_code": 0,
  "data": {
    "public_key": {
      "key-reference": "0x0000000000640006",
      "key-info": {
        "key-owners": [
          {
            "username": "crypto_user",
            "key-coverage": "full"
          }
        ],
        "shared-users": [],
        "key-quorum-values": {
          "manage-key-quorum-value": 0,
          "use-key-quorum-value": 0
        },
        "cluster-coverage": "full"
      },
      "attributes": {
        "key-type": "rsa",
        "label": "rsa-public-key-example",
        "id": "0x",
        "check-value": "0x218f50",
        "class": "public-key",
        "encrypt": false,
        "decrypt": false,
        "token": true,
        "always-sensitive": false,
        "derive": false,
        "destroyable": true,
        "extractable": true,
        "local": true,
        "modifiable": true,
        "never-extractable": false,
        "private": true,
        "sensitive": false,
        "sign": false,
        "trusted": false,
        "unwrap": false,
        "verify": true,
        "wrap": false,
        "wrap-with-trusted": false,
        "key-length-bytes": 512,
        "public-exponent": "0x010001",
        "modulus": "0xbdf471a3d2a869492f51c767bece8780730ae6479a9a75efffe7cea3594fb28ca518630e7b1d988b45d2fedc830b7ab848448c24c476cacb73d1523278aed289551e07af0fbfabe4811cc4601678bd097b5c0a578249ed1eb0e4878a80ba1ed85ac46eb1fee60d2a8bdd322075196dec4b57fa2cd82af44ad068115ac219bc073ec65c19c97bd883cf26931408d7bc51e237626b8b9b8f2485425907a0eb42f2f4c40018c8dac7ceeb1b646305a2e537ab904346883e41d568264abee0137048e4657d2cf72801810f3212f662b7a7ae134848b922771f6a30aa76718008d9cc74ff8ddcd8d867b05c3d40020d1514999af96889911467191b9f390d8de07f83",
        "modulus-size-bits": 2048
      }
    },
    "private_key": {
      "key-reference": "0x0000000000640007",
      "key-info": {
        "key-owners": [
          {
            "username": "crypto_user",
            "key-coverage": "full"
          }
        ],
        "shared-users": [
          {
            "username": "crypto_user2",
            "key-coverage": "full"
          }
        ],
        "key-quorum-values": {
          "manage-key-quorum-value": 2,
          "use-key-quorum-value": 2
        },
        "cluster-coverage": "full"
      },
      "attributes": {
        "key-type": "rsa",
        "label": "rsa-private-key-example",
        "id": "0x",
        "check-value": "0x218f50",
        "class": "private-key",
        "encrypt": false,
        "decrypt": false,
        "token": true,
        "always-sensitive": true,
        "derive": false,
        "destroyable": true,
        "extractable": true,
        "local": true,
        "modifiable": true,
        "never-extractable": false,
        "private": true,
        "sensitive": true,
        "sign": true,
        "trusted": false,
        "unwrap": false,
        "verify": false,
        "wrap": false,
        "wrap-with-trusted": false,
        "key-length-bytes": 1216,
        "public-exponent": "0x010001",
        "modulus": "0xbdf471a3d2a869492f51c767bece8780730ae6479a9a75efffe7cea3594fb28ca518630e7b1d988b45d2fedc830b7ab848448c24c476cacb73d1523278aed289551e07af0fbfabe4811cc4601678bd097b5c0a578249ed1eb0e4878a80ba1ed85ac46eb1fee60d2a8bdd322075196dec4b57fa2cd82af44ad068115ac219bc073ec65c19c97bd883cf26931408d7bc51e237626b8b9b8f2485425907a0eb42f2f4c40018c8dac7ceeb1b646305a2e537ab904346883e41d568264abee0137048e4657d2cf72801810f3212f662b7a7ae134848b922771f6a30aa76718008d9cc74ff8ddcd8d867b05c3d40020d1514999af96889911467191b9f390d8de07f83",
        "modulus-size-bits": 2048
      }
    }
  }
}
```

쿼럼 제어를 사용하여 키를 생성할 때 키는 최대 키 쿼럼 값과 동일한 수의 최소 사용자와 연결되어야 합니다. 연결된 사용자에는 키 소유자와 키가 공유되는 Crypto User가 포함됩니다. 키를 공유할 최소 사용자 수를 확인하려면 키 사용 쿼럼 값과 키 관리 쿼럼 값 사이에서 가장 큰 쿼럼 값을 구하고 기본적으로 키와 연결된 키 소유자를 고려하여 1을 뺍니다. 키를 더 많은 사용자와 공유하려면 **[CloudHSM CLI를 사용하여 키 공유](cloudhsm_cli-key-share.md)** 명령을 사용합니다.

키 생성 시 충분한 사용자와 키를 공유하지 않으면 아래와 같은 오류가 발생합니다.

```
aws-cloudhsm > key generate-asymmetric-pair rsa \
--public-exponent 65537 \
--modulus-size-bits 2048 \
--public-label rsa-public-key-example \
--private-label rsa-private-key-example \
--public-attributes verify=true \
--private-attributes sign=true
--share-crypto-users crypto_user2 crypto_user3 \
--manage-private-key-quorum-value 3 \
--use-private-key-quorum-value 4
{
  "error_code": 1,
  "data": "Invalid quorum value provided."
}
```