

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 使用 Amazon CloudWatch 日志和 AWS CloudHSM 审核日志
<a name="get-hsm-audit-logs-using-cloudwatch"></a>

当您账户中的 HSM 收到来自命令[行工具或[软件库](use-hsm.md)的 AWS CloudHSM 命令](command-line-tools.md)时，它会以审计日志的形式记录该命令的执行情况。HSM 审计日志包含所有客户端启动的[管理命令](cloudhsm-audit-log-reference.md)，包括用于创建和删除 HSM、登录和注销 HSM 以及管理用户和密钥的命令。这些日志提供了已更改 HSM 的状态的操作的可靠记录。

AWS CloudHSM 收集您的 HSM 审计日志，并代表您将其发送到 [Amazon CloudWatch Logs](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/WhatIsCloudWatchLogs.html)。您可以使用 CloudWatch 日志的功能来管理您的 AWS CloudHSM 审核日志，包括搜索和筛选日志，以及将日志数据导出到 Amazon S3。您可以在 [Amazon CloudWatch 控制台](https://console.aws.amazon.com/cloudwatch/)中使用 HSM 审计日志，也可以使用[AWS CLI](https://docs.aws.amazon.com/cli/latest/reference/logs/index.html)和 CloudWatch 日志中的[CloudWatch 日志 SDKs](https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/)命令。

**Topics**
+ [HSM 审核日志记录的工作原理](get-audit-logs-from-cloudwatch.md)
+ [在日志中查看 AWS CloudHSM 审核 CloudWatch 日志](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 日志。每个日志事件均有一个时间戳和序列号，它们指示事件的顺序并帮助您检测任何日志篡改。

每个 HSM 实例均生成自己的日志。各种审计日志 HSMs，即使是同一集群中的审计日志，也可能有所不同。例如，每个群集中只有第一个 HSM 记录 HSM 的初始化。从备份中克隆的 HSMs 初始化事件不会出现在日志中。类似地，当您创建密钥时，生成密钥的 HSM 会记录一个密钥生成事件。集群 HSMs 中的另一个人通过同步收到密钥时会记录一个事件。

AWS CloudHSM 收集日志并将其发布到您账户中的 CloudWatch 日志。要代表您与 CloudWatch 日志服务通信，请 AWS CloudHSM 使用[服务相关角色](service-linked-roles.md)。与该角色关联的 IAM 策略仅 AWS CloudHSM 允许执行将审计日志发送到 Logs 所需的任务。 CloudWatch 

**重要**  
如果您在 2018 年 1 月 20 日前创建了一个群集，并且还没有创建附加的服务相关角色，则必须手动创建一个。这是从您的 AWS CloudHSM 集群 CloudWatch 接收审计日志所必需的。有关如何在 HSM 集群上启用服务相关角色的说明，请参阅 《IAM 用户指南》中的了解服务相关角色和创建服务相关角色。有关创建服务相关角色的更多信息，请参阅[了解服务相关角色](service-linked-roles.md)以及*《IAM 用户指南》*中的[《创建服务相关角色》](https://docs.aws.amazon.com/IAM/latest/UserGuide/using-service-linked-roles.html#create-service-linked-role)。

# 在日志中查看 AWS CloudHSM 审核 CloudWatch 日志
<a name="understand-audit-logs"></a>

Amazon Logs 将审核 CloudWatch *日志组织到日志组*中，并在日志组内组织到*日志流*中。每个日志条目都是一个*事件*。 AWS CloudHSM 为每个集群创建一个*日志组*，为集群中的每个 HSM 创建一个*日志流*。您无需创建任何 CloudWatch Logs 组件或更改任何设置。
+ *日志组*名称为 `/aws/cloudhsm/<cluster ID>`；例如 `/aws/cloudhsm/cluster-likphkxygsn`。在 AWS CLI 或 PowerShell 命令中使用日志组名称时，请务必用双引号将其括起来。
+ *日志流*名称为 HSM ID；例如 `hsm-nwbbiqbj4jk`。

  一般来说，每个 HSM 均有一个日志流。不过，任何更改 HSM ID 的操作（例如，当 HSM 发生故障并被替换时）都会创建新的日志流。

有关 CloudWatch 日志概念的更多信息，请参阅 *Amazon CloudWatch 日志用户指南*中的[概念](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/CloudWatchLogsConcepts.html)。

[您可以从中的日志页面、中的日志[命令 AWS 管理控制台、 CloudWatch 日志 PowerShell cmdlet 或CloudWatch 日志](https://docs.aws.amazon.com/cli/latest/reference/logs/index.html#cli-aws-logs)[中查看 HSM 的审核CloudWatch 日志](https://docs.aws.amazon.com/powershell/latest/reference/items/Amazon_CloudWatch_Logs_cmdlets.html)。 AWS CLI CloudWatch SDKs](https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/)有关说明，请参阅 *Amazon 日志用户指南中的查看 CloudWatch 日志*[数据](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/Working-with-log-groups-and-streams.html#ViewingLogData)。

例如，下图显示 AWS 管理控制台中的 `cluster-likphkxygsn` 群集的日志组。

![\[Log CloudWatch s 中集 AWS CloudHSM 群的日志组。\]](http://docs.aws.amazon.com/zh_cn/cloudhsm/latest/userguide/images/cloudwatch-logs-cluster.png)


选择集群日志组名称后，可以查看集群 HSMs 中每个日志组的日志流。下图显示了`cluster-likphkxygsn`集群 HSMs 中的日志流。

![\[Logs 中 HSM 的 CloudWatch 日志流。\]](http://docs.aws.amazon.com/zh_cn/cloudhsm/latest/userguide/images/cloudwatch-logs-hsm.png)


当您选择 HSM 日志流名称时，可以查看审核日志中的事件。例如，此事件（其序列号为 0x0 且 `CN_INIT_TOKEN` 为 `Opcode`）通常是每个群集中的第一个 HSM 的第一个事件。它记录群集中 HSM 的初始化。

![\[日志中 AWS CloudHSM 审核 CloudWatch 日志中的事件。\]](http://docs.aws.amazon.com/zh_cn/cloudhsm/latest/userguide/images/cloudwatch-logs-event.png)


您可以使用 CloudWatch 日志中的所有功能来管理审核日志。例如，您可以使用**筛选事件**功能来查找事件中的特定文本，例如 `CN_CREATE_USER` `Opcode`。

要查找所有不包含指定文本的事件，请在文本前添加减号 (-)。例如，要查找不包含 `CN_CREATE_USER` 的事件，请输入 **-CN\$1CREATE\$1USER**。

![\[在日志中按其Opcode值筛选 AWS CloudHSM 审核 CloudWatch 日志中的事件。\]](http://docs.aws.amazon.com/zh_cn/cloudhsm/latest/userguide/images/cloudwatch-logs-event-filter.png)


# 解释 AWS CloudHSM 审计日志
<a name="interpreting-audit-logs"></a>

HSM 审核日志中的事件具有标准字段。一些事件类型具有附加字段，这些字段将捕获有关事件的有用信息。例如，用户登录和用户管理事件包括用户的名称和类型。密钥管理命令包括密钥句柄。

有几个字段提供了特别重要的信息。`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 事件的通用字段。

**时间**  
事件的发生时间（用 UTC 时区表示）。时间显示为人类可读的时间和 Unix 时间（以微秒为单位）。

**重启计数器**  
在重新启动 HSM 硬件时递增的 32 位持续序数计数器。  
日志流中的所有事件都具有相同的重启计数器值。但是，重启计数器对于日志流可能不是唯一的，因为它在同一集群中的不同 HSM 实例之间可能是不同的。

**序列号**  
为每个日志事件递增的 64 位序数计数器。每个日志流中的第一个事件都有一个序列号 0x0。`Sequence No` 值中不应该有空白。序列号仅在日志流中是唯一的。

**命令类型**  
一个十六进制值，它表示命令的类别。 AWS CloudHSM 日志流中的命令的命令类型为 `CN_MGMT_CMD` (0x0) 或 `CN_CERT_AUTH_CMD` (0x9)。

**Opcode**  
标识已执行的管理命令。有关 AWS CloudHSM 审计日志中的`Opcode`值列表，请参阅[AWS CloudHSM 审核日志参考](cloudhsm-audit-log-reference.md)。

**会话句柄**  
标识已在其中运行命令并记录事件的会话。

**响应**  
记录对管理命令的响应。您可以在 `Response` 字段中搜索 `SUCCESS` 和 `ERROR` 值。

**日志类型**  
表示记录该命令的 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 的历史记录（从其创建到删除）。您可以使用日志来查看您的生命周期 HSMs 并深入了解其运行情况。在解释事件时，请注意 `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 的审计日志流与集群 HSMs 中其他 HSM 的审计日志流有很大不同。每个集群中的第一个 HSM 的审核日志记录了其创建和初始化。集群 HSMs 中其他内容的日志由备份生成，以登录事件开头。

**重要**  
以下初始化条目不会出现在在 CloudHSM 审计 CloudWatch 日志功能发布（2018 年 8 月 30 日）之前初始化的集群的日志中。有关更多信息，请参阅[文档历史记录](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 的典型启动顺序。由于同一集群 HSMs 中的后续是第一个集群的克隆，因此它们使用相同的密码加密密钥。

```
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`) 中的第三个事件是创建[设备用户 (AU)](understanding-users-cmu.md#appliance-user-cmu)（即 AWS CloudHSM 服务）。涉及 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`) 中的第四个事件记录了 `CN_INIT_DONE` 事件，该事件完成了 HSM 的初始化。

```
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)](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` 的加密员的登录。序列号 `0x0` 表示这是此日志流中的第一个事件。

当一个用户登录 HSM 时，集群 HSMs 中的另一个用户也会记录该用户的登录事件。在初始登录事件发生后不久，你可以在集群 HSMs中其他人的日志流中找到相应的登录事件。

```
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` 加密员注销。序列号 `0x2` 表示这是日志流中的第三个事件。

如果已登录的用户关闭会话而不注销，则日志流会包含一个 `CN_APP_FINALIZE` 或关闭会话事件 (`CN_SESSION_CLOSE`)，而不是 `CN_LOGOUT` 事件。与登录事件不同，此注销事件通常只由执行命令的 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) 创建和删除用户时记录的日志事件。

第一个事件记录登录到 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) 的 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 会创建另一个加密员 `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` 的加密员。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 审核日志中记录的事件。

以下事件记录名为 `crypto_user` 的加密用户 (CU) 登录到 HSM。

```
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>

此示例显示了在具有多个密钥的集群中创建密钥的效果 HSMs。密钥在一个 HSM 上生成，作为被屏蔽的对象从 HSM 中提取，然后作为被屏蔽的对象插入到另一 HSMs 个 HSM 中。

**注意**  
客户端工具可能无法同步密钥。或者，该命令可能包含**min\$1srv**参数，该参数仅将密钥同步到指定数量 HSMs的。无论哪种情况， AWS CloudHSM 服务都会将密钥同步到集群 HSMs中的另一个密钥。由于其日志中仅 HSMs 记录客户端管理命令，因此服务器端同步不会记录在 HSM 日志中。

首先，考虑接收并执行命令的 HSM 的日志流。日志流以 HSM ID `hsm-abcde123456` 命名，但 HSM ID 不会出现在日志事件中。

首先，`testuser` 加密用户 (CU) 登录到 `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-zyxwv987654`（同一集群中的另一个 HSM）的日志流。此日志流还包括 `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` 接收为遮蔽对象。现在，集群 HSMs 中两者都`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 用户注销时，此 `CN_LOGOUT` 事件仅在接收了命令的 HSM 的日志流中出现。

### 示例：导出密钥
<a name="audit-log-example-export-key"></a>

此示例显示了加密用户 (CU) 从具有多个密钥的集群中导出密钥时记录的审计日志事件 HSMs。

以下事件记录了登录 [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)命令`7`，即 256 位 AES 密钥。该命令使用密钥`6`（上的 256 位 AES 密钥）作为包装密钥。 HSMs

接收命令的 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 上的密钥。因此，集群中其他 HSMs 人的日志中没有相应的事件。

### 示例：导入密钥
<a name="audit-log-example-import-key"></a>

此示例显示了在集群中将密钥导入时记录 HSMs 的审核日志事件。在此示例中，加密用户 (CU) 使用[imSymKey](key_mgmt_util-imSymKey.md)命令将 AES 密钥导入 HSMs。该命令使用密钥 `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
```

生成或导入新密钥时，客户端工具会自动尝试将新密钥与集群 HSMs 中的其他密钥同步。在此情况下，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
```

集群 HSMs 中其他人的日志流反映了新导入的密钥的到来。

例如，已将此事件记录在同一个集群中的其他 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) 与其他加密用户共享或取消共享 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)](cloudhsm_mgmt_util-createUser.md) | 
| CN\$1CREATE\$1CO | [创建加密员 (CO)](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 | 为用户[操作设置法定身份验证](quorum-auth-chsm-cli.md)（M of N） | 
| CN\$1APPROVE\$1TOKEN | 批准用户[操作的法定身份验证](quorum-auth-chsm-cli.md)令牌 | 
| CN\$1DELETE\$1TOKEN | 删除一个或多个[法定代币](quorum-auth-chsm-cli.md) | 
| CN\$1GET\$1TOKEN | 请求签名令牌以启动[法定人数](quorum-auth-chsm-cli.md)操作 | 
| **密钥管理**：这些事件包括密钥处理程序 | 
| --- |
| CN\$1GENERATE\$1KEY | [生成对称密钥](key_mgmt_util-genSymKey.md) | 
| CN\$1GENERATE\$1KEY\$1PAIR (0x19) | 生成非对称密钥对 | 
| CN\$1CREATE\$1OBJECT | 导入公有密钥（无包装） | 
| CN\$1MODIFY\$1OBJECT | 设置关键属性 | 
| CN\$1DESTROY\$1OBJECT (0x11) | 删除会[话密钥](https://docs.aws.amazon.com/cloudhsm/latest/userguide/manage-key-sync.html#concepts-key-sync) | 
| CN\$1TOMBSTONE\$1OBJECT | 删除令[牌密钥](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 | 导出密钥的加密副本 ([wrapKey](key_mgmt_util-wrapKey.md)) | 
| CN\$1UNWRAP\$1KEY | 导入密钥的加密副本 ([unwrapKey](key_mgmt_util-unwrapKey.md)) | 
| CN\$1DERIVE\$1KEY | 从现有密钥派生对称密钥 | 
| CN\$1NIST\$1AES\$1WRAP |  使用 AES 密钥加密或解密密钥  | 
| CN\$1INSERT\$1MASKED\$1OBJECT\$1USER | 在集群中插入带有其他 HSM 属性的加密密钥。 | 
| CN\$1EXTRACT\$1MASKED\$1OBJECT\$1USER | 使用来自 HSM 的属性对密钥进行封装/加密，以发送到集群中的另一个 HSM。 | 
| **Session Management** | 
| --- |
| CN\$1ENCRYPT\$1SESSION\$1V2 (0x107) | 建立经过身份验证的 end-to-end加密会话。 | 
| END\$1MARKER\$1OPCODE (0xffff) | 在审计日志缓冲区中插入结束标记，指示 HSM 上不再允许使用可记录的命令 | 
| **Back up HSMs** | 
| --- |
| CN\$1BACKUP\$1BEGIN | 开始备份过程 | 
| CN\$1BACKUP\$1END | 已完成备份过程 | 
| CN\$1RESTORE\$1BEGIN | 开始从备份中恢复 | 
| CN\$1RESTORE\$1END | 已完成从备份中恢复的过程 | 
| **Certificate-Based Authentication** | 
| --- |
| CN\$1CERT\$1AUTH\$1STORE\$1CERT | 存储集群证书 | 
| **HSM Instance Commands** | 
| --- |
| CN\$1INIT\$1TOKEN (0x1) | 启动 HSM 初始化过程 | 
| CN\$1INIT\$1DONE | HSM 初始化过程已完成 | 
| CN\$1GEN\$1KEY\$1ENC\$1KEY | 生成密钥加密密钥 (KEK) | 
| CN\$1GEN\$1PSWD\$1ENC\$1KEY (0x1d) | 生成密码加密密钥 (PEK) | 
| **HSM crypto commands** | 
| --- |
| CN\$1FIPS\$1RAND | 生成符合 FIPS 标准的随机数 [1](#hsm-audit-log-note-1) | 

[1] 仅对 hsm1.medium 集群进行记录。