IBM Cloud Docs
IBM Cloud 上的 Identity and Access Management (IAM)

IBM Cloud 上的 Identity and Access Management (IAM)

利用 Identity and Access Management (IAM),您可以为平台服务进行安全的用户认证,并控制对 IBM Cloud 平台上所有资源的访问权一致性。 例如,只需用 IBM 标识单点登录到 IBM Cloud,就可以访问任何服务控制台及其应用程序,而无需逐个单独登录。

IBM Cloud IAM 的功能

针对使用两种类型受支持身份的 Db2 Warehouse on Cloud 管理的服务,实现了以下 IAM 功能:

IBMid

数据库管理员必须先通过控制台或 REST API 将具有 IBM 标识的用户添加到每个数据库服务实例中,然后这些用户才能连接到特定的数据库服务实例。 对于非IBMid 用户,必须在添加 IBMid 用户的同时输入数据库服务实例的用户标识。 此用户标识在数据库服务实例中应该是唯一的。 此用户标识也是数据库中的授权 (AUTH) 标识。 数据库管理员可以根据 AUTH 标识授予或撤销许可权。

服务标识

服务标识识别服务或应用程序的方式与用户标识识别用户的方式相似。 服务标识是可以由应用程序用于向 IBM Cloud 服务进行认证的标识。 服务标识表示不同于其所属 IBM 标识的单独实体。 因此,在数据库中,可以为特定的服务标识授予不同的权限和许可权。 服务标识没有密码。 必须为每个服务标识创建 API 密钥,该服务标识才能连接到数据库服务实例。 有关服务标识的更多信息,请参阅: IBM Cloud IAM Service 标识和 API 密钥简介在 IBM Cloud 上增加 Db2 的信息安全性

角色和操作

必须为访问帐户中 Db2 Warehouse on Cloud 服务的每个用户分配具有 IAM 角色的访问策略。 分配给帐户中用户的访问策略确定用户可以在所选服务或特定实例的上下文中执行的操作。 允许的操作由 Db2 Warehouse on Cloud 进行定制,并定义为允许对服务执行的操作。 每个操作都映射到可以分配给用户的 IAM 平台或服务角色。 如果特定角色及其操作不符合您要处理的用例,那么可以 创建定制角色 并选取要包含的操作。

有关映射到每个角色的确切操作的信息,请参阅 IAM 角色和操作Db2 Warehouse

先决条件

客户机连接和用户登录

可以使用下列方法进行 IAM 认证:

访问令牌

应用程序可以使用 API 密钥通过 REST API 直接从 IAM 服务获取访问令牌。 有关更多信息,请参阅: 使用 API 密钥获取 IBM Cloud IAM 令牌。 访问令牌的缺省有效期为 60 分钟,之后即到期。 如果令牌已到期,那么 Db2 服务器不会允许建立连接。 但在建立连接之后,不会检查令牌是否到期。 就像在 IAM 集成之前一样,仍将保持已连接状态,直到应用程序断开连接或连接由于其他原因被终止。

curl -k -X POST \
  --header "Content-Type: application/x-www-form-urlencoded" \
  --header "Accept: application/json" \
  --data-urlencode "grant_type=urn:ibm:params:oauth:grant-type:apikey" \
  --data-urlencode "apikey=<apikey>" \
  "https://iam.cloud.ibm.com/identity/token"

访问令牌为数据库识别 IBM 标识用户或服务标识。 数据库服务器先验证访问令牌的有效性,然后接受令牌。 如果应用程序需要连接多个数据库服务实例或其他 IBM Cloud 服务实例,那么这是最佳方法,因为可以将与 IAM 服务进行通信已验证访问令牌的通信量降到最低。

API 密钥

可以为每个 IBM 标识用户或服务标识创建多个 API 密钥。 通常情况下,每个 API 密钥都是为单个应用程序创建的。 这样只要将其所属的 IBM 标识或服务标识作为用户添加到数据库服务实例中,应用程序就可以一直连接到该数据库服务实例。 在数据库中,API 密钥与所属的 IBM 标识或服务标识具有相同的权限和许可权。 如果应该不再允许应用程序连接到数据库,那么可以除去相应的 API 密钥。 与使用访问令牌相比,此认证方法在应用程序中需要的更改更少,因为它不需要与 IAM 服务进行直接交互。 有关创建和管理 API 密钥的更多信息,请参阅: 管理用户 API 密钥

IBMid/password

IBM 标识/密码可用于登录控制台,也可在应用程序中发挥与用户标识/密码相同的作用。 如果联合 IBM 标识,就会发生异常,这是因为无法重定向到组织的登录页面。 但我们建议用使用访问令牌的方法来建立应用程序与数据库服务实例的连接。

支持的接口

支持下列数据库客户机接口:

ODBC、CLP 和 CLPPLUS

要使 ODBC 应用程序或命令行客户机 (CLP, CLPPLUS) 能够使用 IAM 认证连接到 Db2 服务器,需要通过运行以下命令首先在 db2dsdriver.cfg 配置文件中配置数据源名称 (DSN):

db2cli writecfg add -dsn <dsn_alias> -database <database_name> -host <host_name_or_IP_address> -port 50001 -parameter "Authentication=GSSPLUGIN;SecurityTransportMode=SSL"

db2dsdriver.cfg 配置文件是 XML 文件,通常位于 sqllib/cfg 目录中,其中包含 DSN 别名的列表及其属性。

下面的 db2dsdriver.cfg 配置文件的示例显示了用于与数据库服务实例建立连接的配置。 该配置文件提供 DSN 别名、数据库名称、主机名(或 IP 地址),以及认证类型和 SecurityTransportMode 参数值。

<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<configuration>
        <dsncollection>
        <dsn alias="<data_source_name>" name="bludb" host="<host_name_or_IP_address>" port="50001">
            <parameter name="Authentication" value="GSSPLUGIN"/>
            <parameter name="SecurityTransportMode" value="SSL"/>
        </dsn>
        </dsncollection>
        <databases>
            <database name="bludb" host="<host_name_or_IP_address>" port="50001"/>
        </databases>
</configuration>

ODBC

ODBC 连接字符串可包含下列某项:

  • 访问令牌

    DSN=<dsn>;ACCESSTOKEN=<access_token>

  • API 密钥

    DSN=<dsn>;APIKEY=<api_key>

  • IBM 标识/密码

    DSN=<dsn>;UID=<ibmid>;PWD=<password>

对于 ODBC,AUTHENTICATION=GSSPLUGIN 可以在 db2dsdriver.cfg 配置文件或应用程序的连接字符串中进行配置。

CLP

CLP CONNECT 语句可以包含下列其中一项:

  • 访问令牌

    连接到数据库服务器 <database_server_name> ,并通过在 CLP 命令提示符或脚本处运行以下命令来传递访问令牌:

    CONNECT TO <database_server_name> ACCESSTOKEN <access_token_string>

  • API 密钥

    通过在 CLP 命令提示符或脚本中运行以下命令,使用 API 密钥连接到数据库服务器 <database_server_name> :

    CONNECT TO <database_server_name> APIKEY <api-key-string>

  • IBM 标识/密码

    通过在 CLP 命令提示符或脚本中运行以下命令,使用 IBMid/password 连接到数据库服务器 <database_server_name> :

    CONNECT TO <database_server_name> USER <IBMid> USING <password>

有关使用 CLP 连接到数据库服务器的更多详细信息,请参阅: CONNECT (type 2) 语句

CLPPlus

CLPPLUS CONNECT 语句可以包含以下某项:

  • 访问令牌

    连接到 DSN 别名 (@<data_source_name>) ,并通过在 CLPPLUS 命令提示符或脚本处运行以下命令来传递访问令牌:

    connect @<data_source_name> using(accesstoken <access_token_string>)

  • API 密钥

    通过在 CLPPLUS 命令提示符或脚本中运行以下命令,使用 API 密钥连接到 DSN 别名 (@<data_source_name>):

    connect @<data_source_name> using(apikey <api-key-string>)

  • IBM 标识/密码

    通过在 CLPPLUS 命令提示符或脚本中运行以下命令,使用 IBMid/password 连接到 DSN 别名 (@<data_source_name>):

    connect <IBMid>/<password>@<data_source_name>

有关使用 CLPPLUS 连接到 DSN 别名的更多详细信息,请参阅: CLPPlus 中的 DSN 别名

JDBC

IAM 认证支持第 4 类 JDBC 驱动程序。

以下示例显示了三种方法的连接片段:

  • 访问令牌

    DB2SimpleDataSource dataSource;
    
    dataSource.setDriverType( 4 );
    dataSource.setDatabaseName( "BLUDB" );
    dataSource.setServerName( "<host_name_or_IP_address>" );
    dataSource.setPortNumber( 50001 );
    dataSource.setSecurityMechanism( com.ibm.db2.jcc.DB2BaseDataSource.PLUGIN_SECURITY );
    dataSource.setPluginName( "IBMIAMauth" );
    dataSource.setAccessToken( "<access_token>" );
    Connection conn = dataSource.getConnection( );
    

    Connection conn = DriverManager.getConnection( "jdbc:db2://<host_name_or_IP_address>:50001/BLUDB:accessToken=<access_token>;securityMechanism=15;pluginName=IBMIAMauth;sslConnection=true" );
    
  • API 密钥

    DB2SimpleDataSource dataSource;
    
    dataSource.setDriverType( 4 );
    dataSource.setDatabaseName( "BLUDB" );
    dataSource.setServerName( "<host_name_or_IP_address>" );
    dataSource.setPortNumber( 50001 );
    dataSource.setSecurityMechanism( com.ibm.db2.jcc.DB2BaseDataSource.PLUGIN_SECURITY );
    dataSource.setPluginName( "IBMIAMauth" );
    dataSource.setApiKey( "<api_key>" );
    Connection conn = dataSource.getConnection( );
    

    Connection conn = DriverManager.getConnection( "jdbc:db2://<host_name_or_IP_address>:50001/BLUDB:apiKey=<api_key>;securityMechanism=15;pluginName=IBMIAMauth;sslConnection=true" );
    
  • IBM 标识/密码

    DB2SimpleDataSource dataSource;
    
    dataSource.setDriverType( 4 );
    dataSource.setDatabaseName( "BLUDB" );
    dataSource.setServerName( "<host_name_or_IP_address>" );
    dataSource.setPortNumber( 50001 );
    dataSource.setSecurityMechanism( com.ibm.db2.jcc.DB2BaseDataSource.PLUGIN_SECURITY );
    dataSource.setPluginName( "IBMIAMauth" );
    Connection conn = dataSource.getConnection( "<IBMid>", "<password>" );
    

    Connection conn = DriverManager.getConnection( "jdbc:db2://<host_name_or_IP_address>:50001/BLUDB:user=<IBMid>;password=<password>;securityMechanism=15;pluginName=IBMIAMauth;sslConnection=true" );
    

控制台用户体验

服务控制台登录页面上有使用 IBM 标识和密码登录的选项。 单击通过 IBM 标识登录按钮之后,系统将引导用户进入 IAM 登录页面,请在该页面上输入密码。 完成认证之后,系统会将用户重定向回控制台。 要成功登录,数据库管理员必须先通过控制台或 REST API 将 IBM 标识用户添加到每个数据库服务实例。 对于非IBMid 用户,必须在添加 IBMid 用户的同时输入数据库服务实例的用户标识。 用户标识在数据库服务实例中应该是唯一的。 此用户标识也是数据库中的授权 (AUTH) 标识。

要通过 Web 控制台使用 IBM 标识或服务标识来添加用户,请完成以下步骤:

  1. 以具有管理员特权的用户身份登录。

  2. 从右侧下拉菜单中,选择管理用户

    Web 控制台仪表板页面和下拉菜单的视图
    图 1。 从下拉菜单
    中选择 "管理用户" 页面

  3. 在选中用户选项卡的情况下,单击添加

    !["Web 控制台管理用户" 页面的视图](images/add_users.png ""Web 控制台管理用户" 页面")

  4. 选择添加 IBM 标识用户

    Web 控制台的 "添加 IBMid " 用户页面的视图
    图 3。 创建 IBMid 用户

  5. 在提供的字段中输入用户标识IBM 标识。 单击创建

    IBM 标识字段可用于为用户指定 IBM 标识或服务标识。

REST API 体验

Db2 Warehouse on Cloud REST API 的功能已增强,先前接受数据库服务生成的访问令牌的功能现在还可接受 IAM 访问令牌。

  • 要添加新的 IBM 标识用户,请运行以下示例 API 调用:

    curl --tlsv1.2 "https://<IPaddress>/dbapi/v3/users" -H "Authorization: Bearer <access_token>" -H "accept: application/json" -H "Content-Type: application/json" -d "{"id":"<userid>","ibmid":"<userid>@<email_address_domain>","role":"bluadmin","locked":"no","iam":true}"
    

    "id" 的用户标识值无法与完整电子邮件标识匹配。 它可以与电子邮件标识的第一部分匹配,但这不是必需的。 因为任何情况下,这两种不同的标识都不会链接在一起。 例如,如果 "ibmid"abc@us.ibm.com,那么可以指定 abc 作为标识,也可以指定 def 作为示例,但不能指定 abc@us.ibm.com

  • 要迁移现有的非 IBM 标识数据库用户(例如,abcuser),并使其成为 IBM 标识用户,首先要运行以下示例 API 调用来删除非 IBM 标识用户标识:

    curl --tlsv1.2 -X DELETE "https://<IPaddress>/dbapi/v3/users/abcuser" -H "Authorization: Bearer <access_token>" -H "accept: application/json" -H "Content-Type: application/json"
    

    接下来,要通过运行以下示例 API 调用来使用与先前用户标识 (abcuser) 相同的 IBM 标识来重新添加用户:

    curl --tlsv1.2 "https://<IPaddress>/dbapi/v3/users" -H "Authorization: Bearer <access_token>" -H "accept: application/json" -H "Content-Type: application/json" -d "{"id":"abcuser","ibmid":"abcuser@<email_address_domain>","role":"bluadmin","locked":"no","iam":true}"
    

    因为该用户的新 IBM 标识与用户标识 (abcuser) 保持一致,所以为该用户授予的数据库许可权也保持不变。 如果需要迁移现有的非 IBM 标识数据库用户的列表以使其成为 IBM 标识用户,需要为每个用户运行先前的两个 API 调用。

  • 如果要同时添加多个新 IBM 标识用户,请为每个用户创建一个列出以下示例 API 调用的批处理文件:

    curl --tlsv1.2 "https://<IPaddress>/dbapi/v3/users" -H "Authorization: Bearer <access_token>" -H "accept: application/json" -H "Content-Type: application/json" -d "{"id":"<userid1>","ibmid":"<userid1>@<email_address_domain>","role":"bluadmin","locked":"no","iam":true}"
    curl --tlsv1.2 "https://<IPaddress>/dbapi/v3/users" -H "Authorization: Bearer <access_token>" -H "accept: application/json" -H "Content-Type: application/json" -d "{"id":"<userid2>","ibmid":"<userid2>@<email_address_domain>","role":"bluadmin","locked":"no","iam":true}"
    .
    .
    .
    

有关服务的 API 的更多详细信息,请参阅: Db2 Warehouse on Cloud REST API

IBM 标识联合

要使用您自己的身份提供程序(如 LDAP),必须先将 LDAP 服务器与 IBM 标识联合。 有关使用 IBMid联合 LDAP 服务器的指示信息,请参阅: IBMid Enterprise Federation 采用指南。 在数据库管理员完成 IBM 标识联合并将允许的用户添加到数据库服务实例之后,这些用户就可以使用他们的公司用户标识和密码登录到控制台。 或者,这些用户也可以使用表示他们用户标识的访问令牌或 API 密钥通过一个受支持的数据库客户机接口来连接数据库服务实例。

限制

以下是有关 IAM 认证的限制:

  • 仅支持通过 SSL 连接对连接到 Db2 服务器的 Db2 客户机进行 IAM 认证。
  • 支持 IBM 标识联合以允许使用定制用户管理门户网站或服务器进行认证。 此支持不包含任何组联合。
  • 不支持数据库联合的 IAM 认证。
  • 不支持通过 CLPPlus 运行 IDA 和用户定义的扩展 (UDX) 命令。
  • 不支持第 2 类 JDBC 驱动程序。