IBM Cloud Docs
设置 PKCS #11 API 用户类型

设置 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) 密钥库。

  1. 在 UI 中,转至 管理 > 访问权 (IAM),然后选择 角色
  2. 单击创建
  3. 输入角色的名称; 例如,Crypto operator。 此名称在帐户中必须唯一。 用户在分配对服务的访问权时,会在 UI 中看到此角色名称。
  4. 输入角色的标识。 此标识在 CRN 中使用,在您使用 API 分配访问权时使用此标识。 角色标识必须以大写字母开头,并且仅使用字母数字字符; 例如,CryptoOperator
  5. 可选:输入简明且有用的描述,用于帮助要分配访问权的用户了解此角色分配授予用户的访问级别。 当用户分配对服务的访问权时,此描述也会显示在 UI 中。
  6. 从服务列表中,选择 Hyper Protect Crypto Services
  7. 针对以下 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
  8. 复审在“摘要”下添加的操作,然后单击 创建

2. 创建用于管理密钥的定制角色

此角色用于管理 EP11 密钥库中的密钥。 但是,此角色无权管理 EP11 密钥库或执行加密操作。

  1. 在 UI 中,转至 管理 > 访问权 (IAM),然后选择 角色
  2. 单击创建
  3. 输入角色的名称; 例如,Key operator。 此名称在帐户中必须唯一。 用户在分配对服务的访问权时,会在 UI 中看到此角色名称。
  4. 输入角色的标识。 此标识在 CRN 中使用,在您使用 API 分配访问权时使用此标识。 角色标识必须以大写字母开头,并且仅使用字母数字字符; 例如,KeyOperator
  5. 可选:输入简明且有用的描述,用于帮助要分配访问权的用户了解此角色分配授予用户的访问级别。 当用户分配对服务的访问权时,此描述也会显示在 UI 中。
  6. 从服务列表中,选择 Hyper Protect Crypto Services
  7. 针对以下六个操作选择 添加:
    • hs-crypto.keystore.deletekey
    • hs-crypto.keystore.listkeysbyattributes
    • hs-crypto.keystore.listkeysbyids
    • hs-crypto.keystore.listkeystoresbyids
    • hs-crypto.keystore.storenewkey
    • hs-crypto.keystore.updatekey
  8. 复审在“摘要”下添加的操作,然后单击 创建

3. 创建用于管理密钥库的定制角色

此角色用于创建和删除 EP11 密钥库,但无权管理密钥。

  1. 在 UI 中,转至 管理 > 访问权 (IAM),然后选择 角色
  2. 单击创建
  3. 输入角色的名称; 例如,Keystore operator。 此名称在帐户中必须唯一。 用户在分配对服务的访问权时,会在 UI 中看到此角色名称。
  4. 输入角色的标识。 此标识在 CRN 中使用,在您使用 API 分配访问权时使用此标识。 角色标识必须以大写字母开头,并且仅使用字母数字字符; 例如,KeystoreOperator
  5. 可选:输入简明且有用的描述,用于帮助要分配访问权的用户了解此角色分配授予用户的访问级别。 当用户分配对服务的访问权时,此描述也会显示在 UI 中。
  6. 从服务列表中,选择 Hyper Protect Crypto Services
  7. 针对以下四个操作选择 添加:
    • hs-crypto.keystore.createkeystore
    • hs-crypto.keystore.deletekeystore
    • hs-crypto.keystore.listkeystoresbyattributes
    • hs-crypto.keystore.listkeystoresbyids
  8. 复审在“摘要”下添加的操作,然后单击 创建

有关如何创建定制角色的更多信息,请参阅 创建定制角色

步骤 2: 为 SO 用户,普通用户和匿名用户创建服务标识和 API 密钥

1. 为 SO 用户创建服务标识和 API 密钥

要为 SO 用户和相应的 API 密钥创建服务标识,请完成以下步骤:

  1. 在 UI 中,转至 管理 > 访问权 (IAM),然后选择 服务标识

  2. 要为 SO 用户创建服务标识,请执行以下步骤:

    1. 单击创建
    2. 为 SO 用户服务标识创建名称 SO user 和描述。
    3. 单击创建
  3. 要为服务标识创建 API 密钥,请执行以下步骤:

    1. 单击 SO user 服务标识页面上的 API 密钥 选项卡。
    2. 单击创建
    3. 添加名称和描述以轻松识别 API 密钥。 例如,SO user API key
    4. 单击创建
    5. 通过将 API 密钥复制或下载到安全位置来保存 API 密钥。

    API 密钥将用作 SO 用户登录的 PIN,无法检索。 请确保在此步骤中对其进行复制。

2. 为普通用户创建服务标识和 API 密钥

要为普通用户和相应的 API 密钥创建服务标识,请完成以下步骤:

  1. 在 UI 中,转至 管理 > 访问权 (IAM),然后选择 服务标识

  2. 要为普通用户创建服务标识,请执行以下步骤:

    1. 单击创建
    2. 为正常用户服务标识创建名称 Normal user 和描述。
    3. 单击创建
  3. 要为服务标识创建 API 密钥,请执行以下步骤:

    1. 单击 Normal user 服务标识页面上的 API 密钥 选项卡。
    2. 单击创建
    3. 添加名称和描述以轻松识别 API 密钥。 例如,Normal user API key
    4. 单击创建
    5. 通过将 API 密钥复制或下载到安全位置来保存 API 密钥。

    API 密钥将用作正常用户登录的 PIN,无法检索。 请确保在此步骤中对其进行复制。

3. 为匿名用户创建服务标识和 API 密钥

要为匿名用户和相应的 API 密钥创建服务标识,请完成以下步骤:

  1. 在 UI 中,转至 管理 > 访问权 (IAM),然后选择 服务标识

  2. 要为匿名用户创建服务标识,请执行以下步骤:

    1. 单击创建
    2. 为匿名用户服务标识创建名称 Anonymous user 和描述。
    3. 单击创建
  3. 要为服务标识创建 API 密钥,请执行以下步骤:

    1. 单击 Anonymous user 服务标识页面上的 API 密钥 选项卡。
    2. 单击创建
    3. 添加名称和描述以轻松识别 API 密钥。 例如,Anonymous user API key
    4. 单击创建
    5. 通过将 API 密钥复制或下载到安全位置来保存 API 密钥。

    API 密钥将用于执行加密操作并访问匿名用户的公用密钥库 (无法检索)。 请确保在此步骤中对其进行复制。

有关创建服务标识的更多信息,请参阅 创建和使用服务标识。 有关创建服务标识 API 密钥的详细指示信息,请参阅 管理服务标识 API 密钥

步骤 3: 向服务标识分配 IAM 角色

您可以使用 UI 授予对 Hyper Protect Crypto Services 服务实例中服务标识的访问权。

1. 将定制角色分配给 SO 用户服务标识

要将 步骤 1 中定义的定制角色分配给 SO 用户服务标识,请执行以下步骤:

要为 SO 用户分配对密钥库的访问权,请执行以下步骤:

  1. 从菜单栏中,单击 管理 > 访问权 (IAM),然后选择 服务标识 以浏览帐户中的现有服务标识。

  2. 将鼠标悬停在 SO user 服务标识上,然后单击 操作 图标 "操作" 图标 以打开选项列表。

  3. 从选项菜单中,单击 分配访问权

  4. 单击 访问策略

  5. 服务下,选择 Hyper Protect Crypto Services,然后单击 下一步

  6. 资源下,选择 特定资源

  7. 选择 服务实例标识 属性类型,输入要授予其访问权的 Hyper Protect Crypto Services 服务实例标识,然后单击 下一步

  8. 角色和操作下,选中以下角色的框,然后单击 下一步:

    • Crypto operator
    • Key operator
    • Keystore operator
  9. (可选) 在 条件 (可选) 下,单击 复审 以检查访问策略。

  10. 单击添加

  11. 复审在 摘要下添加的角色和操作,然后单击 分配

2. 将定制角色分配给正常用户服务标识

要将 步骤 1 中定义的定制角色分配给正常用户服务标识,请执行以下步骤:

要为普通用户分配对密钥库的访问权,请执行以下步骤:

  1. 从菜单栏中,单击 管理 > 访问权 (IAM),然后选择 服务标识 以浏览帐户中的现有服务标识。
  2. 将鼠标悬停在 Normal user 服务标识上,然后单击 操作 图标 "操作" 图标 以打开选项列表。
  3. 从选项菜单中,单击 分配访问权
  4. 单击 访问策略
  5. 服务下,选择 Hyper Protect Crypto Services,然后单击 下一步
  6. 资源下,选择 特定资源
  7. 选择 服务实例标识 属性类型,输入要授予其访问权的 Hyper Protect Crypto Services 服务实例标识,然后单击 下一步
  8. 角色和操作下,选中 Crypto operatorKey operator 的框,然后单击 下一步
  9. (可选) 在 条件 (可选) 下,单击 复审 以检查访问策略。
  10. 单击添加
  11. 复审在 摘要下添加的角色和操作,然后单击 分配

3. 创建访问策略并将定制角色分配给匿名用户服务标识

匿名用户需要三个访问策略。 PKCS#11 规范指定匿名用户只能访问公共密钥库。 设置了以下访问策略,以将匿名用户限制为公共密钥库。

要将 步骤 1 中定义的定制角色分配给匿名用户服务标识,请执行以下步骤:

为加密操作创建访问策略

  1. 从菜单栏中,单击 管理 > 访问权 (IAM),然后选择 服务标识 以浏览帐户中的现有服务标识。
  2. 将鼠标悬停在 Anonymous user 服务标识上,然后单击 操作 图标 "操作" 图标 以打开选项列表。
  3. 从选项菜单中,单击 分配访问权
  4. 单击 访问策略
  5. 服务下,选择 Hyper Protect Crypto Services,然后单击 下一步
  6. 资源下,选择 特定资源
  7. 选择 服务实例标识 属性类型,输入要授予其访问权的 Hyper Protect Crypto Services 服务实例标识,然后单击 下一步
  8. 角色和操作下,选中 Crypto operator 的框,然后单击 下一步
  9. (可选) 在 条件 (可选) 下,单击 复审 以检查访问策略。
  10. 单击添加
  11. 复审在 摘要下添加的角色和操作,然后单击 分配

为密钥访问创建访问策略

  1. 从菜单栏中,单击 管理 > 访问权 (IAM),然后选择 服务标识 以浏览帐户中的现有服务标识。
  2. 将鼠标悬停在 Anonymous user 服务标识上,然后单击 操作 图标 "操作" 图标 以打开选项列表。
  3. 从选项菜单中,单击 分配访问权
  4. 单击 访问策略
  5. 服务下,选择 Hyper Protect Crypto Services,然后单击 下一步
  6. 资源下,选择 特定资源
  7. 选择 服务实例标识 属性类型,输入要授予其访问权的 Hyper Protect Crypto Services 服务实例标识,然后单击 添加条件
  8. 选择 资源类型 属性类型,在值字段下输入 key,然后单击 下一步
  9. 角色和操作下,选中 Key operator 的框,然后单击 下一步
  10. (可选) 在 条件 (可选) 下,单击 复审 以检查访问策略。
  11. 单击添加
  12. 复审在 摘要下添加的角色和操作,然后单击 分配

为密钥库访问权创建访问策略

  1. 从菜单栏中,单击 管理 > 访问权 (IAM),然后选择 服务标识 以浏览帐户中的现有服务标识。

  2. 将鼠标悬停在 Anonymous user 服务标识上,然后单击 操作 图标 "操作" 图标 以打开选项列表。

  3. 从选项菜单中,单击 分配访问权

  4. 单击 访问策略

  5. 服务下,选择 Hyper Protect Crypto Services,然后单击 下一步

  6. 资源下,选择 特定资源

  7. 选择 服务实例标识 属性类型,输入要授予其访问权的 Hyper Protect Crypto Services 服务实例标识,然后单击 添加条件

  8. 选择 资源类型 属性类型,在值字段下输入 keystore,然后单击 添加条件

  9. 选择 资源标识 属性类型,输入值,然后单击 下一步

    资源标识 属性类型的值必须包含 PKCS#11 公用密钥库的有效 通用唯一标识(UUID)。 您可以使用第三方工具 (例如,UUID 生成器) 生成 UUID。 为 资源标识 属性指定的 UUID 字符串必须与 PKCS#11 客户机库中 grep11client.yaml 配置文件 内为匿名用户的 public_keystore_spaceid 配置参数指定的 UUID 字符串匹配。

  10. 角色和操作下,选中 Key operator 的框,然后单击 下一步

  11. (可选) 在 条件 (可选) 下,单击 复审 以检查访问策略。

  12. 单击添加

  13. 查看在“摘要”下添加的角色和操作,然后单击 分配

下一步

继续阅读 使用 PKCS #11 API 执行加密操作,了解如何使用 PKCS #11 API。