

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

# CloudHSM CLI AWS CloudHSM 를 사용하여 쿼럼 인증을 활성화한 키 관리 및 사용
<a name="key-quorum-auth-chsm-cli-crypto-user"></a>

 AWS CloudHSM 클러스터에 대한 쿼럼 인증을 구성한 후에는 키에 연결된 쿼럼 값이 있는 경우 암호화 사용자가 HSM 키 관리 또는 사용 작업을 자체적으로 수행할 수 없습니다. 이 주제에서는 Crypto User가 HSM 키 관리 또는 키 사용 작업을 수행하기 위한 임시 토큰을 얻는 방법을 설명합니다.

**참고**  
각 쿼럼 토큰은 하나의 작업에 유효합니다. 해당 작업이 성공하면 토큰이 더 이상 유효하지 않으며 Crypto User는 새 토큰을 얻어야 합니다. 쿼럼 토큰은 현재 로그인 세션 중에만 유효합니다. CloudHSM CLI에서 로그아웃하거나 네트워크 연결이 끊기면 토큰은 더 이상 유효하지 않으며 새 토큰을 얻어야 합니다. CloudHSM 토큰은 CloudHSM CLI에서만 사용할 수 있습니다. 다른 애플리케이션에서 인증하는 데 사용할 수 없습니다.

다음 예제는 쿼럼 인증이 구성된 후 Crypto User가 HSM에서 쿼럼 연결 키로 서명을 생성하려고 할 때의 출력을 보여줍니다. 명령이 실패하고 `Quorum Failed` 오류가 반환됩니다. 이는 쿼럼 인증이 실패했음을 의미합니다.

```
aws-cloudhsm > crypto sign rsa-pkcs --key-filter attr.label=rsa-private-key-example --hash-function sha256 --data YWJjMTIz
{
  "error_code": 1,
  "data": "Quorum Failed"
}
```

Crypto User가 HSM에서 키 관리 또는 키 사용 작업을 수행하기 위해 필요한 임시 토큰을 얻으려면 다음 작업을 완료해야 합니다.

**Topics**
+ [1단계. 쿼럼 토큰 가져오기](#key-quorum-admin-gen-token-chsm-cli)
+ [2단계. Crypto Users 승인에서 서명 가져오기](#key-quorum-crypto-user-get-approval-signatures-chsm-cli)
+ [3단계. CloudHSM 클러스터에서 토큰을 승인하고 작업 실행](#key-quorum-crypto-user-approve-token-chsm-cli)

## 1단계. 쿼럼 토큰 가져오기
<a name="key-quorum-admin-gen-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. Crypto User로 클러스터에 로그인합니다.

   ```
   aws-cloudhsm > login --username <crypto_user1> --role crypto-user --password password123
   ```

   이 예제에서는 `crypto_user1`이 `crypto-user` 역할을 사용하여 CloudHSM CLI에 로그인합니다. 이러한 값을 사용자의 값으로 대체합니다.

   ```
   {
     "error_code": 0,
     "data": {
       "username": "crypto_user1",
       "role": "crypto-user"
     }
   }
   ```

1. **quorum token-sign generate** 명령을 사용하여 쿼럼 토큰을 생성합니다.

   다음 명령에서 `key-usage`는 생성 중인 토큰을 사용할 *서비스 이름*을 식별합니다. 이 경우 토큰은 키 사용 작업(`key-usage` 서비스)을 위한 것입니다. 이 예제에서는 `--filter` 플래그를 사용하여 토큰을 특정 키와 연결합니다.

   ```
   aws-cloudhsm > quorum token-sign generate --service key-usage --token </path/crypto_user1.token> --filter attr.label=rsa-private-key-example
   {
     "error_code": 0,
     "data": {
       "path": "/home/crypto_user1.token"
     }
   }
   ```

   이 예에서는 사용자 이름이 `crypto_user1`인 Crypto User에 대한 쿼럼 토큰을 가져오고 해당 토큰을 `crypto_user1.token`라는 파일에 저장합니다. 예제 명령을 사용하려면 이들 값을 본인의 것으로 바꿉니다.

   **quorum token-sign generate** 명령은 지정된 파일 경로에 키 사용 서비스 쿼럼 토큰을 생성합니다. 토큰 파일을 검사할 수 있습니다.

   ```
   $ cat </path/crypto_user1.token>
   {
     "version": "2.0",
     "service": "key-usage",
     "key_reference": "0x0000000000680006",
     "approval_data": "AAIABQAAABkAAAAAAGgABi5CDa9x9VyyRIaFbkSrHgJjcnlwdG9fdXNlcgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABnPQBLAAAAAAAAAAAAAgAFAAAAGgAAAAAAaAAGQvd2qKY+GJj8gXo9lKuANGNyeXB0b191c2VyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGc9AEsAAAAAAAAAAA==",
     "token": "5GlgoWOlQU4fw4QIlbxkPGZVOVoDugFGuSKE/k67ncM=",
     "signatures": []
   }
   ```

   토큰 파일은 다음으로 구성됩니다.
   + **서비스**: 토큰이 연결된 쿼럼 서비스의 식별자입니다.
   + **key\$1reference**: 이 쿼럼 토큰이 연결된 키의 식별자입니다.
   + **approval\$1data**: HSM에서 생성한 base64로 인코딩된 원시 데이터 토큰입니다.
   + **토큰**: Approval\$1data의 base64로 인코딩되고 SHA-256 해시된 토큰
   + **서명**: 서명되지 않은 토큰의 base64 인코딩된 서명된 토큰(서명)의 배열입니다. 각 승인자 서명은 JSON 객체 리터럴 형식입니다.

     ```
     {
           "username": "<APPROVER_USERNAME>",
           "role": "<APPROVER_ROLE>",
           "signature": "<APPROVER_RSA2048_BIT_SIGNATURE>"
     }
     ```

     각 서명은 HSM에 퍼블릭 키가 등록된 해당 RSA 2048비트 프라이빗 키를 사용하여 승인자의 결과로 생성됩니다.

1. 새 사용자 서비스 쿼럼 토큰을 검증합니다. **quorum token-sign list** 명령은 토큰이 CloudHSM에 존재하는지 확인합니다.

   ```
   aws-cloudhsm > quorum token-sign list
   {
     "error_code": 0,
     "data": {
       "tokens": [
         {
           "username": "crypto_user",
           "service": "key-usage",
           "key-reference": "0x0000000000680006",
           "minimum-token-count": 2
         }
       ]
     }
   }
   ```

   `minimum-token-count`는 클러스터의 단일 HSM에서 검색되는 사용자 이름, 서비스, 키 참조에 해당하는 사용 가능한 최소 키 토큰 수에 대해 집계된 클러스터 보기를 제공합니다.

   예를 들어 2-HSM 클러스터를 가정할 경우, 클러스터의 첫 번째 HSM에서 `0x0000000000680006` 참조로 키에 대해 `crypto_user1` 사용자가 생성한 키 사용 토큰 2개를 수신하고 클러스터의 다른 HSM에서 `0x0000000000680006` 참조로 키에 대해 `crypto_user1` 사용자가 생성한 키 사용 토큰 1개를 수신하면 `"minimum-token-count": 1`가 표시됩니다.

## 2단계. Crypto Users 승인에서 서명 가져오기
<a name="key-quorum-crypto-user-get-approval-signatures-chsm-cli"></a>

쿼럼 토큰이 있는 Crypto User는 다른 Crypto User의 승인을 받아야 합니다. 승인을 위해 다른 Crypto User는 서명 키를 사용하여 암호화 방식으로 HSM 외부의 토큰에 서명합니다.

토큰에 서명하는 방법은 다양합니다. 다음은 [OpenSSL](https://www.openssl.org/)을 사용하여 토큰을 서명하는 방법을 보여주는 예제입니다. 다른 서명 도구를 사용하려면 해당 도구가 Crypto User의 프라이빗 키(서명 키)를 사용하여 토큰의 SHA-256 다이제스트에 서명하는지 확인해야 합니다.

이 예제에서 토큰(`crypto-user`)이 있는 Crypto User는 최소 두(2) 개의 승인이 필요합니다. 다음 예제 명령은 두(2) 명의 Crypto User가 OpenSSL을 사용하여 암호화 방식으로 토큰에 서명할 수 있는 방법을 보여줍니다.

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

   ```
   $echo -n '5GlgoWOlQU4fw4QIlbxkPGZVOVoDugFGuSKE/k67ncM=' | base64 -d > crypto_user1.bin
   ```

1. OpenSSL과 승인자의 프라이빗 키를 사용하여 사용자 서비스에 대한 바이너리 쿼럼의 서명되지 않은 토큰에 서명하고 바이너리 서명 파일을 생성합니다.

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

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

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

1. 앞서 승인자 서명에 대해 지정한 JSON 객체 리터럴 형식을 사용하여 base64로 인코딩된 서명을 복사하고 토큰 파일에 붙여넣습니다.

   ```
   {
     "version": "2.0",
     "service": "key-usage",
     "key_reference": "0x0000000000680006",
     "approval_data": "AAIABQAAABkAAAAAAGgABi5CDa9x9VyyRIaFbkSrHgJjcnlwdG9fdXNlcgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABnPQBLAAAAAAAAAAAAAgAFAAAAGgAAAAAAaAAGQvd2qKY+GJj8gXo9lKuANGNyeXB0b191c2VyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGc9AEsAAAAAAAAAAA==",
     "token": "5GlgoWOlQU4fw4QIlbxkPGZVOVoDugFGuSKE/k67ncM=",
     "signatures": [
       {
         "username": "crypto_user1",
         "role": "crypto-user",
         "signature": "wa7aPzmGwBjcEoZ6jAzYASp841AfgOvcI27Y/tGlCj1E9DawnFw5Uf0IJT2Ca7T5XD2ThVkUi0B+dhAomdqYNl6aUUFrJyH9GBJ+E0PmA5jNVm25tzeRWBJzneTg4/zTeE2reNqrHFHicWnttQLe9jS09J1znuDGWDe0HaBKWUaz2gUInJRqmeXDsZYdSvZksrqUH5dci/RsaDE2+tGiS9g0RcIkFbsPW4HpGe2e5HVzGsqrV8O3PKlYQv6+fymfcNTTuoxKcHAkOjpl43QSuSIu2gVq7KI8mSmmWaPJL47NPjmcBVB5vdEQU+oiukaNfLJr+MoDKzAvCGDg4cDArg=="
       },
       {
         "username": "crypto_user2",
         "role": "crypto-user",
         "signature": "wa7aPzmGwBjcEoZ6jAzYASp841AfgOvcI27Y/tGlCj1E9DawnFw5Uf0IJT2Ca7T5XD2ThVkUi0B+dhAomdqYNl6aUUFrJyH9GBJ+E0PmA5jNVm25tzeRWBJzneTg4/zTeE2reNqrHFHicWnttQLe9jS09J1znuDGWDe0HaBKWUaz2gUInJRqmeXDsZYdSvZksrqUH5dci/RsaDE2+tGiS9g0RcIkFbsPW4HpGe2e5HVzGsqrV8O3PKlYQv6+fymfcNTTuoxKcHAkOjpl43QSuSIu2gVq7KI8mSmmWaPJL47NPjmcBVB5vdEQU+oiukaNfLJr+MoDKzAvCGDg4cDArg=="
       }
     ]
   }
   ```

## 3단계. CloudHSM 클러스터에서 토큰을 승인하고 작업 실행
<a name="key-quorum-crypto-user-approve-token-chsm-cli"></a>

Crypto User에게 필요한 승인 및 서명이 있으면 키 관리 또는 키 사용 작업과 함께 해당 토큰을 CloudHSM 클러스터에 제공할 수 있습니다.

키 작업이 쿼럼 토큰과 연결된 적절한 쿼럼 서비스에 해당하는지 확인합니다. 자세한 내용은 [지원되는 서비스 및 유형](key-quorum-auth-chsm-cli-service-names.md) 단원을 참조하세요.

트랜잭션 중에 토큰은 AWS CloudHSM 클러스터 내에서 승인되고 요청된 키 작업을 실행합니다. 키 작업의 성공 여부는 승인된 유효한 쿼럼 토큰과 유효한 키 작업에 따라 결정됩니다.

**Example RSA-PKCS 메커니즘으로 서명 생성**  
다음 예제에서는 로그인한 Crypto User가 HSM에허 키를 사용하여 서명을 생성합니다.  

```
aws-cloudhsm > crypto sign rsa-pkcs --key-filter attr.label=rsa-private-key-example --hash-function sha256 --data YWJjMTIz --approval /path/crypto_user1.token
      
{
  "error_code": 0,
  "data": {
    "key-reference": "0x0000000000640007",
    "signature": "h6hMqXacBrT3x3MXV13RXHdQno0+IQ6iy0kVrGzo23+eoWT0ZZgrSpBCu5KcuP6IYYHw9goQ5CfPf4jI1nO5m/IUJtF1A1lmcz0HjEy1CJ7ICXNReDRyeOU8m43dkJzt0OUdkbtkDJGAcxkbKHLZ02uWsGXaQ8bOKhoGwsRAHHF6nldTXquICfOHgSd4nimObKTqzUkghhJW5Ot5oUyLMYP+pZmUS38ythybney94Wj6fzYOER8v7VIY5ijQGa3LfxrjSG4aw6QijEEbno5LSf18ahEaVKmVEnDBL54tylCJBGvGsYSY9HNhuJoHPgiDL/TDd2wfvP4PaxbFRyyHaw=="
  }
}
```
Crypto User가 동일한 토큰으로 다른 HSM 키 사용 작업을 수행하려고 하면 실패합니다.  

```
aws-cloudhsm > crypto sign rsa-pkcs --key-filter attr.label=rsa-private-key-example --hash-function sha256 --data YWJjMTIz --approval /home/crypto_user1.token
{
  "error_code": 1,
  "data": "Quorum approval is required for this operation"
}
```
다른 HSM 키 작업을 수행하려면 Crypto User가 새 쿼럼 토큰을 생성하고 승인자로부터 새 서명을 받은 다음 해당 쿼럼 토큰을 제공하기 위해 --approval 인수와 함께 원하는 키 작업을 실행해야 합니다.  
**quorum token-sign list**를 사용하여 사용 가능한 토큰을 확인합니다. 이 예제는 Crypto User에 승인된 토큰이 없음을 보여줍니다.  

```
aws-cloudhsm > quorum token-sign list
{
  "error_code": 0,
  "data": {
    "tokens": []
  }
}
```