设置 PKCS #11 API 用户类型
为了符合业界标准安全需求和 会话允许对象访问,建议在使用 PKCS #11 API 时在 Hyper Protect Crypto Services 实例中设置 PKCS #11 用户类型。
PKCS #11 用户类型
PKCS #11 标准定义了两种用户类型: 安全主管和普通用户。 如果用户未执行 C_Login
函数调用,那么会将该用户视为匿名用户。
在 Hyper Protect Crypto Services PKCS #11 库配置文件 grep11client.yaml
中,预定义了以下用户类型,每个用户分配了 服务标识 API 密钥:
-
安全主管 (SO): SO 用户可以是在企业中拥有 SO API 密钥的人员。 此人员能够初始化 PKCS #11 令牌并删除密钥库中的所有密钥对象。 此人员可以是设置 Hyper Protect Crypto Services 实例和 Cloud Identity and Access Management (IAM) 角色的人员。 PKCS #11 应用程序可以在以 SO 用户类型登录后执行管理 Cryptoki 函数调用,例如
C_InitToken
。 -
正常用户: 正常用户是有权访问正常用户 API 密钥的用户。 正常用户 API 密钥只需要分发给有限的一组人员,他们需要访问存储更多敏感密钥的密钥库,例如用于签署和加密合同的密钥。 在这种情况下,PKCS #11 应用程序通过使用普通用户 API 密钥作为 PIN 来调用
C_Login
函数,并成为访问密钥库的普通用户。 -
匿名用户: 匿名用户 API 密钥可以分发给企业中的任何人,以便匿名用户可以访问密钥库来执行日常工作,例如签署文档。 API 密钥是在 PKCS #11 库配置文件
grep11client.yaml
中配置的,匿名用户不需要调用C_Login
函数。
无论打开多少个会话,PKCS #11 应用程序在任何时候都只作为三种用户类型中的一种工作。 每种用户类型都需要一个用于认证的 API 密钥。 要创建 API 密钥,您需要首先创建三个定制 IAM 角色。 然后,为三种用户类型创建服务标识,并将定制 IAM 角色映射到服务标识。
要执行以下步骤,您需要在 IBM Cloud® 帐户中具有 Administrator
平台访问权。
步骤 1: 创建定制 IAM 角色
您需要创建三个定制角色,一个用于执行加密操作,一个用于管理密钥,另一个用于管理 EP11 密钥库。
1. 创建用于执行加密操作的定制角色
此角色用于生成用于执行加密操作的密钥对象。 但是,此角色无权使用或管理 Enterprise PKCS #11 (EP11) 密钥库。
- 在 UI 中,转至 管理 > 访问权 (IAM),然后选择 角色。
- 单击创建。
- 输入角色的名称; 例如,
Crypto operator
。 此名称在帐户中必须唯一。 用户在分配对服务的访问权时,会在 UI 中看到此角色名称。 - 输入角色的标识。 此标识在 CRN 中使用,在您使用 API 分配访问权时使用此标识。 角色标识必须以大写字母开头,并且仅使用字母数字字符; 例如,
CryptoOperator
。 - 可选:输入简明且有用的描述,用于帮助要分配访问权的用户了解此角色分配授予用户的访问级别。 当用户分配对服务的访问权时,此描述也会显示在 UI 中。
- 从服务列表中,选择 Hyper Protect Crypto Services。
- 针对以下 19 个操作选择 添加:
- hs-crypto.crypto.decrypt
- hs-crypto.crypto.derivekey
- hs-crypto.crypto.digest
- hs-crypto.crypto.digestkey
- hs-crypto.crypto.encrypt
- hs-crypto.crypto.generatekey
- hs-crypto.crypto.generatekeypair
- hs-crypto.crypto.generaterandom
- hs-crypto.crypto.getattributevalue
- hs-crypto.crypto.getmechanisminfo
- hs-crypto.crypto.getmechanismlist
- hs-crypto.crypto.rewrapkeyblob
- hs-crypto.crypto.setattributevalue
- hs-crypto.crypto.sign
- hs-crypto.crypto.unwrapkey
- hs-crypto.crypto.verify
- hs-crypto.crypto.wrapkey
- hs-crypto.discovery.listservers
- hs-crypto.ep11.use
- 复审在“摘要”下添加的操作,然后单击 创建。
2. 创建用于管理密钥的定制角色
此角色用于管理 EP11 密钥库中的密钥。 但是,此角色无权管理 EP11 密钥库或执行加密操作。
- 在 UI 中,转至 管理 > 访问权 (IAM),然后选择 角色。
- 单击创建。
- 输入角色的名称; 例如,
Key operator
。 此名称在帐户中必须唯一。 用户在分配对服务的访问权时,会在 UI 中看到此角色名称。 - 输入角色的标识。 此标识在 CRN 中使用,在您使用 API 分配访问权时使用此标识。 角色标识必须以大写字母开头,并且仅使用字母数字字符; 例如,
KeyOperator
。 - 可选:输入简明且有用的描述,用于帮助要分配访问权的用户了解此角色分配授予用户的访问级别。 当用户分配对服务的访问权时,此描述也会显示在 UI 中。
- 从服务列表中,选择 Hyper Protect Crypto Services。
- 针对以下六个操作选择 添加:
- hs-crypto.keystore.deletekey
- hs-crypto.keystore.listkeysbyattributes
- hs-crypto.keystore.listkeysbyids
- hs-crypto.keystore.listkeystoresbyids
- hs-crypto.keystore.storenewkey
- hs-crypto.keystore.updatekey
- 复审在“摘要”下添加的操作,然后单击 创建。
3. 创建用于管理密钥库的定制角色
此角色用于创建和删除 EP11 密钥库,但无权管理密钥。
- 在 UI 中,转至 管理 > 访问权 (IAM),然后选择 角色。
- 单击创建。
- 输入角色的名称; 例如,
Keystore operator
。 此名称在帐户中必须唯一。 用户在分配对服务的访问权时,会在 UI 中看到此角色名称。 - 输入角色的标识。 此标识在 CRN 中使用,在您使用 API 分配访问权时使用此标识。 角色标识必须以大写字母开头,并且仅使用字母数字字符; 例如,
KeystoreOperator
。 - 可选:输入简明且有用的描述,用于帮助要分配访问权的用户了解此角色分配授予用户的访问级别。 当用户分配对服务的访问权时,此描述也会显示在 UI 中。
- 从服务列表中,选择 Hyper Protect Crypto Services。
- 针对以下四个操作选择 添加:
- hs-crypto.keystore.createkeystore
- hs-crypto.keystore.deletekeystore
- hs-crypto.keystore.listkeystoresbyattributes
- hs-crypto.keystore.listkeystoresbyids
- 复审在“摘要”下添加的操作,然后单击 创建。
有关如何创建定制角色的更多信息,请参阅 创建定制角色。
步骤 2: 为 SO 用户,普通用户和匿名用户创建服务标识和 API 密钥
1. 为 SO 用户创建服务标识和 API 密钥
要为 SO 用户和相应的 API 密钥创建服务标识,请完成以下步骤:
-
在 UI 中,转至 管理 > 访问权 (IAM),然后选择 服务标识。
-
要为 SO 用户创建服务标识,请执行以下步骤:
- 单击创建。
- 为 SO 用户服务标识创建名称
SO user
和描述。 - 单击创建。
-
要为服务标识创建 API 密钥,请执行以下步骤:
- 单击
SO user
服务标识页面上的 API 密钥 选项卡。 - 单击创建。
- 添加名称和描述以轻松识别 API 密钥。 例如,
SO user API key
。 - 单击创建。
- 通过将 API 密钥复制或下载到安全位置来保存 API 密钥。
API 密钥将用作 SO 用户登录的 PIN,无法检索。 请确保在此步骤中对其进行复制。
- 单击
2. 为普通用户创建服务标识和 API 密钥
要为普通用户和相应的 API 密钥创建服务标识,请完成以下步骤:
-
在 UI 中,转至 管理 > 访问权 (IAM),然后选择 服务标识。
-
要为普通用户创建服务标识,请执行以下步骤:
- 单击创建。
- 为正常用户服务标识创建名称
Normal user
和描述。 - 单击创建。
-
要为服务标识创建 API 密钥,请执行以下步骤:
- 单击
Normal user
服务标识页面上的 API 密钥 选项卡。 - 单击创建。
- 添加名称和描述以轻松识别 API 密钥。 例如,
Normal user API key
。 - 单击创建。
- 通过将 API 密钥复制或下载到安全位置来保存 API 密钥。
API 密钥将用作正常用户登录的 PIN,无法检索。 请确保在此步骤中对其进行复制。
- 单击
3. 为匿名用户创建服务标识和 API 密钥
要为匿名用户和相应的 API 密钥创建服务标识,请完成以下步骤:
-
在 UI 中,转至 管理 > 访问权 (IAM),然后选择 服务标识。
-
要为匿名用户创建服务标识,请执行以下步骤:
- 单击创建。
- 为匿名用户服务标识创建名称
Anonymous user
和描述。 - 单击创建。
-
要为服务标识创建 API 密钥,请执行以下步骤:
- 单击
Anonymous user
服务标识页面上的 API 密钥 选项卡。 - 单击创建。
- 添加名称和描述以轻松识别 API 密钥。 例如,
Anonymous user API key
。 - 单击创建。
- 通过将 API 密钥复制或下载到安全位置来保存 API 密钥。
API 密钥将用于执行加密操作并访问匿名用户的公用密钥库 (无法检索)。 请确保在此步骤中对其进行复制。
- 单击
有关创建服务标识的更多信息,请参阅 创建和使用服务标识。 有关创建服务标识 API 密钥的详细指示信息,请参阅 管理服务标识 API 密钥。
步骤 3: 向服务标识分配 IAM 角色
您可以使用 UI 授予对 Hyper Protect Crypto Services 服务实例中服务标识的访问权。
1. 将定制角色分配给 SO 用户服务标识
要将 步骤 1 中定义的定制角色分配给 SO 用户服务标识,请执行以下步骤:
要为 SO 用户分配对密钥库的访问权,请执行以下步骤:
-
从菜单栏中,单击 管理 > 访问权 (IAM),然后选择 服务标识 以浏览帐户中的现有服务标识。
-
将鼠标悬停在
SO user
服务标识上,然后单击 操作 图标以打开选项列表。
-
从选项菜单中,单击 分配访问权。
-
单击 访问策略。
-
在 服务下,选择 Hyper Protect Crypto Services,然后单击 下一步。
-
在 资源下,选择 特定资源。
-
选择 服务实例标识 属性类型,输入要授予其访问权的 Hyper Protect Crypto Services 服务实例标识,然后单击 下一步。
-
在 角色和操作下,选中以下角色的框,然后单击 下一步:
Crypto operator
Key operator
Keystore operator
-
(可选) 在 条件 (可选) 下,单击 复审 以检查访问策略。
-
单击添加。
-
复审在 摘要下添加的角色和操作,然后单击 分配。
2. 将定制角色分配给正常用户服务标识
要将 步骤 1 中定义的定制角色分配给正常用户服务标识,请执行以下步骤:
要为普通用户分配对密钥库的访问权,请执行以下步骤:
- 从菜单栏中,单击 管理 > 访问权 (IAM),然后选择 服务标识 以浏览帐户中的现有服务标识。
- 将鼠标悬停在
Normal user
服务标识上,然后单击 操作 图标以打开选项列表。
- 从选项菜单中,单击 分配访问权。
- 单击 访问策略。
- 在 服务下,选择 Hyper Protect Crypto Services,然后单击 下一步。
- 在 资源下,选择 特定资源。
- 选择 服务实例标识 属性类型,输入要授予其访问权的 Hyper Protect Crypto Services 服务实例标识,然后单击 下一步。
- 在 角色和操作下,选中
Crypto operator
和Key operator
的框,然后单击 下一步。 - (可选) 在 条件 (可选) 下,单击 复审 以检查访问策略。
- 单击添加。
- 复审在 摘要下添加的角色和操作,然后单击 分配。
3. 创建访问策略并将定制角色分配给匿名用户服务标识
匿名用户需要三个访问策略。 PKCS#11 规范指定匿名用户只能访问公共密钥库。 设置了以下访问策略,以将匿名用户限制为公共密钥库。
要将 步骤 1 中定义的定制角色分配给匿名用户服务标识,请执行以下步骤:
为加密操作创建访问策略
- 从菜单栏中,单击 管理 > 访问权 (IAM),然后选择 服务标识 以浏览帐户中的现有服务标识。
- 将鼠标悬停在
Anonymous user
服务标识上,然后单击 操作 图标以打开选项列表。
- 从选项菜单中,单击 分配访问权。
- 单击 访问策略。
- 在 服务下,选择 Hyper Protect Crypto Services,然后单击 下一步。
- 在 资源下,选择 特定资源。
- 选择 服务实例标识 属性类型,输入要授予其访问权的 Hyper Protect Crypto Services 服务实例标识,然后单击 下一步。
- 在 角色和操作下,选中
Crypto operator
的框,然后单击 下一步。 - (可选) 在 条件 (可选) 下,单击 复审 以检查访问策略。
- 单击添加。
- 复审在 摘要下添加的角色和操作,然后单击 分配。
为密钥访问创建访问策略
- 从菜单栏中,单击 管理 > 访问权 (IAM),然后选择 服务标识 以浏览帐户中的现有服务标识。
- 将鼠标悬停在
Anonymous user
服务标识上,然后单击 操作 图标以打开选项列表。
- 从选项菜单中,单击 分配访问权。
- 单击 访问策略。
- 在 服务下,选择 Hyper Protect Crypto Services,然后单击 下一步。
- 在 资源下,选择 特定资源。
- 选择 服务实例标识 属性类型,输入要授予其访问权的 Hyper Protect Crypto Services 服务实例标识,然后单击 添加条件。
- 选择 资源类型 属性类型,在值字段下输入
key
,然后单击 下一步。 - 在 角色和操作下,选中
Key operator
的框,然后单击 下一步。 - (可选) 在 条件 (可选) 下,单击 复审 以检查访问策略。
- 单击添加。
- 复审在 摘要下添加的角色和操作,然后单击 分配。
为密钥库访问权创建访问策略
-
从菜单栏中,单击 管理 > 访问权 (IAM),然后选择 服务标识 以浏览帐户中的现有服务标识。
-
将鼠标悬停在
Anonymous user
服务标识上,然后单击 操作 图标以打开选项列表。
-
从选项菜单中,单击 分配访问权。
-
单击 访问策略。
-
在 服务下,选择 Hyper Protect Crypto Services,然后单击 下一步。
-
在 资源下,选择 特定资源。
-
选择 服务实例标识 属性类型,输入要授予其访问权的 Hyper Protect Crypto Services 服务实例标识,然后单击 添加条件。
-
选择 资源类型 属性类型,在值字段下输入
keystore
,然后单击 添加条件。 -
选择 资源标识 属性类型,输入值,然后单击 下一步。
资源标识 属性类型的值必须包含 PKCS#11 公用密钥库的有效 通用唯一标识(UUID)。 您可以使用第三方工具 (例如,UUID 生成器) 生成 UUID。 为 资源标识 属性指定的 UUID 字符串必须与 PKCS#11 客户机库中
grep11client.yaml
配置文件 内为匿名用户的 public_keystore_spaceid 配置参数指定的 UUID 字符串匹配。 -
在 角色和操作下,选中
Key operator
的框,然后单击 下一步。 -
(可选) 在 条件 (可选) 下,单击 复审 以检查访问策略。
-
单击添加。
-
查看在“摘要”下添加的角色和操作,然后单击 分配。
下一步
继续阅读 使用 PKCS #11 API 执行加密操作,了解如何使用 PKCS #11 API。