管理服务标识 API 密钥
创建服务标识是为了支持通过在 IBM Cloud® 内部和外部托管的应用程序访问 IBM Cloud 服务。 应用程序使用应用程序接口(API)密钥来验证特定的服务ID,并授予与该特定服务ID相关的访问权限。
创建服务ID后,即可开始创建API密钥并分配服务策略。 每个策略都会指定在使用 API 密钥向服务进行认证时所允许的访问级别。 有关创建服务标识和分配策略的更多信息,请参阅创建和使用服务标识。 有关用于管理服务ID API密钥的CLI命令的更多信息,请参阅 管理IAM访问、API密钥、服务ID和访问组。
每个与服务ID关联的API密钥都继承了分配给服务ID的策略。 例如,如果您希望使用一个应用程序来查看服务中的资源,则需要使用与服务ID关联的API密钥,该服务ID具有分配给查看者角色的策略。 如果您希望另一个应用程序能够完全访问某个服务,则需要使用与第二个服务ID关联的API密钥,该服务ID具有分配给管理员角色的策略。
如需了解服务ID的使用示例,请参阅 Object Storage 文档中的 “使用HMAC凭证”或 IBM Cloud Data Engine 视频中的 “如何使用 IBM Cloud Data Engine REST API”。
管理服务标识 API 密钥所需的访问权
所有用户都可以在帐户中创建服务标识,并且他们是这些标识的管理员,并且可以创建关联的 API 密钥和访问策略。 但是,帐户所有者和对 IAM 身份服务分配了管理员角色的用户可以管理帐户中所有服务标识的 API 密钥。 如果在管理员分配访问权时指定了用户标识,那么也可以仅授予用户对单个服务标识的访问权。
如果您是具有所需访问权的用户,那么可以查看,更新和删除帐户中任何服务标识的 API 密钥。 转至“API 密钥”页面,然后在 查看 菜单中选择 所有服务标识 API 密钥 选项以查找要查看其详细信息,更新或删除的 API 密钥。
为服务标识创建 API 密钥
创建一个API密钥,与控制台中的服务ID关联:
- 在 IBM Cloud 控制台中,转至 管理 > 访问权 (IAM),然后选择 服务标识。
- 如果您还没有创建服务ID,请创建服务ID。
- 单击 操作 图标
> 管理服务标识。
- 单击 API 密钥。
- 单击创建。
- 添加名称和描述以轻松识别 API 密钥。
- 单击创建。
- 通过将 API 密钥复制或下载到安全位置来保存该密钥。
出于安全原因,API 密钥仅在创建时才可复制或下载。 如果 API 密钥丢失,必须创建新的 API 密钥。
使用控制台更新服务标识的 API 密钥
您可以通过编辑用于在用户界面中识别 API 密钥的名称或描述来更新密钥。
- 在 IBM Cloud 控制台中,转至 管理 > 访问权 (IAM),然后选择 服务标识。
- 单击 操作 图标
> 管理服务标识。
- 单击 API 密钥。
- 单击 操作 图标
> 编辑名称和描述。
如果未创建服务标识,但您是 IAM 身份服务的帐户所有者或管理员,那么可以更新帐户中任何服务标识的 API 密钥。 转至“API 密钥”页面,然后在 视图 菜单中选择 所有服务标识 API 密钥 选项以查找要使用的 API 密钥。
使用CLI为服务ID创建API密钥
要使用 CLI 为服务 ID 创建 API 密钥,您可以使用 ibmcloud iam service-api-key-create 命令。
ibmcloud iam service-api-key-create NAME (SERVICE_ID_NAME|SERVICE_ID_UUID) [-d, --description DESCRIPTION] [--file FILE] [-f, --force] [--lock]
使用CLI更新服务ID的API密钥
要使用 CLI 更新服务 ID 的 API 密钥,可以使用 ibmcloud iam service-api-key-update 命令。
ibmcloud iam service-api-key-update NAME SERVICE_ID [-n, --name NEW_sNAME] [-d, --description DESCRIPTION] [-v, --version VERSION] [-f, --force]
锁定服务标识的 API 密钥
对于表示服务标识身份的 API 密钥,可以通过锁定 API 密钥来防止将其删除。 锁定的API密钥在用户界面中用 锁定 图标 表示。
- 在 IBM Cloud 控制台中,单击 管理 > 访问权 (IAM),然后选择 服务标识。
- 确定要为其选择 API 密钥的服务标识所在的行,然后选择服务标识的名称。
- 单击 API 密钥。
- 将鼠标悬停在要锁定的API密钥行上,点击 行为 图标
,打开选项列表。
- 单击锁定 API 密钥。
您可以随时解锁 API 密钥以更新、删除或添加访问策略,也可以除去 API 密钥。
使用 CLI 锁定或解锁服务标识的 API 密钥
对于表示服务标识身份的 API 密钥,可以通过锁定 API 密钥来防止将其删除。 锁定的API密钥在用户界面中用 锁定 图标 表示。 要锁定服务标识的 API 密钥,请使用以下命令:
ibmcloud iam service-api-key-lock (APIKEY_NAME|APIKEY_UUID) (SERVICE_ID_NAME|SERVICE_ID_UUID) [-f, --force]
- 先决条件
- 端点,登录,目标
命令选项:
- APIKEY_NAME(必填)
- API 密钥的名称,与 APIKEY_UUID 互斥
- APIKEY_UUID(必填)
- API 密钥的 UUID,与 APIKEY_NAME 互斥
- SERVICE_ID_NAME(必需)
- 服务标识的名称,与 SERVICE_ID_UUID 互斥
- SERVICE_ID_UUID(必填)
- 服务标识的 UUID,与 SERVICE_ID_NAME 互斥
- -f, --force
- 锁定而不确认
示例:
锁定服务标识 sample-key
的服务 API 密钥 sample-service
:
ibmcloud iam service-api-key-lock sample-key sample-service
要解锁服务标识的 API 密钥,请使用以下命令:
ibmcloud iam service-api-key-unlock (APIKEY_NAME|APIKEY_UUID) (SERVICE_ID_NAME|SERVICE_ID_UUID) [-f, --force]
删除服务标识的 API 密钥
可以删除与服务标识关联的 API 密钥。 但是,删除应用程序使用的API密钥,该应用程序将无法再使用您的服务进行身份验证。
- 在 IBM Cloud 控制台中,转至 管理 > 访问权 (IAM),然后选择 服务标识。
- 如果您还没有创建服务ID,请创建服务ID。
- 单击 操作 图标
> 管理服务标识。
- 单击 API 密钥。
- 单击 操作 图标
> 删除。
如果未创建服务标识,但您是 IAM 身份服务的帐户所有者或管理员,那么可以删除帐户中任何服务标识的 API 密钥。 转至“API 密钥”页面,然后在 视图 菜单中选择 所有服务标识 API 密钥 选项以查找要使用的 API 密钥。
使用 CLI 删除服务标识的 API 密钥
可以删除与服务标识关联的 API 密钥。 但是,删除应用程序使用的API密钥,该应用程序将无法再使用您的服务进行身份验证。 要使用 CLI 删除服务 ID 的 API 密钥,您可以使用 ibmcloud iam service-api-key-delete 命令。
ibmcloud iam service-api-key-delete NAME SERVICE_ID [-f, --force]
使用 API 为服务标识创建 API 密钥
要创建服务标识 API 密钥,请调用 IAM Identity Service API,如以下示例中所示。
curl -X POST 'https://iam.cloud.ibm.com/v1/apikeys' -H 'Authorization: Bearer TOKEN' -H 'Content-Type: application/json' -d '{
"name": "Service-apikey",
"description": "my service key",
"iam_id": "IBMid-123WEREW",
"account_id": "ACCOUNT_ID"
"store_value": false
}'
CreateApiKeyOptions createApiKeyOptions = new CreateApiKeyOptions.Builder()
.name(apiKeyName)
.iamId(iamId)
.description("Example ApiKey")
.build();
Response<ApiKey> response = service.createApiKey(createApiKeyOptions).execute();
ApiKey apiKey = response.getResult();
apikeyId = apiKey.getId();
System.out.println(apiKey.toString());
const params = {
name: apikeyName,
iamId: iamId,
description: 'Example ApiKey',
};
iamIdentityService.createApiKey(params)
.then(res => {
apikeyId = res.result.id
console.log(JSON.stringify(res.result, null, 2));
})
.catch(err => {
console.warn(err);
});
api_key = iam_identity_service.create_api_key(
name=apikey_name,
iam_id=iam_id
).get_result()
apikey_id = api_key['id']
print(json.dumps(api_key, indent=2))
createAPIKeyOptions := iamIdentityService.NewCreateAPIKeyOptions(apikeyName, iamID)
createAPIKeyOptions.SetDescription("Example ApiKey")
apiKey, response, err := iamIdentityService.CreateAPIKey(createAPIKeyOptions)
if err != nil {
panic(err)
}
b, _ := json.MarshalIndent(apiKey, "", " ")
fmt.Println(string(b))
apikeyID = *apiKey.ID
使用 API 更新服务标识的 API 密钥
要使用 API 编辑服务标识的 API 密钥,请调用 IAM Identity Service API,如以下示例中所示:
curl -X PUT 'https://iam.cloud.ibm.com/v1/apikeys/APIKEY_UNIQUE_ID' -H 'Authorization: Bearer TOKEN' -H 'If-Match: <value of etag header from GET request>' -H 'Content-Type: application/json' -d '{
"name": "Service-apikey",
"description": "my service key"
}'
UpdateApiKeyOptions updateApiKeyOptions = new UpdateApiKeyOptions.Builder()
.id(apikeyId)
.ifMatch(apikeyEtag)
.description("This is an updated description")
.build();
Response<ApiKey> response = service.updateApiKey(updateApiKeyOptions).execute();
ApiKey apiKey = response.getResult();
System.out.println(apiKey.toString());
const params = {
id: apikeyId,
ifMatch: apikeyEtag,
description: 'This is an updated description',
};
iamIdentityService.updateApiKey(params)
.then(res => {
console.log(JSON.stringify(res.result, null, 2));
})
.catch(err => {
console.warn(err);
});
api_key = iam_identity_service.update_api_key(
id=apikey_id,
if_match=apikey_etag,
description='This is an updated description'
).get_result()
print(json.dumps(api_key, indent=2))
updateAPIKeyOptions := iamIdentityService.NewUpdateAPIKeyOptions(apikeyID, apikeyEtag)
updateAPIKeyOptions.SetDescription("This is an updated description")
apiKey, response, err := iamIdentityService.UpdateAPIKey(updateAPIKeyOptions)
if err != nil {
panic(err)
}
b, _ := json.MarshalIndent(apiKey, "", " ")
fmt.Println(string(b))
使用 API 锁定和解锁服务标识的 API 密钥
对于表示服务标识身份的 API 密钥,可以通过锁定 API 密钥来防止将其删除。
锁定 API 密钥
要使用 API 锁定服务标识的 API 密钥,请调用 IAM Identity Service API,如以下示例中所示:
curl -X POST 'https://iam.cloud.ibm.com/v1/apikeys/APIKEY_UNIQUE_ID/lock' -H 'Authorization: Bearer TOKEN' -H 'Content-Type: application/json'
LockApiKeyOptions lockApiKeyOptions = new LockApiKeyOptions.Builder()
.id(apikeyId)
.build();
service.lockApiKey(lockApiKeyOptions).execute();
const params = {
id: apikeyId,
};
iamIdentityService.lockApiKey(params)
.then(res => {
console.log(JSON.stringify(res.result, null, 2));
})
.catch(err => {
console.warn(err);
});
response = iam_identity_service.lock_api_key(id=apikey_id)
print(response)
lockAPIKeyOptions := iamIdentityService.NewLockAPIKeyOptions(apikeyID)
response, err := iamIdentityService.LockAPIKey(lockAPIKeyOptions)
if err != nil {
panic(err)
}
解锁 API 密钥
要使用 API 解锁服务标识的 API 密钥,请调用 IAM Identity Service API,如以下示例中所示:
curl -X DELETE 'https://iam.cloud.ibm.com/v1/serviceids/SERVICE_ID_UNIQUE_ID/lock' -H 'Authorization: Bearer TOKEN' -H 'Content-Type: application/json'
UnlockServiceIdOptions unlockServiceIdOptions = new UnlockServiceIdOptions.Builder()
.id(svcId)
.build();
service.unlockServiceId(unlockServiceIdOptions).execute();
const params = {
id: svcId,
};
iamIdentityService.unlockServiceId(params)
.then(res => {
console.log(JSON.stringify(res.result, null, 2));
})
.catch(err => {
console.warn(err);
done(err);
});
response = iam_identity_service.unlock_service_id(id=svc_id)
print(response)
unlockServiceIDOptions := iamIdentityService.NewUnlockServiceIDOptions(svcID)
response, err := iamIdentityService.UnlockServiceID(unlockServiceIDOptions)
if err != nil {
panic(err)
}
使用 API 删除服务标识的 API 密钥
要使用 API 删除服务标识的 API 密钥,请调用 IAM Identity Service API,如以下示例中所示:
curl -X DELETE 'https://iam.cloud.ibm.com/v1/apikeys/APIKEY_UNIQUE_ID' -H 'Authorization: Bearer TOKEN' -H 'Content-Type: application/json'
DeleteApiKeyOptions deleteApiKeyOptions = new DeleteApiKeyOptions.Builder()
.id(apikeyId)
.build();
service.deleteApiKey(deleteApiKeyOptions).execute();
const params = {
id: apikeyId,
};
iamIdentityService.deleteApiKey(params)
.then(res => {
console.log(JSON.stringify(res.result, null, 2));
})
.catch(err => {
console.warn(err);
});
delete_api_key(self,
id: str,
**kwargs
) -> DetailedResponse
response = iam_identity_service.delete_api_key(id=apikey_id)
print(response)
deleteAPIKeyOptions := iamIdentityService.NewDeleteAPIKeyOptions(apikeyID)
response, err := iamIdentityService.DeleteAPIKey(deleteAPIKeyOptions)
if err != nil {
panic(err)
}
准备工作
在可以使用 Terraform 管理服务标识 API 密钥之前,请确保已完成以下操作:
- 安装 Terraform CLI 并为 Terraform 配置 IBM Cloud 提供程序插件。 有关更多信息,请参阅 Terraform on IBM Cloud®入门 教程。 该插件对用于完成此任务的 IBM Cloud API 进行抽象。
- 创建一个名为
main.tf
的Terraform配置文件。 在此文件中,您使用 HashiCorp 配置语言来定义资源。 有关更多信息,请参阅 Terraform 文档。
使用 Terraform 为服务标识创建 API 密钥
使用以下步骤通过 Terraform 为服务标识创建 API 密钥。
-
在
main.tf
文件中创建自变量。 以下示例使用ibm_iam_service_api_key
资源为服务标识创建 API 密钥,其中name
是用于标识服务 API 密钥的唯一名称。 您必须需要服务的 IAM 标识才能完成该任务。resource "ibm_iam_service_id" "serviceID" { name = "servicetest" } resource "ibm_iam_service_api_key" "testacc_apiKey" { name = "testapikey" iam_service_id = ibm_iam_service_id.serviceID.iam_id }
有关更多信息,请参阅 Terraform Identity and Access Management(IAM) 页面上的参数参考详细信息。
-
完成构建配置文件后,初始化 Terraform CLI。 有关更多信息,请参阅 初始化工作目录。
terraform init
-
从
main.tf
文件供应资源。 有关更多信息,请参阅 使用 Terraform 供应基础架构。-
运行
terraform plan
以生成 Terraform 执行计划来预览建议的操作。terraform plan
-
运行
terraform apply
以创建计划中定义的资源。terraform apply
-
使用 Terraform 更新服务标识的 API 密钥
使用以下步骤通过 Terraform 更新服务标识的 API 密钥:
-
在
main.tf
文件中创建自变量。 您可以通过向以下示例中的name
和iam_service_id
选项添加新值来更新服务标识的 API 密钥。resource "ibm_iam_service_id" "serviceID" { name = "servicetest" } resource "ibm_iam_service_api_key" "testacc_apiKey" { name = "testapikey" iam_service_id = ibm_iam_service_id.serviceID.iam_id }
有关更多信息,请参阅 Terraform Identity and Access Management(IAM) 页面上的参数参考详细信息。
-
完成构建配置文件后,初始化 Terraform CLI。 有关更多信息,请参阅 初始化工作目录。
terraform init
-
从
main.tf
文件供应资源。 有关更多信息,请参阅 使用 Terraform 供应基础架构。-
运行
terraform plan
以生成 Terraform 执行计划来预览建议的操作。terraform plan
-
运行
terraform apply
以创建计划中定义的资源。terraform apply
-
使用 Terraform 删除服务标识的 API 密钥
您必须已使用 Terraform 文件为服务标识创建 API 密钥。 使用以下步骤通过 Terraform 删除服务标识的 API 密钥。
-
以下示例显示如何删除服务标识的 API 密钥。
resource "ibm_iam_service_id" "serviceID" { name = "servicetest" } resource "ibm_iam_service_api_key" "testacc_apiKey" { name = "testapikey" iam_service_id = ibm_iam_service_id.serviceID.iam_id }
有关更多信息,请参阅 Terraform Identity and Access Management(IAM) 页面上的参数参考详细信息。
-
完成构建配置文件后,初始化 Terraform CLI。 有关更多信息,请参阅 初始化工作目录。
terraform init
-
从
main.tf
文件供应资源。 有关更多信息,请参阅 使用 Terraform 供应基础架构。-
运行
terraform plan
以生成 Terraform 执行计划来预览建议的操作。terraform plan
-
运行
terraform apply
以创建计划中定义的资源。terraform apply
-