

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

# Amazon CloudWatch Logs 및 AWS CloudHSM 감사 로그 작업
<a name="get-hsm-audit-logs-using-cloudwatch"></a>

계정의 HSM이 AWS CloudHSM [명령줄 도구](command-line-tools.md) 또는 [소프트웨어 라이브러리](use-hsm.md)로부터 명령을 수신하면 감사 로그 형식으로 명령 실행을 기록합니다. HSM을 만들고 삭제하며 HSM에 로그인 및 로그아웃하고 사용자와 키를 관리하는 명령을 포함하여 클라이언트가 시작한 모든 [관리 명령](cloudhsm-audit-log-reference.md)이 HSM 감사 로그에 포함됩니다. 이 로그는 HSM 상태를 변경한 작업에 대해 신뢰할 수 있는 기록을 제공합니다.

AWS CloudHSM 는 HSM 감사 로그를 수집하여 사용자를 대신하여 [Amazon CloudWatch Logs](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/WhatIsCloudWatchLogs.html)로 전송합니다. CloudWatch Logs의 기능을 사용하여 로그 검색 및 필터링, Amazon S3로 로그 데이터 내보내기 등 AWS CloudHSM 감사 로그를 관리할 수 있습니다. [Amazon CloudWatch 콘솔](https://console.aws.amazon.com/cloudwatch/)에서 HSM 감사 로그로 작업하거나 [AWS CLI](https://docs.aws.amazon.com/cli/latest/reference/logs/index.html) 및 [CloudWatch Logs SDK](https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/)의 CloudWatch Logs 명령을 사용할 수 있습니다.

**Topics**
+ [HSM 감사 로깅 작동 방식](get-audit-logs-from-cloudwatch.md)
+ [CloudWatch Logs에서 AWS CloudHSM 감사 로그 보기](understand-audit-logs.md)
+ [AWS CloudHSM 감사 로그 해석](interpreting-audit-logs.md)
+ [AWS CloudHSM 감사 로그 참조](cloudhsm-audit-log-reference.md)

# HSM 감사 로깅 작동 방식
<a name="get-audit-logs-from-cloudwatch"></a>

감사 로깅은 모든 AWS CloudHSM 클러스터에서 자동으로 활성화됩니다. 비활성화하거나 끌 수 없으며, 설정으로 인해 AWS CloudHSM 가 로그를 CloudWatch Logs로 내보내지 못할 수 없습니다. 각 로그 이벤트에는 이벤트 순서를 나타내며 로그 훼손을 감지할 수 있도록 하는 타임스탬프와 시퀀스 번호가 있습니다.

각 HSM 인스턴스는 자체 로그를 생성합니다. 다양한 HSM의 감사 로그는 동일한 클러스터에 있는 경우에도 다를 수 있습니다. 예를 들어, 각 클러스터의 첫 번째 HSM만 HSM의 초기화를 기록합니다. 백업에서 복제된 HSM의 로그에는 초기화 이벤트가 나타나지 않습니다. 마찬가지로, 키를 생성할 때 키를 생성하는 HSM이 키 생성 이벤트를 기록합니다. 클러스터의 다른 HSM은 동기화를 통해 키를 수신할 때 이벤트를 기록합니다.

AWS CloudHSM 는 로그를 수집하여 계정의 CloudWatch Logs에 게시합니다. 사용자를 대신하여 CloudWatch Logs 서비스와 통신하려면 [서비스 연결 역할을](service-linked-roles.md) AWS CloudHSM 사용합니다. 역할과 연결된 IAM 정책은가 감사 로그를 CloudWatch Logs로 전송하는 데 필요한 작업만 AWS CloudHSM 수행하도록 허용합니다.

**중요**  
2018년 1월 20일 이전에 클러스터를 생성했으며 연결된 서비스 연결 역할을 아직 생성하지 않은 경우 해당 역할을 수동으로 생성해야 합니다. 이는 CloudWatch가 AWS CloudHSM 클러스터에서 감사 로그를 수신하는 데 필요합니다. 서비스 연결 역할 생성에 대한 자세한 내용은 *IAM 사용 설명서*의 [서비스 연결 역할 이해](service-linked-roles.md) 및 [서비스 연결 역할 생성](https://docs.aws.amazon.com/IAM/latest/UserGuide/using-service-linked-roles.html#create-service-linked-role)을 참조하십시오.

# CloudWatch Logs에서 AWS CloudHSM 감사 로그 보기
<a name="understand-audit-logs"></a>

Amazon CloudWatch Logs에서는 감사 로그를 *로그 그룹*으로, 로그 그룹 내에, *로그 스트림*으로 구성합니다. 각 로그 항목은 *event*. AWS CloudHSM creates 각 클러스터에 대해 하나의 *로그 그룹*과 클러스터의 각 HSM에 대해 하나의 *로그 스트림*입니다. CloudWatch Logs 구성 요소를 만들거나 설정을 변경할 필요는 없습니다.
+ *로그 그룹* 이름은 `/aws/cloudhsm/<cluster ID>`입니다(예: `/aws/cloudhsm/cluster-likphkxygsn`). AWS CLI 또는 PowerShell 명령에 로그 그룹 이름을 사용할 때는 큰 따옴표 안에 표기해야 합니다.
+ *로그 스트림* 이름은 HSM ID입니다(예: `hsm-nwbbiqbj4jk`).

  일반적으로 HSM마다 로그 스트림이 하나씩 있습니다. 하지만 HSM이 실패하고 교체되는 경우와 같이 HSM ID를 변경하는 작업은 새 로그 스트림을 생성합니다.

CloudWatch Logs 개념에 대한 자세한 내용은 *Amazon CloudWatch Logs 사용 설명서*의 [개념](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/CloudWatchLogsConcepts.html)을 참조하십시오.

의 CloudWatch Logs 페이지 AWS Management Console,의 [CloudWatch Logs 명령, CloudWatch](https://docs.aws.amazon.com/cli/latest/reference/logs/index.html#cli-aws-logs) [CloudWatch Logs PowerShell cmdlet](https://docs.aws.amazon.com/powershell/latest/reference/items/Amazon_CloudWatch_Logs_cmdlets.html) 또는 [CloudWatch Logs SDKs](https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/). AWS CLI지침은 *Amazon CloudWatch Logs 사용 설명서*의 [로그 데이터 보기](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/Working-with-log-groups-and-streams.html#ViewingLogData)를 참조하십시오.

예를 들어 다음 이미지에서는 AWS Management Console에 있는 `cluster-likphkxygsn` 클러스터의 로그 그룹을 보여 줍니다.

![\[CloudWatch Logs의 AWS CloudHSM 클러스터에 대한 로그 그룹입니다.\]](http://docs.aws.amazon.com/ko_kr/cloudhsm/latest/userguide/images/cloudwatch-logs-cluster.png)


클러스터 로그 그룹 이름을 선택할 때 클러스터에 있는 각 HSM의 로그 스트림을 볼 수 있습니다. 다음 이미지에서는 `cluster-likphkxygsn` 클러스터에 있는 HSM의 로그 스트림을 보여 줍니다.

![\[CloudWatch Logs의 HSM에 대한 로그 스트림입니다.\]](http://docs.aws.amazon.com/ko_kr/cloudhsm/latest/userguide/images/cloudwatch-logs-hsm.png)


HSM 로그 스트림 이름을 선택할 때 감사 로그의 이벤트를 볼 수 있습니다. 예를 들어 시퀀스 번호가 0x0이고 `Opcode`가 `CN_INIT_TOKEN`인 이 이벤트는 일반적으로 각 클러스터에 있는 첫 번째 HSM의 첫 번째 이벤트입니다. 이 이벤트는 클러스터에 있는 HSM의 초기화를 기록합니다.

![\[CloudWatch Logs의 AWS CloudHSM 감사 로그에 있는 이벤트입니다.\]](http://docs.aws.amazon.com/ko_kr/cloudhsm/latest/userguide/images/cloudwatch-logs-event.png)


CloudWatch Logs의 여러 가지 기능을 모두 사용하여 감사 로그를 관리할 수 있습니다. 예를 들어 **이벤트 필터링** 기능을 사용하여 이벤트에서 `CN_CREATE_USER` `Opcode`와 같은 특정 텍스트를 찾을 수 있습니다.

지정된 텍스트를 포함하지 않는 모든 이벤트를 찾으려면 텍스트 앞에 빼기 기호(-)를 추가하십시오. 예를 들어 `CN_CREATE_USER`가 포함되지 않은 이벤트를 찾으려면 **-CN\$1CREATE\$1USER**를 입력합니다.

![\[CloudWatch Logs의 AWS CloudHSM 감사 로그에서 Opcode 값을 기준으로 이벤트를 필터링합니다.\]](http://docs.aws.amazon.com/ko_kr/cloudhsm/latest/userguide/images/cloudwatch-logs-event-filter.png)


# AWS CloudHSM 감사 로그 해석
<a name="interpreting-audit-logs"></a>

HSM 감사 로그의 이벤트에는 표준 필드가 있습니다. 일부 이벤트 유형에는 이벤트에 대한 유용한 정보를 캡처하는 추가 필드가 있습니다. 예를 들어, 사용자 로그인 및 사용자 관리 이벤트에는 사용자 이름과 해당 사용자의 사용자 유형이 포함되어 있습니다. 키 관리 명령에는 key handle이 포함되어 있습니다.

일부 필드는 특별히 중요한 정보를 제공합니다. `Opcode`는 기록되는 관리 명령을 식별합니다. `Sequence No`는 로그 스트림의 이벤트를 식별하고 해당 이벤트가 기록된 순서를 나타냅니다.

예를 들어, 다음 예제 이벤트는 HSM에 대한 로그 스트림의 두 번째 이벤트(`Sequence No: 0x1`)입니다. 이 이벤트는 스타트업 루틴의 일부인 암호 암호화 키를 생성하는 HSM을 보여 줍니다.

```
Time: 12/19/17 21:01:17.140812, usecs:1513717277140812
Sequence No : 0x1
Reboot counter : 0xe8
Command Type(hex) : CN_MGMT_CMD (0x0)
Opcode : CN_GEN_PSWD_ENC_KEY (0x1d)
Session Handle : 0x1004001
Response : 0:HSM Return: SUCCESS
Log type : MINIMAL_LOG_ENTRY (0)
```

다음 필드는 감사 로그의 모든 AWS CloudHSM 이벤트에 공통됩니다.

**Time**  
이벤트가 발생한 시간으로 UTC 시간대로 설정됩니다. 시간은 마이크로초의 Unix 시간과 사람이 읽을 수 있는 시간으로 표시됩니다.

**재부팅 카운터**  
HSM 하드웨어가 재부팅될 때 증가하는 32비트의 영구 서수 카운터입니다.  
로그 스트림의 모든 이벤트는 재부팅 카운터 값이 동일합니다. 재부팅 카운터는 동일한 클러스터에 있는 여러 HSM 인스턴스 간에 다를 수 있으므로 로그 스크림에 대해 고유하지 않을 수 있습니다.

**시퀀스 번호**  
각 로그 이벤트에 대해 증가하는 64비트 서수 카운터입니다. 각 로그 스트림에 있는 첫 번째 이벤트의 시퀀스 번호는 0x0입니다. `Sequence No` 값에는 간격이 없어야 합니다. 시퀀스 번호는 로그 스트림 내에서만 고유합니다.

**명령 유형**  
명령 범주를 나타내는 16진수 값입니다. AWS CloudHSM 로그 스트림의 명령에는 `CN_MGMT_CMD`(0x0) 또는 `CN_CERT_AUTH_CMD`(0x9)의 유형이 있습니다.

**Opcode**  
실행된 관리 명령을 식별합니다. AWS CloudHSM 감사 로그의 `Opcode` 값 목록은 섹션을 참조하세요[AWS CloudHSM 감사 로그 참조](cloudhsm-audit-log-reference.md).

**세션 핸들**  
명령이 실행되고 이벤트가 기록된 세션을 식별합니다.

**응답**  
관리 명령에 대한 응답을 기록합니다. `SUCCESS` 및 `ERROR` 값에 대해 `Response` 필드를 검색할 수 있습니다.

**로그 유형**  
명령을 기록한 로그의 AWS CloudHSM 로그 유형을 나타냅니다.  
+ `MINIMAL_LOG_ENTRY (0)`
+ `MGMT_KEY_DETAILS_LOG (1)`
+ `MGMT_USER_DETAILS_LOG (2)`
+ `GENERIC_LOG`

## 감사 로그 이벤트 예제
<a name="example-audit-log"></a>

로그 스트림의 이벤트는 생성부터 삭제까지의 HSM 기록을 기록합니다. 로그를 통해 HSM의 수명 주기를 검토하고 해당 작업에 대한 통찰을 얻을 수 있습니다. 이벤트를 해석할 때 관리 명령이나 작업을 나타내는 `Opcode` 및 이벤트 순서를 나타내는 `Sequence No`를 기록해 두십시오.

**Topics**
+ [예제: 클러스터의 첫 번째 HSM 초기화](#example-audit-log-first-hsm)
+ [로그인 및 로그아웃 이벤트](#example-audit-log-login-logout)
+ [예제: 사용자 생성 및 삭제](#example-audit-log-first-hsm)
+ [예제: 키 페어 생성 및 삭제](#example-audit-log-manage-keys)
+ [예제: 키 생성 및 동기화](#audit-log-example-gen-key)
+ [예제: 키 내보내기](#audit-log-example-export-key)
+ [예제: 키 가져오기](#audit-log-example-import-key)
+ [예: 키 공유 및 공유 해제](#audit-log-example-share-unshare-key)

### 예제: 클러스터의 첫 번째 HSM 초기화
<a name="example-audit-log-first-hsm"></a>

각 클러스터의 첫 번째 HSM에 대한 감사 로그 스트림은 클러스터의 다른 HSM에 대한 로그 스트림과 매우 다릅니다. 각 클러스터의 첫 번째 HSM에 대한 감사 로그는 생성 및 초기화를 기록합니다. 백업에서 생성되는 클러스터의 추가 HSM 로그는 로그인 이벤트로 시작합니다.

**중요**  
CloudHSM 감사 로깅 기능의 릴리스(2018년 8월 30일)이전에 초기화된 클러스터의 CloudWatch 로그에는 다음 초기화 항목이 나타나지 않습니다. 자세한 내용은 [문서 기록](document-history.md)을 참조하십시오.

다음 예제 이벤트는 클러스터의 첫 번째 HSM에 대한 로그 스트림에 나타납니다. 로그의 첫 번째 이벤트인 `Sequence No 0x0` 이벤트는 HSM(`CN_INIT_TOKEN`)을 초기화하는 명령을 나타냅니다. 응답은 명령이 성공했음을 나타냅니다(`Response : 0: HSM Return: SUCCESS`).

```
Time: 12/19/17 21:01:16.962174, usecs:1513717276962174
Sequence No : 0x0
Reboot counter : 0xe8
Command Type(hex) : CN_MGMT_CMD (0x0)
Opcode : CN_INIT_TOKEN (0x1)
Session Handle : 0x1004001
Response : 0:HSM Return: SUCCESS
Log type : MINIMAL_LOG_ENTRY (0)
```

이 예제 로그 스트림의 두 번째 이벤트(`Sequence No 0x1`)는 HSM에서 사용되는 암호 암호화 키를 생성하는 명령(`CN_GEN_PSWD_ENC_KEY`)을 기록합니다.

이는 각 클러스터의 첫 번째 HSM에 대한 일반적인 스타트업 시퀀스입니다. 동일한 클러스터에 있는 후속 HSM은 첫 번째의 복제본이므로 동일한 암호 암호화 키를 사용합니다.

```
Time: 12/19/17 21:01:17.140812, usecs:1513717277140812
Sequence No : 0x1
Reboot counter : 0xe8
Command Type(hex) : CN_MGMT_CMD (0x0)
Opcode : CN_GEN_PSWD_ENC_KEY (0x1d)
Session Handle : 0x1004001
Response : 0:HSM Return: SUCCESS
Log type : MINIMAL_LOG_ENTRY (0)
```

이 예제 로그 스트림(`Sequence No 0x2`)의 세 번째 이벤트는 AWS CloudHSM 서비스인 [AU(Appliance User)](understanding-users-cmu.md#appliance-user-cmu)의 생성입니다. HSM 사용자와 관련된 이벤트에는 사용자 이름과 사용자 유형에 대한 추가 필드가 포함되어 있습니다.

```
Time: 12/19/17 21:01:17.174902, usecs:1513717277174902
Sequence No : 0x2
Reboot counter : 0xe8
Command Type(hex) : CN_MGMT_CMD (0x0)
Opcode : CN_CREATE_APPLIANCE_USER (0xfc)
Session Handle : 0x1004001
Response : 0:HSM Return: SUCCESS
Log type : MGMT_USER_DETAILS_LOG (2)
User Name : app_user
User Type : CN_APPLIANCE_USER (5)
```

이 예제 로그 스트림의 네 번째 이벤트(`Sequence No 0x3`)는 HSM의 초기화를 완료하는 `CN_INIT_DONE` 이벤트를 기록합니다.

```
Time: 12/19/17 21:01:17.298914, usecs:1513717277298914
Sequence No : 0x3
Reboot counter : 0xe8
Command Type(hex) : CN_MGMT_CMD (0x0)
Opcode : CN_INIT_DONE (0x95)
Session Handle : 0x1004001
Response : 0:HSM Return: SUCCESS
Log type : MINIMAL_LOG_ENTRY (0)
```

스타트업 시퀀스에서 나머지 이벤트를 따를 수 있습니다. 이 이벤트에는 여러 가지 로그인 및 로그아웃 이벤트와 KEK(키 암호화 키) 생성이 포함될 수 있습니다. 다음 이벤트는 [PRECO(Precrypto Officer)](understanding-users-cmu.md#preco)의 암호를 변경하는 명령을 기록합니다. 이 명령은 클러스터를 활성화합니다.

```
Time: 12/13/17 23:04:33.846554, usecs:1513206273846554
Sequence No: 0x1d
Reboot counter: 0xe8
Command Type(hex): CN_MGMT_CMD (0x0)
Opcode: CN_CHANGE_PSWD (0x9)
Session Handle: 0x2010003
Response: 0:HSM Return: SUCCESS
Log type: MGMT_USER_DETAILS_LOG (2)
User Name: admin
User Type: CN_CRYPTO_PRE_OFFICER (6)
```

### 로그인 및 로그아웃 이벤트
<a name="example-audit-log-login-logout"></a>

감사 로그를 해석할 때 HSM에 대한 사용자의 로그인 및 로그아웃을 기록하는 이벤트를 기록해 두십시오. 이러한 이벤트를 통해 로그인 및 로그아웃 명령 간의 시퀀스에 나타나는 관리 명령에 대한 책임이 있는 사용자를 결정할 수 있습니다.

예를 들어, 이 로그 항목은 이름이 `admin`인 Crypto Officer의 로그인을 기록합니다. `0x0`의 시퀀스 번호는 이 로그 스트림에서 첫 번째 이벤트임을 나타냅니다.

사용자가 HSM에 로그인할 때 클러스터의 다른 HSM도 사용자의 로그인 이벤트를 기록합니다. 최초 로그인 이벤트 직후 클러스터에 있는 다른 HSM의 로그 스트림에서 해당 로그인 이벤트를 찾을 수 있습니다.

```
Time: 01/16/18 01:48:49.824999, usecs:1516067329824999
Sequence No : 0x0
Reboot counter : 0x107
Command Type(hex) : CN_MGMT_CMD (0x0)
Opcode : CN_LOGIN (0xd)
Session Handle : 0x7014006
Response : 0:HSM Return: SUCCESS
Log type : MGMT_USER_DETAILS_LOG (2)
User Name : admin
User Type : CN_CRYPTO_OFFICER (2)
```

다음 예제 이벤트는 `admin` CO(Crypto Officer) 로그아웃을 기록합니다. 시퀀스 번호 `0x2`는 이 항목이 로그 스트림의 세 번째 이벤트임을 나타냅니다.

로그인한 사용자가 로그아웃하지 않고 세션을 닫으면 로그 스트림이 `CN_APP_FINALIZE`를 포함하거나 `CN_LOGOUT` 이벤트 대신 세션 이벤트(`CN_SESSION_CLOSE`)를 닫습니다. 로그인 이벤트와 달리 이 로그아웃 이벤트는 일반적으로 명령을 실행하는 HSM에 의해서만 기록됩니다.

```
Time: 01/16/18 01:49:55.993404, usecs:1516067395993404
Sequence No : 0x2
Reboot counter : 0x107
Command Type(hex) : CN_MGMT_CMD (0x0)
Opcode : CN_LOGOUT (0xe)
Session Handle : 0x7014000
Response : 0:HSM Return: SUCCESS
Log type : MGMT_USER_DETAILS_LOG (2)
User Name : admin
User Type : CN_CRYPTO_OFFICER (2)
```

사용자 이름이 잘못되어 로그인 시도가 실패하면 HSM이 로그인 명령에 제공된 사용자 이름과 유형을 사용하여 `CN_LOGIN` 이벤트를 기록합니다. 사용자 이름이 없다고 설명하는 오류 메시지 157이 응답에 표시됩니다.

```
Time: 01/24/18 17:41:39.037255, usecs:1516815699037255
Sequence No : 0x4
Reboot counter : 0x107
Command Type(hex) : CN_MGMT_CMD (0x0)
Opcode : CN_LOGIN (0xd)
Session Handle : 0xc008002
Response : 157:HSM Error: user isn't initialized or user with this name doesn't exist
Log type : MGMT_USER_DETAILS_LOG (2)
User Name : ExampleUser
User Type : CN_CRYPTO_USER (1)
```

암호가 잘못되어 로그인 시도가 실패하면 HSM이 로그인 명령에 제공된 사용자 이름과 유형을 사용하여 `CN_LOGIN` 이벤트를 기록합니다. `RET_USER_LOGIN_FAILURE` 오류 코드와 함께 오류 메시지가 응답에 표시됩니다.

```
Time: 01/24/18 17:44:25.013218, usecs:1516815865013218
Sequence No : 0x5
Reboot counter : 0x107
Command Type(hex) : CN_MGMT_CMD (0x0)
Opcode : CN_LOGIN (0xd)
Session Handle : 0xc008002
Response : 163:HSM Error: RET_USER_LOGIN_FAILURE
Log type : MGMT_USER_DETAILS_LOG (2)
User Name : testuser
User Type : CN_CRYPTO_USER (1)
```

### 예제: 사용자 생성 및 삭제
<a name="example-audit-log-first-hsm"></a>

이 예제에서는 CO(Crypto Officer)가 사용자를 생성하고 삭제할 때 기록되는 로그 이벤트를 보여 줍니다.

첫 번째 이벤트는 HSM에 로그인하는 CO를 나타내는 `admin`을 기록합니다. 시퀀스 번호 `0x0`은 이 항목이 로그 스트림의 첫 번째 이벤트임을 나타냅니다. 로그인한 사용자의 이름과 유형이 이벤트에 포함됩니다.

```
Time: 01/16/18 01:48:49.824999, usecs:1516067329824999
Sequence No : 0x0
Reboot counter : 0x107
Command Type(hex) : CN_MGMT_CMD (0x0)
Opcode : CN_LOGIN (0xd)
Session Handle : 0x7014006
Response : 0:HSM Return: SUCCESS
Log type : MGMT_USER_DETAILS_LOG (2)
User Name : admin
User Type : CN_CRYPTO_OFFICER (2)
```

로그 스트림의 다음 이벤트(시퀀스 `0x1`)가 새 CU(Crypto User)를 만드는 CO를 기록합니다. 새 사용자의 이름과 유형이 이벤트에 포함됩니다.

```
Time: 01/16/18 01:49:39.437708, usecs:1516067379437708
Sequence No : 0x1
Reboot counter : 0x107
Command Type(hex) : CN_MGMT_CMD (0x0)
Opcode : CN_CREATE_USER (0x3)
Session Handle : 0x7014006
Response : 0:HSM Return: SUCCESS
Log type : MGMT_USER_DETAILS_LOG (2)
User Name : bob
User Type : CN_CRYPTO_USER (1)
```

그런 다음 CO가 또 다른 CO(Crypto Officer)인 `alice`를 생성합니다. 시퀀스 번호는 이 작업이 이전 작업에 곧장 이어진다는 것을 나타냅니다.

```
Time: 01/16/18 01:49:55.993404, usecs:1516067395993404
Sequence No : 0x2
Reboot counter : 0x107
Command Type(hex) : CN_MGMT_CMD (0x0)
Opcode : CN_CREATE_CO (0x4)
Session Handle : 0x7014007
Response : 0:HSM Return: SUCCESS
Log type : MGMT_USER_DETAILS_LOG (2)
User Name : alice
User Type : CN_CRYPTO_OFFICER (2)
```

나중에 이름이 `admin`인 CO가 로그인하여 이름이 `alice`인 CO(Crypto Officer)를 삭제합니다. HSM가 `CN_DELETE_USER` 이벤트를 기록합니다. 삭제된 사용자의 이름과 유형이 이벤트에 포함됩니다.

```
Time: 01/23/18 19:58:23.451420, usecs:1516737503451420
Sequence No : 0xb
Reboot counter : 0x107
Command Type(hex) : CN_MGMT_CMD (0x0)
Opcode : CN_DELETE_USER (0xa1)
Session Handle : 0x7014007
Response : 0:HSM Return: SUCCESS
Log type : MGMT_USER_DETAILS_LOG (2)
User Name : alice
User Type : CN_CRYPTO_OFFICER (2)
```

### 예제: 키 페어 생성 및 삭제
<a name="example-audit-log-manage-keys"></a>

이 예제에서는 키 페어를 생성하고 삭제할 때 HSM 감사에 기록되는 이벤트를 보여 줍니다.

다음 이벤트는 HSM에 로그인하는 `crypto_user`라는 CU(Crypto User)를 기록합니다.

```
Time: 12/13/17 23:09:04.648952, usecs:1513206544648952
Sequence No: 0x28
Reboot counter: 0xe8
Command Type(hex): CN_MGMT_CMD (0x0)
Opcode: CN_LOGIN (0xd)
Session Handle: 0x2014005
Response: 0:HSM Return: SUCCESS
Log type: MGMT_USER_DETAILS_LOG (2)
User Name: crypto_user
User Type: CN_CRYPTO_USER (1)
```

그런 다음 CU가 키 페어(`CN_GENERATE_KEY_PAIR`)를 생성합니다. 프라이빗 키에는 키 핸들 `131079`이 있습니다. 퍼블릭 키에는 키 핸들 `131078`이 있습니다.

```
Time: 12/13/17 23:09:04.761594, usecs:1513206544761594
Sequence No: 0x29
Reboot counter: 0xe8
Command Type(hex): CN_MGMT_CMD (0x0)
Opcode: CN_GENERATE_KEY_PAIR (0x19)
Session Handle: 0x2014004
Response: 0:HSM Return: SUCCESS
Log type: MGMT_KEY_DETAILS_LOG (1)
Priv/Secret Key Handle: 131079
Public Key Handle: 131078
```

CU가 키 페어를 즉시 삭제합니다. CN\$1DESTROY\$1OBJECT 이벤트가 퍼블릭 키(131078)의 삭제를 기록합니다.

```
Time: 12/13/17 23:09:04.813977, usecs:1513206544813977
Sequence No: 0x2a
Reboot counter: 0xe8
Command Type(hex): CN_MGMT_CMD (0x0)
Opcode: CN_DESTROY_OBJECT (0x11)
Session Handle: 0x2014004
Response: 0:HSM Return: SUCCESS
Log type: MGMT_KEY_DETAILS_LOG (1)
Priv/Secret Key Handle: 131078
Public Key Handle: 0
```

그런 다음 두 번째 `CN_DESTROY_OBJECT` 이벤트가 프라이빗 키(`131079`)의 삭제를 기록합니다.

```
Time: 12/13/17 23:09:04.815530, usecs:1513206544815530
Sequence No: 0x2b
Reboot counter: 0xe8
Command Type(hex): CN_MGMT_CMD (0x0)
Opcode: CN_DESTROY_OBJECT (0x11)
Session Handle: 0x2014004
Response: 0:HSM Return: SUCCESS
Log type: MGMT_KEY_DETAILS_LOG (1)
Priv/Secret Key Handle: 131079
Public Key Handle: 0
```

마지막으로 CU가 로그아웃합니다.

```
Time: 12/13/17 23:09:04.817222, usecs:1513206544817222
Sequence No: 0x2c
Reboot counter: 0xe8
Command Type(hex): CN_MGMT_CMD (0x0)
Opcode: CN_LOGOUT (0xe)
Session Handle: 0x2014004
Response: 0:HSM Return: SUCCESS
Log type: MGMT_USER_DETAILS_LOG (2)
User Name: crypto_user
User Type: CN_CRYPTO_USER (1)
```

### 예제: 키 생성 및 동기화
<a name="audit-log-example-gen-key"></a>

이 예제에서는 HSM이 여러 개인 클러스터에서 키를 생성할 경우의 효과를 보여 줍니다. 키는 HSM 하나에 생성되고 마스킹 처리된 객체로 이 HSM에서 추출되며, 마스킹 처리된 객체로 다른 HSM에 삽입됩니다.

**참고**  
클라이언트 도구가 키 동기화에 실패할 수 있습니다. 또는 지정된 수의 HSM에만 키를 동기화하는 **min\$1srv** 파라미터가 명령에 포함될 수 있습니다. 어느 경우든 AWS CloudHSM 서비스는 키를 클러스터의 다른 HSMs과 동기화합니다. HSM은 클라이언트 측 관리 명령만 로그에 기록하므로 서버 측 동기화는 HSM 로그에 기록되지 않습니다.

명령을 수신하고 실행하는 HSM의 로그 스트림을 먼저 고려하십시오. 로그 스트림은 HSM ID `hsm-abcde123456`을 따라 명명되지만 HSM ID는 로그 이벤트에 표시되지 않습니다.

먼저 `testuser` CU(Crypto User)가 `hsm-abcde123456` HSM에 로그인합니다.

```
Time: 01/24/18 00:39:23.172777, usecs:1516754363172777
Sequence No : 0x0
Reboot counter : 0x107
Command Type(hex) : CN_MGMT_CMD (0x0)
Opcode : CN_LOGIN (0xd)
Session Handle : 0xc008002
Response : 0:HSM Return: SUCCESS
Log type : MGMT_USER_DETAILS_LOG (2)
User Name : testuser
User Type : CN_CRYPTO_USER (1)
```

대칭 키를 생성하기 위해 CU가 [exSymKey](key_mgmt_util-genSymKey.md) 명령을 실행합니다. `hsm-abcde123456` HSM은 키 핸들이 `262152`인 키 핸들로 대칭 키를 생성합니다. HSM이 로그에 `CN_GENERATE_KEY` 이벤트를 기록합니다.

```
Time: 01/24/18 00:39:30.328334, usecs:1516754370328334
Sequence No : 0x1
Reboot counter : 0x107
Command Type(hex) : CN_MGMT_CMD (0x0)
Opcode : CN_GENERATE_KEY (0x17)
Session Handle : 0xc008004
Response : 0:HSM Return: SUCCESS
Log type : MGMT_KEY_DETAILS_LOG (1)
Priv/Secret Key Handle : 262152
Public Key Handle : 0
```

`hsm-abcde123456`의 로그 스트림에 있는 다음 이벤트가 키 동기화 프로세스의 첫 단계를 기록합니다. 새 키(키 핸들 `262152`)가 마스킹 처리된 객체로 HSM에서 추출됩니다.

```
Time: 01/24/18 00:39:30.330956, usecs:1516754370330956
Sequence No : 0x2
Reboot counter : 0x107
Command Type(hex) : CN_MGMT_CMD (0x0)
Opcode : CN_EXTRACT_MASKED_OBJECT_USER (0xf0)
Session Handle : 0xc008004
Response : 0:HSM Return: SUCCESS
Log type : MGMT_KEY_DETAILS_LOG (1)
Priv/Secret Key Handle : 262152
Public Key Handle : 0
```

이제 같은 클러스터에 있는 또 다른 HSM인 HSM `hsm-zyxwv987654`의 로그 스트림을 고려해 보십시오. 이 로그 스트림에는 `testuser` CU의 로그인 이벤트도 포함됩니다. 시간 값은 사용자가 `hsm-abcde123456` HSM에 로그인한 직후 이 이벤트가 발생한다는 것을 보여 줍니다.

```
Time: 01/24/18 00:39:23.199740, usecs:1516754363199740
Sequence No : 0xd
Reboot counter : 0x107
Command Type(hex) : CN_MGMT_CMD (0x0)
Opcode : CN_LOGIN (0xd)
Session Handle : 0x7004004
Response : 0:HSM Return: SUCCESS
Log type : MGMT_USER_DETAILS_LOG (2)
User Name : testuser
User Type : CN_CRYPTO_USER (1)
```

이 HSM의 이 로그 스트림에는 `CN_GENERATE_KEY` 이벤트가 없지만 이 HSM에 대한 키 동기화를 기록하는 이벤트는 있습니다. `CN_INSERT_MASKED_OBJECT_USER` 이벤트는 키 `262152`의 수신을 마스킹 처리된 객체로 기록합니다. 이제 클러스터의 두 HSM에 모두 `262152` 키가 있습니다.

```
Time: 01/24/18 00:39:30.408950, usecs:1516754370408950
Sequence No : 0xe
Reboot counter : 0x107
Command Type(hex) : CN_MGMT_CMD (0x0)
Opcode : CN_INSERT_MASKED_OBJECT_USER (0xf1)
Session Handle : 0x7004003
Response : 0:HSM Return: SUCCESS
Log type : MGMT_KEY_DETAILS_LOG (1)
Priv/Secret Key Handle : 262152
Public Key Handle : 0
```

CU 사용자가 로그아웃할 때 명령을 수신한 HSM의 로그 스트림에만 이 `CN_LOGOUT` 이벤트가 나타납니다.

### 예제: 키 내보내기
<a name="audit-log-example-export-key"></a>

이 예제에서는 CU(Crypto User)가 HSM이 여러 개인 클러스터에서 키를 내보낼 때 기록되는 감사 로그 이벤트를 보여 줍니다.

다음 이벤트는 [key\$1mgmt\$1util에](key_mgmt_util.md) 로그인하는 CU(`testuser`)를 기록합니다.

```
Time: 01/24/18 19:42:22.695884, usecs:1516822942695884
Sequence No : 0x26
Reboot counter : 0x107
Command Type(hex) : CN_MGMT_CMD (0x0)
Opcode : CN_LOGIN (0xd)
Session Handle : 0x7004004
Response : 0:HSM Return: SUCCESS
Log type : MGMT_USER_DETAILS_LOG (2)
User Name : testuser
User Type : CN_CRYPTO_USER (1)
```

CU가 [exSymKey](key_mgmt_util-exSymKey.md) 명령을 실행하여 256비트 AES 키인 `7` 키를 내보냅니다. 명령에서 HSM의 256 비트 AES 키인 `6`키가 래핑 키로 사용됩니다.

명령을 수신하는 HSM이 내보낼 키인 `7` 키의 `CN_WRAP_KEY` 이벤트를 기록합니다.

```
Time: 01/24/18 19:51:12.860123, usecs:1516823472860123
Sequence No : 0x27
Reboot counter : 0x107
Command Type(hex) : CN_MGMT_CMD (0x0)
Opcode : CN_WRAP_KEY (0x1a)
Session Handle : 0x7004003
Response : 0:HSM Return: SUCCESS
Log type : MGMT_KEY_DETAILS_LOG (1)
Priv/Secret Key Handle : 7
Public Key Handle : 0
```

그런 다음 HSM이 래핑 키인 키 `6`에 대해 `CN_NIST_AES_WRAP` 이벤트를 기록합니다. 키는 래핑되고 곧장 언래핑되지만 HSM은 한 가지 이벤트만 기록합니다.

```
Time: 01/24/18 19:51:12.905257, usecs:1516823472905257
Sequence No : 0x28
Reboot counter : 0x107
Command Type(hex) : CN_MGMT_CMD (0x0)
Opcode : CN_NIST_AES_WRAP (0x1e)
Session Handle : 0x7004003
Response : 0:HSM Return: SUCCESS
Log type : MGMT_KEY_DETAILS_LOG (1)
Priv/Secret Key Handle : 6
Public Key Handle : 0
```

**exSymKey** 명령은 내보낸 키를 파일에 쓰지만 HSM에서 키를 변경하지는 않습니다. 그 결과, 클러스터에 있는 다른 HSM의 로그에는 해당하는 이벤트가 없습니다.

### 예제: 키 가져오기
<a name="audit-log-example-import-key"></a>

이 예제에서는 클러스터의 HSM으로 키를 가져올 때 기록되는 감사 로그 이벤트를 보여 줍니다. 이 예제에서 CU(Crypto User)는 [imSymKey](key_mgmt_util-imSymKey.md) 명령을 사용하여 AES 키를 HSM으로 가져옵니다. `6` 키가 래핑 키로 명령에 사용됩니다.

명령을 수신하는 HSM이 먼저 래핑 키인 `6` 키의 `CN_NIST_AES_WRAP` 이벤트를 기록합니다.

```
Time: 01/24/18 19:58:23.170518, usecs:1516823903170518
Sequence No : 0x29
Reboot counter : 0x107
Command Type(hex) : CN_MGMT_CMD (0x0)
Opcode : CN_NIST_AES_WRAP (0x1e)
Session Handle : 0x7004003
Response : 0:HSM Return: SUCCESS
Log type : MGMT_KEY_DETAILS_LOG (1)
Priv/Secret Key Handle : 6
Public Key Handle : 0
```

그런 다음 HSM은 가져오기 작업을 나타내는 `CN_UNWRAP_KEY` 이벤트를 기록합니다. 가져온 키에 키 핸들 `11`이 할당됩니다.

```
Time: 01/24/18 19:58:23.200711, usecs:1516823903200711
Sequence No : 0x2a
Reboot counter : 0x107
Command Type(hex) : CN_MGMT_CMD (0x0)
Opcode : CN_UNWRAP_KEY (0x1b)
Session Handle : 0x7004003
Response : 0:HSM Return: SUCCESS
Log type : MGMT_KEY_DETAILS_LOG (1)
Priv/Secret Key Handle : 11
Public Key Handle : 0
```

새로운 키를 생성하거나 가져오면 클라이언트 도구가 자동으로 클러스터의 다른 HSM에 새 키를 동기화하려고 시도합니다. 이 경우 HSM은 HSM에서 `11` 키가 마스킹 처리된 객체로 추출될 때 `CN_EXTRACT_MASKED_OBJECT_USER` 이벤트를 기록합니다.

```
Time: 01/24/18 19:58:23.203350, usecs:1516823903203350
Sequence No : 0x2b
Reboot counter : 0x107
Command Type(hex) : CN_MGMT_CMD (0x0)
Opcode : CN_EXTRACT_MASKED_OBJECT_USER (0xf0)
Session Handle : 0x7004003
Response : 0:HSM Return: SUCCESS
Log type : MGMT_KEY_DETAILS_LOG (1)
Priv/Secret Key Handle : 11
Public Key Handle : 0
```

새로 가져온 키의 도착이 클러스터에 있는 다른 HSM의 로그 스트림에 반영됩니다.

예를 들어 이 이벤트는 같은 클러스터에 있는 다른 HSM의 로그 스트림에 기록되었습니다. 이 `CN_INSERT_MASKED_OBJECT_USER` 이벤트는 `11` 키를 나타내는 마스킹 처리된 객체의 도착을 기록합니다.

```
Time: 01/24/18 19:58:23.286793, usecs:1516823903286793
Sequence No : 0xb
Reboot counter : 0x107
Command Type(hex) : CN_MGMT_CMD (0x0)
Opcode : CN_INSERT_MASKED_OBJECT_USER (0xf1)
Session Handle : 0xc008004
Response : 0:HSM Return: SUCCESS
Log type : MGMT_KEY_DETAILS_LOG (1)
Priv/Secret Key Handle : 11
Public Key Handle : 0
```

### 예: 키 공유 및 공유 해제
<a name="audit-log-example-share-unshare-key"></a>

이 예제에서는 CU(Crypto User)가 다른 Crypto User와 ECC 프라이빗 키를 공유하거나 공유 해제할 때 기록되는 감사 로그 이벤트를 보여줍니다. CU는 [shareKey](cloudhsm_mgmt_util-shareKey.md) 명령을 사용하고 키 핸들, 사용자 ID 및 값 `1`을 제공하여 키를 공유하고 값 `0`을 제공하여 키를 공유 해제합니다.

다음 예제에서는 명령을 수신하는 HSM이 공유 작업을 나타내는 `CM_SHARE_OBJECT` 이벤트를 기록합니다.

```
Time: 02/08/19 19:35:39.480168, usecs:1549654539480168
Sequence No	: 0x3f
Reboot counter	: 0x38
Command Type(hex)	: CN_MGMT_CMD (0x0)
Opcode	: CN_SHARE_OBJECT (0x12)
Session Handle	: 0x3014007
Response	: 0:HSM Return: SUCCESS
Log type	: UNKNOWN_LOG_TYPE (5)
```

# AWS CloudHSM 감사 로그 참조
<a name="cloudhsm-audit-log-reference"></a>

AWS CloudHSM 는 감사 로그 이벤트에 HSM 관리 명령을 기록합니다. 발생한 작업과 그에 대한 반응을 식별하는 작업 코드(`Opcode`) 값이 이벤트마다 있습니다. `Opcode` 값을 사용하여 로그를 검색, 정렬 및 필터링할 수 있습니다.

다음 표에서는 AWS CloudHSM 감사 로그의 `Opcode` 값을 정의합니다.


| 작업 코드(Opcode) | 설명 | 
| --- |--- |
| **사용자 로그인**: 사용자 이름과 사용자 유형이 이 이벤트에 포함됩니다. | 
| --- |
| CN\$1LOGIN(0xd) | [사용자 로그인](cloudhsm_mgmt_util-loginLogout.md) | 
| CN\$1LOGOUT(0xe) | [사용자 로그아웃](cloudhsm_mgmt_util-loginLogout.md) | 
| CN\$1APP\$1FINALIZE | HSM과의 연결이 닫혔습니다. 이 연결의 세션 키 또는 쿼럼 토큰이 삭제되었습니다. | 
| CN\$1CLOSE\$1SESSION | HSM과의 세션이 닫혔습니다. 이 세션의 세션 키 또는 쿼럼 토큰이 삭제되었습니다. | 
| **사용자 관리**: 사용자 이름과 사용자 유형이 이 이벤트에 포함됩니다. | 
| --- |
| CN\$1CREATE\$1USER(0x3) | [CU(Crypto User) 생성](cloudhsm_mgmt_util-createUser.md) | 
| CN\$1CREATE\$1CO | [CO(Crypto Officer)](cloudhsm_mgmt_util-createUser.md) | 
| CN\$1DELETE\$1USER | [사용자 삭제](cloudhsm_mgmt_util-deleteUser.md) | 
| CN\$1CHANGE\$1PSWD | [사용자의 암호 변경](cloudhsm_mgmt_util-changePswd.md) | 
| CN\$1SET\$1M\$1VALUE | Set [쿼럼 인증](quorum-auth-chsm-cli.md) (M of N) for a user action | 
| CN\$1APPROVE\$1TOKEN | Approve a [쿼럼 인증](quorum-auth-chsm-cli.md) token for a user action | 
| CN\$1DELETE\$1TOKEN | Delete one or more [쿼럼 토큰](quorum-auth-chsm-cli.md) | 
| CN\$1GET\$1TOKEN | Request a signing token to initiate a [쿼럼 작업](quorum-auth-chsm-cli.md) | 
| **키 관리**: 키 핸들이 이 이벤트에 포함됩니다. | 
| --- |
| CN\$1GENERATE\$1KEY | [대칭 키 생성](key_mgmt_util-genSymKey.md) | 
| CN\$1GENERATE\$1KEY\$1PAIR(0x19) | Generate an asymmetric key pair | 
| CN\$1CREATE\$1OBJECT | Import a public key (without wrapping) | 
| CN\$1MODIFY\$1OBJECT | Set a key attribute | 
| CN\$1DESTROY\$1OBJECT(0x11) | Deletion of a [세션 키](https://docs.aws.amazon.com/cloudhsm/latest/userguide/manage-key-sync.html#concepts-key-sync) | 
| CN\$1TOMBSTONE\$1OBJECT | Deletion of a [토큰 키](https://docs.aws.amazon.com/cloudhsm/latest/userguide/manage-key-sync.html#concepts-key-sync) | 
| CN\$1SHARE\$1OBJECT | [키 공유 또는 공유 해제](cloudhsm_mgmt_util-shareKey.md) | 
| CN\$1WRAP\$1KEY | Export an encrypted copy of a key ([wrapKey](key_mgmt_util-wrapKey.md)) | 
| CN\$1UNWRAP\$1KEY | Import an encrypted copy of a key ([unwrapKey](key_mgmt_util-unwrapKey.md)) | 
| CN\$1DERIVE\$1KEY | Derive a symmetric key from an existing key | 
| CN\$1NIST\$1AES\$1WRAP |  AES 키를 사용하여 키 암호화 또는 복호화  | 
| CN\$1INSERT\$1MASKED\$1OBJECT\$1USER | Insert an encrypted key with attributes from another HSM in the cluster. | 
| CN\$1EXTRACT\$1MASKED\$1OBJECT\$1USER | Wraps/encrypts a key with attributes from the HSM to be sent to another HSM in the cluster. | 
| **Session Management** | 
| --- |
| CN\$1ENCRYPT\$1SESSION\$1V2(0x107) | Establishes an authenticated end-to-end encrypted session. | 
| END\$1MARKER\$1OPCODE(0xffff) | Inserts an end-marker in the audit logs buffer indicating no more loggable commands are allowed on the HSM | 
| **Back up HSMs** | 
| --- |
| CN\$1BACKUP\$1BEGIN | Begin the backup process | 
| CN\$1BACKUP\$1END | Completed the backup process | 
| CN\$1RESTORE\$1BEGIN | Begin restoring from a backup | 
| CN\$1RESTORE\$1END | Completed the restoration process from a backup | 
| **Certificate-Based Authentication** | 
| --- |
| CN\$1CERT\$1AUTH\$1STORE\$1CERT | Stores the cluster certificate | 
| **HSM Instance Commands** | 
| --- |
| CN\$1INIT\$1TOKEN(0x1) | Start the HSM initialization process | 
| CN\$1INIT\$1DONE | The HSM initialization process has finished | 
| CN\$1GEN\$1KEY\$1ENC\$1KEY | Generate a key encryption key (KEK) | 
| CN\$1GEN\$1PSWD\$1ENC\$1KEY(0x1d) | Generate a password encryption key (PEK) | 
| **HSM crypto commands** | 
| --- |
| CN\$1FIPS\$1RAND | Generate a FIPS-compliant random number[1](#hsm-audit-log-note-1) | 

[1] hsm1.medium 클러스터에 대해서만 로깅됩니다.