常见问题:ONTAP 管理的自定义角色
适用于
- ONTAP 9
- role-based access control(基于角色的访问控制)(RBAC)
回答
本文介绍了在 ONTAP 9 中为集群和 Vserver 管理员创建自定义角色时所涉及的各个方面,这反过来又有助于创建自定义角色。
先决条件:
- 熟悉 ONTAP 命令行界面 (CLI)。
- 集群管理员的管理权限。
术语:
命令目录
指 CLI 中的目录。
例如:volume
命令子目录
指目录内的目录。
例如:volume snapshot
命令
指特定的可执行命令。
例如: volume show -或- volume offline.
固有命令
对于所有目录,以下命令被定义为内在命令:
- 创建
- 修改
- 删除
- 显示
非固有命令
custrole
在本文中提到的所有示例中均指自定义角色。
角色
角色是权能或权限的集合。角色包含多个规则;每个规则指定一个或多个权能。该权能被指定为"命令目录"或"命令"上的"访问控制"。
角色定义的语法
规则由以下参数组成:
- Vserver 名称:自定义角色所属的 Data/Admin Vserver 的名称。
- 角色名称:新自定义角色的名称。例如,
storage_admin_role。 - 命令目录 (或) 命令:命令目录(或)命令。
- 访问控制:有三个选项:
all、readonly和none。
请考虑一个具有以下角色定义的示例:
(vs1.example.com, custrole, "volume", all)(vs1.example.com, custrole, "volume snapshot", readonly)(vs1.example.com, custrole, "volume clone", none)
在以上示例中,角色"custrole"属于 Vserver vs1.example.com ,它包含三个规则。
角色定义的语义:
目录/命令和访问控制有六种组合。下表总结了每种组合的语义。
|
功能 |
访问 |
说明 |
|---|---|---|
|
目录 |
|
允许访问指定的目录、其子目录和命令 |
|
目录 |
|
允许 |
|
目录 |
|
拒绝访问指定的目录、其子目录和命令。 |
|
命令 |
|
允许执行指定的命令。 |
|
命令 |
|
无效。建议不要使用此组合。例如, |
|
命令 |
|
拒绝执行指定的命令 |
访问控制的工作原理
- 访问控制的行为是分层的:
- 当规则使用目录时,它适用于所有子目录。例如,此元组(
vs1, custrole, "volume", all)允许访问volume目录及其所有子目录。 - 子目录访问将覆盖父目录访问:
- 如果父目录具有特定的访问控制,并且其子目录指定了不同的访问控制,则子目录访问控制将覆盖父目录访问控制。
示例:请考虑以下两条规则:
(vs1, custrole, "volume", all)
(vs1, custrole, "volume snapshot", readonly)
第一条规则允许对 volume 目录及其所有子目录进行完全访问。然而,第二条规则限制了对 volume snapshot 目录的访问为 readonly。在这种情况下, volume snapshot 与 readonly 访问会覆盖 volume 的完全访问控制。因此, volume snapshot 目录及其所有子目录具有 readonly 访问权限,而不是 all 访问权限。
示例:请考虑以下两条规则:
(vs1, custrole, "vserver", readonly)
(vs1, custrole, "vserver nfs", all)
第一条规则将 vserver 目录及其所有子目录限制为 readonly。但是,第二条规则指定 vserver nfs 对 all的访问权限。在此情况下, vserver nfs 具有完全访问权限将覆盖父目录的 readonly 访问控制。因此, vserver nfs 目录及其所有子目录具有 all 访问权限而不是 readonly 访问权限。
使用固有命令的限制
create、 modify、 delete 和 show 命令是内在命令,这些命令不能单独指定用于访问控制。例如,以下规则无效:(vs1, custrole, "volume snapshot create", all)。 此命令发出警告,但也启用 modify、 delete 和 show 。
示例
cluster1::> security login role create -vserver svm1 -role snap_create -cmddirname "volume snapshot create" -access all
Warning: This operation will also affect the following commands:
"volume snapshot modify"
"volume snapshot show"
cluster1::>security login role show -vserver svm1 -role snap_create
Role Command/ Access
Vserver Name Directory Query Level
---------- ------------- --------- ----------------------------------- --------
svm1 snap_create DEFAULT none
volume snapshot create all
volume snapshot modify all
volume snapshot show all
什么是此 DEFAULT 规则,为什么要创建它?
DEFAULT 规则指定构建其余规则的基础。对于数据/管理 Vserver 自定义角色,DEFAULT 规则访问权限设置为 none。DEFAULT 规则会自动创建。
如何在自定义 RBAC 角色中指定单个命令?
无法指定 create / modify / delete 等固有命令。例如,您不能仅为角色指定 modify 选项。
如果要在自定义 RBAC 角色中使用内部命令,请在目录中指定以下任何选项:
all- 允许所有create/modify/delete/show命令readonly- 仅允许show命令none- 拒绝访问整个目录
角色可以允许或拒绝非内在命令。例如, volume online 是非固有命令。在命令的情况下,可以允许(或)拒绝访问。命令权限可以通过使用 access all 来启用,命令拒绝可以通过使用 access none 来启用。access readonly 不适用于单个命令,不建议使用。
如何为角色启用特定 ZAPI?
如果要为自定义角色指定特定的 ZAPI,请在角色规范中指定等效的 CLI 命令。例如,如果要为自定义角色启用 volume-offline ZAPI,请将等效的 CLI volume offline 规则添加到角色规范。
例如,运行以下命令: security login role create –vserver vs1.example.com –role custrole –command "volume offline"–access all
如何列出用于验证的自定义角色的所有可允许的命令?
- 使用
security login create命令创建用户帐户 'fred' - 使用管理员 Vserver 的 SSH 登录,或运行
vserver context命令切换到数据 Vserver 的特定用户。
示例: vserver context –vserver vs1.example.com –username fred
- 使用
security login role show-ontapi命令枚举自定义角色的所有 CLI 和等效 ZAPI。
注意:确保为自定义角色启用了 security login role show-ontapi 命令。
如何验证是否为自定义角色启用了特定命令(或)ZAPI?
使用 show-ontapi -command <command-name> 命令可验证是否允许自定义角色使用给定命令。输出也将显示等效的 ZAPI。
给定 CLI 命令如何获取等效 ZAPI(或)给定 ZAPI,如何获取等效 CLI?
使用 show-ontapi -ontapi "<ZAPI-name>" 命令验证是否允许自定义角色使用给定的 ZAPI。输出也将显示等效的 CLI。
是否有帮助复制或克隆角色的角色复制(或)角色克隆命令?
否,ONTAP 9 不支持此功能。
是否可以将任何命令分配给数据 Vserver 自定义角色?
否,并非所有命令都不能分配给数据 Vserver 自定义角色。只有带有 –vserver 作为选项的命令才能分配给 Vserver 自定义角色。 例如, system node reboot 命令无法分配给数据 Vserver 自定义角色,因为此命令没有 –vserver 作为选项。
自定义角色示例
示例:创建一个自定义角色,允许 Admin 查看系统中的所有登录帐户。
例如,将此角色命名为 login_accts_ro。
要允许的命令是 security login show。命令目录是 security login。
将需要具有 security login 访问权限的 readonly 目录。
下面是规则元组:
(clus1, login_accts_ro, "security login", readonly).
此元组不仅为 readonly 目录授予 security login 权限,还为其他子目录授予权限,并且具有 readonly 权限的目录将类似于以下内容:
security login domain-tunnel、 security login publickey 和 security login role。
应阻止访问这三个目录。因此,需要添加以下规则:
(clus1, login_accts_ro, "security login domain-tunnel", none)
(clus1, login_accts_ro, "security login publickey", none)
(clus1, login_accts_ro, "security login role", none)
login_accts_ro 应具有更改当前用户密码的访问权限。
以下是规则:
(clus1, login_accts_ro, "security login password", all)
CLI security login role show-ontapi 可用于显示当前用户的功能;可以添加此命令来验证这些功能。
(clus1, login_accts_ro, "security login role show-ontapi", all)
以下是规则的摘要:
(clus1, login_accts_ro, "security login", readonly)
(clus1, login_accts_ro, "security login domain-tunnel", none)
(clus1, login_accts_ro, "security login publickey", none)
(clus1, login_accts_ro, "security login role", none)
(clus1, login_accts_ro, "security login password", all)
(clus1, login_accts_ro, "security login role show-ontapi", all)
可以使用以下命令集创建 login_accts_ro 角色:
role create -vserver clus1 -role login_accts_ro -cmddirname "security login" -access readonly
role create -vserver clus1 -role login_accts_ro -cmddirname "security login domain-tunnel" -access none
role create -vserver clus1 -role login_accts_ro -cmddirname "security login publickey" -access none
role create -vserver clus1 -role login_accts_ro -cmddirname "security login role" -access none
role create -vserver clus1 -role login_accts_ro -cmddirname "security login password" -access all
示例:创建仅允许许可证管理的自定义角色
例如,将其命名为 role license_role
要允许的命令目录为 system license。
需要一个具有 system license访问权限的 all 目录。
下面是元组:
(clus1, license_role, "system license", all).
license_role 应具有更改当前用户密码的访问权限。
此规则与以下内容类似:
(clus1, license_role, "security login password", all)
此 security login role show-ontapi 命令可用于显示当前用户的功能。可以添加此命令来验证功能。
(clus1, license_role, "security login role show-ontapi", all)
以下是规则的摘要:
(clus1, license_role, "system license", all)
(clus1, license_role, "security login password", all)(clus1, license_role, "security login role show-ontapi", all)
运行以下命令集来创建 license_role:
role create -vserver clus1 -role license_role -cmddirname "system license" -access all
role create -vserver clus1 -role license_role -cmddirname "security login password" -access all
role create -vserver clus1 -role license_role -cmddirname "security login role show-ontapi" -access all
示例:创建仅允许文件系统管理的数据 Vserver 自定义角色
例如,调用此角色 filesys_admin_role。
将允许以下命令目录:
"vserver nfs"
"vserver cifs"
"vserver export-policy"
"vserver locks"
"vserver services ldap"
"vserver services nis-domain"
"vserver services unix-group"
"vserver services unix-user"
下面是元组:
(vs1.example.com, filesys_admin_role, "vserver nfs", all)
(vs1.example.com, filesys_admin_role, "vserver cifs", all)
(vs1.example.com, filesys_admin_role, "vserver export-policy", all)
(vs1.example.com, filesys_admin_role, "vserver locks", all)
(vs1.example.com, filesys_admin_role, "vserver services ldap", all)
(vs1.example.com, filesys_admin_role, "vserver services nis-domain", all)
(vs1.example.com, filesys_admin_role, "vserver services unix-group", all)
(vs1.example.com, filesys_admin_role, "vserver services unix-user", all)
filesys_admin_role 应具有更改当前用户密码的访问权限。
该规则如下:
(vs1.example.com, filesys_admin_role, "security login password", all)
CLI security login role show-ontapi 可用于显示当前用户的功能。可以添加此命令来验证功能。
(vs1.example.com, filesys_admin_role, "security login role show-ontapi", all)
以下是规则的摘要:
(vs1.example.com, filesys_admin_role, "vserver nfs", all)
(vs1.example.com, filesys_admin_role, "vserver cifs", all)
(vs1.example.com, filesys_admin_role, "vserver export-policy", all)
(vs1.example.com, filesys_admin_role, "vserver locks", all)
(vs1.example.com, filesys_admin_role, "vserver services ldap", all)
(vs1.example.com, filesys_admin_role, "vserver services nis-domain", all)
(vs1.example.com, filesys_admin_role, "vserver services unix-group", all)
(vs1.example.com, filesys_admin_role, "vserver services unix-user", all)
(vs1.example.com, filesys_admin_role, "security login password", all)
(vs1.example.com, filesys_admin_role, "security login role show-ontapi", all)
以下是用于创建 filesys_admin_role 的命令集:
role create -vserver vs1.example.com -role filesys_admin_role -cmddirname "vserver nfs" -access all
role create -vserver vs1.example.com -role filesys_admin_role -cmddirname "vserver cifs" -access all
role create -vserver vs1.example.com -role filesys_admin_role -cmddirname "vserver export-policy" -access all
role create -vserver vs1.example.com -role filesys_admin_role -cmddirname "vserver locks" -access all
role create -vserver vs1.example.com -role filesys_admin_role -cmddirname "vserver services ldap" -access all
role create -vserver vs1.example.com -role filesys_admin_role -cmddirname "vserver services nis-domain" -access all
role create -vserver vs1.example.com -role filesys_admin_role -cmddirname "vserver services unix-group" -access all
role create -vserver vs1.example.com -role filesys_admin_role -cmddirname "vserver services unix-user" -access all
role create -vserver vs1.example.com -role filesys_admin_role -cmddirname "security login password" -access all
role create -vserver vs1.example.com -role filesys_admin_role -cmddirname "security login role show-ontapi" -access all