创建服务凭证
您可以使用 IBM Cloud® Secrets Manager 来创建可用于访问需要认证的 IBM Cloud 资源的服务凭证。
服务凭证可以保存 Identity and Access Management 发放的凭证。 凭证还可以是特定于服务的本机凭证,例如 HMAC 密钥,数据库用户标识和密码,SASL 凭证或 TLS 证书。 要了解有关可以使用 Secrets Manager管理的私钥类型的更多信息,请参阅 什么是私钥?。
受支持的 IBM Cloud 服务
您可以通过 Secrets Manager 为以下 IBM Cloud 服务创建服务凭证:
准备工作
开始之前,请确保您具有所需的访问级别。 要创建或添加私钥,您需要 写入者 服务角色或更高级别的。
帐户管理员或具有所需访问级别的任何实体都可以在外部变更由 Secrets Manager创建和管理的服务凭证。 如果在 Secrets Manager外部删除了此类凭证,那么服务可能行为异常。 例如,您可能无法创建或轮换凭证。
请注意,对于为数据库创建的服务凭证,如果除了凭证之外,您还在更改所创建凭证的数据库许可权,那么一旦轮换了服务凭证,将不会同步这些凭证。 当轮换数据库服务凭证时,这被视为身份轮换。
更改服务凭证私钥的 TTL 时,将仅在下一个私钥版本轮换时应用该私钥。
Secrets Manager 创建的服务凭据密文也将是资源密钥的名称。 例如,Cloud Object Storage 中名为 my-secret-name
的服务凭据密钥将在 Cloud Object Storage 中具有名为 my-secret-name
的匹配资源密钥。 如果以后重新命名 Secrets Manager 中的秘密,这一更改将不会反映在资源密钥中,但功能不会中断。
为服务凭证分配 IAM 服务访问角色
要创建服务凭证,必须选择 IAM 服务访问角色。 要从中选择的可用角色在受支持的服务之间可能有所不同。 请参阅受支持服务的列表 以获取相关文档。 然后,所选角色将附加到 IAM Service 标识,该标识可以是现有服务标识,也可以是自动生成的服务标识。
一旦发生秘密轮换,将继续使用服务标识。 如果删除私钥,那么将不会删除预先存在的服务标识,但是将删除自动生成的服务标识。
如果选择使用预先存在的服务标识,那么还可以预先配置其服务访问策略。 在这种情况下,请在创建私钥时选择 无 作为角色。 了解有关 IAM 策略的更多信息。
服务凭证最佳实践
建议对生产用例应用最小特权访问原则:
- 设置服务到服务授权时,应该在具体源服务 实例和目标服务实例之间定义服务到服务授权,而不是在 所有 服务之间定义服务到服务授权。
- 手动设置要与服务凭证配合使用的服务标识的访问权时,应将其应用于具体服务实例。
在 UI 中创建服务凭证
要使用 Secrets Manager UI 创建服务凭证,请完成以下步骤。
-
在控制台中,单击 菜单 图标
> 资源列表。
-
从服务列表中,选择 Secrets Manager的实例。
-
在“私钥”表中,单击 添加。
-
从私钥类型列表中,单击 服务凭证 磁贴。
-
单击下一步。
-
添加名称和描述以轻松识别私钥。
-
选择要分配给私钥的 私钥组包含实例中的私钥的环境和约束必须遵守。 用户可以与一个秘密群组关联,以实现访问和协作。 。
没有秘密小组吗 在 私钥组 字段中,可以单击 创建 以提供新组的名称和描述。 您的私钥将自动添加到新组中。 有关私钥组的更多信息,请查看 组织私钥。
-
可选: 添加标签以帮助您在实例中搜索类似私钥。
-
选择要为其创建凭证的所需服务和服务实例
如果这是首次选择服务实例或提供了服务 CRN,请首先授权 Secrets Manager 对其进行访问
- 单击 授权,然后选择 密钥管理器
-
单击下一步。
-
根据所选服务,提供所请求的输入。
-
可选: 将元数据添加到私钥或私钥的特定版本。
-
上载文件或以 JSON 格式输入元数据和版本元数据。
-
可选: 设置私钥的租赁持续时间或生存时间 (TTL)。
通过设置服务凭证的租赁持续时间,您可以确定其关联凭证保持有效的时间长度。 服务凭证到期后,将自动失效。
- 可选: 启用私钥的自动旋转。
- 单击下一步。
- 查看私钥的详细信息。
- 单击添加。
从 CLI 创建服务凭证
要使用 Secrets Manager CLI 插件创建服务凭证私钥,请运行 ibmcloud secrets-manager secret-create
命令。 您可以使用 --secret-type service_credentials
选项来指定私钥类型。 例如,以下命令为 Cloud Object Storage 实例创建具有 HMAC 支持的服务凭证。 以及指定要为此凭证提供的 IAM 角色,例如 Writer
。
ibmcloud secrets-manager secret-create --secret-type="service_credentials" --secret-name="example-service-credentials-secret" --secret-source-service='{"instance": {"crn": "CRN of the instance to create a credential for"},"parameters": {"HMAC": true},"role": {"crn": "crn:v1:bluemix:public:iam::::serviceRole:Writer"}}'
该命令输出私钥的标识值以及其他元数据。 有关命令选项的更多信息,请参阅 ibmcloud secrets-manager secret-create
。
使用 API 创建服务凭证
您可以通过调用 Secrets Manager API 以编程方式创建服务凭证。
您可以使用 custom_metadata
和 version_custom_metadata
请求参数来存储与组织需求相关的元数据。 仅针对私钥版本返回 version_custom_metadata
的值。 私钥的定制元数据存储为最多 50 个版本的所有其他元数据,并且不得包含机密数据。
在下面的示例中,创建了 Cloud Object Storage的服务 crednetial,使用现有服务 ID 的 IAM ID 自定义参数,并启用 HMAC。 以及指定要为此凭证提供的 IAM 角色,例如 Writer
。
curl -X POST
-H "Authorization: Bearer {iam_token}" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-d '{
{
"name": "example-service-credentials-secret",
"description": "Description of my Service Credentials secret",
"secret_type": "service_credentials",
"secret_group_id": "bfc0a4a9-3d58-4fda-945b-76756af516aa",
"labels": [
"dev",
"us-south"
],
"source_service": {
"instance": {
"crn": "CRN of the instance to create a credential for"
},
"parameters": {
"serviceid_crn": "Existing Service ID's IAM ID",
"HMAC": true
},
"role": {
"crn": "crn:v1:bluemix:public:iam::::serviceRole:Writer"
}
}
}' \ "https://{instance_ID}.{region}.secrets-manager.appdomain.cloud/api/v2/secrets"
成功的响应将返回密钥的ID值以及其他元数据。 有关必需和可选请求参数的更多信息,请查看 API 参考。
使用Terraform创建服务凭证
您可以使用 Terraform 为 Secrets Manager 创建服务凭据。 以下示例显示了一种可用于创建Cloud Object Storage凭证的配置。
resource "ibm_sm_service_credentials_secret" "my_service_credentials_secret" {
instance_id = "local.instance_id"
region = "local.region"
name = "example-service-credentials-secret"
secret_group_id = "ibm_sm_secret_group.sm_secret_group_test.secret_group_id"
description = "Description of my Service Credentials secret"
ttl = "24h"
source_service {
role = {
crn = "crn:v1:bluemix:public:iam::::serviceRole:Writer"
},
instance = {
crn = "crn:v1:bluemix:public:cloud-object-storage:global:a/347df6de25020f0fa8b711c6d9881111:f35e85fc-3d4d-476e-8547-51222e3c1111::"
},
parameters = {
HMAC: true
}
}
rotation {
auto_rotate = true
interval = 1
unit = "day"
}
}