配置 Tacker 作为 OAuth 2.0 客户端¶
注意
本文档的内容已确认在使用 Tacker 2024.1 Caracal 时有效。
概述¶
作为 API 客户端,Tacker 可以使用 OAuth 2.0 客户端凭据授权流程和 OAuth 2.0 互通 TLS 客户端身份验证来访问通知服务器和外部 NFVO 服务器。 RFC6749 OAuth 2.0 授权框架的 OAuth 2.0 客户端凭据授权流程在 ETSI NFV-SOL013 v3.4.1 的 API 规范中规定。并且 Tacker 基于 RFC8705 实现 OAuth 2.0 互通 TLS 客户端身份验证。
OAuth 2.0 客户端凭据授权指南¶
您可以按照本指南启用 Tacker 作为 OAuth 2.0 客户端凭据授权。
启用用于访问通知服务器的客户端凭据授权¶
如果通知授权服务器的证书不受信任,则可以修改配置文件 配置选项 将 verify_oauth2_ssl 设置为 false,则后端在获取 OAuth 2.0 访问令牌时将不再验证证书。如果通知回调 API 的证书不受信任,则可以修改配置文件 配置选项 将 verify_notification_ssl 设置为 false,则后端在发送通知时将不再验证证书。
根据需要修改配置文件。
$ vi /etc/tacker/tacker.conf [vnf_lcm] verify_notification_ssl = false [authentication] verify_oauth2_ssl = false
重新启动 Tacker 服务,以使修改后的配置信息生效。
$ sudo systemctl restart devstack@tacker.service
验证访问是否使用客户端凭据授权¶
订阅需要 OAuth 2.0 客户端凭据授权的通知,以确认 Tacker 可以成功将通知发送到通知服务器。
$ cat subsc_create_req.json
{
"filter": {
"vnfInstanceSubscriptionFilter":{
"vnfdIds": [
"108135bb-8f21-4b91-a548-4aad3cf72a87"
]
}
},
"callbackUri" : "$callback_uri",
"authentication": {
"authType":["OAUTH2_CLIENT_CREDENTIALS"],
"paramsOauth2ClientCredentials": {
"clientId": "$notification_oauth2_client_id",
"clientPassword": "$notification_oauth2_client_secret",
"tokenEndpoint": "$notification_oauth2_token_endpoint"
}
}
}
$ openstack vnflcm subsc create subsc_create_req.json --os-tacker-api-version 2
+--------------+----------------------------------------------------------------------------------------------------------+
| Field | Value |
+--------------+----------------------------------------------------------------------------------------------------------+
| Callback URI | $callback_uri |
| Filter | { |
| | "vnfInstanceSubscriptionFilter": { |
| | "vnfdIds": [ |
| | "108135bb-8f21-4b91-a548-4aad3cf72a87" |
| | ] |
| | } |
| | } |
| ID | b25c2d6f-6de4-450a-a25d-321868d3ed83 |
| Links | { |
| | "self": { |
| | "href": "https://$tacker_host_name/vnflcm/v2/subscriptions/b25c2d6f-6de4-450a-a25d-321868d3ed83" |
| | } |
| | } |
| verbosity | FULL |
+--------------+----------------------------------------------------------------------------------------------------------+
OAuth 2.0 互通 TLS 客户端身份验证指南¶
要将 Tacker 作为 mTLS OAuth 2.0 客户端使用,需要客户端私钥和证书。您可以参考 配置 Tacker API 的 HTTPS/mTLS 创建本指南所需的私有根 CA、私钥和证书。由于不同的授权服务器对客户端提供的 TLS 证书进行身份验证的方式不同,因此在创建客户端证书时,需要根据授权服务器设置相关的主题专有名称,例如通用名。本指南中使用的 tacker_cert_and_key.pem 文件可以通过连接客户端证书文件和客户端私钥文件来创建。
$ cat tacker_client.pem tacker_client.key >> tacker_cert_and_key.pem
您可以按照本指南中的以下步骤启用 Tacker 作为 mTLS OAuth 2.0 客户端。
启用用于访问通知服务器的互通 TLS 客户端身份验证¶
以下部分描述了仅为访问通知服务器启用 mTLS 的步骤。
修改配置文件
tacker.conf以启用 SSL 以实现 mTLS 支持。以下设置仅为示例,证书应保存在具有适当访问权限的目录中。$ vi /etc/tacker/tacker.conf [v2_vnfm] notification_mtls_ca_cert_file = /etc/tacker/multi_ca.pem notification_mtls_client_cert_file = /etc/tacker/tacker_cert_and_key.pem
重新启动 Tacker 服务,以使修改后的配置信息生效。
$ sudo systemctl restart devstack@tacker
启用用于访问外部 NFVO 服务器的互通 TLS 客户端身份验证¶
以下部分描述了仅为访问外部 NFVO 服务器启用 mTLS 的步骤。
修改配置文件
tacker.conf以启用 SSL 以实现 mTLS 支持。 client_id 和 client_password 必须从外部 NFVO 服务器使用的身份验证服务器获取。如果将 Keystone 用作身份验证服务器,则可以将 user_id 作为 mTLS 身份验证的 client_id 使用。$ vi /etc/tacker/tacker.conf [v2_nfvo] use_external_nfvo = True endpoint = https://endpoint.host token_endpoint = https://token_endpoint.host/token client_id = client_id client_password = client_password mtls_ca_cert_file = /etc/tacker/multi_ca.pem mtls_client_cert_file = /etc/tacker/tacker_cert_and_key.pem
重新启动 Tacker 服务,以使修改后的配置信息生效。
$ sudo systemctl restart devstack@tacker
验证访问是否使用互通 TLS 客户端身份验证¶
对外部 NFVO 服务器和通知服务器的访问不会输出到 Tacker 日志。因此,在执行 lcm 操作时,请检查外部 NFVO 服务器和通知服务器的访问日志,或使用数据包捕获软件来确认对每个服务器的访问是 mTLS 通信。如果数据包捕获显示客户端和服务器在握手期间相互发送证书,则可以验证是否启用了 mTLS。