存储任意私钥
您可以使用 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-prototype='{"custom_metadata": {"anyKey": "anyValue"}, "description": "Description of my arbitrary secret.", "expiration_date": "2023-10-05T11:49:42Z", "labels": ["dev","us-south"], "name": "example-arbitrary-secret", "secret_group_id": "default", "secret_type": "arbitrary", "payload": "secret-data", "version_custom_metadata": {"anyKey": "anyValue"}}'
该命令输出私钥的标识值以及其他元数据。 有关命令选项的更多信息,请参阅 ibmcloud secrets-manager secret-create
。
使用 API 创建任意私钥
您可以通过调用 Secrets Manager API 以编程方式创建任意私钥。
以下示例显示可用于创建和存储任意私钥的查询。 调用 API 时,请将标识变量和 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 }