创建 IAM 凭证
您可以使用 IBM Cloud® Secrets Manager 来动态生成 IAM 凭证,以访问需要 IAM 认证的 IBM Cloud 资源。
IAM 凭证是可用于访问 IBM Cloud 资源的 动态密钥这是一个唯一值,例如密码或 API 密钥,它是动态创建的,并租赁给需要访问受保护资源的应用程序。 动态私钥到达其租赁结束后,将撤销对受保护资源的访问权,并自动删除该私钥。。 一组 IAM 凭证由服务标识和每次读取或访问受保护资源时生成的 API 密钥组成。 您可以在 IAM 凭证创建时为其定义生存时间 (TTL) 或租赁持续时间,以便缩短私钥存在的时间量。
要了解有关可以在 Secrets Manager中管理的私钥类型的更多信息,请参阅 什么是私钥?
准备工作
开始之前,请确保您具有所需的访问级别。 要创建或添加私钥,您需要 写入者 服务角色或更高级别的。
在开始在服务中创建或管理 IAM 凭据之前,需要一个配置步骤。 有关更多信息,请参阅 配置 IAM 凭证引擎。
更改 IAM 凭证私钥的 TTL 时,将仅在下一次私钥版本轮换时应用该私钥。
Secrets Manager 创建的 IAM 证书密钥也将是 IAM API 密钥的名称。 例如,一个名为 my-secret-name
的秘密会有一个名为 Secrets-Manager-IAM-Secret-my-secret-name
的匹配 API 密钥。 如果以后在 Secrets Manager 中重命名秘密,这一更改将不会反映在 IAM 中,但功能不会中断。
帐户管理员 (或具有所需访问级别的任何实体) 可以在外部变更由 Secrets Manager创建和管理的 IAM 凭证。 如果在 Secrets Manager外部删除了此类服务标识或 API 密钥,那么该服务可能行为异常。 例如,您可能无法创建或轮换凭证。
在 UI 中创建 IAM 凭证
要使用 Secrets Manager UI 创建 IAM 凭证,请完成以下步骤。
-
在控制台中,单击 菜单 图标
> 资源列表。
-
从服务列表中,选择 Secrets Manager的实例。
-
在“私钥”表中,单击 添加。
-
从私钥类型列表中,单击 IAM 凭证 磁贴。
-
单击下一步。
-
添加名称和描述以轻松识别私钥。
-
选择要分配给私钥的 私钥组包含实例中的私钥的环境和约束必须遵守。 用户可以与一个秘密群组关联,以实现访问和协作。 。
没有秘密小组吗 在 私钥组 字段中,可以单击 创建 以提供新组的名称和描述。 您的私钥将自动添加到新组中。 有关私钥组的更多信息,请查看 组织私钥。
-
可选: 添加标签以帮助您在实例中搜索类似私钥。
-
可选: 将元数据添加到私钥或私钥的特定版本。
- 上载文件或以 JSON 格式输入元数据和版本元数据。
-
单击下一步。
-
设置私钥的租赁持续时间或生存时间 (TTL)。
通过设置 IAM 凭证的租赁持续时间,您可以确定其关联 API 密钥保持有效的时间长度。 在 IAM 凭证的租期结束后,它会自动撤销。
最短持续时间为 1 分钟。 最大值为 90 天。
- 可选: 确定 IAM 凭证是否可复用 用于私钥。
- 可选: 启用私钥的自动旋转。 只有选择了重复使用 IAM 凭据选项,才能自动轮换保密信息。
- 单击下一步。
- 确定源帐户。
- 确定要分配的访问范围。
- 单击下一步。
- 查看私钥的详细信息。
- 单击添加。
在租赁到期之前复用相同的 API 密钥
IAM 凭证由服务标识和 API 密钥组成。 缺省情况下,服务标识和 API 密钥是每次读取或访问 IAM 凭证私钥时生成和删除的一次性临时值。
如果要在私钥租赁结束前继续使用这些凭证,那么可以将 复用 IAM 凭证直到租赁到期 设置为 开启。 启用此选项时,私钥将保留其当前服务标识和 API 密钥值,并在每次读取时在私钥保持有效时复用这些值。 秘密的租期结束后,证书会自动撤销。
如果重用 IAM 凭据选项设置为“关”,则不支持手动轮换密码。 有关更多信息,请参阅 手动旋转私钥。
确定源账户
Secrets Manager 可以从当前 IBM Cloud 帐户或特定 IBM Cloud 帐户创建和管理 IAM 凭据机密。 选择从特定账户创建时,请提供该账户的 ID。
确定分配的访问范围
您的账户中可能已经有一个服务 ID,您可以通过选择该服务 ID 为其生成 API 密钥。 另外,也可以通过将访问权限分配给访问组来生成服务 ID 和 API 密钥。
在创建 IAM 凭据向导的 分配访问权限步骤中,选择秘密的访问范围。
-
要使用现有服务标识,请从列表中选择标识。 如果源账户是特定的其他账户,请提供服务 ID 的 ID,格式如下:
ServiceId-c0c7cfa4-b24e-4917-ad74-278f2fee5ba0
。当您需要 Secrets Manager 仅为 IAM 凭证密钥而不是服务标识本身生成和管理 API 密钥时,请选择此选项。 API 密钥继承您从帐户中选择的服务标识的访问策略。 仅显示您有权访问的服务标识。
-
要为私钥生成新的服务标识和 API 密钥,请选择访问组。 如果源账户是特定账户,请提供所需的访问组 ID。
通过选择访问组,可以确定使用访问组分配给服务 ID 和 API 密钥的权限范围。 服务 ID 和 API 密钥将生成并与新的 IAM 凭据关联。 最多可以分配 10 个访问组。
访问策略应分配给选定的访问组,而不是直接分配给服务 ID。 一旦达到 IAM 证书的 TTL,服务 ID 和 API 密钥都会被删除,并创建新的服务 ID 和 API 密钥。
如果使用了现有服务标识,那么将自动锁定由 Secrets Manager 生成的 API 密钥。 如果选择了访问组,Secrets Manager 为该秘密创建的新服务 ID 和 API 密钥都会自动锁定。 每次使用 API 检索 IAM 凭证私钥 时,都会锁定 Secrets Manager 生成的 API 密钥和服务标识,即使您在检索私钥之前手动将其解锁也是如此。
从 CLI 创建 IAM 凭证
开始之前,请 按照 CLI 文档 设置 API 端点。
要使用 Secrets Manager CLI 插件创建服务 ID 和 API 密钥,请运行 ibmcloud secrets-manager secret-create
命令。 要在其他特定账户中创建,请添加
--iam-credentials-account-id
选项。
ibmcloud secrets-manager secret-create --secret-type iam_credentials --secret-name "example-iam-credentials-secret" --secret-description "Description of my IAM credentials secret" --iam-credentials-access-groups ["<access_group_id>, ..."] --secret-ttl 30m --iam-credentials-reuse-apikey true
要使用现有服务 ID 并通过 Secrets Manager CLI 插件创建 API 密钥,请运行 ibmcloud secrets-manager secret-create
命令。
要在其他特定账户中创建,请添加 --iam-credentials-account-id
选项。
ibmcloud secrets-manager secret-create --secret-type iam_credentials --secret-name "example-iam-credentials-secret" --secret-description "Description of my IAM credentials secret" --iam-credentials-service-id "ServiceId-c0c7cfa4-b24e-4917-ad74-278f2fee5ba0" --secret-ttl 90d --iam-credentials-reuse-apikey true
您可以在控制台的 IAM 部分找到服务 ID 的 ID 值。 转到 Manage > Access (IAM) > Service ID > name。 单击详细信息查看 ID。
该命令输出私钥的标识值以及其他元数据。 有关命令选项的更多信息,请参阅 ibmcloud secrets-manager secret-create
。
在租赁到期之前复用相同的 API 密钥
如果想在秘密租期结束后继续使用 IAM 凭据,可以使用 --iam-credentials-reuse-apikey
选项。 如果设置为“true
,您的密文将保留当前服务 ID 和 API 密钥值,并在每次读取时重复使用,同时密文仍然有效,否则将其设置为”false
。 例如,以下示例命令创建可在到期前复用的 IAM 凭证。
ibmcloud secrets-manager secret-create --secret-type iam_credentials --secret-name "example-iam-credentials-secret" --secret-description "Description of my IAM credentials secret" --iam-credentials-service-id "<iam_id_of_service_id>" --secret-ttl 30m --iam-credentials-reuse-apikey true
该命令输出私钥的标识值以及其他元数据。 秘密的租期结束后,证书会自动撤销。 有关命令选项的更多信息,请参阅 ibmcloud secrets-manager secret-create
。
如果 IAM 凭据的“--iam-credentials-reuse-apikey
设置为”false
,则不支持手动轮换密文。 有关更多信息,请参阅 手动旋转私钥。
使用 API 创建 IAM 凭证
您可以通过调用 Secrets Manager API 以编程方式创建 IAM 凭证。
下面的示例显示了用于创建服务 ID 和 API 密钥的查询。 调用 API 时,请将 ID 变量和 IAM 令牌替换为 Secrets Manager 实例的特定值。 要在特定的其他账户中创建,请添加 account_id
字段。
您可以使用 custom_metadata
和 version_custom_metadata
请求参数来存储与组织需求相关的元数据。 仅针对私钥版本返回 version_custom_metadata
的值。 私钥的定制元数据存储为最多 50 个版本的所有其他元数据,并且不得包含机密数据。
curl -X POST
-H "Authorization: Bearer {iam_token}" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-d '{
{
"name": "example-iam-credentials-secret",
"description": "Description of my IAM Credentials secret",
"secret_type": "iam_credentials",
"secret_group_id": "bfc0a4a9-3d58-4fda-945b-76756af516aa",
"labels": [
"dev",
"us-south"
],
"ttl": "30m",
"access_groups": [
"AccessGroupId-45884031-54be-4dd7-86ff-112511e92699",
"AccessGroupId-8c0ed733-dfee-4a94-992b-e2247b86e2a2"
],
"reuse_api_key": false,
"custom_metadata": {
"metadata_custom_key": "metadata_custom_value"
},
"version_custom_metadata": {
"custom_version_key": "custom_version_value"
}
}' \ "https://{instance_ID}.{region}.secrets-manager.appdomain.cloud/api/v2/secrets"
成功响应会返回秘密的 ID 值和其他元数据。 有关必需和可选请求参数的更多信息,请查看 API 参考。
在租赁到期之前复用相同的 API 密钥
如果想在秘密租期结束前使用 IAM 凭据,可以使用 reuse_api_key
字段。 如果设置为 true
,那么私钥将保留其当前服务标识和 API 密钥值,并在每次读取时复用这些值,而私钥保持有效。 例如,以下示例命令创建可在到期前复用的 IAM 凭证。
您可以使用 custom_metadata
和 version_custom_metadata
请求参数来存储与组织需求相关的元数据。 仅针对私钥版本返回 version_custom_metadata
的值。 私钥的定制元数据存储为最多 50 个版本的所有其他元数据,并且不得包含机密数据。
curl -X POST
-H "Authorization: Bearer {iam_token}" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-d '{
{
"name": "example-iam-credentials-secret",
"description": "Description of my IAM Credentials secret",
"secret_type": "iam_credentials",
"secret_group_id": "bfc0a4a9-3d58-4fda-945b-76756af516aa",
"labels": [
"dev",
"us-south"
],
"ttl": "30m",
"access_groups": [
"AccessGroupId-45884031-54be-4dd7-86ff-112511e92699",
"AccessGroupId-8c0ed733-dfee-4a94-992b-e2247b86e2a2"
],
"reuse_api_key": true,
"custom_metadata": {
"metadata_custom_key": "metadata_custom_value"
},
"version_custom_metadata": {
"custom_version_key": "custom_version_value"
}
}' \
"https://{instance_ID}.{region}.secrets-manager.appdomain.cloud/api/v2/secrets"
成功请求将返回私钥的标识值以及其他元数据。 秘密的租期结束后,证书会自动撤销。 有关更多信息,请查看 API 参考。
如果 reuse_api_key
对于 IAM 凭证为 false
,那么不支持手动轮换私钥。 有关更多信息,请参阅 手动旋转私钥。
在帐户中使用现有服务标识
您的帐户中可能已具有要用于动态生成 API 密钥的服务标识。 在此场景中,您可以选择通过自带服务标识来创建 IAM 凭证私钥。 例如,以下命令使用 service_id
字段创建 IAM 凭证。 要在其他特定账户中创建,请添加 account_id
字段。
您可以使用 custom_metadata
和 version_custom_metadata
请求参数来存储与组织需求相关的元数据。 仅针对私钥版本返回 version_custom_metadata
的值。 私钥的定制元数据存储为最多 50 个版本的所有其他元数据,并且不得包含机密数据。
您可以在控制台的 IAM 部分找到服务 ID 的 ID 值。 转到 Manage > Access (IAM) > Service ID > name。 单击详细信息查看 ID。
curl -X POST
-H "Authorization: Bearer {iam_token}" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-d '{
"name": "example-iam-credentials-secret",
"description": "Description of my IAM Credentials secret",
"secret_type": "iam_credentials",
"secret_group_id": "bfc0a4a9-3d58-4fda-945b-76756af516aa",
"labels": [
"dev",
"us-south"
],
"ttl": "30m",
"service_id": "ServiceId-c0c7cfa4-b24e-4917-ad74-278f2fee5ba0,
"reuse_api_key": false,
"custom_metadata": {
"metadata_custom_key": "metadata_custom_value"
},
"version_custom_metadata": {
"custom_version_key": "custom_version_value"
}
}' \
"https://{instance_ID}.{region}.secrets-manager.appdomain.cloud/api/v2/secrets"
成功请求将返回私钥的标识值以及其他元数据。 有关更多信息,请查看 API 参考。
使用 Terraform 创建 IAM 凭证
您可以使用 Terraform for Secrets Manager以编程方式创建 IAM 凭证。
您必须添加 depends_on
Terraform 元参数并将其引用到 IAM 配置资源。 depends_on
元参数指示 Terraform 先完成 IAM 配置上的所有操作,然后再对 IAM 凭证私钥执行操作。 创建跨账户 IAM 凭据机密时,请包含 account_id
属性,指向创建服务 ID 的 IBM Cloud 账户。
以下示例显示可用于创建 IAM 凭证的配置。
resource "ibm_sm_iam_credentials_secret" "test_iam_credentials_secret" {
instance_id = local.instance_id
region = local.region
service_id = "ServiceId-f4b2deac-fbb5-4bf7-85de-88426701db97"
ttl = "1800"
name = "test-iam-credentials-secret"
reuse_api_key = true
secret_group_id = ibm_sm_secret_group.sm_secret_group_test.secret_group_id
depends_on = [
ibm_sm_iam_credentials_configuration.iam_credentials_configuration
]
}
删除 IAM 凭证
如果您具有由 IAM 凭证私钥引擎生成的服务标识或 API 密钥,并删除 Secrets Manager实例,那么还必须从 IAM 中删除私钥。 有关更多信息,请参阅管理用户 API 密钥。