跳转到主内容

常见问题:ONTAP 管理的自定义角色

Views:
177
Visibility:
Public
Votes:
0
Category:
ontap-9
Specialty:
core
Last Updated:

 

适用于

  • 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 ,它包含三个规则。 

角色定义的语义:

目录/命令和访问控制有六种组合。下表总结了每种组合的语义。 

功能

访问

说明

目录

all

允许访问指定的目录、其子目录和命令

目录

readonly

允许 read-only 访问指定的目录及其所有子目录。在内部命令中,仅 show 可用,非内部命令不可用。

目录

None

拒绝访问指定的目录、其子目录和命令。

命令

all

允许执行指定的命令。

命令

readonly

无效。建议不要使用此组合。例如, volume offline 访问权限为 readonly 是无效的。

命令

none

拒绝执行指定的命令

访问控制的工作原理
  1. 访问控制的行为是分层的:
  2. 当规则使用目录时,它适用于所有子目录。例如,此元组(vs1, custrole, "volume", all)允许访问 volume 目录及其所有子目录。
  3. 子目录访问将覆盖父目录访问:
  4. 如果父目录具有特定的访问控制,并且其子目录指定了不同的访问控制,则子目录访问控制将覆盖父目录访问控制。

示例:请考虑以下两条规则:

(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

NetApp provides no representations or warranties regarding the accuracy or reliability or serviceability of any information or recommendations provided in this publication or with respect to any results that may be obtained by the use of the information or observance of any recommendations provided herein. The information in this document is distributed AS IS and the use of this information or the implementation of any recommendations or techniques herein is a customer's responsibility and depends on the customer's ability to evaluate and integrate them into the customer's operational environment. This document and the information contained herein may be used solely in connection with the NetApp products discussed in this document.