常见问题解答: 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
、和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
此默认规则是什么、为什么要创建?
默认规则指定生成其余规则的基础。对于 Data/Admin vserver 自定义角色、默认规则访问设置为none
。默认规则将自动创建。
如何在自定义 RBAC 角色中指定单个命令?
create
modify
delete
无法指定//等内在命令。例如、不能仅为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 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)
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 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
示例:创建仅允许文件系统管理的数据虚拟服务器自定义角色
例如、调用此角色 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