IBM Cloud Docs
将服务与应用程序连接起来

将服务与应用程序连接起来

通过生成一组新的服务凭证,将您的应用程序或第三方工具连接到 IBM Cloud 服务。 这些证书可以作为您的应用程序(无论是托管在 IBM Cloud® 还是外部平台,如 AWS )与要使用的 IBM Cloud® 服务之间的桥梁。 例如,如果您要将 AWS 托管的应用程序与 watsonx Assistant 集成,您将生成一个服务凭证,用于提供必要的访问权限。 然后,您可以将其添加到应用程序的配置中,以建立连接。

要在应用程序中添加凭证,请参阅您正在使用的应用程序或计算选项类型的文档。

创建服务凭证

2025 年 8 月 4 日之后创建的凭据默认为一次性查看,因此请确保安全保存。 现有凭证的一次性查看属性不受影响。 更多信息,请参阅 一次性凭证

由 IBM Cloud Identity and Access Management (IAM) 管理的服务可以生成资源密钥,该密钥也称为凭证。 凭证是特定于服务的,其内容取决于每个服务对自己需要生成的凭证的定义。 凭证可能包含用户名、密码、主机名、端口和 URL,但每个凭证的内容对于生成它的服务来说是唯一的。

某些服务可能会生成需要传入参数的额外数据。 例如,服务可能会要求您输入语言参数来设置生成的资源密钥中返回的缺省语言。

为服务添加证书:

请完成以下步骤,为服务添加凭证:

  1. 资源列表中选择服务名称,打开服务详细信息页面。

  2. 单击服务凭证

  3. 选中“一次性查看”设置,该设置决定以后是否可以检索资源键值。

    1. 根据使用情况设置为开 或关。 资源实例上具有管理员角色的用户可以使用 资源控制器 API 管理此设置。

      设置为“开启”,通过防止共享访问凭证,帮助确保符合 PCI DSS 等安全最佳实践和法规。

  4. 单击创建凭证

  5. 输入名称

  6. 分配一个IAM服务访问角色。 有关角色的更多信息,请参阅 IBM Cloud IAM 角色

    1. 如果您想通过将新的或现有的服务ID与服务凭证关联来管理访问权限,请指定 None,以便为新凭证分配任何角色。
  7. (可选)选择现有服务 ID 或创建新服务 ID,以便与凭证关联。 这样,您就可以直接在IAM中管理访问权限,方法是依次点击管理 > 访问(IAM)> 服务ID。 有关更多信息,请参阅创建和使用服务标识

    对于具有更精细粒度资源访问权限的服务,您可能希望使用服务 ID 仅授予对子资源的访问权限,例如 Object Storage 存储桶。

  8. 单击“高级”选项,以有效 JSON 对象的形式提供更多参数,该对象包含特定于服务的配置参数,可在内联或文件中提供。

    大多数服务不需要额外参数;对于需要额外参数的服务,每个服务都会定义自己的唯一参数列表。 有关支持的配置参数列表,请参阅特定服务的文档。

  9. 单击“**创建 **”生成新的服务证书。

    服务证书只读。 用户可以复制或下载证书。

  10. 如果证书设置为一次性查看,则无法再次查看。

  11. 展开您的新服务凭证的详细信息。 复制您的应用程序或外部消费者所需的凭据属性。 例如,API密钥或密码和 URL。

使用应用程序接口创建服务证书

2025 年 8 月 4 日之后创建的凭据默认为一次性查看,因此请确保安全保存。 现有凭证的一次性查看属性不受影响。 更多信息,请参阅 一次性凭证

IBM Cloud 服务可以生成资源密钥,也称为凭证。 凭证是特定于服务的,其内容取决于每个服务对自己需要生成的凭证的定义。 凭证可能包含用户名、密码、主机名、端口和 URL,但每个凭证的内容对于生成它的服务来说是唯一的。

某些服务可能会生成需要传入参数的额外数据。 例如,服务可能会要求您输入语言参数来设置生成的资源密钥中返回的缺省语言。

您可以为 IBM Cloud 服务生成的新凭据分配IAM服务访问角色。 此角色允许访问整个服务实例,而非特定资源。 对于具有更精细粒度资源访问权限的服务,您可能希望仅授予子资源访问权限,例如 Object Storage 存储桶。 在这种情况下,请不要为新证书分配任何角色。 这样,您就可以通过将凭证与服务ID关联来管理细粒度访问,并创建一个IAM策略,将其应用于特定资源,例如存储桶。 为此,请前往管理 > 访问(IAM)> 服务ID。 选择与服务凭证密钥同名的服务ID,然后点击 “分配访问权限”。

要创建资源密钥,请调用 资源控制器 API,如以下示例中所示:

curl -X POST https://resource-controller.cloud.ibm.com/v2/resource_keys -H 'Authorization: Bearer <IAM_TOKEN>' -H 'Content-Type: application/json' -d '{
  "name": "my-instance-key-1",
  "source": "267bf377-7fa2-43f6-94ec-09103a8e89d4",
  "role": "Writer"
}'
ResourceKeyPostParameters parameters = new ResourceKeyPostParameters.Builder()
  .add("exampleParameter", "exampleValue")
  .build();
CreateResourceKeyOptions createResourceKeyOptions = new CreateResourceKeyOptions.Builder()
  .name(keyName)
  .source(instanceGuid)
  .parameters(parameters)
  .build();

Response<ResourceKey> response = service.createResourceKey(createResourceKeyOptions).execute();
ResourceKey resourceKey = response.getResult();

System.out.printf("createResourceKey() response:\n%s\n", resourceKey.toString());
const parameters = {
  'exampleParameter': 'exampleValue'
};

const params = {
  name: keyName,
  source: instanceGuid,
  parameters: parameters,
};

resourceControllerService.createResourceKey(params)
  .then(res => {
    instanceKeyGuid = res.result.guid;
    console.log('createResourceKey() response:\n' + JSON.stringify(res.result, null, 2));
  })
  .catch(err => {
    console.warn(err)
  });
parameters = {
    'exampleParameter': 'exampleValue'
}
resource_key = resource_controller_service.create_resource_key(
    name=key_name,
    source=instance_guid,
    parameters=parameters
).get_result()

print('\ncreate_resource_key() response:\n',
      json.dumps(resource_key, indent=2))
createResourceKeyOptions := resourceControllerService.NewCreateResourceKeyOptions(
  keyName,
  instanceGUID,
)

parameters := &resourcecontrollerv2.ResourceKeyPostParameters{}
parameters.SetProperty("exampleParameter", "exampleValue")
createResourceKeyOptions.SetParameters(parameters)

resourceKey, response, err := resourceControllerService.CreateResourceKey(createResourceKeyOptions)
if err != nil {
  panic(err)
}
b, _ := json.MarshalIndent(resourceKey, "", "  ")
fmt.Printf("\nCreateResourceKey() response:\n%s\n", string(b))

使用 API 密钥或其他凭证属性将服务实例连接到您的应用程序或其他外部使用者。

使用Terraform创建服务凭证

2025 年 8 月 4 日之后创建的凭据默认为一次性查看,因此请确保安全保存。 现有凭证的一次性查看属性不受影响。 更多信息,请参阅 一次性凭证

凭据可能包含用户名、密码、主机名、端口和 URL,但每个凭据的内容对于生成 it.Before 的服务而言都是独一无二的,您可以使用 Terraform 创建凭据,将应用程序或外部消费者连接到 IBM Cloud 服务,请确保您已完成以下操作:

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

请按照以下步骤创建一个凭证,用于将您的应用程序或外部消费者连接到 IBM Cloud 服务:

  1. main.tf 文件中创建自变量。 以下示例通过使用 ibm_resource_instance 资源为没有服务标识的资源创建凭证,其中 name 是用于标识凭证的唯一名称。

    data "ibm_resource_instance" "resource_instance" {
     name = "myobjectsotrage"
    }
    
    resource "ibm_resource_key" "resourceKey" {
     name                 = "myobjectkey"
     role                 = "Viewer"
     resource_instance_id = data.ibm_resource_instance.resource_instance.id
    
     //User can increase timeouts
     timeouts {
       create = "15m"
      delete = "15m"
     }
    }
    

    缺省情况下,ibm_resource_key 资源会创建使用服务的公共服务端点的服务凭证

    您可以指定与资源组实例关联的 tags。 有关更多信息,请参阅“Terraform 资源管理”页面上的参数参考详细信息。

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

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

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

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

      terraform apply
      

使用 API 密钥或其他凭证属性将服务实例连接到您的应用程序或其他外部使用者。

使用 Terraform 查看证书

只有在 onetime_credentialsfalse 的情况下,您才能在创建证书后检索该证书。 在资源实例上具有以下访问权限的用户可以查看 onetime_credentials 配置为 false 的凭据的服务密钥值。

  • 对服务实例的访问权限等于或大于服务凭证访问权限的用户。 更多信息,请参阅 凭证级别访问
  • 服务实例上具有管理员角色的用户
  • 具有 IAM 操作的用户 resource-controller.credential.retrieve_all。 该操作由管理员角色提供。

要查看某个服务的现有服务凭证,请完成以下步骤:

  1. main.tf 文件中创建自变量。 下面的示例检索了一个资源的现有凭证。 更多信息,请参阅 ibm_resource_key Terraform 文档

    data "ibm_resource_key" "resourceKeydata" {
      name                  = "myobjectKey"
      resource_instance_id  = ibm_resource_instance.resource.id
    }
    
  2. 完成构建配置文件后,初始化 Terraform CLI。 有关更多信息,请参阅 初始化工作目录

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

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

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

      terraform apply
      

一次性证书

资源实例有一个 onetime_credentials 属性,用于确定为该实例创建的凭证是否为一次性视图。 创建时的实例设置决定了每个凭证的属性设置方式,以后不能更改。

  • 如果该属性设置为 false,则有访问权限的用户可随时检索凭据。 有关检索凭证的更多信息,请参阅 ibm_resource_key Terraform 文档

  • 如果该属性设置为 true,则只能在创建时查看证书

    在应用程序中使用秘密管理器、密码管理器或安全存储(如 Object Storage ),安全地保存一次性查看凭据,以防丢失。

启用服务实例的一次性视图,以符合最小权限模式,避免共享访问凭证。 共享密钥会导致难以审计账户中的身份如何访问资源。

管理资源实例的一次性视图设置

服务实例上具有管理员角色或 IAM 操作 resource-controller.instance.update_onetime_credential_off 的用户可以管理资源实例的一次性视图设置。

 {
      "displayName": {
        "default": "Resource Instance Update Onetime Credential Off"
      },
      "description": {
        "default": "The ability to change onetime_credential from On to Off for existing instances."
      },
      "id": "resource-controller.instance.update_onetime_credential_off",
      "roles": [
        "crn:v1:bluemix:public:iam::::role:Administrator"
      ],
      "apiTypes": [
        "crn:v1:bluemix:public:context-based-restrictions::::platform-api-type:resource-management"
      ]
    }

更多信息,请参阅 ibm_resource_instance Terraform 文档 更新 onetime_credentials 属性。 更改实例设置时,现有凭证将保留创建时的设置。

凭证级别访问权

用户的访问权限必须等于或大于服务证书的访问权限。 例如,如果凭据具有 IAM 服务角色 Writer,那么试图查看凭据的用户必须具有为该特定服务分配的 IAM 服务角色 WriterManager。 如果用户没有正确的访问权限,API 密钥值等详细信息就会被编辑:

    "credentials": {
        "REDACTED": "REDACTED"
    },

IAM 级别访问权

当无法通过比较用户和凭证的访问权来确定凭证级别访问权时,将编辑凭证:

    "credentials": {
        "REDACTED": "REDACTED_EXPLICIT"
    },

查看凭证

onetime_credentials 配置为 false 的服务创建凭证后,需要凭证值的用户可随时查看。 不过,所有用户都必须有正确的访问级别,才能查看包含 API 密钥值的凭证详情。 只有在一次性查看功能关闭的情况下,才能在创建证书后检索该证书。 在资源实例上具有以下访问权限的用户可以查看关闭了一次性查看功能的凭证的服务密钥值。

  • 对服务实例的访问权限等于或大于服务凭证访问权限的用户。 更多信息,请参阅 凭证级别访问
  • 服务实例上具有管理员角色的用户。
  • 具有 IAM 操作的用户 resource-controller.credential.retrieve_all。 该操作由管理员角色提供。

要查看某个服务的现有服务凭证,请完成以下步骤:

  1. 从“资源列表”页面选择服务名称,打开服务详细信息页面。
  2. 单击服务凭证
  3. 在现有凭证所在的行上展开查看凭证

一次性证书

凭据有一个 onetime_credentials 属性,用于决定是否可以在初始创建后检索和查看凭据。 如果属性为 false,则有权限的用户可以随时查看凭据值。 资源实例有一个“一次性查看”设置,用于确定为该实例创建的凭证是否为一次性查看。 一次性查看凭证只能在创建时查看和保存。 创建时的实例设置决定了每个凭证的属性设置方式,以后不能更改。

  • 如果一次性查看为“关闭”,则有访问权限的用户可随时检索凭据。

  • 如果一次性查看为“开”,则只能在创建时查看凭据。

    在应用程序中使用秘密管理器、密码管理器或安全存储(如 Object Storage ),安全地保存一次性查看凭据,以防丢失。

启用服务实例的一次性视图,以符合最小权限模式,避免共享访问凭证。 共享密钥会导致难以审计账户中的身份如何访问资源。

管理资源实例的一次性视图设置

服务实例上具有管理员角色或 IAM 操作 resource-controller.instance.update_onetime_credential_off 的用户可以管理该实例的一次性视图设置。

 {
      "displayName": {
        "default": "Resource Instance Update Onetime Credential Off"
      },
      "description": {
        "default": "The ability to change onetime_credential from On to Off for existing instances."
      },
      "id": "resource-controller.instance.update_onetime_credential_off",
      "roles": [
        "crn:v1:bluemix:public:iam::::role:Administrator"
      ],
      "apiTypes": [
        "crn:v1:bluemix:public:context-based-restrictions::::platform-api-type:resource-management"
      ]
    }

更多信息,请参阅 资源控制器 API 更新实例的 onetime_credentials 属性。 更改实例设置时,现有凭证将保留创建时的设置。

在此属性更改之前创建的现有凭证不受影响。

凭证级别访问权

用户的访问权限必须等于或大于服务证书的访问权限。 例如,如果凭证的 IAM 服务角色为Writer,那么尝试查看凭证的用户针对分配的该特定服务的 IAM 服务角色必须为WriterManager。 如果用户没有正确的访问权限,API 密钥值等详细信息就会被编辑:

    "credentials": {
        "REDACTED": "REDACTED"
    },

IAM 级别访问权

当无法通过比较用户和凭证的访问权来确定凭证级别访问权时,将编辑凭证:

    "credentials": {
        "REDACTED": "REDACTED_EXPLICIT"
    },

要查看凭证,用户必须具有 IAM 级别的访问操作 resource-controller.credential.retrieve_all。 此操作以“管理员”角色提供,并覆盖使用户能够查看凭证的任何凭证级别访问权。

使用 API 查看凭证

onetime_credentials 配置为 false 的服务创建凭证后,需要凭证值的用户可随时查看。 不过,所有用户都必须有正确的访问级别,才能查看包含 API 密钥值的凭证详情。 用户的访问权必须大于或等于该服务凭证的访问权。 例如,如果凭据具有 IAM 服务角色 Writer,那么试图查看凭据的用户必须具有为该特定服务分配的 IAM 服务角色 WriterManager。 只有在 onetime_credentialsfalse 的情况下,您才能在创建证书后检索该证书。 在资源实例上具有以下访问权限的用户可以查看 onetime_credentials 配置为 false 的凭据的服务密钥值。

  • 对服务实例的访问权限等于或大于服务凭证访问权限的用户。 更多信息,请参阅 凭证级别访问
  • 服务实例上具有管理员角色的用户。
  • 具有 IAM 操作的用户 resource-controller.credential.retrieve_all。 该操作由管理员角色提供。

要获取所有资源键的列表,请调用 资源控制器 API,如以下示例中所示:

curl -X GET https://resource-controller.cloud.ibm.com/v2/resource_keys -H 'Authorization: Bearer <IAM_TOKEN>'
ListResourceKeysOptions listResourceKeysOptions = new ListResourceKeysOptions.Builder()
  .name(keyName)
  .build();

Response<ResourceKeysList> response = service.listResourceKeys(listResourceKeysOptions).execute();
ResourceKeysList resourceKeysList = response.getResult();

System.out.printf("listResourceKeys() response:\n%s\n", resourceKeysList.toString());
const params = {
  name: keyName,
};

resourceControllerService.listResourceKeys(params)
  .then(res => {
    console.log('listResourceKeys() response:\n' + JSON.stringify(res.result, null, 2));
  })
  .catch(err => {
    console.warn(err)
  });
resource_keys_list = resource_controller_service.list_resource_keys(
    name=key_name
).get_result()

print('\nlist_resource_keys() response:\n',
      json.dumps(resource_keys_list, indent=2))
listResourceKeysOptions := resourceControllerService.NewListResourceKeysOptions()
listResourceKeysOptions = listResourceKeysOptions.SetName(keyName)

resourceKeysList, response, err := resourceControllerService.ListResourceKeys(listResourceKeysOptions)
if err != nil {
  panic(err)
}
b, _ := json.MarshalIndent(resourceKeysList, "", "  ")
fmt.Printf("\nListResourceKeys() response:\n%s\n", string(b))

示例响应:

{
  "rows_count": 1,
  "next_url": null,
  "resources": [
    {
      "id": "crn:v1:bluemix:public:cloud-object-storage:global:a/4329073d16d2f3663f74bfa955259139:8d7af921-b136-4078-9666-081bd8470d94:resource-key:23693f48-aaa2-4079-b0c7-334846eff8d0",
      "guid": "23693f48-aaa2-4079-b0c7-334846eff8d0",
      "url": "/v2/resource_keys/23693f48-aaa2-4079-b0c7-334846eff8d0",
      "created_at": "2018-07-02T22:03:43.837979455Z",
      "updated_at": "2018-07-02T22:03:43.837979455Z",
      "deleted_at": null,
      "created_by": "IBMid-5500093BHN",
      "updated_by": "IBMid-5500093BHN",
      "deleted_by": "",
      "source_crn": "crn:v1:bluemix:public:cloud-object-storage:global:a/4329073d16d2f3663f74bfa955259139:8d7af921-b136-4078-9666-081bd8470d94::",
      "role": "crn:v1:bluemix:public:iam::::serviceRole:Writer",
      "name": "my-instance-key-1",
      "parameters": {
        "role_crn": "crn:v1:bluemix:public:iam::::serviceRole:Writer"
      },
      "crn": "crn:v1:bluemix:public:cloud-object-storage:global:a/4329073d16d2f3663f74bfa955259139:8d7af921-b136-4078-9666-081bd8470d94:resource-key:23693f48-aaa2-4079-b0c7-334846eff8d0",
      "state": "active",
      "account_id": "4329073d16d2f3663f74bfa955259139",
      "resource_group_id": "0be5ad401ae913d8ff665d92680664ed",
      "resource_id": "dff97f5c-bc5e-4455-b470-411c3edbe49c",
      "onetime_credentials": false,
      "credentials": {
        "apikey": "XXXX-YYYY-ZZZZ\"",
        "endpoints": "https://cos-service-armada-s.us-south.containers.mybluemix.net/endpoints",
        "iam_apikey_description": "Auto generated apikey during resource-key operation for Instance - crn:v1:bluemix:public:cloud-object-storage:global:a/4329073d16d2f3663f74bfa955259139:8d7af921-b136-4078-9666-081bd8470d94::",
        "iam_apikey_name": "auto-generated-apikey-23693f48-aaa2-4079-b0c7-334846eff8d0",
        "iam_role_crn": "crn:v1:bluemix:public:iam::::serviceRole:Writer",
        "iam_serviceid_crn": "crn:v1:bluemix:public:iam-identity::a/4329073d16d2f3663f74bfa955259139::serviceid:ServiceId-64c29e4f-422d-468c-a11b-1a8f671b5c89",
        "resource_instance_id": "crn:v1:bluemix:public:cloud-object-storage:global:a/4329073d16d2f3663f74bfa955259139:8d7af921-b136-4078-9666-081bd8470d94::"
      },
      "iam_compatible": true,
      "migrated": false,
      "resource_instance_url": "/v2/resource_instances/8d7af921-b136-4078-9666-081bd8470d94",
      "resource_alias_url": null
    }
  ]
}

一次性证书

资源实例有一个 onetime_credentials 属性,用于确定为该实例创建的凭证是否为一次性视图。 创建时的实例设置决定了每个凭证的属性设置方式,以后不能更改。

  • 如果该属性设置为 false,则有访问权限的用户可随时检索凭据。 有关检索凭证的更多信息,请参阅 获取资源密钥 操作。

  • 如果该属性设置为 true,则只能在创建时查看凭据,因此请确保安全保存。

    在应用程序中使用秘密管理器、密码管理器或安全存储(如 Object Storage ),安全地保存一次性查看凭据,以防丢失。

启用服务实例的一次性视图,以符合最小权限模式,避免共享访问凭证。 共享密钥会导致难以审计账户中的身份如何访问资源。

管理资源实例的一次性视图设置

服务实例上具有管理员角色或 IAM 操作 resource-controller.instance.update_onetime_credential_off 的用户可以管理该实例的一次性视图设置。

 {
      "displayName": {
        "default": "Resource Instance Update Onetime Credential Off"
      },
      "description": {
        "default": "The ability to change onetime_credential from On to Off for existing instances."
      },
      "id": "resource-controller.instance.update_onetime_credential_off",
      "roles": [
        "crn:v1:bluemix:public:iam::::role:Administrator"
      ],
      "apiTypes": [
        "crn:v1:bluemix:public:context-based-restrictions::::platform-api-type:resource-management"
      ]
    }

更多信息,请参阅 资源控制器 API 更新实例的 onetime_credentials 属性。 更改实例设置时,现有凭证将保留创建时的设置。

凭证级别访问权

用户的访问权限必须等于或大于服务证书的访问权限。 例如,如果凭据具有 IAM 服务角色 Writer,那么试图查看凭据的用户必须具有为该特定服务分配的 IAM 服务角色 WriterManager。 如果用户没有正确的访问权限,API 密钥值等详细信息就会被编辑:

    "credentials": {
        "REDACTED": "REDACTED"
    },

IAM 级别访问权

当无法通过比较用户和凭证的访问权来确定凭证级别访问权时,将编辑凭证:

    "credentials": {
        "REDACTED": "REDACTED_EXPLICIT"
    },

要查看凭证,用户必须具有 IAM 级别的访问操作 resource-controller.credential.retrieve_all。 此操作以“管理员”角色提供,并覆盖使用户能够查看凭证的任何凭证级别访问权。