存储任意私钥
您可以使用 IBM Cloud® Secrets Manager 来存储用于访问 IBM Cloud 内部或外部受保护系统的任意秘密。
任意私钥是一种应用程序私钥,可用于保存结构化或非结构化数据,例如密钥,配置文件或任何其他敏感信息。 创建私钥后,可以使用它将应用程序连接到受保护资源 (例如第三方应用程序或数据库)。 私钥安全地存储在专用 Secrets Manager 服务实例中,您可以在其中集中管理其生命周期。
要了解有关可以在 Secrets Manager中管理的私钥类型的更多信息,请参阅 什么是私钥?
准备工作
开始之前,请确保您具有所需的访问级别。 要创建或添加私钥,您需要 写入者 服务角色或更高级别的。
在 UI 中创建任意私钥
要使用 Secrets Manager UI 添加任意私钥,请完成以下步骤。
-
在控制台中,单击 菜单 图标
> 资源列表。
-
从服务列表中,选择 Secrets Manager的实例。
-
在“私钥”表中,单击 添加。
-
从私钥类型列表中,单击 其他私钥类型 磁贴。
-
单击下一步。
-
添加名称和描述以轻松识别私钥。
-
选择要分配给私钥的 私钥组包含实例中的私钥的环境和约束必须遵守。 用户可以与一个秘密群组关联,以实现访问和协作。 。
没有秘密小组吗 在 私钥组 字段中,可以单击 创建 以提供新组的名称和描述。 您的私钥将自动添加到新组中。 有关私钥组的更多信息,请查看 组织私钥。
-
可选: 添加标签以帮助您在实例中搜索类似私钥。
-
可选: 将元数据添加到私钥或私钥的特定版本。
- 上载文件或以 JSON 格式输入元数据和版本元数据。
-
单击下一步。
-
选择文件或输入要与私钥关联的私钥值。
Secrets Manager 仅支持基于文本的任意秘密有效载荷。 如果您选择一个文件来指定任意秘密,服务会使用 base64 编码将数据存储在您的实例中。 要在以后访问此私钥,您需要 base64 对其进行解码。 考虑在秘密上指定一个带有编码数据的标签,如 encode:base64,以便跟踪需要 base64 解码的秘密。
- 可选: 启用到期以控制私钥的生命周期。
- 要设置私钥的到期日期,请将到期切换开关切换为 是。
- 单击下一步。
- 查看私钥的详细信息。
- 单击添加。
从 CLI 创建任意私钥
开始之前,请 按照 CLI 文档 设置 API 端点。
要使用 Secrets Manager CLI 插件创建任意私钥,请运行 ibmcloud secrets-manager secret-create 命令。 您可以使用 --secret-type arbitrary 选项来指定私钥类型。 例如,以下命令创建任意私钥并将 secret-data 存储为其值。
Secrets Manager 仅支持基于文本的任意秘密有效载荷。 如果需要上传二进制文件,必须先对数据进行 base64 编码,这样才能以单行字符串的形式将数据传递给 Secrets Manager CLI。 要想以后以原始形式访问这个秘密,您需要 base64 进行解码。 考虑在秘密上指定一个带有编码数据的标签,如 encode:base64,以便跟踪需要 base64 解码的秘密。
ibmcloud secrets-manager secret-create \
--secret-name example-arbitrary-secret \
--secret-description "Description of my arbitrary secret." \
--secret-type arbitrary \
--secret-group-id default \
--secret-labels dev,us-south \
--secret-expiration-date 2023-10-05T11:49:42Z \
--arbitrary-payload secret-data \
--secret-custom-metadata '{"anyKey": "anyValue"}' \
--secret-version-custom-metadata '{"anyKey": "anyValue"}'
该命令输出私钥的标识值以及其他元数据。 有关命令选项的更多信息,请参阅 ibmcloud secrets-manager secret-create。
使用 API 创建任意私钥
您可以通过调用 Secrets Manager API 以编程方式创建任意私钥。
以下示例显示可用于创建和存储任意私钥的查询。 调用 API 时,请将 ID 变量和 IAM 令牌替换为 Secrets Manager 实例的特定值。
您可以使用 custom_metadata 和 version_custom_metadata 请求参数来存储与组织需求相关的元数据。 仅针对私钥版本返回 version_custom_metadata 的值。 私钥的定制元数据存储为最多 50 个版本的所有其他元数据,并且不得包含机密数据。
Secrets Manager 仅支持基于文本的任意秘密有效载荷。 如果需要上传二进制文件,必须先对数据进行 base64 编码,这样才能以单行字符串的形式将数据传递给 Secrets Manager API。 要想以后以原始形式访问这个秘密,您需要 base64 进行解码。 考虑在秘密上指定一个带有编码数据的标签,如 encode:base64,以便跟踪需要 base64 解码的秘密。
curl -X POST
-H "Authorization: Bearer {iam_token}" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-d '{
"custom_metadata": {
"metadata_custom_key": "metadata_custom_value"
},
"description": "Description of my arbitrary secret.",
"expiration_date": "2023-10-05T11:49:42Z",
"labels": [
"dev",
"us-south"
],
"name": "example-arbitrary-secret",
"payload": "secret-data",
"secret_group_id": "67d025e1-0248-418f-83ba-deb0ebfb9b4a",
"secret_type": "arbitrary",
"version_custom_metadata": {
"custom_version_key": "custom_version_value"} }' \
"https://{instance_ID}.{region}.secrets-manager.appdomain.cloud/api/v2/secrets"
成功响应会返回秘密的 ID 值和其他元数据。 有关必需和可选请求参数的更多信息,请查看 API 参考。
使用 Terraform 创建任意私钥
您可以使用 Terraform for Secrets Manager以编程方式创建任意私钥。
遵循 Terraform 最佳实践来保护敏感输入变量 (例如,私钥凭证)。 有关更多信息,请参阅 保护敏感输入变量。
以下示例显示了可用于通过在 terraform.tfvars 文件中设置敏感值来创建任意私钥的配置。
-
在
variables.tf文件中定义任意私钥有效内容的输入变量。variable "arbitrary_secret_payload" { description = "Arbitrary secret payload" type = string sensitive = true } -
在
terraform.tfvars文件中为arbitrary_secret_payload变量指定值。通过使用
.tfvars文件设置值,可以将敏感值与其余变量值分开,并确保使用配置的用户知道哪些值是敏感值。 出于安全考虑,您必须仅与具有相应访问权的用户维护和共享.tfvars文件。 您还必须注意不要将具有敏感值的.tfvars文件以明文形式存储到版本控件 (例如 Github) 中。arbitrary_secret_payload = "my sensitive arbitrary payload" -
在
main.tf文件中创建任意私钥。resource "ibm_sm_arbitrary_secret" "sm_arbitrary_secret" { instance_id = local.instance_id region = local.region description = "Extended description for this arbitrary secret" labels = [ "tf-resource"] name = "test-arbitrary-secret" secret_group_id = ibm_sm_secret_group.sm_secret_group_test.secret_group_id payload = var.arbitrary_secret_payload }
另外,你也可以使用预构建、开源和企业级的 Terraform IBM Modules (TIM) for Secrets Manager Secret,通过 Terraform 创建任意秘密。 了解有关 Terraform IBM 模块的 更多信息。