IBM Cloud Docs
管理用户 API 密钥

管理用户 API 密钥

联合用户或非联合用户均可创建一个API密钥,用于CLI或自动化登录。 您可以使用控制台、CLI 或 API 管理您的 IBM Cloud® 密钥,包括列出密钥、创建密钥、更新密钥或删除密钥。

API 密钥将继承为其创建 API 密钥的用户身份的所有已分配访问权,并且该访问权不仅限于创建 API 密钥的帐户,因为它将继承分配给该用户的任何策略。 因此,如果用户有权访问来自多个帐户的资源,那么 API 密钥将继承来自所有帐户的访问权。 因此,可以使用用户的 API 密钥来生成令牌和访问资源,用户可以在创建 API 密钥的帐户外部访问这些资源。

与您的用户身份关联的API密钥拥有您有权访问的所有账户。 因此,在使用API密钥时必须谨慎。 例如,IBM Cloud 服务可能需要代表未启用 IAM-enabled 的用户或访问服务,因此该服务可能会请求用户 API 密钥。 在这些情况下,创建与功能标识关联的 API 密钥,该功能标识被分配为使用服务所需的最低访问级别。

功能标识是为了表示程序,应用程序或服务而创建的用户标识。 可以邀请功能标识加入帐户,并仅为特定用途 (例如,与特定资源或应用程序进行交互) 分配访问权。 应该仅授予功能标识在为其创建功能的特定功能所需的单个帐户中的最低级别访问权。

如果要应用可信概要文件,那么无法创建用户 API 密钥。 您仍可以创建和管理所有其他 API 密钥。 例如,服务标识 API 密钥。 欲了解更多信息,请参阅 有关IAM的常见问题解答

管理用户 API 密钥

要管理与您的用户身份相关联的 IBM Cloud API 密钥或您有权为帐户中的其他用户管理的 API 密钥,请转至 IBM Cloud 控制台中的 管理 > 访问 (IAM) > API 密钥。 在API密钥页面,您可以为自己创建、编辑或删除 IBM Cloud API密钥。 您还可以管理用户层级中您作为祖先的所有 经典基础设施API密钥。 此外,如果您是帐户所有者或分配了必需访问权来管理帐户中其他用户的 API 密钥的用户,那么还可以使用 视图 过滤器来列出和管理这些 API 密钥。

API 密钥页面上的 API 密钥管理所需访问权限
过滤器选项 显示的 API 密钥 必需的访问权 允许的操作
我的 IBM Cloud API密钥 您的 IBM Cloud API密钥 不需要访问权 查看,创建,编辑和删除
所有用户 IBM Cloud API 密钥 帐户中所有用户创建的所有 IBM Cloud API 密钥 IAM 身份服务上的管理员角色 查看,编辑和删除

在控制台中创建 API 密钥

作为 IBM Cloud 用户,您可能希望在启用程序或脚本时使用 API 密钥,而不将密码分发到脚本。 使用 API 密钥的好处是用户或组织可以为不同的程序创建多个 API 密钥。 如果 API 密钥受到损害,那么可以独立删除 API 密钥,而不会干扰其他 API 密钥甚至用户。 您最多可以创建 20 个 API 密钥。

要在 UI 中为您的用户身份创建 API 密钥,请完成以下步骤:

  1. 在 IBM Cloud 控制台中,转至 管理 > 访问权 (IAM) > API 密钥
  2. 单击创建 IBM Cloud API 密钥
  3. 为 API 密钥输入名称和描述。
  4. 单击创建
  5. 然后,单击显示,以显示 API 密钥。 或者,单击复制以复制并保存该密钥供日后使用,或单击下载

出于安全原因,API 密钥仅在创建时才可复制或下载。 如果 API 密钥丢失,必须创建新的 API 密钥。

使用 CLI 创建 API 密钥

要使用 CLI 创建 API 密钥,请使用以下命令:

  1. 输入 ibmcloud iam api-key-create NAME [-d DESCRIPTION] [-f, --file FILE] [--action-if-leaked VALUE],并指定一个名称、描述和文件,用于保存您的密钥。 请参阅以下示例:
ibmcloud iam api-key-create MyKey -d "this is my API key" --file key_file --action-if-leaked "DELETE"

对于 --action-if-leaked,可能的值为“无”、“禁用”或“删除”。 默认操作是“禁用”。

  • 禁用:禁用密钥会立即阻止其验证和访问服务的能力。 如有必要,您可以稍后重新启用该按键。
  • 删除: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": "My-apikey",
  "description": "my personal key",
  "iam_id": "IBMid-123WEREW",
  "account_id": "ACCOUNT_ID"
  "store_value": false
  "action_when_leaked": "delete"
  "support_sessions": 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

对于 action_when_leaked,可能的值为“无”、“禁用”或“删除”。 默认操作是“禁用”。

  • 禁用:禁用密钥会立即阻止其验证和访问服务的能力。 如有必要,您可以稍后重新启用该按键。
  • 删除:API密钥将从您的账户中永久删除,不能再用于身份验证。 无法撤销此操作。
  • 无: 密钥仍然可用,仍可用于访问资源。

对于 support_sessions,请定义您是否可以管理API密钥的CLI登录会话:

  • true: 为该API密钥创建登录会话,您可以通过查看或撤销会话来管理这些会话。 更多信息,请参阅 监控您的登录会话
  • 错误:未创建或跟踪任何会话。 您无法撤销或审查任何登录信息,必须删除或轮换API密钥本身才能阻止访问。

准备工作

在使用Terraform管理用户API密钥之前,请确保完成以下步骤:

  • 安装 Terraform CLI 并为 Terraform 配置 IBM Cloud 提供程序插件。 有关更多信息,请参阅 Terraform on IBM Cloud®入门 教程。 该插件对用于完成此任务的 IBM Cloud API 进行抽象。
  • 创建一个名为 main.tf 的Terraform配置文件。 在此文件中,您使用 HashiCorp 配置语言来定义资源。 有关更多信息,请参阅 Terraform 文档

使用Terraform创建API密钥

使用以下步骤通过 Terraform 创建访问组。

  1. main.tf 文件中创建自变量。 以下示例使用 ibm_iam_api_key 资源创建访问组,其中 name 是用于标识 API 密钥的唯一名称。

    resource "ibm_iam_api_key" "iam_api_key" {
     name        = "test1234"
    }
    

    仅当在 API 密钥创建期间提供了描述时,description 属性才可用。 有关更多信息,请参阅 Terraform Identity and Access Management(IAM) 页面上的参数参考详细信息。

  2. 完成构建配置文件后,初始化 Terraform CLI。 有关更多信息,请参阅 初始化工作目录

    terraform init
    
  3. main.tf 文件供应资源。 有关更多信息,请参阅 使用 Terraform 供应基础架构

    1. 运行 terraform plan 以生成 Terraform 执行计划来预览建议的操作。

      terraform plan
      
    2. 运行 terraform apply 以创建计划中定义的资源。

      terraform apply
      

在控制台中更新API密钥

如果要更改 API 密钥的名称或描述,请在 UI 或 CLI 中完成以下步骤。

要编辑 API 密钥,请完成以下步骤:

  1. 在 IBM Cloud 控制台中,转至 管理 > 访问权 (IAM) > API 密钥
  2. 标识要更新的 API 密钥行,然后单击 操作 图标 "操作" 图标 > 编辑
  3. 更新 API 密钥的信息。
  4. 单击应用

要编辑不是您自己的 API 密钥,但您有权进行管理,请转至 API 密钥页面。 然后,从 视图 菜单中选择 所有用户 IBM Cloud API 密钥 选项以查找 API 密钥。

使用CLI更新API密钥

要使用 CLI 编辑 API 密钥,请输入以下命令:

  1. 输入 ibmcloud iam api-key-update NAME [-n NAME] [-d DESCRIPTION],并指定旧名称、新名称和钥匙的新描述。 更多信息,请参见以下示例:
ibmcloud iam api-key-update MyCurrentName -n MyNewName -d "the new description of my key"

使用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": "My-apikey",
  "description": "my personal 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))

使用 Terraform 更新 API 密钥

使用以下步骤通过 terraform 更新 API 密钥:

  1. 在 Terraform 配置 main.tf 文件中,找到用于创建 iam_api_key 的 Terraform 代码。

  2. 以下示例使用 ibm_iam_api_key 资源更新和 API 密钥,其中 name 是用于标识 API 密钥的唯一名称。

    resource "ibm_iam_api_key" "iam_api_key" {
     name        = "test1234"
     description = "API key for users"
    }
    

    仅当在 API 密钥创建期间提供了描述时,description 属性才可用。 有关更多信息,请参阅 Terraform Identity and Access Management(IAM) 页面上的参数参考详细信息。

  3. main.tf 文件供应资源。 有关更多信息,请参阅 使用 Terraform 供应基础架构

    1. 运行 terraform plan 以生成 Terraform 执行计划来预览建议的操作。

      terraform plan
      
    2. 运行 terraform apply 以创建计划中定义的资源。

      terraform apply
      

有关更多信息,请参阅 Terraform 文档

在控制台中锁定和解锁API密钥

对于表示您用户身份的平台 API 密钥,可以通过锁定 API 密钥来防止将其删除。 锁定的API密钥带有锁定图标 锁定图标

  1. 在 IBM Cloud 控制台中,转至 管理 > 访问权 (IAM) > API 密钥
  2. 标识要锁定的 API 密钥行,然后单击 操作 图标 "操作" 图标 > 锁定

您可以随时解锁 API 密钥以更新 API 密钥,也可以随时从帐户中除去 API 密钥。 从表中选择要解锁的 API 密钥,然后单击 操作 图标 "操作" 图标 > 解锁

使用 CLI 锁定和解锁 API 密钥

对于表示您用户身份的平台 API 密钥,可以通过锁定 API 密钥来防止将其删除。 要锁定 API 密钥,请使用以下命令:

ibmcloud iam api-key-lock (NAME|UUID) [-f, --force]

先决条件:端点和登录

命令选项

NAME(必需)
要锁定的API密钥的名称,与UUID唯一对应。
UUID(必填)
要锁定的API密钥的UUID,与名称唯一对应。
-f, --force
强制锁定而不确认。

示例

锁定 API 密钥 test-api-key

ibmcloud iam api-key-lock test-api-key

要解锁 API 密钥,请运行以下命令:

ibmcloud iam api-key-unlock (NAME|UUID) [-f, --force]

先决条件:端点和登录

命令选项

NAME(必需)
要解锁的 API 密钥的名称,与 UUID 互斥。
UUID(必填)
要解锁的 API 密钥的 UUID,与 NAME 互斥。
-f, --force
强制解锁而不确认。

示例

解锁 API 密钥 test-api-key

ibmcloud iam api-key-unlock test-api-key

使用API锁定和解锁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);
  });
lock_api_key(self,
        id: str,
        **kwargs
    ) -> DetailedResponse

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/apikeys/APIKEY_UNIQUE_ID/lock' -H 'Authorization: Bearer TOKEN' -H 'Content-Type: application/json'
UnlockApiKeyOptions unlockApiKeyOptions = new UnlockApiKeyOptions.Builder()
    .id(apikeyId)
    .build();

service.unlockApiKey(unlockApiKeyOptions).execute();
const params = {
  id: apikeyId,
};

iamIdentityService.unlockApiKey(params)
  .then(res => {
    console.log(JSON.stringify(res.result, null, 2));
  })
  .catch(err => {
    console.warn(err);
  });
response = iam_identity_service.unlock_api_key(id=apikey_id)

print(response)
unlockAPIKeyOptions := iamIdentityService.NewUnlockAPIKeyOptions(apikeyID)

response, err := iamIdentityService.UnlockAPIKey(unlockAPIKeyOptions)
if err != nil {
  panic(err)
}

使用Terraform锁定和解锁API密钥

对于表示您用户身份的平台 API 密钥,可以通过锁定 API 密钥来防止将其删除。

使用 Terraform 锁定 API 密钥

使用以下步骤通过 Terraform 锁定 API 密钥:

  1. 在 Terraform 配置 main.tf 文件中,找到用于创建 iam_api_key 的 Terraform 代码。

  2. 以下示例使用 ibm_iam_api_key 资源更新和 API 密钥,其中 entity_lock 指示是否锁定 API 密钥以执行进一步的写操作。 缺省值为 false

    resource "ibm_iam_api_key" "iam_api_key" {
     entity_lock        = "true"
    }
    
  3. main.tf 文件供应资源。 有关更多信息,请参阅 使用 Terraform 供应基础架构

    1. 运行 terraform plan 以生成 Terraform 执行计划来预览建议的操作。

      terraform plan
      
    2. 运行 terraform apply 以创建计划中定义的资源。

      terraform apply
      

有关更多信息,请参阅 Terraform 文档

删除 API 密钥

如果使用的是密钥轮替策略,那么您可能会希望删除较旧的密钥,而将其替换为新密钥。

要删除 API 密钥,请完成以下步骤:

  1. 在 IBM Cloud 控制台中,转至 管理 > 访问权 (IAM) > API 密钥
  2. 标识要删除的 API 密钥行,然后单击 操作 图标 "操作" 图标 > 删除
  3. 然后,通过单击删除来确认删除操作。

要删除不是您自己的 API 密钥,但您有权进行管理,请转至 API 密钥页面。 然后,从 视图 菜单中选择 所有用户 IBM Cloud API 密钥 选项以查找 API 密钥。

使用CLI删除API密钥

要使用 CLI 删除 API 密钥,请执行以下操作:

输入 ibmcloud iam api-key-delete NAME,并指定要删除的密钥名称。

使用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)
}