本指南介绍如何将加密密钥作为新密钥版本导入到 Cloud HSM 或 Cloud Key Management Service。
如需详细了解如何导入密钥(包括限制和局限),请参阅密钥导入。
您可以在 5 至 10 分钟内完成本指南中的步骤,但不包括准备工作步骤。手动封装密钥会增加任务的复杂性。
准备工作
建议您创建一个新项目来测试此功能,以便在测试后轻松清理并确保您拥有足够的 Identity and Access Management (IAM) 权限来导入密钥。
在导入密钥之前,您需要准备项目、本地系统和密钥本身。
准备项目
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
Enable the required API.
Roles required to enable APIs
To enable APIs, you need the
serviceusage.services.enablepermission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.-
安装 Google Cloud CLI。
-
配置 gcloud CLI 以使用您的联合身份。
如需了解详情,请参阅使用联合身份登录 gcloud CLI。
-
如需初始化 gcloud CLI,请运行以下命令:
gcloud init -
执行导入的用户需要以下 IAM 权限才能创建密钥环、密钥和导入作业。如果用户不是项目所有者,您可以为该用户分配以下两个预定义角色:
roles/editorroles/cloudkms.importer
如需详细了解 Cloud KMS 的可用 IAM 角色和权限,请参阅权限和角色。
准备本地系统
选择以下选项之一以准备本地系统:对于大多数用户,推荐使用自动封装密钥功能。
- 如果您想要允许 Google Cloud CLI 自动封装密钥再将密钥传输到 Google Cloud,则必须在本地系统上安装 Pyca 加密库。Pyca 库供导入作业使用,该导入作业用于在将密钥发送到 Google Cloud之前在本地封装和保护密钥。
- 如果您想手动封装密钥,则必须配置 OpenSSL 以便手动封装密钥。
准备密钥
验证密钥的算法和长度是否受支持。密钥的允许算法取决于密钥是用于对称加密、非对称加密还是非对称签名,以及密钥是存储在软件还是 HSM 中。您可以在导入请求中指定密钥的算法。
您还必须单独验证密钥的编码方式,并在必要时进行调整。
在创建或导入密钥版本后,无法更改以下内容:
保护级别指示密钥是保存在软件中、多租户 HSM 中、单租户 HSM 中还是外部密钥管理系统中。无法将密钥材料从这些存储环境之一移到另一个存储环境。密钥的所有版本都具有相同的保护级别。
用途指示密钥的版本是用于对称加密、非对称加密还是非对称签名。密钥的用途会限制可用于创建该密钥的版本的可能算法。密钥的所有版本都具有相同的用途。
如果您没有要导入的密钥,但想要验证导入密钥的过程,则可以在本地系统上使用以下命令创建对称密钥:
openssl rand 32 > ${HOME}/test.bin
仅将此密钥用于测试。以这种方式创建的密钥可能不适合生产用途。
如果您需要手动封装密钥,请先完成此步骤,然后再按照本指南中的步骤继续操作。
创建目标密钥和密钥环
Cloud KMS 密钥是一个包含零个或多个密钥版本的容器对象。每个密钥版本都包含一个加密密钥。
将密钥导入 Cloud KMS 或 Cloud HSM 时,导入的密钥将成为现有 Cloud KMS 或 Cloud HSM 密钥上的新密钥版本。在本指南的其余部分中,此密钥称为目标密钥。在导入密钥材料之前,目标密钥必须已存在。
导入密钥版本不会影响该密钥的现有版本。但是,建议您在测试密钥导入时创建空密钥。空密钥没有版本,处于无效状态,且无法使用。
您可以视需要指定新建的密钥只能包含导入的版本,这可以防止在 Cloud KMS 中意外生成新版本。
密钥环中存在密钥;在本指南中,此密钥环称为目标密钥环。目标密钥环的位置决定了导入后密钥材料的可用位置。无法在某些位置创建或导入 Cloud HSM 密钥。创建密钥后,无法将其移至其他密钥环或位置。
按照以下步骤使用 Google Cloud CLI 或 Google Cloud 控制台在新密钥环上创建空密钥。
控制台
在 Google Cloud 控制台中,前往密钥管理页面。
点击创建密钥环。
在密钥环名称字段中,输入密钥环的名称。
在位置类型下,选择位置类型和位置。
点击创建。此时会打开创建密钥页面。
在密钥名称字段中,输入密钥的名称。
对于保护级别,请选择软件。
对于密钥材料,请选择导入的密钥,然后点击继续。 这样做可以防止创建初始密钥版本。
为密钥设置用途和算法,然后点击继续。
可选:如果您希望此密钥仅包含导入的密钥版本,请选择将密钥版本限制为仅供导入。这可防止您在 Cloud KMS 中意外创建新密钥版本。
可选:对于导入的密钥,自动轮替在默认情况下处于停用状态。 如需启用自动轮替,请从密钥轮替周期字段中选择一个值。
如果启用自动轮替,则新密钥版本将在 Cloud KMS 中生成,并且导入的密钥版本将不再是轮替之后的默认密钥版本。
点击创建。
gcloud
如需在命令行上使用 Cloud KMS,请先安装或升级到最新版本的 Google Cloud CLI。
创建目标密钥环。选择与您要使用的保护级别兼容的位置。如需详细了解支持的位置,请参阅 Cloud KMS 位置。
gcloud kms keyrings create KEY_RING \ --location LOCATION
您可以详细了解如何创建密钥环。
使用
kms keys create命令和--skip-initial-version-creation标志创建目标密钥。这样会创建一个没有初始密钥版本的密钥,以便您导入的密钥材料成为版本1。使用--import-only标志可防止 Cloud KMS 为新密钥版本生成密钥材料。设置此标志后,必须导入相应密钥的新密钥版本。创建为--import-only的密钥必须手动轮替。gcloud kms keys create KEY_NAME \ --location LOCATION \ --keyring KEY_RING \ --purpose PURPOSE \ --skip-initial-version-creation \ --import-only
替换以下内容:
KEY_NAME:您要为密钥使用的名称。LOCATION:密钥环的位置。KEY_RING:您要在其中创建密钥的密钥环。PURPOSE:您要用于密钥的用途。