第 10 章 应用程序凭证
使用 应用凭据 来避免在配置文件中嵌入用户帐户凭据的做法。相反,用户会创建一个 Application Credential,它接收对单个项目的委派访问权限,并具有自己的不同 secret。用户也可以将委派的特权限制为该项目中的单个角色。这可让您采用最小特权的原则,其中经过身份验证的用户只能获得一个项目的访问权限,以及它正常工作的角色,而不是所有项目和角色。
使用应用凭据,您可以在不显示用户凭据的情况下使用 API,并且应用可以在不需要嵌入式用户凭据的情况下向 Keystone 进行身份验证。
您可以使用应用程序凭证生成令牌并为应用程序配置 keystone_authtoken
设置。在以下部分中描述了这些用例。
Application Credential 依赖于创建它的用户帐户,因此当该帐户被删除或无法访问相关角色时,它将终止。
10.1. 使用应用凭证生成令牌
在仪表板中,应用凭据作为自助服务功能供用户使用。本例演示了用户如何创建应用凭据,然后使用它来生成令牌。
创建测试项目并测试用户帐户:
创建名为
AppCreds
的项目:$ openstack project create AppCreds
创建名为
AppCredsUser
的用户:$ openstack user create --project AppCreds --password-prompt AppCredsUser
为
AppCreds
项目授予member
角色的AppCredsUser
访问权限:$ openstack role add --user AppCredsUser --project AppCreds member
以
AppCredsUser
用户身份登录到仪表板并创建应用程序凭证:Overview
Identity
Application Credentials
+Create Application Credential
。注意确保您下载
clouds.yaml
文件内容,因为在关闭了Your Application Credential
的弹出窗口后,您无法再次访问它。使用 CLI 创建名为
/home/stack/.config/openstack/clouds.yaml
的文件,并粘贴clouds.yaml
文件的内容。# This is a clouds.yaml file, which can be used by OpenStack tools as a source # of configuration on how to connect to a cloud. If this is your only cloud, # just put this file in ~/.config/openstack/clouds.yaml and tools like # python-openstackclient will just work with no further config. (You will need # to add your password to the auth section) # If you have more than one cloud account, add the cloud entry to the clouds # section of your existing file and you can refer to them by name with # OS_CLOUD=openstack or --os-cloud=openstack clouds: openstack: auth: auth_url: http://10.0.0.10:5000/v3 application_credential_id: "6d141f23732b498e99db8186136c611b" application_credential_secret: "<example secret value>" region_name: "regionOne" interface: "public" identity_api_version: 3 auth_type: "v3applicationcredential"
注意这些值将为您的部署有所不同。
使用 Application Credential 生成令牌。使用以下命令时,不得作为任何特定用户提供,且必须与
clouds.yaml
文件位于同一个目录中。$ openstack --os-cloud=openstack token issue +------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | Field | Value | +------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | expires | 2018-08-29T05:37:29+0000 | | id | gAAAAABbhiMJ4TxxFlTMdsYJpfStsGotPrns0lnpvJq9ILtdi-NKqisWBeNiJlUXwmnoGQDh2CMyK9OeTsuEXnJNmFfKjxiHWmcQVYzAhMKo6_QMUtu_Qm6mtpzYYHBrUGboa_Ay0LBuFDtsjtgtvJ-r8G3TsJMowbKF-yo--O_XLhERU_QQVl3hl8zmMRdmLh_P9Cbhuolt | | project_id | 1a74eabbf05c41baadd716179bb9e1da | | user_id | ef679eeddfd14f8b86becfd7e1dc84f2 | +------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
如果您收到与 __init__()类似的错误,则有一个意外的关键字参数 'application_credential_secret'
,则您可能仍然 source 到之前的凭证。对于新环境,请运行 sudo su - stack
。