

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

# CloudHSM CLI를 사용하여 HSM 사용자용 MFA 관리
<a name="login-mfa-token-sign"></a>

보안을 강화하기 위해 AWS CloudHSM 클러스터를 보호하는 데 도움이 되도록 사용자를 위한 다중 인증(MFA)을 구성할 수 있습니다.

MFA 지원 하드웨어 보안 모듈(HSM) 사용자 계정으로 클러스터에 로그인하면 CloudHSM CLI에 암호(알 수 있는 첫 번째 요소)를 제공하고 CloudHSM CLI는 토큰을 제공하고 토큰에 사인하라는 메시지를 표시합니다.

가지고 있는 두 번째 요소를 제공하려면 이미 생성하여 HSM 사용자와 연결한 키 페어의 프라이빗 키로 토큰에 서명합니다. 클러스터에 액세스하려면 사인된 토큰을 CloudHSM CLI에 제공합니다.

사용자에 대한 MFA 설정에 대한 자세한 내용은 [CloudHSM CLI용 MFA 설정](set-up-mfa-for-cloudhsm-cli.md) 섹션을 참조하세요

다음 주제에는 AWS CloudHSM에서의 쿼럼 인증 작업에 대한 자세한 내용을 제공합니다.

**Topics**
+ [쿼럼 인증](quorum-mfa-cloudhsm-cli.md)
+ [키 페어 요구 사항](mfa-key-pair-cloudhsm-cli.md)
+ [MFA 설정](set-up-mfa-for-cloudhsm-cli.md)
+ [사용자 생성](create-mfa-users-cloudhsm-cli.md)
+ [사용자 로그인](login-mfa-cloudhsm-cli.md)
+ [키 순환](rotate-mfa-cloudhsm-cli.md)
+ [MFA 퍼블릭 키 등록 취소](deregister-mfa-cloudhsm-cli.md)
+ [토큰 파일 참조](reference-mfa-cloudhsm-cli.md)

# CloudHSM CLI를 사용한 AWS CloudHSM 클러스터의 쿼럼 인증 및 MFA
<a name="quorum-mfa-cloudhsm-cli"></a>

 AWS CloudHSM 클러스터는 쿼럼 인증 및 다중 인증(MFA)에 동일한 키를 사용합니다. 즉, MFA가 활성화된 사용자는 MofN 또는 쿼럼 액세스 제어에 효과적으로 등록됩니다. 동일한 HSM 사용자에 대해 MFA 및 쿼럼 인증을 성공적으로 사용하려면 다음 사항을 고려하십시오.
+ 현재 사용자에 대해 쿼럼 인증을 사용하는 경우 쿼럼 사용자에 대해 생성한 것과 동일한 키 페어를 사용하여 해당 사용자에 대해 MFA를 활성화해야 합니다.
+ 쿼럼 인증 사용자가 아닌 비 MFA 사용자에 대한 MFA 요구 사항을 추가하는 경우, 해당 사용자를 MFA 인증을 통해 쿼럼(MofN) 등록 사용자로 등록합니다.
+ 등록된 쿼럼 인증 사용자이기도 한 MFA 사용자의 MFA 요구 사항을 제거하거나 암호를 변경하면 해당 사용자의 쿼럼(MoFN) 사용자 등록도 제거됩니다.
+ 쿼럼 인증 사용자이기도 한 MFA 사용자의 MFA 요구 사항을 제거하거나 암호를 *변경하면서도 해당 사용자가 여전히 쿼럼 인증에 참여하도록 하려면* 해당 사용자를 쿼럼(MoFn) 사용자로 다시 등록해야 합니다.

쿼럼 인증에 대한 자세한 내용은 [쿼럼 인증 관리(N 중 M)](quorum-auth-chsm-cli.md) 단원을 참조하십시오.

# CloudHSM CLI AWS CloudHSM 를 사용하기 위한 MFA 키 페어 요구 사항
<a name="mfa-key-pair-cloudhsm-cli"></a>

의 하드웨어 보안 모듈(HSM) 사용자에 대해 다중 인증(MFA)을 활성화하려면 새 키 페어를 생성하거나 다음 요구 사항을 충족하는 기존 키를 사용할 AWS CloudHSM수 있습니다.
+ **키 유형: **비대칭
+ **키 사용:** 사인 및 확인
+ **키 사양: ** RSA\$12048
+ **사인 알고리즘에 포함:** sha256WithRSAEncryption

**참고**  
쿼럼 인증을 사용하거나 쿼럼 인증을 사용하려는 경우 [CloudHSM CLI를 사용한 AWS CloudHSM 클러스터의 쿼럼 인증 및 MFA](quorum-mfa-cloudhsm-cli.md) 단원을 참조하십시오

CloudHSM CLI와 키 페어를 사용하여 MFA가 활성화된 새 관리자 사용자를 생성할 수 있습니다.

# CloudHSM CLI용 MFA 설정
<a name="set-up-mfa-for-cloudhsm-cli"></a>

다음 단계에 따라 CloudHSM CLI용 다중 인증(MFA)을 설정합니다.

1. 토큰 사인 전략을 사용하여 MFA를 설정하려면 먼저 2048비트 RSA 프라이빗 키와 관련 퍼블릭 키를 생성해야 합니다.

   ```
   $ openssl genrsa -out officer1.key 2048
   Generating RSA private key, 2048 bit long modulus (2 primes)
   ...........................................................+++++
   ....................................................................+++++
   e is 65537 (0x010001)
   
   $ openssl rsa -in officer1.key -outform PEM -pubout -out officer1.pub
   writing RSA key
   ```

1. 다음 명령을 사용하여 대화형 모드에서 CLI를 시작합니다.

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

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

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

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

------

1. CloudHSM CLI를 사용하여 사용자 계정에 로그인합니다.

   ```
   aws-cloudhsm > login --username <admin> --role <admin> --cluster-id <cluster ID>
   Enter password:
   {
     "error_code": 0,
     "data": {
       "username": "<admin>",
       "role": "<admin>"
     }
   }
   ```

1. 그런 다음 명령을 실행하여 MFA 전략을 변경합니다. 파라미터 `--token`을 제공해야 합니다. 이 파라미터 변수는 사인되지 않은 토큰이 기록되는 파일을 지정합니다.

   ```
   aws-cloudhsm > user change-mfa token-sign --token unsigned-tokens.json --username <username> --role crypto-user --change-quorum
   Enter password:
   Confirm password:
   ```

1. 이제 사인이 필요한 사인되지 않은 토큰이 들어 있는 파일이 생성됨: `unsigned-tokens.json` 이 파일의 토큰 수는 클러스터의 HSM 수에 따라 달라집니다. 각 토큰은 하나의 HSM을 나타냅니다. 이 파일은 JSON 형식이며 프라이빗 키가 있음을 증명하기 위해 사인이 필요한 토큰을 포함하고 있습니다.

   ```
   $ cat unsigned-tokens.json
   {
     "version": "2.0",
     "tokens": [
   {
       {
         "unsigned": "Vtf/9QOFY45v/E1osvpEMr59JsnP/hLDm4ItOO2vqL8=",
         "signed": ""
       },
       {
         "unsigned": "wVbC0/5IKwjyZK2NBpdFLyI7BiayZ24YcdUdlcxLwZ4=",
         "signed": ""
       },
       {
         "unsigned": "z6aW9RzErJBL5KqFG5h8lhTVt9oLbxppjod0Ebysydw=",
         "signed": ""
       }
     ]
   }
   ```

1. 다음 단계는 1단계에서 생성한 프라이빗 키를 사용하여 이러한 토큰에 사인하는 것입니다. 사인을 파일에 다시 배치합니다. 먼저 base64로 인코딩된 토큰을 추출하고 디코딩해야 합니다.

   ```
   $ echo "Vtf/9QOFY45v/E1osvpEMr59JsnP/hLDm4ItOO2vqL8=" > token1.b64
   $ echo "wVbC0/5IKwjyZK2NBpdFLyI7BiayZ24YcdUdlcxLwZ4=" > token2.b64
   $ echo "z6aW9RzErJBL5KqFG5h8lhTVt9oLbxppjod0Ebysydw=" > token3.b64
   $ base64 -d token1.b64 > token1.bin
   $ base64 -d token2.b64 > token2.bin
   $ base64 -d token3.b64 > token3.bin
   ```

1. 이제 1단계에서 만든 RSA 프라이빗 키를 사용하여 사인할 수 있는 바이너리 토큰이 생겼습니다.

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

1. 이제 토큰의 바이너리 서명이 생겼습니다. base64를 사용하여 인코딩한 다음 토큰 파일에 다시 배치해야 합니다.

   ```
   $ base64 -w0 token1.sig.bin > token1.sig.b64
   $ base64 -w0 token2.sig.bin > token2.sig.b64 
   $ base64 -w0 token3.sig.bin > token3.sig.b64
   ```

1. 마지막으로 base64 값을 복사하여 토큰 파일에 다시 붙여넣을 수 있습니다:

   ```
   {
     "version": "2.0",
     "tokens": [
       {
         "unsigned": "1jqwxb9bJOUUQLiNb7mxXS1uBJsEXh0B9nj05BqnPsE=",
         "signed": "eiw3fZeCKIY50C4zPeg9Rt90M1Qlq3WlJh6Yw7xXm4nF6e9ETLE39+9M+rUqDWMRZjaBfaMbg5d9yDkz5p13U7ch2tlF9LoYabsWutkT014KRq/rcYMvFsU9n/Ey/TK0PVaxLN42X+pebV4juwMhN4mK4CzdFAJgM+UGBOj4yB9recpOBB9K8QFSpJZALSEdDgUc/mS1eDq3rU0int6+4NKuLQjpR+LSEIWRZ6g6+MND2vXGskxHjadCQ09L7Tz8VcWjKDbxJcBiGKvkqyozl9zrGo8fA3WHBmwiAgS61Merx77ZGY4PFR37+j/YMSC14prCN15DtMRv2xA1SGSb4w=="
       },
       {
         "unsigned": "LMMFc34ASPnvNPFzBbMbr9FProS/Zu2P8zF/xzk5hVQ=",
         "signed": "HBImKnHmw+6R2TpFEpfiAg4+hu2pFNwn43ClhKPkn2higbEhUD0JVi+4MerSyvU/NN79iWVxDvJ9Ito+jpiRQjTfTGEoIteyuAr1v/Bzh+HjmrO53OQpZaJ/VXGIgApD0myuu/ZGNKQTCSkkL7+V81FG7yR1Nm22jUeGa735zvm/E+cenvZdy0VVx6A7WeWrl3JEKKBweHbi+7BwbaW+PTdCuIRd4Ug76Sy+cFhsvcG1k7cMwDh8MgXzIZ2m1f/hdy2j8qAxORTLlmwyUOYvPYOvUhc+s83hx36QpGwGcD7RA0bPT5OrTx7PHd0N1CL+Wwy91We8yIOFBS6nxo1R7w=="
       },
       {
         "unsigned": "dzeHbwhiVXQqcUGj563z51/7sLUdxjL93SbOUyZRjH8=",
         "signed": "VgQPvrTsvGljVBFxHnswduq16x8ZrnxfcYVYGf/N7gEzI4At3GDs2EVZWTRdvS0uGHdkFYp1apHgJZ7PDVmGcTkIXVD2lFYppcgNlSzkYlftr5EOjqS9ZjYEqgGuB4g//MxaBaRbJai/6BlcE92NIdBusTtreIm3yTpjIXNAVoeRSnkfuw7wZcL96QoklNb1WUuSHw+psUyeIVtIwFMHEfFoRC0t+VhmnlnFnkjGPb9W3Aprw2dRRvFM3R2ZTDvMCiOYDzUCd43GftGq2LfxH3qSD51oFHglHQVOY0jyVzzlAvub5HQdtOQdErIeO0/9dGx5yot07o3xaGl5yQRhwA=="
       }
     ]
   }
   ```

1. 이제 토큰 파일에 필요한 모든 사인이 포함되었으므로 계속 진행할 수 있습니다. 사인된 토큰이 들어 있는 파일 이름을 입력하고 Enter 키를 누릅니다. 마지막으로 퍼블릭 키의 경로를 입력합니다.

   ```
   Enter signed token file path (press enter if same as the unsigned token file):
   Enter public key PEM file path:officer1.pub
   {
     "error_code": 0,
     "data": {
       "username": "<username>",
       "role": "crypto-user"
     }
   }
   ```

   이제 사용자를 MFA로 설정했습니다.

   ```
   {
       "username": "<username>",
       "role": "crypto-user",
       "locked": "false",
       "mfa": [
         {
           "strategy": "token-sign",
           "status": "enabled"
         }
       ],
       "cluster-coverage": "full"
   },
   ```

# CloudHSM CLI용 MFA가 활성화된 사용자 생성
<a name="create-mfa-users-cloudhsm-cli"></a>

다음 단계에 따라 다중 인증(MFA)이 활성화된 AWS CloudHSM 사용자를 생성합니다.

1. CloudHSM CLI를 사용하여 HSM에 관리자로 로그인합니다.

1. [**user create**](cloudhsm_cli-user-create.md) 명령을 사용하여 원하는 사용자를 생성합니다. 그런 다음 [CloudHSM CLI용 MFA 설정](set-up-mfa-for-cloudhsm-cli.md)의 단계에 따라 사용자를 위한 MFA를 설정합니다.

# CloudHSM CLI용 MFA가 활성화된 사용자 로그인
<a name="login-mfa-cloudhsm-cli"></a>

다음 단계에 따라 멀티 팩터 인증(MFA)이 활성화된 AWS CloudHSM 사용자를 로그인합니다.

1. CloudHSM CLI의 [**login mfa-token-sign**](cloudhsm_cli-login-mfa-token-sign.md) 명령을 사용하여 MFA를 활성화한 사용자에 대해 MFA로 로그인 프로세스를 시작할 수 있습니다.

   ```
   aws-cloudhsm > login --username <username> --role <role> mfa-token-sign --token <unsigned-tokens.json>
   Enter password:
   ```

1. 암호를 입력합니다. 그러면 사인되지 않은/사인된 토큰 페어가 포함된 토큰 파일의 경로를 입력하라는 메시지가 표시됩니다. 여기서 사인된 토큰은 프라이빗 키를 사용하여 생성된 토큰입니다.

   ```
   aws-cloudhsm > login --username <username> --role <role> mfa-token-sign --token <unsigned-tokens.json>
   Enter password:
   Enter signed token file path (press enter if same as the unsigned token file):
   ```

1. 사인된 토큰 파일 경로를 입력하라는 메시지가 표시되면 별도의 터미널에서 사인되지 않은 토큰 파일을 검사할 수 있습니다. 사인이 필요한 사인되지 않은 토큰이 있는 파일 식별: `<unsigned-tokens.json>` 이 파일의 토큰 수는 클러스터의 HSM 수에 따라 달라집니다. 각 토큰은 하나의 HSM을 나타냅니다. 이 파일은 JSON 형식이며 프라이빗 키가 있음을 증명하기 위해 사인이 필요한 토큰을 포함하고 있습니다.

   ```
   $ cat <unsigned-tokens.json>
   {
     "version": "2.0",
     "tokens": [
       {
         "unsigned": "Vtf/9QOFY45v/E1osvpEMr59JsnP/hLDm4ItOO2vqL8=",
         "signed": ""
       },
       {
         "unsigned": "wVbC0/5IKwjyZK2NBpdFLyI7BiayZ24YcdUdlcxLwZ4=",
         "signed": ""
       },
       {
         "unsigned": "z6aW9RzErJBL5KqFG5h8lhTVt9oLbxppjod0Ebysydw=",
         "signed": ""
       }
     ]
   }
   ```

1. 2단계에서 생성한 프라이빗 키로 사인되지 않은 토큰에 사인합니다. 먼저 base64로 인코딩된 토큰을 추출하고 디코딩해야 합니다.

   ```
   $ echo "Vtf/9QOFY45v/E1osvpEMr59JsnP/hLDm4ItOO2vqL8=" > token1.b64
   $ echo "wVbC0/5IKwjyZK2NBpdFLyI7BiayZ24YcdUdlcxLwZ4=" > token2.b64
   $ echo "z6aW9RzErJBL5KqFG5h8lhTVt9oLbxppjod0Ebysydw=" > token3.b64
   $ base64 -d token1.b64 > token1.bin 
   $ base64 -d token2.b64 > token2.bin
   $ base64 -d token3.b64 > token3.bin
   ```

1. 이제 바이너리 토큰이 생겼습니다. [MFA 설정 단계 1](set-up-mfa-for-cloudhsm-cli.md)에서 이전에 생성한 RSA 프라이빗 키를 사용하여 사인합니다.

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

1. 이제 토큰의 바이너리 사인이 생겼습니다. base64를 사용하여 인코딩한 다음 토큰 파일에 다시 배치합니다.

   ```
   $ base64 -w0 token1.sig.bin > token1.sig.b64
   $ base64 -w0 token2.sig.bin > token2.sig.b64
   $ base64 -w0 token3.sig.bin > token3.sig.b64
   ```

1. 마지막으로 base64 값을 복사하여 토큰 파일에 다시 붙여넣습니다.

   ```
   {
     "version": "2.0",
     "tokens": [
       {
         "unsigned": "1jqwxb9bJOUUQLiNb7mxXS1uBJsEXh0B9nj05BqnPsE=",
         "signed": "eiw3fZeCKIY50C4zPeg9Rt90M1Qlq3WlJh6Yw7xXm4nF6e9ETLE39+9M+rUqDWMRZjaBfaMbg5d9yDkz5p13U7ch2tlF9LoYabsWutkT014KRq/rcYMvFsU9n/Ey/TK0PVaxLN42X+pebV4juwMhN4mK4CzdFAJgM+UGBOj4yB9recpOBB9K8QFSpJZALSEdDgUc/mS1eDq3rU0int6+4NKuLQjpR+LSEIWRZ6g6+MND2vXGskxHjadCQ09L7Tz8VcWjKDbxJcBiGKvkqyozl9zrGo8fA3WHBmwiAgS61Merx77ZGY4PFR37+j/YMSC14prCN15DtMRv2xA1SGSb4w=="
       },
       {
         "unsigned": "LMMFc34ASPnvNPFzBbMbr9FProS/Zu2P8zF/xzk5hVQ=",
         "signed": "HBImKnHmw+6R2TpFEpfiAg4+hu2pFNwn43ClhKPkn2higbEhUD0JVi+4MerSyvU/NN79iWVxDvJ9Ito+jpiRQjTfTGEoIteyuAr1v/Bzh+HjmrO53OQpZaJ/VXGIgApD0myuu/ZGNKQTCSkkL7+V81FG7yR1Nm22jUeGa735zvm/E+cenvZdy0VVx6A7WeWrl3JEKKBweHbi+7BwbaW+PTdCuIRd4Ug76Sy+cFhsvcG1k7cMwDh8MgXzIZ2m1f/hdy2j8qAxORTLlmwyUOYvPYOvUhc+s83hx36QpGwGcD7RA0bPT5OrTx7PHd0N1CL+Wwy91We8yIOFBS6nxo1R7w=="
       },
       {
         "unsigned": "dzeHbwhiVXQqcUGj563z51/7sLUdxjL93SbOUyZRjH8=",
         "signed": "VgQPvrTsvGljVBFxHnswduq16x8ZrnxfcYVYGf/N7gEzI4At3GDs2EVZWTRdvS0uGHdkFYp1apHgJZ7PDVmGcTkIXVD2lFYppcgNlSzkYlftr5EOjqS9ZjYEqgGuB4g//MxaBaRbJai/6BlcE92NIdBusTtreIm3yTpjIXNAVoeRSnkfuw7wZcL96QoklNb1WUuSHw+psUyeIVtIwFMHEfFoRC0t+VhmnlnFnkjGPb9W3Aprw2dRRvFM3R2ZTDvMCiOYDzUCd43GftGq2LfxH3qSD51oFHglHQVOY0jyVzzlAvub5HQdtOQdErIeO0/9dGx5yot07o3xaGl5yQRhwA=="
       }
     ]
   }
   ```

1. 이제 토큰 파일에 필요한 모든 사인이 포함되었으므로 계속 진행할 수 있습니다. 사인된 토큰이 들어 있는 파일 이름을 입력하고 Enter 키를 누릅니다. 이제 성공적으로 로그인할 수 있습니다.

   ```
   aws-cloudhsm > login --username <username> --role <role> mfa-token-sign --token <unsigned-tokens.json>
   Enter password:
   Enter signed token file path (press enter if same as the unsigned token file):
   {
     "error_code": 0,
     "data": {
       "username": "<username>",
       "role": "<role>"
     }
   }
   ```

# CloudHSM CLI용 MFA가 활성화된 사용자의 키 순환
<a name="rotate-mfa-cloudhsm-cli"></a>

멀티 팩터 인증(MFA)이 활성화된 AWS CloudHSM 사용자의 키를 교체하려면 다음 단계를 따르세요.

1. CloudHSM CLI를 사용하여 관리자 또는 MFA가 활성화된 특정 사용자로 HSM에 로그인합니다(자세한 내용은 [MFA가 활성화된 상태로 사용자 로그인]() 참조).

1. 그런 다음 명령을 실행하여 MFA 전략을 변경합니다. 파라미터 **--token**을 제공해야 합니다. 이 파라미터 변수는 사인되지 않은 토큰이 기록되는 파일을 지정합니다.

   ```
   aws-cloudhsm > user change-mfa token-sign --token unsigned-tokens.json --username <username> --role crypto-user --change-quorum
   Enter password:
   Confirm password:
   ```

1. 사인이 필요한 사인되지 않은 토큰이 있는 파일 식별: `unsigned-tokens.json` 이 파일의 토큰 수는 클러스터의 HSM 수에 따라 달라집니다. 각 토큰은 하나의 HSM을 나타냅니다. 이 파일은 JSON 형식이며 프라이빗 키가 있음을 증명하기 위해 사인이 필요한 토큰을 포함하고 있습니다. 이 키는 현재 등록된 퍼블릭 키를 교체하는 데 사용하려는 새 RSA 공개/프라이빗 키 페어의 새 프라이빗 키입니다.

   ```
   $ cat unsigned-tokens.json
   {
     "version": "2.0",
     "tokens": [
       {
         "unsigned": "Vtf/9QOFY45v/E1osvpEMr59JsnP/hLDm4ItOO2vqL8=",
         "signed": ""
       },
       {
         "unsigned": "wVbC0/5IKwjyZK2NBpdFLyI7BiayZ24YcdUdlcxLwZ4=",
         "signed": ""
       },
       {
         "unsigned": "z6aW9RzErJBL5KqFG5h8lhTVt9oLbxppjod0Ebysydw=",
         "signed": ""
       }
     ]
   }
   ```

1. 설정 과정에서 이전에 생성한 프라이빗 키로 이 토큰에 사인하십시오. 먼저 base64로 인코딩된 토큰을 추출하고 디코딩해야 합니다.

   ```
   $ echo "Vtf/9QOFY45v/E1osvpEMr59JsnP/hLDm4ItOO2vqL8=" > token1.b64
   $ echo "wVbC0/5IKwjyZK2NBpdFLyI7BiayZ24YcdUdlcxLwZ4=" > token2.b64
   $ echo "z6aW9RzErJBL5KqFG5h8lhTVt9oLbxppjod0Ebysydw=" > token3.b64
   $ base64 -d token1.b64 > token1.bin
   $ base64 -d token2.b64 > token2.bin
   $ base64 -d token3.b64 > token3.bin
   ```

1. 이제 바이너리 토큰이 생겼습니다. 설정 중에 이전에 생성한 RSA 프라이빗 키를 사용하여 사인하십시오.

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

1. 이제 토큰의 바이너리 사인이 생겼습니다. base64를 사용하여 인코딩한 다음 토큰 파일에 다시 배치합니다.

   ```
   $ base64 -w0 token1.sig.bin > token1.sig.b64
   $ base64 -w0 token2.sig.bin > token2.sig.b64 
   $ base64 -w0 token3.sig.bin > token3.sig.b64
   ```

1. 마지막으로 base64 값을 복사하여 토큰 파일에 다시 붙여넣습니다.

   ```
   {
     "version": "2.0",
     "tokens": [
       {
         "unsigned": "1jqwxb9bJOUUQLiNb7mxXS1uBJsEXh0B9nj05BqnPsE=",
         "signed": "eiw3fZeCKIY50C4zPeg9Rt90M1Qlq3WlJh6Yw7xXm4nF6e9ETLE39+9M+rUqDWMRZjaBfaMbg5d9yDkz5p13U7ch2tlF9LoYabsWutkT014KRq/rcYMvFsU9n/Ey/TK0PVaxLN42X+pebV4juwMhN4mK4CzdFAJgM+UGBOj4yB9recpOBB9K8QFSpJZALSEdDgUc/mS1eDq3rU0int6+4NKuLQjpR+LSEIWRZ6g6+MND2vXGskxHjadCQ09L7Tz8VcWjKDbxJcBiGKvkqyozl9zrGo8fA3WHBmwiAgS61Merx77ZGY4PFR37+j/YMSC14prCN15DtMRv2xA1SGSb4w=="
       },
       {
         "unsigned": "LMMFc34ASPnvNPFzBbMbr9FProS/Zu2P8zF/xzk5hVQ=",
         "signed": "HBImKnHmw+6R2TpFEpfiAg4+hu2pFNwn43ClhKPkn2higbEhUD0JVi+4MerSyvU/NN79iWVxDvJ9Ito+jpiRQjTfTGEoIteyuAr1v/Bzh+HjmrO53OQpZaJ/VXGIgApD0myuu/ZGNKQTCSkkL7+V81FG7yR1Nm22jUeGa735zvm/E+cenvZdy0VVx6A7WeWrl3JEKKBweHbi+7BwbaW+PTdCuIRd4Ug76Sy+cFhsvcG1k7cMwDh8MgXzIZ2m1f/hdy2j8qAxORTLlmwyUOYvPYOvUhc+s83hx36QpGwGcD7RA0bPT5OrTx7PHd0N1CL+Wwy91We8yIOFBS6nxo1R7w=="
       },
       {
         "unsigned": "dzeHbwhiVXQqcUGj563z51/7sLUdxjL93SbOUyZRjH8=",
         "signed": "VgQPvrTsvGljVBFxHnswduq16x8ZrnxfcYVYGf/N7gEzI4At3GDs2EVZWTRdvS0uGHdkFYp1apHgJZ7PDVmGcTkIXVD2lFYppcgNlSzkYlftr5EOjqS9ZjYEqgGuB4g//MxaBaRbJai/6BlcE92NIdBusTtreIm3yTpjIXNAVoeRSnkfuw7wZcL96QoklNb1WUuSHw+psUyeIVtIwFMHEfFoRC0t+VhmnlnFnkjGPb9W3Aprw2dRRvFM3R2ZTDvMCiOYDzUCd43GftGq2LfxH3qSD51oFHglHQVOY0jyVzzlAvub5HQdtOQdErIeO0/9dGx5yot07o3xaGl5yQRhwA=="
       }
     ]
   }
   ```

1. 이제 토큰 파일에 필요한 모든 사인이 포함되었으므로 계속 진행할 수 있습니다. 사인된 토큰이 들어 있는 파일 이름을 입력하고 Enter 키를 누릅니다. 마지막으로 새 퍼블릭 키의 경로를 입력합니다. 이제 [user list]() 출력의 일부로 다음이 표시됩니다.

   ```
   Enter signed token file path (press enter if same as the unsigned token file):
   Enter public key PEM file path:officer1.pub
   {
     "error_code": 0,
     "data": {
       "username": "<username>",
       "role": "crypto-user"
     }
   }
   ```

   이제 사용자를 MFA로 설정했습니다.

   ```
   {
       "username": "<username>",
       "role": "crypto-user",
       "locked": "false",
       "mfa": [
         {
           "strategy": "token-sign",
           "status": "enabled"
         }
       ],
       "cluster-coverage": "full"
   },
   ```

생성된 JSON 형식 토큰 파일에 프라이빗 키로 사인하고 새 MFA 퍼블릭 키를 등록했습니다.

# CloudHSM CLI를 사용하여 MFA 퍼블릭 키 등록 취소
<a name="deregister-mfa-cloudhsm-cli"></a>

MFA 퍼블릭 키가 등록된 경우 AWS CloudHSM 관리자의 다중 인증(MFA) 퍼블릭 키 등록을 취소하려면 다음 단계를 따릅니다.

1. CloudHSM CLI를 사용하여 MFA가 활성화된 상태에서 관리자로 HSM에 로그인할 수 있습니다.

1. **user change-mfa token-sign** 명령을 사용하여 사용자용 MFA를 제거합니다.

   ```
   aws-cloudhsm > user change-mfa token-sign --username <username> --role admin --deregister --change-quorum
   Enter password:
   Confirm password:
   {
     "error_code": 0,
     "data": {
       "username": "<username>",
       "role": "admin"
     }
   }
   ```

# CloudHSM CLI를 사용하는 MFA에 대한 토큰 파일 참조
<a name="reference-mfa-cloudhsm-cli"></a>

다중 인증(MFA) 퍼블릭 키를 등록하거나 MFA를 사용하여 CloudHSM CLI에 로그인을 시도할 때 생성되는 토큰 파일은 다음과 같이 구성됩니다.
+ **토큰: JSON** 객체 리터럴 형태의 base64로 인코딩된 사인되지 않은/사인된 토큰 페어 배열.
+ **미사인:** base64로 인코딩되고 SHA256 해시 처리된 토큰입니다.
+ **사인:** RSA2048비트 프라이빗 키를 사용하여 사인되지 않은 토큰의 base64로 인코딩된 사인된 토큰(사인).

```
{
  "version": "2.0",
  "tokens": [
    {
      "unsigned": "1jqwxb9bJOUUQLiNb7mxXS1uBJsEXh0B9nj05BqnPsE=",
      "signed": "eiw3fZeCKIY50C4zPeg9Rt90M1Qlq3WlJh6Yw7xXm4nF6e9ETLE39+9M+rUqDWMRZjaBfaMbg5d9yDkz5p13U7ch2tlF9LoYabsWutkT014KRq/rcYMvFsU9n/Ey/TK0PVaxLN42X+pebV4juwMhN4mK4CzdFAJgM+UGBOj4yB9recpOBB9K8QFSpJZALSEdDgUc/mS1eDq3rU0int6+4NKuLQjpR+LSEIWRZ6g6+MND2vXGskxHjadCQ09L7Tz8VcWjKDbxJcBiGKvkqyozl9zrGo8fA3WHBmwiAgS61Merx77ZGY4PFR37+j/YMSC14prCN15DtMRv2xA1SGSb4w=="
    },
    {
      "unsigned": "LMMFc34ASPnvNPFzBbMbr9FProS/Zu2P8zF/xzk5hVQ=",
      "signed": "HBImKnHmw+6R2TpFEpfiAg4+hu2pFNwn43ClhKPkn2higbEhUD0JVi+4MerSyvU/NN79iWVxDvJ9Ito+jpiRQjTfTGEoIteyuAr1v/Bzh+HjmrO53OQpZaJ/VXGIgApD0myuu/ZGNKQTCSkkL7+V81FG7yR1Nm22jUeGa735zvm/E+cenvZdy0VVx6A7WeWrl3JEKKBweHbi+7BwbaW+PTdCuIRd4Ug76Sy+cFhsvcG1k7cMwDh8MgXzIZ2m1f/hdy2j8qAxORTLlmwyUOYvPYOvUhc+s83hx36QpGwGcD7RA0bPT5OrTx7PHd0N1CL+Wwy91We8yIOFBS6nxo1R7w=="
    },
    {
      "unsigned": "dzeHbwhiVXQqcUGj563z51/7sLUdxjL93SbOUyZRjH8=",
      "signed": "VgQPvrTsvGljVBFxHnswduq16x8ZrnxfcYVYGf/N7gEzI4At3GDs2EVZWTRdvS0uGHdkFYp1apHgJZ7PDVmGcTkIXVD2lFYppcgNlSzkYlftr5EOjqS9ZjYEqgGuB4g//MxaBaRbJai/6BlcE92NIdBusTtreIm3yTpjIXNAVoeRSnkfuw7wZcL96QoklNb1WUuSHw+psUyeIVtIwFMHEfFoRC0t+VhmnlnFnkjGPb9W3Aprw2dRRvFM3R2ZTDvMCiOYDzUCd43GftGq2LfxH3qSD51oFHglHQVOY0jyVzzlAvub5HQdtOQdErIeO0/9dGx5yot07o3xaGl5yQRhwA=="
    }
  ]
}
```