配置 IAM 凭证引擎
您可以通过配置 IAM 凭证引擎,为 IBM Cloud® Secrets Manager 服务实例设置 IAM 凭证。
在 Secrets Manager 中,IAM 凭据引擎充当 iam_credentials
秘密类型的后台。 必须先为服务实例配置 IAM 凭证引擎,然后才能创建 IAM 凭证。 您可以通过创建 IAM 服务授权,或输入与 IBM Cloud 账户中的服务 ID 相关联的 API 密钥,来启用实例。
使用 API 密钥进行引擎配置时,生成的访问令牌会持续 60 分钟,即使从 IAM 中删除 API 密钥,访问令牌也会继续工作。 可以通过在 IAM 设置中更改令牌到期来修改此设置。 了解更多信息。 请注意,如果删除了与 API 密钥相关的实体,那么令牌将立即失效。
在引擎配置中使用 IAM 服务授权时,可以在与 IBM Cloud 实例相同的 Secrets Manager 账户中创建和管理 IAM 凭据机密,也可以从其他账户创建和管理 IAM 凭据机密。 API 密钥配置仅适用于 Secrets Manager 实例所属的帐户。
准备工作
要配置 IAM 凭据引擎,请确保在 Secrets Manager 实例上分配了 Manager 服务角色。
如果使用 API 密钥配置 IAM 凭据引擎,则需要 服务 ID API 密钥,其访问权限如下:
- IAM 访问组服务上的 编辑者 平台角色。
- IAM Identity Service上的 操作员 平台角色。
- IAM Identity Service上的 服务标识创建者 服务角色。 仅当您在 IAM 设置中禁用服务标识创建时,才需要服务标识创建者服务角色。
如果使用 IAM 服务授权配置 IAM 凭证引擎,Secrets Manager 会代表您添加以下两个授权策略。
- 组服务成员管理IAM 访问组服务上的平台角色。
- 操作员 平台角色 为 IAM Identity Service 服务。
- IAM Identity Service上的 服务标识创建者 服务角色。 仅当您在 IAM 设置中禁用服务标识创建时,才需要服务标识创建者服务角色。
如果要生成 IAM 凭据的账户允许来自特定 IP 地址的访问,则还必须更新账户中的 IP 地址设置,以允许来自 Secrets Manager 的传入请求。 有关更多信息,请参阅 使用基于上下文的限制管理访问权。
在 UI 中设置 IAM 凭证引擎
使用 IAM 服务授权
完成以下步骤,使用 IAM 服务授权配置 IAM 凭据引擎。
如果您想使用与 Secrets Manager 相同的 IBM Cloud 账户管理IAM凭证,请执行以下操作:
- 在“密钥引擎”页面中,单击 IAM 凭证 选项卡。
- 单击授权。
- 单击配置。
要管理另一个 IBM Cloud 账户的IAM凭证,请手动创建IAM服务授权。
对于 IAM Identity Service服务授权策略:
- 在要管理 IAM 证书的账户中,转到 Manage > Access (IAM)。
- 从左窗格菜单中选择 授权。
- 单击创建。
- 在“源”下选择 特定账户,并提供 Secrets Manager 实例所属的账户 ID。
- 服务:Secrets Manager.
- 资源:特定资源 > 服务实例,并为您的 Secrets Manager 实例提供服务实例 ID。
- 在目标下选择
- 服务:IAM Identity Service
- 资源:全部
- 角色:操作员
对于 IAM 访问组服务服务授权策略:
- 在要管理 IAM 证书的账户中,转到 Manage > Access (IAM)。
- 从左窗格菜单中选择 授权。
- 单击创建。
- 在“源”下选择 特定账户,并提供 Secrets Manager 实例所属的账户 ID。
- 服务:Secrets Manager.
- 资源:特定资源 > 服务实例,并为您的 Secrets Manager 实例提供服务实例 ID。
- 在目标下选择
- 服务 :IAM访问组服务
- 资源:全部
- 角色:组别 服务成员管理
使用 API 密钥
完成以下步骤,使用服务 ID 的 API 密钥配置 IAM 凭据引擎。
- 在“密钥引擎”页面中,单击 IAM 凭证 选项卡。
- 点击使用API密钥配置IAM凭证引擎。
- 输入有权在帐户中创建和管理其他 API 密钥的 API 密钥。
- 单击配置。
从 CLI 设置 IAM 凭证引擎
使用 IAM 服务授权
完成以下步骤,使用 IAM 服务授权配置 IAM 凭据引擎。
要使用与您的 Secrets Manager 实例相同的 IBM Cloud 账户管理IAM凭证,请运行以下命令以添加所需的IAM服务授权策略:
ibmcloud iam authorization-policy-create secrets-manager iam-identity "Service ID Creator, Operator" --source-service-instance-id SOURCE_SERVICE_INSTANCE_GUID
ibmcloud iam authorization-policy-create secrets-manager iam-groups "Groups Service Member Manage" --source-service-account SOURCE_SERVICE_INSTANCE_GUID
- 将 SOURCE_SERVICE_INSTANCE_GUID 替换为 Secrets Manager 实例服务 ID。 如果未提供,则授权适用于所有 Secrets Manager 实例
要管理另一个 IBM Cloud 账户的IAM凭证:还需包含 ACCOUNT_GUID参数。
- 使用要管理的服务 ID 登录 IBM Cloud 账户。
- 运行以下命令添加所需的 IAM 服务授权策略:
ibmcloud iam authorization-policy-create secrets-manager iam-identity "Service ID Creator, Operator" --source-service-instance-id SOURCE_SERVICE_INSTANCE_GUID --source-service-account ACCOUNT_GUID
ibmcloud iam authorization-policy-create secrets-manager iam-groups "Groups Service Member Manage" --source-service-account SOURCE_SERVICE_INSTANCE_GUID --source-service-instance-id ACCOUNT_GUID
- 将 SOURCE_SERVICE_INSTANCE_GUID 替换为 Secrets Manager 实例服务 ID。 如果未提供,则授权适用于所有 Secrets Manager 实例
- 将 ACCOUNT_GUID 替换为 IBM Cloud 帐户的 ID,您要在其中创建 IAM 凭据机密。
使用 API 密钥
完成以下步骤,使用服务 ID 的 API 密钥配置 IAM 凭据引擎。
-
在终端窗口中,通过 IBM Cloud CLI 登录到 IBM Cloud。
ibmcloud login
-
选择 Secrets Manager 服务实例所在的帐户,区域和资源组。
-
创建服务标识并将其设置为环境变量。
export SERVICE_ID=`ibmcloud iam service-id-create <service_ID_name> --description "<description>" --output json | jq -r ".id"`; echo $SERVICE_ID
-
管理服务标识的访问权。
分配服务标识许可权以创建和管理其他服务标识。
ibmcloud iam service-policy-create $SERVICE_ID --roles Operator --service-name "iam-identity"
分配服务标识许可权以查看和更新帐户中的访问组。
ibmcloud iam access-group-policy-create $SERVICE_ID --roles Editor --service-name "iam-groups"
将服务标识添加到帐户中的访问组。
ibmcloud iam access-group-service-id-add <access_group_name> $SERVICE_ID
为您的服务ID创建一个 IBM Cloud API密钥。
export IBM_CLOUD_API_KEY=`ibmcloud iam service-api-key-create <API_key_name> $SERVICE_ID --description "<description>" --output json | jq -r ".apikey"`
-
使用 API 密钥为您的实例配置 IAM 凭据引擎。
要从 IBM Cloud CLI 配置密钥引擎,请运行
ibmcloud secrets-manager configuration-create
命令。ibmcloud secrets-manager configuration-create --configuration-prototype='{"config_type": "iam_credentials_configuration","name": "iam-configuration","api_key": "'$IBM_CLOUD_API_KEY'"}'
使用 Windows™ 命令提示符 (
cmd.exe
) 或 PowerShell? 如果在命令行上传递 JSON 内容时迂到错误,那么可能需要调整字符串以满足特定于操作系统的报价转义需求。 有关更多信息,请参阅 在 IBM Cloud CLI 中对字符串使用引号。
使用 API 配置 IAM 凭证引擎
有关创建具有正确访问级别的 IBM Cloud API 密钥的逐步指示信息,请切换到 UI 或 CLI 步骤。
使用 IAM 服务授权
下面的示例显示了在使用 IAM 服务授权时可以用来为实例配置 IAM 凭据引擎的查询。 了解更多信息,请参阅 IBM Cloud IAM 的 API 文档。
curl -X POST 'https://iam.cloud.ibm.com/v1/policies' -H "Authorization: Bearer $TOKEN" -H 'Content-Type: application/json' -d '{
"type": "authorization",
"subjects": [
{
"attributes": [
{
"name": "accountId",
"value": "$SOURCE_ACCOUNT_ID"
},
{
"name": "serviceName",
"value": "secrets-manager"
},
{
"name": "serviceInstance",
"value": "$INSTANCE_GUID"
}
]
}
],
"roles":[
{
"role_id": "crn:v1:bluemix:public:iam-identity::::serviceRole:ServiceIdCreator"
},
{
"role_id": "crn:v1:bluemix:public:iam::::role:Operator"
}
],
"resources":[
{
"attributes": [
{
"name": "accountId",
"value": "$TARGET_ACCOUNT_ID"
},
{
"name": "serviceName",
"value": "iam-identity"
}
]
}
]
}'
curl -X POST 'https://iam.cloud.ibm.com/v1/policies' -H "Authorization: Bearer $TOKEN" -H 'Content-Type: application/json' -d '{
"type": "authorization",
"subjects": [
{
"attributes": [
{
"name": "accountId",
"value": "$SOURCE_ACCOUNT_ID"
},
{
"name": "serviceName",
"value": "secrets-manager"
},
{
"name": "serviceInstance",
"value": "$INSTANCE_GUID"
}
]
}
],
"roles":[
{
"role_id": "crn:v1:bluemix:public:iam-groups::::serviceRole:MemberManage"
}
],
"resources":[
{
"attributes": [
{
"name":"$TARGET_ACCOUNT_ID",
"value": "791f5fb10986423e97aa8512f18b7e65"
},
{
"name": "serviceName",
"value": "iam-groups"
}
]
}
]
}'
属性是可选的。serviceInstance 属性是可选的。 如果省略,则授权适用于所有 Secrets Manager 实例。 无论创建当前账户还是特定账户的授权 ,SOURCE_ACCOUNT_ID 和 TARGET_ACCOUNT_ID 都是必填项。
使用 API 密钥
下面的示例显示了一个查询,您可以使用该查询使用 API 密钥为实例配置 IAM 凭据引擎。 调用 API 时,请将 API 密钥变量和 IAM 令牌替换为特定于 Secrets Manager 实例的值。
curl -X POST
--H "Authorization: Bearer {iam_token}" \
--H "Accept: application/json" \
--H "Content-Type: application/json" \
--d '{
"api_key": "{iam_apikey}", "config_type": "iam_credentials_configuration",
"name": "iam-configuration"
}' \
"https://{instance_ID}.{region}.secrets-manager.appdomain.cloud/api/v2/configurations"
成功的响应将返回密钥的ID值以及其他元数据。 有关必需和可选请求参数的更多信息,请参阅 创建私钥。
使用 Terraform 配置 IAM 凭证引擎
使用 IAM 服务授权
下面的示例显示了使用 IAM 服务授权时,为Secrets Manager实例配置 IAM 凭据引擎的查询。
resource "ibm_iam_authorization_policy" "sm_to_iam_identity" {
source_service_name = "secrets-manager"
source_service_account = local.source_account_id
source_resource_instance_id = local.instance_id
target_service_name = "iam-identity"
roles = ["Service ID creator", "Operator"]
}
resource "ibm_iam_authorization_policy" "sm_to_iam_groups" {
source_service_name = "secrets-manager"
source_service_account = local.source_account_id
source_resource_instance_id = local.instance_id
target_service_name = "iam-groups"
roles = ["Groups Service Member Manage"]
}
source_resource_instance_id属性是可选的。 如果省略,则授权适用于所有 Secrets Manager 实例。 source_service_account属性是可选的。 如果来源账户与当前账户相同,则可以省略。
使用 API 密钥
有关创建具有正确访问级别的 IBM Cloud API 密钥的逐步指示信息,请切换到 UI 或 CLI 步骤。
下面的示例显示了一个配置,您可以使用服务 ID 的 API 密钥来配置 IAM 凭据引擎。
resource "ibm_sm_iam_credentials_configuration" "iam_credentials_configuration" {
instance_id = local.instance_id
region = local.region
name = "iam_credentials_config"
api_key = var.ibmcloud_api_key
}
在用户界面中读取 IAM 凭据引擎的配置值
您可以使用 Secrets Manager UI 来检索引擎的配置。 仅当使用API密钥配置IAM凭证引擎时,恢复配置才有效。
- 在 IAM 凭证 私钥引擎中,单击 操作 菜单
以打开引擎配置的选项列表。
- 要查看配置值,请单击 查看配置。
- 确保您处于安全环境中后,单击 确认。
将显示密钥值 15 秒,然后关闭对话框。
使用 CLI 检索引擎的配置值
您可以使用 Secrets Manager CLI 来检索引擎的配置。 在以下示例命令中,将引擎配置名称替换为配置的名称。 仅当使用API密钥配置IAM凭证引擎时,恢复配置才有效。
ibmcloud secrets-manager configuration --name EXAMPLE_CONFIG --service-url https://{instance_ID}.{region}.secrets-manager.appdomain.cloud
将 {instance_ID}
和 {region}
替换为适用于 Secrets Manager 服务实例的值。 要找到特定于您的实例的终端 URL,您可以从 Secrets Manager UI 中的终端页面复制它。 有关更多信息,请参阅 查看端点 URL
使用 API 检索引擎的配置值
您可以使用 Secrets Manager API 来检索引擎的配置。 在以下示例请求中,将引擎配置名称替换为配置的名称。 仅当使用API密钥配置IAM凭证引擎时,恢复配置才有效。
curl -X GET --location --header "Authorization: Bearer {iam_token}" \
--header "Accept: application/json" \
"https://{instance_ID}.{region}.secrets-manager.appdomain.cloud/api/v2/configurations/{name}"
将 {instance_ID}
和 {region}
替换为适用于 Secrets Manager 服务实例的值。 要找到特定于您的实例的终端 URL,您可以从 Secrets Manager UI 中的终端页面复制它。 有关更多信息,请参阅 查看端点 URL
成功响应将返回引擎配置的值以及其他元数据。 有关必填和可选请求参数的更多信息,请参阅 获取配置。
后续步骤
现在可以使用 Secrets Manager 生成 IAM 凭据。 在 Secrets Manager UI 中,单击 私钥> 添加> IAM 凭证 以开始创建私钥。