常见问题解答: ONTAP 管理的自定义角色
不可不使用
适用场景
- ONTAP 9
- role-based access control(基于角色的访问控制)(RBAC)
问题解答
本文介绍在ONTAP 9中为集群和Vserver管理员创建自定义角色时涉及的各个方面、进而帮助创建自定义角色。
前提条件:
- 熟悉 ONTAP 命令行界面( CLI )。
- 集群管理员的管理特权。
Terminology
命令目录
指 CLI 中的目录。
例如:
 volume
命令子目录
指目录中的目录。
例如:
 volume snapshot
命令
指特定的可执行命令。
例如:volume show - 或 - volume offline.
内部命令
对于所有目录,以下命令均定义为内部命令:
- create
- 修改
- 删除
- 显示
非内部命令
客户角色
请参考本文中提到的所有示例中的自定义角色。
角色
角色是一组权能或特权。角色包含多个规则;每个规则指定一个或多个权能。此功能在“命令目录”或“命令”上指定为“访问控制”。
角色定义的语法
规则由以下参数组成:
- Vserver name:自定义角色所属的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' 属于虚拟服务器vs1.example.com ,它包含三条规则。 
角色定义的语义:
目录 / 命令和访问控制共有六种组合。下表总结了每个组合的语义。
| 功能 | 访问 | 问题描述 | 
|---|---|---|
| 目录 | 
 | 允许访问指定目录、其子目录和命令 | 
| 目录 | 
 | 允许 | 
| 目录 | 
 | 拒绝对指定目录、其子目录和命令的访问。 | 
| 命令 | 
 | 允许执行指定的命令。 | 
| 命令 | 
 | 无效。建议不要使用此组合。例如 | 
| 命令 | 
 | 拒绝执行指定的命令 | 
访问控制的工作原理
- 访问控制的行为是分层的:
- 规则使用目录时、它将应用于所有子目录。例如,此 tuple()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 ,该目录和所有 IT 子目录都具有all 访问权限、不readonly 具有访问权限。
对使用内部命令的限制
create、modify、和deleteshow命令是内部命令,不能单独为访问控制指定这些命令。例如,以下规则无效: ()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
此默认规则是什么、为什么要创建?
默认规则指定生成其余规则的基础。对于 Data/Admin vserver 自定义角色、默认规则访问设置为none。默认规则将自动创建。 
如何在自定义 RBAC 角色中指定单个命令?
createmodifydelete无法指定//等内在命令。例如、不能仅为modify角色指定选项。 
如果要在自定义 RBAC 角色中使用内部命令,请在该目录中指定以下任意选项:
- all- 允许所有- create//- modify- delete- show命令
- readonly—只允许- show使用命令
- none—拒绝访问整个目录
对于角色,可以允许或拒绝非内部命令。例如volume online,是一个非内在命令。在命令的情况下,可以拒绝访问(或)。可以使用 Access 启用命令权限all、使用 Access 可以启用命令 Denialnone 。访问readonly 权限不适用于单个命令,建议不要使用。
如何为角色启用特定的 ZAPI ?
如果要为自定义角色指定特定的ZAPI、请在角色规范中指定等效的CLI命令。例如、如果要为volume-offline 自定义角色启用ZAPI、请将等效的命令行界面volume offline规则添加到角色规范中。
例如,运行以下命令: security login role create –vserver vs1.example.com –role custrole –command "volume offline"–access all
如何列出自定义角色的所有允许命令以供验证之用?
- 使用security login create命令创建用户帐户 'fred '
- 使用 SSH for Admin vserver 登录或运行vserver context命令以切换到数据虚拟服务器的特定用户。
示例: 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。
在命令行界面命令中、如何获取等效的ZAPI (或)给定的ZAPI、如何获取等效的命令行界面?
使用show-ontapi -ontapi "<ZAPI-name>"命令验证自定义角色是否允许给定的ZAPI。输出还将显示等效的命令行界面。
是否存在有助于复制或克隆角色的role copy (或) role clone命令?
不支持、ONTAP 9不支持此功能。
是否可以将任何命令分配给数据虚拟服务器自定义角色?
不可以、并非所有命令都无法分配给数据SVM自定义角色。只–vserver能将带有选项的命令分配给SVM自定义角色。  例如system node reboot 、无法将此命令分配给数据SVM自定义角色、因为此命令–vserver不具有选项。 
自定义角色示例
示例:创建允许管理员查看系统中所有登录帐户的自定义角色。
例如,将此角色命名为login_accts_ro。 
允许使用的命令是security login show。命令目录为security login。
security loginreadonly需要具有访问权限的目录。
以下是规则元组:
(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) 
CLIsecurity 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 licenseall需要具有访问权限的目录。
以下是元组:
(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
示例:创建仅允许文件系统管理的数据虚拟服务器自定义角色
例如、调用此角色 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