要将 Watson Machine Learning 与 Python 客户机库或 REST API 配合使用,必须进行认证以保护您的工作。 了解不同的认证方法以及如何将它们应用于您选择的服务。
使用 IBM Cloud® Identity and Access Management (IAM) 向公共 IBM Watson™ 服务发出已经过认证的请求。 借助 IAM 访问策略,您可通过单个密钥分配对多个资源的访问权。 此外,用户、服务标识和服务实例可具有多个 API 键。
安全性概述
请参阅描述安全性需求的章节。
认证凭证
这些术语与本主题中所描述的安全性需求相关。
- API 密钥 允许您在使用 Python 客户机或 API 时轻松进行认证,并且可以在多个服务中使用。 API 密钥被视为机密,因为它们用于授予访问权。 将所有 API 密钥视为密码,因为具有 API 密钥的任何人都可以访问您的服务。
- IAM 令牌 是访问 IBM Cloud 服务所需的认证令牌。 您可以在令牌请求中使用 API 密钥来生成令牌。 有关使用 IAM 令牌的详细信息,请参阅 认证到 Watson Machine Learning API。
要通过服务的 API 向服务认证,请将您的凭证传递至 API。 您可在授权头或 API 键中传递不记名令牌。
生成 API 键
要通过您的 IBM Cloud 用户帐户生成 API 键,请转至管理访问权和用户 - API 键并针对您的用户帐户创建或选择 API 键。
您还可以从 概要文件和设置> 用户 API 密钥生成和轮换 API 密钥。 有关更多信息,请参阅 管理用户 API 密钥。
使用 IAM 令牌进行认证
IAM 令牌是有效期为 60 分钟的临时安全凭证。 令牌到期时,应生成新令牌。 令牌在临时访问资源时可能很有用。 有关更多信息,请参阅使用 API 键生成 IBM Cloud IAM 令牌。
获取服务级别令牌
您还可以使用服务级别令牌进行认证。 要生成服务级别令牌:
- 请参阅 IBM Cloud 指示信息的创建服务标识部分。
- 为该服务标识生成 API 密钥。
- 打开您计划在其中保留可部署资产的空间。
- 在访问控制选项卡中,添加服务标识并分配管理员或编辑者访问角色。
您可以将服务级别令牌和您的 API 评分请求配合使用。
接口
Python 客户机
要创建 watsonx.ai Python 客户机对象的实例,需要将凭证传递到 Watson Machine Learning API 客户机。
wml_credentials = {
"apikey":"123456789",
"url": " https://HIJKL"
}
from ibm_watson_machine_learning import APIClient
wml_client = APIClient(wml_credentials)
即使您未显式提供 instance_id
,也会从关联空间或项目中选取该以进行计费。 有关 Watson Machine Learning 服务的套餐和计费的详细信息,请参阅 Watson Machine Learning 套餐和运行时使用情况。
有关如何使用 Python 客户机对模型进行认证和评分的示例,请参阅 样本 Notebook 。
REST API
请参阅: Watson Machine Learning REST API
要使用 Watson Machine Learning REST API ,必须获取 IBM Cloud Identity and Access Management (IAM) 令牌。 在此示例中,您将提供 API 密钥来代替示例密钥。
cURL 示例
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=123456789" \
"https://iam.cloud.ibm.com/identity/token"
获取的 IAM 令牌需要以单词 Bearer
作为前缀,并在 API 调用的 Authorization 头中传递。
Python 示例
import requests
# Paste your Watson Machine Learning service apikey here
apikey = "123456789"
# Get an IAM token from IBM Cloud
url = "https://iam.cloud.ibm.com/identity/token"
headers = { "Content-Type" : "application/x-www-form-urlencoded" }
data = "apikey=" + apikey + "&grant_type=urn:ibm:params:oauth:grant-type:apikey"
response = requests.post( url, headers=headers, data=data, auth=apikey )
iam_token = response.json()["access_token"]
Node.js 示例
var btoa = require( "btoa" );
var request = require( 'request' );
// Paste your Watson Machine Learning service apikey here
var apikey = "123456789";
// Use this code as written to get an access token from IBM Cloud REST API
//
var IBM_Cloud_IAM_uid = "bx";
var IBM_Cloud_IAM_pwd = "bx";
var options = { url : "https://iam.cloud.ibm.com/identity/token",
headers : { "Content-Type" : "application/x-www-form-urlencoded",
"Authorization" : "Basic " + btoa( IBM_Cloud_IAM_uid + ":" + IBM_Cloud_IAM_pwd ) },
body : "apikey=" + apikey + "&grant_type=urn:ibm:params:oauth:grant-type:apikey" };
request.post( options, function( error, response, body )
{
var iam_token = JSON.parse( body )["access_token"];
} );
父主题: 管理预测性部署