Stack domain users¶
Stack domain users 允许 Orchestration 服务授权和启动在已启动的虚拟机中执行以下操作
向实例内部的代理提供元数据。代理轮询更改并应用配置,该配置以元数据的形式表达到实例中。
检测操作何时完成。通常,在虚拟机启动后进行软件配置。Compute 在创建 VM 后立即将其状态更改为“Active”,而不是在 Orchestration 服务完全配置它之后。
从实例内部提供应用程序级别的状态或计量。例如,允许根据性能或服务质量的某种指标执行自动扩展操作。
Orchestration 服务提供启用所有这些操作的 API,但所有这些 API 都需要身份验证。例如,访问代理正在运行的实例的凭据。heat-cfntools 代理使用签名请求,这需要通过 Identity 创建的 ec2 密钥对。然后使用密钥对对请求进行签名,以访问与 Orchestration CloudFormation 和 CloudWatch 兼容的 API,这些 API 通过签名验证进行身份验证。签名验证使用 Identity ec2tokens 扩展。
Stack domain users 将所有堆栈定义的用户(作为堆栈模板中包含的数据而创建的用户)封装在一个单独的域中。该单独域是专门为仅包含与 Orchestration 堆栈相关的数据而创建的。创建一个用户,即域管理员,Orchestration 使用域管理员来管理堆栈用户域中用户的生命周期。
Stack domain users 配置¶
要配置 stack domain user,Orchestration 服务完成以下任务
创建一个特殊的 OpenStack Identity 服务域。例如,一个名为
heat的域,并在heat.conf文件中的stack_user_domain选项中设置 ID。创建一个具有足够权限来在
heat域中创建和删除项目和用户的用户。将域管理员用户的用户名和密码设置在
heat.conf文件中(stack_domain_admin和stack_domain_admin_password)。该用户代表堆栈所有者管理stack domain users,因此他们不再需要是管理员。这种升级路径的风险有限,因为heat_domain_admin仅被授予对heat域的管理权限。
要设置 stack domain users,请完成以下步骤
创建域
$OS_TOKEN指的是一个 token。例如,服务管理员 token 或具有足够角色来创建用户和域的任何其他有效 token。$KS_ENDPOINT_V3指的是 v3 OpenStack Identity 端点(例如,http://keystone_address:5000/v3,其中 keystone_address 是 Identity 服务的 IP 地址或可解析的名称)。$ openstack --os-token $OS_TOKEN --os-url=$KS_ENDPOINT_V3 --os-\ identity-api-version=3 domain create heat --description "Owns \ users and projects created by heat"
此命令返回域 ID,并在下面称为
$HEAT_DOMAIN_ID。创建用户
$ openstack --os-token $OS_TOKEN --os-url=$KS_ENDPOINT_V3 --os-\ identity-api-version=3 user create --password $PASSWORD --domain \ $HEAT_DOMAIN_ID heat_domain_admin --description "Manages users \ and projects created by heat"
此命令返回用户 ID,并在下面称为
$DOMAIN_ADMIN_ID。使用户成为域管理员
$ openstack --os-token $OS_TOKEN --os-url=$KS_ENDPOINT_V3 --os-\ identity-api-version=3 role add --user $DOMAIN_ADMIN_ID --domain \ $HEAT_DOMAIN_ID admin
然后,您必须将这些步骤中的域 ID、用户名和密码添加到
heat.conf文件stack_domain_admin_password = password stack_domain_admin = heat_domain_admin stack_user_domain = domain id returned from domain create above
使用流程¶
在堆栈创建期间运行以下步骤
如果堆栈包含需要创建stack domain user的任何资源,Orchestration 会在
heat域中创建一个新的stack domain project。对于需要用户的任何资源,Orchestration 服务会在stack domain project中创建用户。stack domain project 与 Orchestration 数据库中的 Orchestration 堆栈相关联,但从身份验证的角度来看,与堆栈所有者的项目是分开且无关的。在堆栈域中创建的用户仍然被分配
heat_stack_user角色,因此可以通过policy.yaml文件限制他们可以访问的 API 表面。有关更多信息,请参阅 OpenStack Identity 文档。在处理 API 请求时,Orchestration 服务执行内部查找,并允许检索给定堆栈的堆栈详细信息。详细信息是从数据库中检索的,既包括堆栈所有者的项目(访问堆栈的默认 API 路径),也包括堆栈域项目,受
policy.yaml限制。
这意味着现在有两种路径可以导致通过 Orchestration API 检索相同的数据。以下示例是 resource-metadata
GET v1/{stack_owner_project_id}/stacks/{stack_name}/\
{stack_id}/resources/{resource_name}/metadata
或者
GET v1/{stack_domain_project_id}/stacks/{stack_name}/\
{stack_id}/resources/{resource_name}/metadata
堆栈所有者使用前者(通过 openstack stack resource metadata STACK RESOURCE),而实例中的任何代理使用后者。