![在 openstack 中将用户范围限制在项目内](https://linux22.com/image/773113/%E5%9C%A8%20openstack%20%E4%B8%AD%E5%B0%86%E7%94%A8%E6%88%B7%E8%8C%83%E5%9B%B4%E9%99%90%E5%88%B6%E5%9C%A8%E9%A1%B9%E7%9B%AE%E5%86%85.png)
我有一个 openstack victoria 云设置。我使用 keystone 的默认策略,并且没有对该策略进行任何更改。
我在 openstack 中创建了一个名为 testuser 的测试用户名。我将其主要项目指定为 testproject 并指定管理员角色。但当我以 testuser 身份登录时,我也能访问管理员项目。看来我的范围不仅限于 testproject。
根据文档
https://docs.openstack.org/keystone/latest/admin/service-api-protection.html
项目管理员只能查看和修改他们有权限的项目内的数据。他们可以查看有关其项目的信息并在其项目上设置标签。他们无权查看系统或域资源,因为这会违反其角色分配的约定。由于 keystone API 中的大多数资源都是系统和域特定的,因此项目管理员没有太多的权限。
openstack role assignment list --names --project testproject --role admin
+-------+------------------+-------+---------------------+--------+--
| Role | User | Group | Project | Domain | System | Inherited |
+-------+------------------+-------+---------------------+--------+--
| admin | testuser@Default | | testproject@Default | | | False |
+-------+------------------+-------+---------------------+--------+--
# openstack role assignment list --names --project admin
+-------+---------------+-------+---------------+--------+--------+--
| Role | User | Group | Project | Domain | System | Inherited |
+-------+---------------+-------+---------------+--------+--------+--
| admin | admin@Default | | admin@Default | | | False |
+-------+---------------+-------+---------------+--------+--------+--
我应该怎么做才能将用户限制在其指定的主要项目范围内?
答案1
我想我懂了(在 Xena 中)
我注意到我的 keystone 没有限制超出范围的命令(例如,在您没有角色的域中使用项目范围的令牌创建组)
我在 /etc/keystone/keystone.conf 中添加了以下内容:
[oslo_policy]
enforce_scope = true
令我困惑的是,这个默认值是 false
添加此项后,组策略开始正确执行(如果我不使用正确域的域范围令牌,则会收到 403)
进一步的测试表明,当我尝试使用范围为 testProjectA 的令牌与管理项目进行交互时,管理项目也会抛出 403
https://docs.openstack.org/keystone/xena/install/keystone-install-ubuntu.html#finalize-the-installation 需要注意的是,上述链接底部的 keystone 设置说明将为您提供管理项目上的项目范围令牌,并且您的 openstack 命令将受到相应的限制
我将其更改为此,以便我使用系统范围令牌
export OS_AUTH_URL=http://dal-eq3-ctrl-001:5000/v3
export OS_IDENTITY_API_VERSION=3
export OS_USER_DOMAIN_NAME=Default
export OS_USERNAME=admin
export OS_PASSWORD=<pass>
export OS_SYSTEM_SCOPE=all