使用 CloudHSM 管理实用程序(CMU)管理加密员(CO)的双重身份验证(2FA) - AWS CloudHSM

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

使用 CloudHSM 管理实用程序(CMU)管理加密员(CO)的双重身份验证(2FA)

为了提高安全性,可以配置双重身份验证(2FA)来帮助保护集群。您只能为加密员(CO)启用 2FA。

注意

您无法为加密用户(CU)或应用程序启用 2FA。双重身份验证(2FA)仅适用于 CO 用户。

了解 HSM 用户的 2FA

使用启用 2FA 的硬件服务模(HSM)账户登录集群时,您需要向 cloudhsm_mgmt_util(CMU)提供您的密码(第一重身份,即您所知道的),CMU 将为您提供令牌并提示您签署令牌。要提供第二重身份(即您所拥有的),您可以使用已经创建并与 HSM 用户关联的密钥对中的私有密钥签署令牌。要访问集群,您需要向 CMU 提供已签署的令牌。

仲裁身份验证和双因素身份验证

集群使用相同的密钥进行仲裁身份验证和 2FA。这表明启用了 2FA 的用户已经进行了有效的 M-of-N-access-control (MofN) 注册。要成功使用同一 HSM 用户的 2FA 和仲裁身份验证,请考虑以下事项:

  • 如果现在对用户使用仲裁身份验证,则应使用为仲裁用户创建的同一密钥对,为该用户启用 2FA。

  • 如果为非仲裁身份验证用户的非 2FA 用户增加了 2FA 要求,则可以将该用户注册为采用 2FA 身份验证的 MofN 用户。

  • 如果删除了 2FA 要求或更改了同时也是仲裁身份验证用户的 2FA 用户的密码,则将同时删除该仲裁用户的 MofN 用户注册。

  • 如果删除了 2FA 要求或更改了同时也是仲裁身份验证用户的 2FA 用户的密码,但仍希望该用户参与仲裁身份验证,则必须将该用户重新注册为 MofN 用户。

有关仲裁身份验证的更多信息,请参阅 使用 CMU 管理仲裁身份认证

为 HSM 用户使用 2FA

本节将介绍如何对 HSM 用户进行 2FA,包括创建 2FA HSM 用户、轮换密钥以及以启动 2FA 的用户身份登录 HSM。有关使用 HSM 用户的更多信息,请参阅 在中管理 HSM 用户 AWS CloudHSM使用 CloudHSM 管理实用程序 (CMU, CloudHSM Management Utility) 管理用户createUserloginHSM 和 logoutHSMchangePswd

创建 2FA 用户

要对 HSM 用户启用 2FA,请使用满足以下要求的密钥。

您可以创建新的密钥对或使用满足以下要求的现有密钥。

  • 密钥类型:非对称密钥

  • 密钥用法:签名和验证

  • 密钥规范:RSA_2048

  • 签名算法包含:

    • sha256WithRSAEncryption

注意

如果您正在使用仲裁身份验证或计划使用仲裁身份验证,请参阅 仲裁身份验证和双因素身份验证

使用 CMU 和密钥对创建启用了 2FA 的新 CO 用户。

创建启用 2FA 的 CO 用户
  1. 在一个终端中执行以下步骤:

    1. 访问您的 HSM 并登录 CloudHSM 管理实用程序:

      /opt/cloudhsm/bin/cloudhsm_mgmt_util /opt/cloudhsm/etc/cloudhsm_mgmt_util.cfg
    2. 以 CO 身份登录,使用以下命令创建启用 2FA 的新用户 MFA:

      aws-cloudhsm>createUser CO MFA <CO USER NAME> -2fa /home/ec2-user/authdata *************************CAUTION********************************This is a CRITICAL operation, should be done on all nodes in the cluster. AWS does NOT synchronize these changes automatically with the nodes on which this operation is not executed or failed, please ensure this operation is executed on all nodes in the cluster. **************************************************************** Do you want to continue(y/n)? yCreating User exampleuser3(CO) on 1 nodesAuthentication data written to: "/home/ec2-user/authdata"Generate Base64-encoded signatures for SHA256 digests in the authentication datafile. To generate the signatures, use the RSA private key, which is the second factor ofauthentication for this user. Paste the signatures and the corresponding public keyinto the authentication data file and provide the file path below.Leave this field blank to use the path initially provided.Enter filename:
    3. 使上述终端保持该状态。请勿按回车键或输入任何文件名。

  2. 在另一个终端中执行以下步骤:

    1. 访问您的 HSM 并登录 CloudHSM 管理实用程序:

      /opt/cloudhsm/bin/cloudhsm_mgmt_util /opt/cloudhsm/etc/cloudhsm_mgmt_util.cfg
    2. 使用以下命令生成公有密钥/私有密钥对:

      openssl genpkey -algorithm RSA -out private_key.pem -pkeyopt rsa_keygen_bits:2048
      openssl rsa -pubout -in private_key.pem -out public_key.pem
    3. 运行以下命令安装 json 查询功能,以从 authdata 文件中提取摘要:

      sudo yum install jq
    4. 要提取摘要值,请先在 authdata 文件中找到以下数据:

      { "Version":"1.0", "PublicKey":"", "Data":[ { "HsmId": <"HSM ID">, "Digest": <"DIGEST">, "Signature":"" } ] }
      注意

      所得摘要采用 base64 编码,但如要签署摘要,则需先解码文件再进行签名。以下命令将解码摘要并将解码后的内容存储在 ‘digest1.bin’ 中

      cat authdata | jq '.Data[0].Digest' | cut -c2- | rev | cut -c2- | rev | base64 -d > digest1.bin
    5. 转换公有密钥内容,添加 "\n" 并删除空格,如下所示:

      -----BEGIN PUBLIC KEY-----\n<PUBLIC KEY>\n-----END PUBLIC KEY-----
      重要

      上述命令显示了如何在 BEGIN PUBLIC KEY----- 后立即添加 "\n"、如何删除 "\n" 与公有密钥的第一个字符之间的空格,如何在 -----END PUBLIC KEY 前添加 "\n",以及如何删除 "\n" 与公有密钥结尾处之间的空格。

      这是 authdata 文件中接受的公有密钥的 PEM 格式。

    6. 将公有密钥 pem 格式的内容粘贴到 authdata 文件中的公有密钥部分。

      vi authdata
      { "Version":"1.0", "PublicKey":"-----BEGIN PUBLIC KEY-----\n<"PUBLIC KEY">\n-----END PUBLIC KEY-----", "Data":[ { "HsmId":<"HSM ID">, "Digest":<"DIGEST">, "Signature":”” } ] }
    7. 使用以下命令签署令牌文件:

      openssl pkeyutl -sign -in digest1.bin -inkey private_key.pem -pkeyopt digest:sha256 | base64 Output Expected: <"THE SIGNATURE">
      注意

      如上述命令所示,使用 openssl pkeyutl 而不是 openssl dgst 进行签名。

    8. 在 Authdata 文件的“签名”字段中添加已签名的摘要。

      vi authdata
      { "Version": "1.0", "PublicKey": "-----BEGIN PUBLIC KEY----- ... -----END PUBLIC KEY-----", "Data": [ { "HsmId": <"HSM ID">, "Digest": <"DIGEST">, "Signature": "Kkdl ... rkrvJ6Q==" }, { "HsmId": <"HSM ID">, "Digest": <"DIGEST">, "Signature": "K1hxy ... Q261Q==" } ] }
  3. 返回第一个终端并按 Enter

    Generate Base64-encoded signatures for SHA256 digests in the authentication datafile. To generate the signatures, use the RSA private key, which is the second factor ofauthentication for this user. Paste the signatures and the corresponding public keyinto the authentication data file and provide the file path below. Leave this field blank to use the path initially provided. Enter filename: >>>>> Press Enter here createUser success on server 0(10.0.1.11)

管理 HSM 用户的 2FA

通过更改密码来更改 2FA 用户的密码、启用或禁用 2FA 或轮换 2FA 密钥。每次启用 2FA 时,均须为 2FA 登录提供公有密钥。

更改密码执行以下任何场景:

  • 更改 2FA 用户的密码

  • 更改非 2FA 用户的密码

  • 对非 2FA 用户添加 2FA

  • 删除 2FA 用户的 2FA

  • 轮换 2FA 用户的密钥

您还可以合并任务。例如,您可以删除用户的 2FA 并同时更改密码,或轮换 2FA 密钥并更改用户密码。

更改启用 2FA 的 CO 用户的密码或轮换其密钥
  1. 通过 CMU 以启用 2FA 的 CO 身份登录 HSM。

  2. 使用 changePswd 更改启用 2FA 的 CO 用户的密码或轮换其密钥。使用 -2fa 参数并在文件系统中添加系统写入 authdata 文件的位置。此文件包含集群中每个 HSM 的摘要。

    aws-cloudhsm>changePswd CO example-user <new-password> -2fa /path/to/authdata

    CMU 将提示您使用私有密钥签署 authdata 文件中的摘要,并使用公有密钥返回签名。

  3. 使用私有密钥签署 authdata 文件中的摘要,将签名和公有密钥添加到 JSON 格式 authdata 的文件中,然后向 CMU 提供 authdata 文件的位置。有关更多信息,请参阅 配置参考

    注意

    集群使用相同的密钥进行仲裁身份验证和双因素身份验证。如果您正在使用仲裁身份验证或计划使用仲裁身份验证,请参阅 仲裁身份验证和双因素身份验证

要禁用启用 2FA 的 CO 用户的 2FA
  1. 通过 CMU 以启用 2FA 的 CO 身份登录 HSM。

  2. 使用 changePswd 移除启用 2FA 的 CO 用户的 2FA。

    aws-cloudhsm>changePswd CO example-user <new password>

    CMU 将提示您确认更改密码操作。

    注意

    如果删除了 2FA 要求或更改了同时也是仲裁身份验证用户的 2FA 用户的密码,则将同时删除该仲裁用户的 MofN 用户注册。有关仲裁用户和 2FA 的更多信息,请参阅 仲裁身份验证和双因素身份验证

  3. 键入 y

    CMU 将确认更改密码操作。

配置参考

以下是 CMU 生成的请求和您的响应在 authdata 文件中的 2FA 属性的示例。

{ "Version": "1.0", "PublicKey": "-----BEGIN PUBLIC KEY----- ... -----END PUBLIC KEY-----", "Data": [ { "HsmId": "hsm-lgavqitns2a", "Digest": "k5O1p3f6foQRVQH7S8Rrjcau6h3TYqsSdr16A54+qG8=", "Signature": "Kkdl ... rkrvJ6Q==" }, { "HsmId": "hsm-lgavqitns2a", "Digest": "IyBcx4I5Vyx1jztwvXinCBQd9lDx8oQe7iRrWjBAi1w=", "Signature": "K1hxy ... Q261Q==" } ] }
数据

顶级节点。包含集群中每个 HSM 的从属节点。出现在所有 2FA 命令的请求和响应中。

摘要

这是您必须签名才能提供第二重身份验证。在所有 2FA 命令的请求中生成的 CMU。

HsmId

您的 HSM 的 ID。出现在所有 2FA 命令的请求和响应中。

PublicKey

作为 PEM 格式的字符串插入的您所生成的密钥对的公有密钥部分。您输入此内容以响应 createUserchangePswd

签名

Base 64 编码的签名摘要。您输入此内容以响应所有 2FA 命令。

版本

JSON 格式的身份验证数据文件的版本。出现在所有 2FA 命令的请求和响应中。