SaltStackEnterpriseHelp-V6 1 0 October
SaltStackEnterpriseHelp-V6 1 0 October
SaltStackEnterpriseHelp-V6 1 0 October
Release 6.1.0
SaltStack, Inc.
1 SaltStack Enterprise 3
2 Architecture 5
2.1 Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
2.1.1 Enterprise API . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
2.1.2 LDAP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
2.1.3 Database . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
2.1.4 Temporary data storage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
2.1.5 Enterprise Console . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
2.1.6 Salt Master Plugin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
2.2 See also . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
3 Enterprise Console 9
3.1 Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
3.2 How to use Enterprise Console . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
3.2.1 Accessing Enterprise Console . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
3.2.2 Adjusting your preferences . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
3.2.3 Changing your password . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
3.2.4 Opening product documentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
3.3 Reference . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
3.3.1 Supported web browsers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
3.3.2 User preferences . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
3.3.3 Workspaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
3.4 See also . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
5 Minion Keys 21
i
5.1 Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
5.2 How to manage minion keys . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
5.2.1 Accepting a new minion key . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
5.2.2 Rejecting minion keys . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
5.2.3 Deleting minion keys . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
5.3 Reference . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
5.3.1 Prerequisites to accepting keys . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
5.3.2 Key States . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
5.4 See also . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
6 Enterprise Proxy 25
6.1 Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
6.1.1 Difference between Proxy Minions and Enterprise Proxy . . . . . . . . . . . . . . . . . . . . 25
6.2 How to use the Enterprise Proxy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
6.2.1 Configuring Enterprise Proxies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
6.2.2 Validate proxy key acceptance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
6.2.3 Configuring the Proxy Warden . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
6.2.4 Troubleshooting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
6.3 References . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
6.3.1 Prerequisites . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
6.3.2 How the Proxy Warden operates . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
6.3.3 Terminology . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
6.4 See also . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
7 Activity 33
7.1 Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
7.2 How to use the Activity workspace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
7.2.1 Pausing an operation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
7.2.2 Stopping an operation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
7.2.3 Skipping an operation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
7.2.4 Filtering by time range . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
7.2.5 Changing table columns . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
7.3 Reference . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
7.3.1 Statuses . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
7.4 See also . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
8 Jobs 37
8.1 Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
8.2 How to use Jobs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
8.2.1 Opening the jobs workspace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
8.2.2 Creating a job . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
8.2.3 Running a job . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
8.2.4 Viewing job returns . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
8.2.5 Editing a job . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
8.2.6 Defining job permissions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
8.3 Reference . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
8.3.1 Name . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
8.3.2 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
8.3.3 Command . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
8.3.4 Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
8.3.5 Environments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
8.3.6 Test (dry run) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
8.4 See also . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
9 Job Returns 43
ii
9.1 Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
9.2 How to view job results . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
9.2.1 Viewing job results by minion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
9.2.2 Viewing job results by time of completion . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
9.2.3 Downloading job results . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
9.3 Reference . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
9.3.1 Job return information fields . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
9.3.2 Custom Outputters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
9.4 See also . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
10 Schedules 49
10.1 Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
10.2 How to use Schedules . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
10.2.1 Creating a schedule . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
10.2.2 Checking job status . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
10.2.3 Modifying a schedule . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
10.3 Reference . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
10.3.1 Schedule settings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
10.3.2 Statuses . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
10.4 See also . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
11 Directory Service 53
11.1 Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
11.2 How to use Directory Service . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
11.2.1 Creating a Directory Service connection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
11.2.2 Enabling groups . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
11.2.3 Enabling users . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
11.2.4 Removing groups . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
11.2.5 Removing users . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
11.2.6 Editing Directory Service connection settings . . . . . . . . . . . . . . . . . . . . . . . . . . 55
11.2.7 Deleting a Directory Service connection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
11.3 Reference . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
11.3.1 Directory Service information fields . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
11.3.2 Authentication process . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
11.3.3 Archived groups and users . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
11.3.4 Nested groups . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
11.4 See also . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
12 Local Users 61
12.1 Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
12.2 How to manage local users . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
12.2.1 Creating a Local User . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
12.2.2 Cloning a Local User . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
12.2.3 Changing user settings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
12.2.4 Changing root password . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
12.3 Reference . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
12.3.1 Roles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
12.3.2 Master key authentication . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
12.4 See also . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
iii
13.2.3 Editing a role . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
13.3 Reference . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
13.3.1 Tasks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
13.3.2 Resource access . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
13.3.3 Difference between permitted tasks and resource access . . . . . . . . . . . . . . . . . . . . 69
13.3.4 Types of roles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
13.4 See also . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
14 Advanced permissions 71
14.1 Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
14.2 How to set Advanced permissions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
14.2.1 Defining advanced permissions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
14.3 Reference . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
14.3.1 Permission types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
14.3.2 Items . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
14.3.3 Resource access in the API . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
14.4 See also . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
16 Reports 79
16.1 Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
16.2 How to use Reports . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
16.2.1 Viewing reports . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
16.2.2 Downloading reports . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
16.3 Reference . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
16.3.1 Types of reports . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
16.4 See also . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
17 Pillars 83
17.1 Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
17.2 How to use Pillars . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
17.2.1 Creating a pillar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
17.2.2 Assigning pillar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
17.3 Reference . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
17.3.1 Pillars and the All Minions target . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
17.3.2 Value precedence . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
17.3.3 Pillar data format . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
17.3.4 Pillar dependencies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
17.4 See also . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85
18 File Server 87
18.1 Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
18.2 How to use the file server . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
18.2.1 Creating a file . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
18.2.2 Cloning a file . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
18.2.3 Deleting a file . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
18.3 Reference . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
18.3.1 Integration with existing file servers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
iv
18.3.2 Environments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
18.3.3 File server access . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
18.4 See also . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
19 SecOps Compliance 91
19.1 Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
19.1.1 Policies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
19.1.2 Assessments and remediation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
19.1.3 Customization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92
19.2 How to use SecOps Compliance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92
19.2.1 Building a policy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92
19.2.2 Running an assessment . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93
19.2.3 Remediating all checks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94
19.2.4 Adding exemptions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
19.2.5 Defining SecOps Compliance permissions . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
19.3 Reference . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97
19.3.1 The SecOps Compliance content library . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97
19.3.2 Compliance policies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97
19.3.3 Activity status . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99
19.3.4 Assessment results . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99
19.4 See also . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99
v
21.4 See also . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115
26 Samples 133
26.1 Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133
26.2 How to use SaltStack Enterprise samples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133
26.3 Reference . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133
26.3.1 Default targets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133
26.3.2 Sample jobs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134
26.4 See also . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136
vi
28.4 Permissions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140
28.4.1 API Permission values . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140
28.5 Licensing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143
28.6 RPC over WebSockets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143
28.7 HTTP Bridge . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143
28.8 RPC Endpoints . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144
28.8.1 admin interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144
28.8.2 api interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145
28.8.3 audit interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146
28.8.4 auth interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147
28.8.5 background_jobs interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154
28.8.6 cloud interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154
28.8.7 cmd interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154
28.8.8 conf interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159
28.8.9 formula interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159
28.8.10 fs interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159
28.8.11 job interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162
28.8.12 kv interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164
28.8.13 license interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164
28.8.14 master interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167
28.8.15 masterfs interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169
28.8.16 minions interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169
28.8.17 pillar interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173
28.8.18 remote interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174
28.8.19 ret interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174
28.8.20 roster interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177
28.8.21 schedule interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177
28.8.22 sec interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182
28.8.23 settings interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 204
28.8.24 stats interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 206
28.8.25 test interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 207
28.8.26 tgt interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 208
28.8.27 vman interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211
29 Troubleshooting 227
29.1 Pages not Loading . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227
29.2 Some Minions Are Not Running Jobs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227
29.3 Job Results Take a Few Minutes to Display . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227
29.4 Button Labels are Truncated . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227
29.5 Generate a Bug Report . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 228
29.6 Additional Troubleshooting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 228
vii
viii
SaltStack Enterprise Documentation, Release 6.1.0
Contents:
CONTENTS 1
SaltStack Enterprise Documentation, Release 6.1.0
2 CONTENTS
CHAPTER
ONE
SALTSTACK ENTERPRISE
SaltStack Enterprise extends your Salt infrastructure with advanced job management and execution, role-based se-
curity, reporting, and more. SaltStack Enterprise adds the following components to your Salt infrastructure:
• Enterprise API
• Enterprise Console
• Salt master plug-in
Enterprise API is much more than a command and control interface. Enterprise API provides a remote fileserver,
external pillar, job return database, and sophisticated role-based security with external LDAP authentication.
Enterprise Console provides a visual interface that simplifies management and reporting. Enterprise Console inte-
grates directly with Enterprise API to enable job execution and history, display presence, and enable visual manage-
ment of the Enterprise API file server, pillar store, and role-based security.
3
SaltStack Enterprise Documentation, Release 6.1.0
The Salt master plug-in is installed on each Salt master to enable integration with Enterprise API. The Salt master
plug-in enables each Salt master to receive jobs, files, and pillar data from Enterprise API, and send grains, job returns,
and events to Enterprise API.
TWO
ARCHITECTURE
2.1 Overview
The following diagram lists the primary components of SaltStack Enterprise, along with the integration points be-
tween each.
Enterprise API is the central component in SaltStack Enterprise. Enterprise API provides RPC endpoints to receive
management commands from Enterprise Console, as well as RPC control endpoints to interface with connected Salt
Masters. All communication is sent using RPC API calls over WebSockets or HTTP(s).
For more on Enterprise API, see RPC Endpoint Documentation.
Role Based Access Control is at the core of the Enterprise API. All connections and operations are processed through
the role-based security system to provide granular control of your Salt environment. If an operation is allowed,
Enterprise API forwards the command through the secure Command and Control interface to Salt masters. Since all
access goes through the Enterprise API role-based security system, you do not need to set up individual accounts or
LDAP integration points on each Salt Master. Enterprise API provides the central management point for all access.
5
SaltStack Enterprise Documentation, Release 6.1.0
2.1.2 LDAP
Lightweight Directory Access Protocol (LDAP) in Enterprise API is used to import user access policy settings such
as authentication details from your server. This means you can import users and groups by synchronizing Enterprise
API with your LDAP server. This also allows for Active Directory (AD) integration.
For more on using LDAP in SaltStack Enterprise, see LDAP.
2.1.3 Database
Enterprise API uses a database to store Salt Minion data, job returns, event data, files and pillar data, local user
accounts, as well as additional settings for Enterprise Console.
Enterprise API stores certain types of data, such as cached data, in temporary storage. It also uses temporary data
storage to distribute queued work to background workers. For more on background workers, see Background worker
options (https://support.saltstack.com/hc/en-us/articles/360020836791-Background-Worker-Options).
Enterprise Console is a web application that provides the front end to Enterprise API. Enterprise Console interfaces
directly with Enterprise API to enable simple management of all systems in your environment.
Note: To take advantage of the Enterprise Console’s full range of features, use the latest version of one of the
following web browsers.
• Google Chrome
• Mozilla Firefox
The Salt Master plugin installed on the Salt Master allows the Salt Master to communicate with the SaltStack Enter-
prise backend server. This allows the Salt Master to access processes taking place, as well as external files and pillar
data, stored on the backend server.
The plugin uses the existing extension points provided by Salt for integration. For example, job returns are collected
using a master-side Salt external job cache, and the Enterprise API file server uses a Salt fileserver plugin.
For more on the master plugin, see Master Plugin.
6 Chapter 2. Architecture
SaltStack Enterprise Documentation, Release 6.1.0
The following diagram illustrates the process that takes place when a job run is initiated in Enterprise Console.
2.1. Overview 7
SaltStack Enterprise Documentation, Release 6.1.0
by each Salt Master. For more on the external job cache, see Storing job results in an external system (https://docs.
saltstack.com/en/latest/topics/jobs/external_cache.html).
8 Chapter 2. Architecture
CHAPTER
THREE
ENTERPRISE CONSOLE
3.1 Overview
The Enterprise Console is a web application that provides the front end to Enterprise API. It is the central interface
to manage minions, users, roles, jobs, and more. Management tasks are available through different workspaces.
Note: Manual page refreshes might be required when changing views or performing operations. If the view does
not change after you perform an action, reload the page.
Enterprise Console is used to manage your infrastructure in a web browser interface. In Enterprise Console you
can complete tasks through different workspaces, view documentation, and change your user preferences, as well
as your password.
Note: Some tasks are available through Enterprise API only. See Enterprise API .
1. In a web browser, go to the SaltStack Enterprise URL provided by your administrator. For a list of supported
browsers, see Supported web browsers.
2. In the login page, enter your username and password and click Log In.
Note: If you enter incorrect credentials, the page might load for up to 30 seconds before you are prompted
to retry. For assistance, contact your administrator.
1. In any workspace in Enterprise Console, click the menu in the upper right and select Preferences.
2. Update your preferences as required and click Save.
For a description of available preferences, see User preferences.
9
SaltStack Enterprise Documentation, Release 6.1.0
1. In any workspace in Enterprise Console, click the menu in the upper right and select Preferences.
2. Under Update Password, enter the new password in the password field, and again to confirm.
3. Click Save.
In any workspace in Enterprise Console, click Help in the upper right and select Help Documentation.
3.3 Reference
To take advantage of the Enterprise Console’s full range of features, use the latest version of one of the following
web browsers.
• Google Chrome
• Mozilla Firefox
Option Description
Log out after You will be logged out automatically after this length of inactivity.
Theme Choose from the dark or light theme.
3.3.3 Workspaces
Workspace Description
Minions View minion details, run jobs, and save new targets.
You can also use run jobs, accept or reject keys, as well
as assign a role or pillar to a target. For more on min-
ions and targets, see Minions and targets.
Activity Monitor the status of jobs and other operations. You
can pause or stop operations that are in progress, or
skip upcoming iterations of a scheduled task. For more
on the activity workspace see Activity.
Elements Build and create the components that can be reused in
your infrastructure, including the following:
• Jobs
• Pillars
• Activity
• File Server
SecOps Compliance | Manage the security compliance posture for all the systems in your
environment. For more on SecOps Compliance, see SecOps Compliance.
FOUR
4.1 Overview
The Minions workspace is used to view minion details, run jobs or commands, define new targets, and adjust target
settings such as attached pillars.
The workspace includes a list of Salt Minions. Minions are nodes running the Salt Minion service, which can listen
to commands from a master and perform the requested tasks. Salt Masters can themselves run the minion service
to aid in management of the machine running the Salt Master service.
The left panel of the workspace includes a list of targets. A target is the group of minions, masters, or a single master
that a job’s Salt command applies to. Targets can contain Salt Minions that are connected to any Salt Master in your
environment. You can attach pillar data to different targets. Pillars are structures of data defined on the Salt Master
and passed through to one or more minions, using targets. They allow confidential, targeted data to be securely sent
only to the relevant minion. See Pillar.
By default, when you open the workspace, the All Minions target is active. This is a list of all minions you have
permission to access.
SaltStack Enterprise includes a Run Command control that allows you to run a single command without defining
a reusable job. This is useful for executing commands quickly, or running one-off jobs that are not part of your
everyday workflow, for example when troubleshooting, or during initial configuration. For more information, see
Running a command.
The Minions workspace is used to view minion details, run jobs or commands, save new targets, and attach pillar
data to targets. For more on jobs, see Jobs.
The workspace also includes the ability to search for a minion, or to sort minions based on ID or other system
properties (referred to as grains).
13
SaltStack Enterprise Documentation, Release 6.1.0
1. In the Minions workspace, select all minions you want to include in the minion data report.
2. Click More actions.
3. In the menu, under Download table, select the required format to begin the download.
1. In the Minions workspace, click the filter button for the column you want to search.
2. Start typing the search criteria to see the rows filter instantly. For example, you might search for a minion ID
in the Minion column.
Note: You can also click the column name once to sort the rows in descending order. Click again to reverse
the order.
2. In the menu, select or deselect columns you want to include in the table view.
1. In the left panel, select the target you want to run the job against.
The name of the currently selected target shows above the minions list.
Note: Targets are dynamic, and new minions are automatically added to any matching target definition.
Make sure to review the minions included in a target before you run a job.
Note: You can run only jobs that are defined for the selected target, or that are not defined for any specific
target.
1. In the left panel, select the target you want to run the command against.
2. Click Run Command.
3. In the Run Command dialog, confirm the correct command and target are selected, then select a function.
Note: If you select the salt-run command, you can choose to run the command on all masters, or on a
specific master. This is known as a Salt runner. For more on Salt runners, see Salt runners.
Include any arguments as needed. For more on Salt commands and functions, see Jobs.
4. Click Run Command.
The command is executed as a job. You can track its progress and results as for other jobs in SaltStack Enter-
prise. See Job Returns.
Note: If you select Compound as the first criterion, you must follow the targeting syntax included in the ,
and you must include any secondary criteria in the compound target definition. SaltStack Enterprise will not
allow you to add any other criteria in the target editor. For more on compound targeting, see Target criteria.
1. In the Minions workspace, select all minions to include in the list and click Create target.
Note: Filtering or sorting your minions can be useful for defining a list. See ‘Filtering and sorting the
minion list‘_.
Note: You can also assign a pillar to a target in the Pillars Workspace. See Pillar.
4.3 Reference
The Presence column indicates if SaltStack Enterprise has received any job data from the minion recently, within a
defined interval called raas_presence_expiration. By default, this interval is set to 3600 seconds. Presence
can provide an indicator of machine health by using the Presence beacon installed on minions.
If the Presence beacon is in place, minions send periodic status payloads to their masters, which SaltStack Enterprise
then retrieves, influencing the status displayed in the Presence column.
Beacons are used to monitor non-Salt processes. When monitored activity occurs, an event is sent that can be
configured to trigger a reactor. For more on beacons, see Salt beacon reference (https://docs.saltstack.com/en/latest/
topics/beacons/index.html).
Note: You can check which beacons are installed and active on a minion by running a job with beacons.list
on a minion’s respective target. For more on jobs, see Jobs.
4.3. Reference 17
SaltStack Enterprise Documentation, Release 6.1.0
Disconnected SaltStack Enterprise has seen a response from the minion, but not within the last
raas_presence_expiration interval.
Key states display in the Key state column of the Minions workspace.
On initial connection, a Salt Minion sends its public key to the Salt Master, which the master can accept, reject, or
deny. SaltStack Enterprise displays keys with one of the following statuses.
Accepted Key was accepted and the minion can communicate with the Salt Master.
Pending Key is not accepted or denied. In this state, connections are not accepted from the Salt Minion and jobs
are not executed.
Rejected Key was explicitly rejected using the Reject Key command. In this state, connections are not accepted
from the Salt Minion and jobs are not executed.
Denied Key was rejected automatically by the Salt Master. This occurs when a minion has a duplicate ID, or when
a minion was rebuilt or had new keys generated and the previous key was not deleted from the master. If this
happens, delete the denied key to trigger key regeneration. In this state, connections are not accepted from
the Salt Minion and jobs are not executed.
For more on managing keys, see Keys.
Targeting in SaltStack Enterprise is similar to targeting in Open Source Salt, but SaltStack Enterprise has a simplified
interface for defining targets, which also enables you to save target definitions for reuse. For more on targeting in
Salt, see .
Each target in SaltStack Enterprise includes a name, master, and target criteria, described in detail below.
Name
Enter a target name. Target names do not have to be unique. This might result in different items displaying with the
same name in the Enterprise Console.
Masters
Under the Master field, select a master whose minions you want to target. All additional target criteria are applied
only to the subset of minions associated with the selected master.
For example, if your environment has several machines responsible for running a particular application, and you
have partitioned your Salt infrastructure so these machines are all connected to a single master, you might create a
target that includes the entire subset of minions by selecting only the master.
Target criteria
Use target criteria to specify a group of minions, referring to the following field descriptions.
Targets are dynamic, and new minions are automatically added to any matching target definition. Saving your target
as a list prevents new Salt Minions that match the dynamic target setting from being added to a target automatically.
Grain Match a specific grain value, for example, osfullname is Debian. Once you select a grain, the value list
pre-populates so you can click the field to view available options, or start typing. Grains are an interface that
derives information about the underlying system. Grains are collected for the operating system, domain name,
IP address, kernel, OS type, memory, and many other system properties. For more on grains, see Salt grains
reference (https://docs.saltstack.com/en/latest/topics/grains/).
Glob Wildcard match using the minion ID. For example, you might enter webserver* to select multiple minions,
named webserver01, webserver02, and webserver03.
List Specify a list of minions to include in the target. For example, dc3-north-db1, dc3-north-db2.
Note: Specifying a list is useful if you do not want to grant access to targets dynamically. This prevents new
Salt Minions that match the dynamic target criteria from being added to a target automatically.
Compound Combine multiple target interfaces, separated by conjunctions and, or, and not. To take advantage of
compound targeting in SaltStack Enterprise, first review compound targeting in the Salt Targeting Reference
(https://docs.saltstack.com/en/latest/topics/targeting/index.html).
Note: If you select Compound as a criterion, you must follow Salt’s compound targeting syntax, and include
any secondary criteria in the compound target definition. SaltStack Enterprise does not allow you to include
any other types of criteria in addition to a Compound criterion.
FIVE
MINION KEYS
5.1 Overview
The Keys workspace is used to manage minion keys. A minion key allows encrypted communication between a Salt
Master and Salt Minion. The workspace provides an overview of all minions filtered by their respective key states.
On initial connection, a Salt Minion sends its public key to the Salt Master, which the master can accept, reject, or
deny.
Note: SaltStack Enterprise also provides the ability to manage master keys. For more on master keys, see Master
Plugin.
In the Keys workspace, you can accept, reject, or delete minion keys. SaltStack Enterprise also provides the ability
to manage master keys. For more on master keys, see Master Plugin.
Before accepting a new minion key, you must first install the Salt Minion service on the new machine, and configure
it to communicate with the Salt Master.
Deleting a minion key is useful for resetting a minion’s connection, for example you might delete a minion key and
then re-accept it.
For a description of the different key states, see Key States.
Note: Before you can accept a new minion key, you must first install the Salt Minion service on the new machine,
and configure it to communicate with the Salt Master. See Prerequisites to accepting keys.
21
SaltStack Enterprise Documentation, Release 6.1.0
Note: In a multimaster scenario, you must accept keys on all masters separately. See the Knowledge Base for
more information.
Note: The key appears under the Rejected tab after several seconds.
5.3 Reference
Before you can accept a new minion key, you must first complete the following on the new machine:
• install the Salt Minion service
• configure the minion to communicate with the Salt Master
On initial connection, a Salt Minion sends its public key to the Salt Master, which the master can accept, reject, or
deny. SaltStack Enterprise displays keys with one of the following statuses.
Accepted Key was accepted and the minion can communicate with the Salt Master.
Pending Key is not accepted or denied. In this state, connections are not accepted from the Salt Minion and jobs
are not executed.
Rejected Key was explicitly rejected using the Reject Key command. In this state, connections are not accepted
from the Salt Minion and jobs are not executed.
Denied Key was rejected automatically by the Salt Master. This occurs when a minion has a duplicate ID, or when
a minion was rebuilt or had new keys generated and the previous key was not deleted from the master. If this
happens, delete the denied key to trigger key regeneration. In this state, connections are not accepted from
the Salt Minion and jobs are not executed.
SIX
ENTERPRISE PROXY
6.1 Overview
The Enterprise Proxy is an enhanced Salt Proxy Minion that overcomes the limitations of the Proxy Minions in
Open Source Salt. In Open Source Salt, there is a one-to-one correspondence between a salt-proxy process and a
controlled device. In installations with large numbers of proxied devices, memory usage becomes a significant issue.
The Enterprise Proxy removes this limitation.
Note: For clarification on Salt Proxy Minion and Enterprise Proxy terminology, see Terminology.
The Enterprise Proxy is useful for enabling managing a large number of devices, for example, to connect to and
configure many network routers at once.
The Proxy Warden is an accompanying SaltStack Enterprise module that connects Enterprise Proxies with the avail-
able nodes as needed automatically. This eliminates the need to manually define which nodes need to run which
proxies. The Proxy Warden allows you to identify the various machines running the Salt Minion service, and dis-
tribute connections across those machines as needed to avoid overloading any one minion.
Both the Enterprise Proxy and the standard Salt Proxy Minion enable controlling devices that cannot run a standard
Salt Minion. However, the Enterprise Proxy enables control for multiple devices via a single salt-proxy process,
in contrast to the standard Salt Proxy Minion, which can control only one device per process.
This is illustrated in the following diagram.
25
SaltStack Enterprise Documentation, Release 6.1.0
In this diagram, minioncontroller1 includes two Salt Proxy Minions. Both minioncontroller2 and minioncontroller3
include an Enterprise Proxy that controls multiple Proxy Minions.
For more on the standard Salt Proxy Minion, see the Salt reference guide.
SaltStack Enterprise also includes the Proxy Warden module, which allocates Enterprise Proxies to available Minions
as needed automatically. This eliminates the need to manually define a list of Proxy Minions associated with each
Enterprise Proxy.
The Proxy Warden allows you to identify the various machines running the Salt Minion service, and distribute
connections across those machines as needed to avoid overloading any one minion.
Note: For a quick reference of Salt Proxy Minion and Enterprise Proxy terminology, see Terminology.
First, ensure you have configured all prerequisites. See Prerequisites. Once all prerequisites are satisfied, complete
the following steps.
Like other components of Salt, the Salt Proxy Minion’s behavior is pluggable through Proxy modules. These modules
allow Proxy Minions to talk to various devices.
The Enterprise Proxy leverages the same functionality through a special Proxy module called deltaproxy.
Enterprise Proxies are best configured through Salt’s Pillar. This offers greater efficiency than editing files on every
node that will host a Control Proxy.
Note: For a quick reference of Salt Proxy Minion and Enterprise Proxy terminology, see Terminology.
1. The Pillar top file on the Salt Master should contain a reference to each Control Proxy which will be connected
to that master, as well as a reference to each Delta Proxy that will be controlled by a Control Proxy. For
example:
/srv/pillar/top.sls
base:
controlproxy1:
- controlproxy1
device1:
- device1_definition
device2:
- device2_definition
In this example, controlproxy1 is the ID for the service started with salt-proxy --proxyid
controlproxy1.
The subsequent device1 and device2 entries (along with the .sls files or pillar entries in the Enterprise
Console) contain the data necessary to communicate with the devices themselves.
2. Enter the following pillar configuration for each Control Proxy. Replace device1 and device2 with the
names of Delta Proxy IDs that will be driven by this Control Proxy.
proxy:
proxytype: deltaproxy
ids:
- device1
- device2
ids specifies the IDs of all Proxy devices to be controlled. These IDs correspond to entries in the top file
described in step 1.
3. Configure settings for each Proxy Minion in its respective sls file (or equivalent pillar entries in the Enterprise
Console), as in the following examples.
/srv/pillar/device1.sls
proxy:
proxytype: rest_endpoint_sample
host: 172.23.23.5
/srv/pillar/device2.sls
proxy:
proxytype: rest_endpoint_sample
host: 172.23.23.6
reactor:
- 'deltaproxy/start':
- /srv/reactor/deltaproxykeys.sls
metaproxy: deltaproxy
This step validates that the Salt Master and Enterprise Proxy components are correctly installed. After successfully
completing the following, you can move on to configuring the Proxy Warden, which will automatically start the
Enterprise Proxy.
1. After configuring the reactor and pillar entries for the Enterprise Proxy service, on each Salt Master, restart
the salt-master process.
systemctl restart salt-master
2. On your Control Proxy, start the salt-proxy process.
salt-proxy -l debug --proxyid=<CONTROL_PROXY_ID>
Watch for error messages in the resulting console output.
3. On each Salt Master, confirm that the new key for the control proxy is visible, and accept the key. Keys for your
Delta Proxies should appear a few moments later. The Enterprise Proxy reactor accepts them automatically.
For more on accepting keys, see the Salt reference guide.
You can now run commands on the Proxy Minions as you would other Salt Minions in SaltStack Enterprise,
such as the following.
salt <PROXY_MINION_ID> test.ping
For more on minions, see Minions and Targets.
Note: Before configuring the Proxy Warden, make sure to review how the Proxy Warden operates. See How the
Proxy Warden operates.
In the above configuration stanza, tgt and tgt_type form a target that should match all minions that will
host Control Proxies (not proxy IDs or Delta Proxy IDs, but rather, hosts running a salt-minion that will also
run Control Proxies).
The proxies key is a list of all the IDs for control proxies. Each control proxy ID must have a pillar entry
with a proxy key, and a subkey proxymodule with a value of deltaproxy. It also needs a subkey ids
that contains a list of all the Delta Proxy IDs for which this control proxy is responsible.
Each Delta Proxy ID needs a pillar entry that starts with the proxy: key, contains a proxymodule: subkey
indicating which proxymodule needs to be loaded to communicate with this device, and also includes subkeys
for any connection information required for the device.
4. Restart the SaltStack Enterprise service.
systemctl restart raas
Within a few moments, the proxy target group and pillar appear in the Enterprise Console.
A few moments later, each minion hosting Control Proxies receives a job from SaltStack Enterprise that starts
the salt-proxy with the Control Proxy IDs.
6.2.4 Troubleshooting
6.3 References
6.3.1 Prerequisites
• Install Salt Version 2019.2.1 or later on the machines that will host the Control Proxies.
Note: Salt Version 2019.2.1 or later must be installed only on these machines. This is not required for other
Salt Masters or Minions.
• Ensure that all the required libraries for talking to your devices are installed on the Control Proxy hosts. For
example, if you are talking to network devices via the Napalm libraries, ensure that all the Napalm Python
modules are installed on these machines.
• Ensure the devices you want to control are configured to communicate with the proxies. Examples of what
this might involve include:
– enabling their API endpoints
– changing firewall settings to permit network connections from the proxy machines
– configuring restricted or unrestricted user accounts on the devices
6.3.3 Terminology
SaltStack Enterprise and Open Source Salt include overlapping concepts and terminology. Refer to the following
descriptions for clarification about key terms.
Salt Proxy Minion (or salt-proxy) The single process started with the salt-proxy command that allows a de-
vice to join a Salt infrastructure.
SaltStack Enterprise
Enterprise Proxy The general term for Proxy Minions enhanced with Enterprise modules.
Control Proxy The process started by the salt-proxy command, that uses the deltaproxy proxy module,
and communicates with multiple devices.
Delta Proxy The minion ID attached to a single device, but hosted by a single Control Proxy. One Control Proxy
can support many Delta Proxies.
SEVEN
ACTIVITY
7.1 Overview
The Activity workspace is used to monitor the status of jobs and other operations. The Activity workspace has
three tabs that sort operations by status, Completed, In Progress, and Upcoming. The table on each tab shows
information about an operation, such as status, schedule (if available), target information, and more. You can adjust
the data columns displayed using the view button in the lower-left.
The Activity workspace gives visibility to many types of executions: scheduled jobs, ad-hoc jobs, and compliance
assessments. For more on assessments, see SecOps Compliance (Note: A SecOps Compliance license is required).
The Completed tab of the Activity workspace is used to monitor the status of completed operations. The Completed
tab shows the job ID (JID) for completed jobs. For more on job results, see Job results.
At the upper-right of the table you can choose a period of completed operations to show.
The In Progress tab of the Activity workspace is used to monitor the status of operations that are currently running.
It also shows minion information, the JID, and the user who started the operation.
The Upcoming tab of the Activity workspace is used to monitor the status of upcoming operations. Details about
the operation like the target, current status, start time, and associated schedule are available in the table.
At the upper-right of the table you can choose a period of upcoming operations to show.
Jobs and other operations move from In Progress to Completed when all associated nodes have finished reporting.
Note: In some cases, an operation could move to Completed with Partial status. This happens if minions fail to
respond when the master checks whether the minion is still working on an assigned task. In these cases, SaltStack
Enterprise checks with the master to see if the operation is running. If the master reports that the operation has
finished running, the operation moves to the Completed tab, but displays with Partial status.
Minions might not return anything due to system misconfiguration, network outages, client issues, or machine
failures. In these cases, the job might show with Partial status under the Completed tab.
You can pause or stop operations that are in progress, or skip upcoming iterations of a scheduled operation. You can
also adjust the table view to show or hide additional details.
33
SaltStack Enterprise Documentation, Release 6.1.0
1. Go to Activity > In Progress, and select the operations you want to pause.
2. Click Pause.
3. Click Pause in the confirmation dialog.
Note: Depending on operation size and progress, the operation may finish running before it can be paused.
Note: Depending on operation size and progress, the operation may finish running before it can be stopped.
1. In either Completed or Upcoming, go to the upper-right of the Activity workspace and click the dropdown.
2. In the resulting menu, select the time range of activity you want to see, for example Past 12 Hours or Next 12
Hours.
34 Chapter 7. Activity
SaltStack Enterprise Documentation, Release 6.1.0
1. In any tab of the Activity center, click the Column button in the lower left corner.
2. In the menu, select or deselect columns you want to include in the table view.
7.3 Reference
7.3.1 Statuses
Each tab in the Activity workspace includes additional status details for each operation as follows.
In Progress
Upcoming
Scheduled Operation will run at a set time, indicated in the Start time column.
Skipping Operation instance scheduled for the indicated time will not run.
Disabled Operation is part of a disabled schedule, and will not run.
Completed
• Jobs
• Job Results
• Schedules
36 Chapter 7. Activity
CHAPTER
EIGHT
JOBS
8.1 Overview
Jobs are used to run remote execution tasks, apply states, and start Salt runners. The Jobs workspace is where you
can configure and save job settings for reuse. You can run jobs from within the Jobs workspace, or from other screens
in Enterprise Console.
Each job in the Jobs workspace has predefined settings. You can edit settings on existing jobs, or create a new job
with its own unique settings.
In order for a job to run, it must include both a function and either a target, a master, or multiple masters. You can
define a target in a job’s settings, or leave the target undefined to select a target each time the job runs.
The Jobs workspace allows you to define role-based access to each job. In addition to defining role access on the
job, you must also assign roles permission to execute corresponding tasks in the Roles editor. For more on job
permissions, see Roles and permissions.
You can create new jobs and edit existing ones from the Jobs workspace. Once job settings are defined, you can run
ad-hoc jobs, or create schedules to run jobs in the future. See Schedules.
SaltStack Enterprise includes a Run Command control that allows you to run a single command without defining
a reusable job. This is useful for executing commands quickly, or running one-off jobs that are not part of your
everyday workflow, for example when troubleshooting, or during initial configuration. For more information, see
Running a command.
You can also define which roles can view, edit, run, and delete different jobs.
37
SaltStack Enterprise Documentation, Release 6.1.0
1. In the Jobs workspace, click the menu for the job you want to run.
2. Click Run Now.
Note: If the job is configured to include a target or master, this is displayed for confirmation.
Note: You can also run jobs from the Minions workspace. See Minions and Targets.
1. In the navigation bar, select Activity and go to Completed to see a list of completed jobs.
2. Select a job ID in the JID column to view the job return details. For more on job returns, see Job Returns.
38 Chapter 8. Jobs
SaltStack Enterprise Documentation, Release 6.1.0
Note: In addition to defining role access on the job, you must also assign roles permission to execute corre-
sponding tasks in the Roles editor. For more on job permissions, see Roles and permissions.
8.3 Reference
8.3.1 Name
Enter a name for the job. This will show in the Jobs, Minions, and Activities workspaces, as well as in the Roles
editor.
8.3.2 Description
Enter a description for the job (optional). This description will show in your list of jobs in the Jobs workspace.
8.3.3 Command
Note: SaltStack Enterprise includes a Run Command control that allows you to run a single command without
defining a reusable job. This is useful for executing commands quickly, or running one-off jobs that are not part of
your everyday workflow, for example when troubleshooting, or during initial configuration. For more information,
see Running a command.
Target
A target is the group of minions, masters, or a single master that a job’s Salt command applies to. When salt is
selected, you can optionally specify the target group of minions to run the job on. If the field is left blank, you will
be prompted to select a target each time the job runs.
8.3. Reference 39
SaltStack Enterprise Documentation, Release 6.1.0
Master
The Salt Master is a central node used to issue commands to minions. When salt-run is selected, specify a Salt
master to run the job on, or use the default All Masters setting.
salt-run jobs are also known as Salt runners. Salt runners are modules used to execute convenience functions
on the master. For more on using salt-run, see Salt runners.
8.3.4 Function
Enter a function to define what happens when the job runs. You can define a single remote execution job, a state file
job, or a Salt runner job. For a list of Salt functions, see Salt Module Reference (https://docs.saltstack.com/en/latest/
ref/index.html).
To define a single remote execution job, include a function and any necessary arguments in the job settings.
40 Chapter 8. Jobs
SaltStack Enterprise Documentation, Release 6.1.0
A state file job applies states to a target, and can be based on at least one command. A state function is a function
contained inside a state module which can manage the application of a particular state to a system. State functions
frequently call out to one or more execution modules to perform a given task. A highstate applies all states defined
in the top file. You can view and add state files in the File Server. See File Server.
To apply a state file to a job, use the state.apply function. To perform a highstate, use the state.apply or
state.highstate function in the job settings.
When you add a state call to a job, additional fields display where you can select the state files you want to apply.
You can also pass optional pillar overrides in JSON format.
Note: Pillar data provided on the job page is sent along with the job and other authenticated minions might be able
to see it. For increased data protection, assign sensitive data in standard pillar instead. See Pillar.
For more on Salt States, see the Salt documentation: How do I use Salt States? (https://docs.saltstack.com/en/latest/
topics/tutorials/starting_states.html).
Salt runners
A salt-run job applies to a master or group of masters. salt-run jobs are also known as Salt runners. Salt
runners are modules used to execute convenience functions on the master. You can use Salt runners to run orches-
tration, power minions remotely, call webhooks, and more. They are useful for executing tasks centrally or from a
central starting point, for example to apply a highstate to all minions associated with a given master.
To configure an orchestration runner job, use the state.orchestrate function. When you add an orchestration
call to a job, additional fields display where you can list the orchestration files you want to apply. You can also pass
optional pillar overrides in JSON format.
Note: Pillar data provided on the job page is sent along with the job and other authenticated minions might be able
to see it. For increased data protection, assign sensitive data in standard pillar instead. See Pillar.
For more on Salt runners, see the Salt Runners Reference (https://docs.saltstack.com/en/latest/ref/runners/).
8.3. Reference 41
SaltStack Enterprise Documentation, Release 6.1.0
8.3.5 Environments
Select the environment where the state or orchestration file is located. This is a subdirectory of the root directory in
the File Server. File Server.
Run a test job and generate a mock job return. If you select Test, the job will not run and no changes will be made.
If this option is left unselected, you can choose to run the job as a test later when you run the job.
Test (dry run) is available only for certain functions. For more information, contact your administrator.
42 Chapter 8. Jobs
CHAPTER
NINE
JOB RETURNS
9.1 Overview
Job returns provide details about results of jobs that have finished running. SaltStack Enterprise includes several
custom outputters to format results for common job types.
Jobs are used to run remote execution tasks, apply states, and start Salt runners. For more on jobs, see Jobs.
You can view a list of completed jobs for a given minion, or from a given time period. You can also view a detailed
report of each job return. For more on custom outputters included in job returns, see Custom Outputters.
Minions are nodes running the Salt Minion service, which can listen to commands from a master and perform the
requested tasks. For more on minions, see Minions and Targets.
Note: SaltStack Enterprise returns data through Salt Masters and then to the Enterprise API returner, so the job
history tab might not show data immediately. If you are viewing job results for a single job run immediately after
starting the job, the results tab might show incomplete data until the Salt Masters have processed the returns and
pushed them back to the Enterprise API.
43
SaltStack Enterprise Documentation, Release 6.1.0
1. Select a JID, following steps to view job results by minion or time of completion above.
2. Click JSON in the upper right of the job return.
The .json file starts downloading to your browser.
9.3 Reference
The job results page displays the following details about the selected job run:
function | job id (jid) Displays general information about the job.
job name | target | masters | user | return details Displays specific information about this job run.
Summary | Custom outputter | Default | Full | Raw | Job Info Change the return data formatting by selecting
from the following options.
Summary A list of minions targeted by the job. Each minion includes additional details you can view by
opening or closing its respective dropdown.
Custom outputter A customized representation of the job results designed for the function associated with
the job. If a custom outputter is available, it is automatically selected by default. For more on custom
outputters, see Custom Outputters.
Default A minimal set of job return data in an expandable list.
Full All job returns by minion in an expandable list.
Raw Raw JSON data structure with minimal formatting.
Job info High-level job overview, including minions expected to return as well as those that did not return.
Minion ID filter Quickly display results for a subset of Salt Minions.
Success | Failed | Test Expand or shrink job results by return type. By default, Failed is selected to display addi-
tional data for Salt Minions that reported a failure. Test expands locations where test=True indicates that
changes would be made.
SaltStack Enterprise includes several custom outputters to format results for common job types, incuding the fol-
lowing:
• State jobs
• test.ping
• disk.usage
• user.getent
• status.cpuinfo
• network.routes
• network.ipaddrs
• network.netstat
• cmd.run
• cmd.script
• pkg.list_pkgs
Examples
State Jobs
Returns results of a given state module when running a state job, including state.sls, state.highstate,
state.apply. A state function is a function contained inside a state module which can manage the application
of a particular state to a system. State functions frequently call out to one or more execution modules to perform a
given task. For more on Salt States, see . For more on jobs, see Jobs.
Test.ping
Returns results of running test.ping for each node in the target group.
Disk Usage
Returns usage information for volumes mounted on minions in the target group.
9.3. Reference 45
SaltStack Enterprise Documentation, Release 6.1.0
Getent
CPU info
This outputter includes different views you can apply using the left column.
Routes
IP Address
Netstat
List packages
• Jobs
• Minions and Targets
• Roles and Permissions
TEN
SCHEDULES
10.1 Overview
Schedules are used to automate job execution. You can schedule one-off or recurring jobs to monitor your environ-
ment and run jobs continuously at any time. In the Schedules workspace, you can disable schedules and skip jobs,
as well as run a scheduled job.
SaltStack Enterprise includes a range of scheduling options, allowing you to build custom schedules based on your
organization’s needs. Scheduling is also available through the SaltStack Enterprise Scheduler API. See RPC Schedule
Interface.
You can access your scheduled jobs, sorted by status, in the Activities workspace. See Activities. For more on how
to define job settings, see Jobs.
You can create schedules to run jobs at set intervals over a defined time period. The Schedules workspace also has
controls you can use to run or skip a job or disable an entire schedule.
Note: You can also view the status of scheduled jobs in the Activities workspace. See Activities.
49
SaltStack Enterprise Documentation, Release 6.1.0
1. In the Schedules workspace, select the checkbox associated with the scheduled job.
Note: You can select more than one schedule to run multiple jobs at once.
1. In the Schedules workspace, click on a schedule name and go to the Upcoming tab.
2. Select the checkbox associated with the job instance you want to skip.
3. Click Skip.
4. In the confirmation dialog, click Skip.
1. In the Schedules workspace, select the checkbox associated with the schedule.
2. Click Disable.
3. In the confirmation dialog, click Disable.
10.3 Reference
Job / Command
Specify the job or command to include in the schedule. For more on defining job settings, see Jobs.
Target
A target is the group of minions, masters, or a single master that the job’s Salt command applies to. This field allows
you to choose either a target group or master, depending on the selected command.
Timezone
Jobs included in the schedule run based on the time zone indicated in this field.
Schedule frequency
Choose the schedule frequency from Recurring, Repeat Date & Time, Once, or Cron Expression. Additional
options are available, depending on the scheduled activity, and on the schedule frequency you choose.
Recurring Set an interval for repeating the schedule, with optional fields for start or end date, splay, and maximum
number of parallel jobs.
Repeat Date & Time Choose to repeat the schedule weekly or daily, with optional fields for start or end date, and
maximum number of parallel jobs.
Once Specify a date and time to run the job.
Cron Enter a cron expression to define a custom schedule based on Croniter syntax. See the CronTab editor (https:
//crontab.guru/examples.html) for syntax guidelines. For best results, avoid scheduling jobs fewer than 60
seconds apart when defining a custom cron expression.
10.3.2 Statuses
The Schedules workspace displays the current status for each schedule. When you view details for a schedule, you
can also see the current status for each scheduled job.
Schedule
Scheduled jobs
Schedules can include upcoming, completed, and in-progress jobs. See Activity.
• Jobs
• Activity
• RPC Schedule Interface
• Job Results
ELEVEN
DIRECTORY SERVICE
11.1 Overview
The Directory Service workspace is used to connect SaltStack Enterprise to an Active Directory (AD) or other
Lightweight Directory Access Protocol (LDAP) server. This allows users and groups defined by your LDAP server
to be used to authenticate to SaltStack Enterprise. It also allows you to define Role Based Access Controls for these
users and groups inside SaltStack Enterprise.
Settings for users defined through LDAP are managed differently from local users settings. For best results, once
LDAP is enabled, use LDAP as your primary method for creating and managing users. See Users.
Once you have defined your users, you can also define permissions using SaltStack Enterprise’s Role Based Access
Control (RBAC). See Roles and Permissions.
Note: References to LDAP in this article include both traditional LDAP and Active Directory-based LDAP.
To use Directory Service, first create a connection, then enable specific users and groups to authenticate with Salt-
Stack Enterprise. Once you have enabled groups or users, you can define their Role-Based Access Control (RBAC)
settings.
You can edit or update your Directory Service, as well as delete a connection as needed.
Note: The following steps should be completed by an experienced LDAP or Active Directory administrator who
understands the overall LDAP system layout.
Note: To set up your connection more quickly, click Prefill Defaults, then select your service from the
dropdown.
53
SaltStack Enterprise Documentation, Release 6.1.0
The default entries populate according to your selection. However, certain entries such as User Search DN are
incomplete. Make sure to verify entries match your directory service schema.
1. In the Directory Service workspace, select the required Directory Service connection.
2. Select the Groups tab to see a list of groups retrieved from your directory service.
Note: If you’re retrieving a large number of groups, the page might take up to a minute to load.
1. In the Directory Service workspace, select the required Directory Service connection.
2. Select the Users tab to see a list of users retrieved from your directory service.
Note: If you’re retrieving a large number of users, the page might take up to a minute to load.
Note: Any users included in enabled groups are already selected and can’t be deselected.
4. Click Save.
You can define Role-Based Access Control (RBAC) settings for the selected users after the user’s first login.
For more information, see Login.
For more on RBAC in SaltStack Enterprise, see Roles and Permissions.
1. In the Directory Service workspace, select the required Directory Service connection.
2. Select the Groups tab to see a list of groups included in the connection. Enabled groups are selected.
3. Deselect groups you want to remove from SaltStack Enterprise and click Save.
Users included in the group can no longer log in to SaltStack Enterprise.
Note: Any groups you remove from your Directory Service connection are archived. Even though they’re
inactive and users can’t log in, they’re still visible in the Roles workspace. For more information, see Archived
groups and users.
For more on managing roles, see Roles and Permissions.
1. In the Directory Service workspace, select the required Directory Service connection.
2. Select the Users tab to see a list of users included in the connection. Enabled users are selected.
3. Deselect users you want to remove from SaltStack Enterprise and click Save.
Note: You can’t deselect individual members of an enabled group. For more information, see Enabling users.
Any users you remove from your Directory Service connection are archived. Even though they’re inactive
and can’t log in, they’re still visible in the Roles workspace if the user has previously logged in.
For more information, see Archived groups and users.
Note: If you want to pull in updates your directory service without modifying your settings, see Updating your
Directory Service.
1. In the Directory Service workspace, select the Directory Service connection you want to edit.
2. Edit the fields for your Directory Service connection as necessary. See Directory Service information fields.
3. Under Admin Bind password, click Change Password and re-enter your password.
4. Click Save.
1. In the Directory Service workspace, select the Directory Service connection you want to update, for example
if you have added new users and want to enable them in SaltStack Enterprise.
2. In the Settings tab, click Update Preview.
The preview updates to reflect the latest users and groups retrieved from your service.
3. Click Save.
1. In the Directory Service workspace, select the Directory Service connection you want to delete.
2. Click Delete.
11.3 Reference
Note: If you need assistance setting up your connection, contact your administrator.
Basic
Field Description
Name Name of Directory Service connection.
Host LDAP host server address, formatted as either a FQDN or IP address.
Port Port where LDAP server is configured. The default is 389 for unencrypted LDAP,
and 636 for LDAP over SSL.
Background Sync SaltStack Enterprise validates all users and group against the authentication backend
at a set interval defined (in minutes) here.
SSL
Enable SSL Select to connect to the LDAP server over a Secure Sockets Layer (SSL)
using the certificate specified in your SaltStack Enterprise server settings. If no
configuration is provided, the system certificates store will be used to validate
the SSL connection. For more on setting up the SaltStack Enterprise server,
see https://enterprise.saltstack.com/sse.
Note: As a best practice, select Use SSL. When this option is left unselected,
SaltStack Enterprise transmits information in plain text over an insecure con-
nection.
Validate Certificate Select to ensure the SSL certificates are validated upon con-
necting. Leave unselected to skip validation, for example when using self-
signed certificates (not recommended for production).
11.3. Reference 57
SaltStack Enterprise Documentation, Release 6.1.0
Authentication
Field Description
Auth Base DN Base LDAP Distinguished Name. This is the location groups and users are queried
from, for example DC=example,DC=com.
Note: The LDAP details page includes separate input fields for Person Object Class,
Account Attribute Name, Group Class, Group Attribute Name, and Sync Scheduling, as
described below. Therefore, do not include these objects in the Base DN field.
Admin Bind DN Administrator DN configured for the LDAP server. SaltStack Enterprise uses this to
authenticate to the directory for user and group lookups. Enter input based on the
following syntax: cn=Administrator,cn=Users,dc=example,dc=com.
Admin Bind DN Password The password provided when logging in as an administrator.
Auth Bind DN Filter Filter applied to select a specific user. The result of this search is a user DN that Salt-
Stack Enterprise uses to bind to the directory and grant the user access to SaltStack
Enterprise.
The following sample filter would return only an account matching the provided
username belonging to the DevOps or Level II groups.
(&(objectclass=user)(sAMAccountName={username})
(|(memberOf=CN=DevOps,OU=Groups,OU=Test Company HQ,DC=adtest,
˓→DC=com)
(memberOf=Level II,OU=Groups,DC=adtest,DC=com)))
Groups
Field Description
Group Search DN The search base for groups, for example, cn=Groups,dc=example,dc=com.
Indicates where in the directory to search for groups. Use along with Group Search
Scope below.
Group Search Scope Indicates directory search depth from the base indicated in Group Search DN and
can have one of four values:
baseObject Value 0, often referred to as base. Use this to search only for this
object and no other.
singleLevel Value 1, often referred to as one. Use this to consider only imme-
diate children of the base entry for matches.
wholeSubtree Value 2 (or SUBTREE in ldap3), often referred to as sub. Use this
to search to base and all of its subordinates to any depth.
subordinateSubtree Value 3, often referred to as subordinates. This is
the same as wholeSubtree but the base search entry is ignored.
Group Search DN Filter Search filter for extracting groups from the directory. This is typically
(objectClass=group), but in some AD configurations it might be
(objectCategory=group). Use in addition to Group Class for more
granularity.
Group Class Object class name used to define groups, for example groupOfNames.
Group Member Attribute The name of the attribute in the user entry that contains the group name, for example,
memberOf.
Group Membership Select if your directory stores group memberships as Distinguished Names.
Users
Field Description
User Search DN The search base for users, for example, cn=Users,dc=example,dc=com in AD
or cn=people,cn=accounts,dc=example,dc=com in other directory ser-
vices. Indicates where in the directory to search for users. Use along with User
Search Scope below.
User Search Scope Indicates directory search depth from the base indicated in User Search DN and can
have one of four values. See the four values described in Group Search Scope.
User Search DN Filter Search filter for extracting users from the directory. This is typically
(objectClass=person) but in some AD configurations it might be
(objectCategory=user).
Person Class Directory Service class name containing users you want to enable to log in. Most
systems (including Active Directory) use person, but some may prefer user or
inetOrgPerson.
User ID Attribute The unique name of the user account attribute. For AD this is sAMAccountName.
For other services it is often uid or memberUid.
Preview
When you preview your connection settings, SaltStack Enterprise retrieves a sample list of users and groups from
your LDAP server so you can verify you have entered the correct configuration parameters.
11.3. Reference 59
SaltStack Enterprise Documentation, Release 6.1.0
Login
When a user enters credentials in the SaltStack Enterprise login form, the backend server checks for a match in the
database at that time. It then initiates a multi-step lookup process and, upon finding a match, authenticates the user.
Given this lookup process, enabled individual users in enabled groups do not appear in the Roles workspace until
the user’s first login.
Background tasks
SaltStack Enterprise runs a background job periodically to look up each linked group and user in the Directory
Service connection to ensure it still exists. If the group or user has been removed, the backend server deactivates its
link in the database.
Any groups you remove from your Directory Service connection are archived. Even though these groups are inactive
and users can’t log in, they’re still visible in the Roles workspace and can be selected. This also applies to any removed
users previously visible in the Roles workspace.
When working with nested groups, the Directory Service workspace does not accurately reflect when a nested (or
child) group is enabled. By enabling a parent group, you also enable all child groups by default. However, in the
workspace, the child groups do not appear to be enabled.
TWELVE
LOCAL USERS
12.1 Overview
Local users are users whose username and password are stored in the database. You can manage local user settings,
such as user passwords, in Enterprise Console. In contrast, settings for users synchronized from a Directory Service
connection are managed through your Lightweight Directory Access Protocol (LDAP) or Active Directory server.
For more on Directory Service, see Directory Service.
Whether a user is local, or synchronized from a Directory Service connection, you can manage the user’s roles and
permissions within Enterprise Console using SaltStack Enterprise’s Role Based Access Control (RBAC). See Roles
and Permissions.
By default, a local user is associated with each Salt Master key used for authentication. For more on master keys,
see Master Plugin.
In the Local Users workspace, you can create or clone local users. You can also update user settings, for example
to change user passwords.
1. Go to Menu > System Administration > Local Users and click Create.
2. Enter a username and password, and select any roles you want to add the user to.
All new users are added to the User role by default. For more on roles, see Roles.
3. Click Save.
Note: Only superusers, or users with Create user permission, are able to create local users. Usernames are not
case-sensitive.
1. Under System Administration > Local Users, select the user you want to clone and click Clone.
2. Enter a username and password, and select any roles you want to add the user to.
61
SaltStack Enterprise Documentation, Release 6.1.0
3. Click Save.
1. Under System Administration > Local Users, select the user you want to update.
2. With the user selected, change user settings as required. You can update the username, password, and assigned
roles.
3. Click Save.
• Change the root password in the Enterprise Console using the instructions above.
12.3 Reference
12.3.1 Roles
Roles in SaltStack Enterprise give you the ability to create specific management roles, and then add the appropriate
users to those roles. Roles control which Salt minions each user can view and which operations a user can perform
in Enterprise Console. See Roles and permissions.
By default, a local user is associated with each Salt Master key used for authentication. For more on master keys,
see Master Plugin.
THIRTEEN
13.1 Overview
The Roles workspace is used to manage permissions. With SaltStack Enterprise’s Role Based Access Control (RBAC),
you can define permission settings for multiple users at once, as permission settings for a role apply to all users
included in the role.
Role permissions are additive. Users assigned to multiple roles receive access to a combination of all items granted
from each role. This helps ensure users with similar backgrounds receive the same permission settings, and users
with a range of responsibilities have access to everything they need.
SaltStack Enterprise ships with a number of built-in roles that cannot be deleted. Additionally, you can create custom-
defined roles for your organization’s unique needs. See Types of roles.
To give a role permission to complete a task, you must both define the permitted task, and also assign access to a
resource or functional area. A permission is a broad category of allowed actions, whereas resource access allows
you to define a specific resource (for example, a job or target) the action can be completed against. See Difference
between permitted tasks and resource access.
The Roles workspace offers tools to add users to a role, as well as define permissions and resource access for different
roles. It also includes an advanced editor, recommended for advanced SaltStack Enterprise users only. For more on
the advanced editor, see Advanced roles editor.
In some cases, cloning a role might be more convenient than creating a new one. You can clone an existing role, and
then modify the clone as needed.
Note: Role permissions are additive. Users assigned to multiple roles receive access to a combination of all items
granted from each role.
Resource access for certain resource types and functional areas must be defined in the Enterprise API, rather than
the Roles editor. See Resource access.
63
SaltStack Enterprise Documentation, Release 6.1.0
Note: For security reasons, the built-in Superuser role cannot be cloned.
2. Click Clone.
3. Enter a new name for your role, and then click Save.
You have completed the minimum steps necessary to clone a role. For more on defining the role’s settings, see
Editing a role.
Note: Cloned roles inherit permitted tasks from the original role by default. Cloned roles do not inherit
resource access, which must be defined separately. See Assigning access to a job or target.
Note: The above describes how to edit a role using the standard editor. SaltStack Enterprise also includes an
advanced editor recommended for advanced users only. For more on the advanced editor, see Advanced roles editor.
Note: In addition to assigning a permission, you must enable access to the specific resources (such as a job or target)
for the role to perform the action on. See Difference between permitted tasks and resource access.
In SaltStack Enterprise, both jobs and targets are considered different types of resources. For more on resource
access, see Resource Access.
3. Click Save.
Note: In addition to assigning resource access for a job, you must also assign access to a target for the job to run
on, and assign permission to run jobs. See Difference between permitted tasks and resource access.
Note: Role permissions are additive. Users in groups assigned to multiple roles receive access to a combination
of all items granted from each role.
3. Click Save.
The selected groups, including all users in those groups, are now granted all permitted tasks and resource
access defined in the role settings.
Note: Users inherit permission settings (such as being assigned to a role) from the groups they belong to. A best
practice is to avoid adding individual users to a role, but rather add the user to a group that belongs to the role. All
new users are included in the User role by default. See Built-in roles.
13.3 Reference
To give a role permission to complete a task, you must both define the permitted task, and also assign resource access.
Both are described in further detail below.
13.3.1 Tasks
Tasks represent common use cases in SaltStack Enterprise. Enabling a task gives the role all permissions required to
complete the task.
The Tasks tab includes the following options.
Task Description
Create and delete new tar- Role can create new targets. Users assigned to this role can edit and delete targets
gets they have created, or other targets defined under Resource Access.
A target is the group of minions, masters, or a single master that a job’s Salt command
applies to. For more on targets, see Minions and targets.
Modify pillar data Role can view, edit, and delete sensitive information stored in pillars. Users belong-
ing to the role can edit or delete pillars they have created. They can also edit or delete
other pillars if granted resource access (available through Enterprise API only).
Pillars are structures of data defined on the Salt Master and passed through to one
or more minions, using targets. They allow confidential, targeted data to be securely
sent only to the relevant minion. For more on pillar, see Pillar.
Modify filesystem Role can view the file server, and can create, edit, or delete files. Users belonging to
the role can edit or delete files they have created. They can also edit or delete other
files if granted resource access (available through Enterprise API only).
The file server is a location for storing both Salt-specific files, such as top files or state
files, as well as files that can be distributed to minions, such as system configuration
files. For more on the file server, see File server.
Run arbitrary commands Role can trigger commands outside of a job for the Salt Master to pick up. Role is
on minions not limited to running only commands included in a given job’s definition.
Minions are nodes running the Salt Minion service, which can listen to commands
from a master and perform the requested tasks. For more on minions, see Minions
and targets.
Accept, delete, and reject Role can accept, delete, and reject minion keys as needed for initial configuration.
keys A minion key allows encrypted communication between a Salt Master and Salt Min-
ion. For more on keys, see Keys.
Read and modify users, Role can view users and associated data, as well as edit roles and permissions set-
roles, permissions tings.
Note: This task applies only to the built-in Administrator and Superuser roles.
Roles are used to define permissions for multiple users who share a common set of
needs.
Run commands on Salt Role can run commands on Salt Masters, for example to run orchestration.
Masters Commands run against the master are also called Salt runners. Salt runners are
modules used to execute convenience functions on the master. For more on runners,
see Jobs.
Compliance - create, edit, Role can create, edit, delete, and assess SecOps Compliance Compliance policies. In
delete, and assess addition to granting permission for this task, you must also define resource access
for any targets you want the role to perform actions on. For example, if you want
the Oracle Linux Admin role to define policies for an Oracle Linux target,
you would assign the role both permission to complete this task, and Read access to
the Oracle Linux target.
This task does not allow the role to remediate SecOps Compliance Compliance poli-
cies.
SecOps Compliance is an add-on to SaltStack Enterprise that manages the security
compliance posture for all the systems in your environment. For more on Sec-
Ops Compliance, see SecOps Compliance. Note: A SecOps Compliance license is
required.
Compliance - remediate Role can remediate any non-compliant minions detected in a SecOps Compliance
Compliance assessment.
SecOps Compliance is an add-on to SaltStack Enterprise that manages the security
compliance posture for all the systems in your environment. For more on Sec-
Ops Compliance, see SecOps Compliance. Note: A SecOps Compliance license is
required.
Compliance - update Salt- Role can download updates to the SecOps Compliance Compliance security library.
Stack content
13.3. Reference 67
SaltStack Enterprise Documentation, Release 6.1.0
Task Description
Vulnerability - create, Role can create, edit, delete, and assess SecOps Vulnerability policies. In addition
edit, delete, and assess to granting permission for this task, you must also define resource access for any
targets you want the role to run assessments against.
This task does not allow the role to remediate SecOps Vulnerability policies.
SecOps Vulnerability is an add-on to SaltStack Enterprise that manages vulnerabili-
ties on all the systems in your environment. For more on SecOps Vulnerability, see
SecOps Vulnerability. Note: A SecOps Vulnerability license is required.
Vulnerability - remediate Role can remediate vulnerabilities detected in a SecOps Vulnerability assessment.
SecOps Vulnerability is an add-on to SaltStack Enterprise that manages vulnerabili-
ties on all the systems in your environment. For more on SecOps Vulnerability, see
SecOps Vulnerability. Note: A SecOps Vulnerability license is required.
The Resource Access tab allows you to define resource access for targets and jobs. A target is the group of minions,
masters, or a single master that a job’s Salt command applies to. Jobs are used to run remote execution tasks, apply
states, and start Salt runners.
The different levels of resource access are described below.
Targets
Read Only Role can view the indicated target and its details, but cannot edit or delete it.
Read/Write Role can view and edit the indicated target.
Read/Write/Delete Role can view, edit, and delete the indicated target.
For more on targets, see Minions and targets.
Jobs
Read Only Role can view the indicated job and its details, but cannot edit or delete it, or run the job.
Read/Run Role can view and run the indicated job.
Read/Run/Write Role can view and edit the indicated job, as well as run it.
Read/Run/Write/Delete Role can view, edit, and delete the indicated job, as well as run it.
For more on jobs, see Jobs.
Access to the following resource types must be defined using the Enterprise API. See API Permission values, or contact
an administrator for assistance.
• Files in the file server
• Pillar data
• Authentication configuration
All other resource types, (excluding jobs, targets, and those listed above) do not require any specific resource access
settings.
A permitted task is broad category of allowed actions, whereas resource access is more granular, allowing you to
specify a particular resource (such as a job or target) the action can be run against, as illustrated in the following
diagram.
In the following example, a role can run test.ping on the Linux target group. The role has the following permis-
sions settings:
• Read access to the Linux target
• Read/Run access to a job that includes the test.ping command
Cloned roles inherit permitted tasks from the original role by default. Cloned roles do not inherit resource access,
which must be defined separately. See Assigning access to a job or target.
13.3. Reference 69
SaltStack Enterprise Documentation, Release 6.1.0
SaltStack Enterprise ships with a number of built-in roles that cannot be deleted. It also gives you tools to create
custom-defined roles for your own unique needs.
Built-in roles
Custom-defined roles
To supplement SaltStack Enterprise’s built-in roles, you can create custom roles. Custom roles help you define more
targeted resource access for different user profiles based on your organization’s needs. For example, you might create
a CentOS Administrator role for users responsible for administering CentOS nodes, and a RedHat Administrator role
for users responsible for RedHat nodes.
FOURTEEN
ADVANCED PERMISSIONS
14.1 Overview
In some situations, you may need to configure more granular role permissions, beyond the options available through
the Tasks tab in the Roles editor. The Advanced tab provides more thorough control over tasks a role can complete.
Note: The following steps should be completed by an experienced Salt administrator who understands your overall
infrastructure.
1. Go to Menu > System Administration > Roles and select the Advanced tab.
2. Ensure the required role is selected in the left panel.
3. Select or deselect permissions as needed, choosing from Read, Run, Write, or Delete for a range of functional
areas.
For more on permissions, see Permission types. For more on available resource types and functional areas, see
Items.
71
SaltStack Enterprise Documentation, Release 6.1.0
Minimum recommended permissions for typical user operation are highlighted in blue, as demonstrated in
the following figure.
This figure shows two minimum recommended boxes on the left, one selected and the other unselected, com-
pared with two normal boxes on the right.
4. Click Save.
14.3 Reference
Read Role can view a given type of resource or functional area. For example, if you assign the role Read Target
Groups, the role can view the targets you specify, as well as details about each target.
Run Role can run a given type of operation. The type of operation permitted can vary, for instance you can assign
permission to run arbitrary commands on minions, or to run commands on Salt Masters.
Write Role can create and edit a given type of resource or functional area. For example, you might assign Write
File Server to an advanced user role, so the role can create or edit files in the file server. Users with Write
access can edit resources they have created, without needing any specific resource access settings.
Delete Role can delete a given type of resource or other item in a given functional area. For example, you might
assign Delete Pillar to a role, so the role can delete a pillar that’s no longer in use. Users with Delete
permission can delete resources they have created, without needing any specific resource access. settings.
14.3.2 Items
When setting permissions for a role in the advanced editor, the above actions can apply to the following resources
or functional areas.
14.3. Reference 73
SaltStack Enterprise Documentation, Release 6.1.0
Access to the following resource types must be defined using the Enterprise API. See API Permission values, or contact
an administrator for assistance.
• Files in the file server
• Pillar data
• Authentication configuration
All other resource types, (excluding jobs, targets, and those listed above) do not require any specific resource access
settings.
FIFTEEN
15.1 Overview
15.2 Reference
15.2.1 User
77
SaltStack Enterprise Documentation, Release 6.1.0
15.2.2 Administrator
15.2.3 Superuser
SIXTEEN
REPORTS
16.1 Overview
The Reports workspace provides an overview of important metrics in your SaltStack Enterprise environment, such
as number of licenses available and used, or the Salt version installed on different nodes. You can view reports under
the Home screen. Reports update automatically to reflect the current state of your system.
Report data is provided for all minions. However, some reports can be filtered by target group.
Minions are nodes running the Salt Minion service, which can listen to commands from a master and perform the
requested tasks. A target is the group of minions, masters, or a single master that a job’s Salt command applies to.
The Salt Master is a central node used to issue commands to minions. For more on minions and targets, see Minions
and targets.
In the Reports workspace you can download reports in either JSON or CSV format.
In the Reports workspace, you can view key metrics in your SaltStack Enterprise environment. The workspace
provides downloads and a graph for each report type. You can also adjust the columns displayed for each report, as
well as filter column data.
1. Select a report and click the Column button in the lower left corner.
2. In the resulting menu, select or deselect column names to choose which columns to include in the table view.
Note: You can also filter each column by selecting its filter icon , or sort a column by selecting the
column name.
79
SaltStack Enterprise Documentation, Release 6.1.0
16.3 Reference
Enterprise Console includes several reports to provide an overview of important metrics in your SaltStack Enterprise
environment.
Report data is provided for all minions. However, some reports can be filtered by target group.
Minions are nodes running the Salt Minion service, which can listen to commands from a master and perform the
requested tasks. A target is the group of minions, masters, or a single master that a job’s Salt command applies to.
For more on minions and targets, see Minions and targets.
Report Description
Key state State of all minion keys. A minion key allows encrypted communication between a
Salt Master and Salt Minion. For more on keys, see Minion Keys.
Licenses Number of SaltStack Enterprise licenses used and number of licenses available This
report includes a line graph that shows a history of license usage over time. The
License report cannot be downloaded. For more on licensing, talk to your adminis-
trator.
Master version Salt Master version installed on all masters. The Salt Master is a central node used
to issue commands to minions.
Minion version Salt Minion version installed on minions within the selected target group.
OS version Operating system installed on nodes within the selected target group.
Presence Presence status of minions in the selected target group. Presence indicates if Salt-
Stack Enterprise has received any job data from a minion recently, within a defined
interval. For more on presence, see Minion presence.
SEVENTEEN
PILLARS
17.1 Overview
Pillars are structures of data defined on the Salt Master and passed through to one or more minions, using targets.
They allow confidential, targeted data to be securely sent only to the relevant minion. Pillars are useful for limiting
user access to private data, for example to allow a user to run a job that requires authentication to an external service.
In this case, you would assign the user access to the given job and target, but not to the pillar containing sensitive
authentication details.
Pillar data is encrypted in the SaltStack Enterprise database, and is not stored in plain text. It is encrypted during
transmission, and made visible only to minions specified in the pillar target settings. For more on assigning pillar to
a target, see Assigning pillar.
A target is the group of minions, masters, or a single master that a job’s Salt command applies to. Minions are nodes
running the Salt Minion service, which can listen to commands from a master and perform the requested tasks. For
more on minions and targets, see Minions and targets.
Pillar data can be stored in a private pillar in the Pillars workspace, in a job’s settings, or in other pillar roots in the
SaltStack Enterprise backend server. Pillar data stored within a job is less secure than data in a standard pillar, as
any user with permission to access the job can also view the pillar data. Jobs are used to run remote execution tasks,
apply states, and start Salt runners. For more on jobs, see Jobs.
For more on pillar in Salt, see Salt pillar walkthrough (https://docs.saltstack.com/en/latest/topics/tutorials/pillar.
html).
In the Pillars workspace you can create new pillars, and assign pillars to targets. When you assign a pillar to a target,
you can also choose to refresh the pillar.
Note: Pillar names do not have to be unique. This might result in different items displaying with the same name in
the Web Console.
83
SaltStack Enterprise Documentation, Release 6.1.0
Note: You can also assign a pillar to a target in the Targets Workspace. See Minions and targets.
17.3 Reference
The All Minions target is read-only, and cannot be assigned pillar data. To assign pillar data to all minions, create a
new target that matches all minions (*). For more on creating targets, see Minions and targets.
If the same pillar data is defined in multiple sources, SaltStack Enterprise selects the data to apply in the following
order of precedence:
1. Values passed directly on the job
2. Values in Enterprise Console (in the Pillars workspace)
3. Values in other pillar roots
You can change this behavior by adjusting the order of pillar_roots in the Salt Master configuration.
External pillar data must be in JSON format. YAML is not currently supported.
Files
Pillar data is useful for passing data into states, reactors, and other types of files. Make sure when creating or
updating pillar data to also update pillar references in any corresponding files. See File Server.
Targets
Pillar data attached to a target is used when associated jobs run on the target. Make sure when updating pillar data
to also refresh pillar on its associated targets. See Assigning pillar.
EIGHTEEN
FILE SERVER
18.1 Overview
The file server is a location for storing both Salt-specific files, such as top files or state files, as well as files that can
be distributed to minions, such as system configuration files. In the file server, you can view, author, and save state
files (YAML), modules, and text files.
Files in SaltStack Enterprise are useful for configuring states you can then apply through jobs. Jobs are used to run
remote execution tasks, apply states, and start Salt runners.. For more on jobs, see Jobs.
Files are also used to iterate over pillar entries in an associated pillar. Pillars are structures of data defined on the
Salt Master and passed through to one or more minions, using targets. They allow confidential, targeted data to be
securely sent only to the relevant minion. See Pillar.
In the file server, you can create new files and clone existing ones. You can also edit and delete files.
87
SaltStack Enterprise Documentation, Release 6.1.0
3. Under Path Name, enter the path to the file, and file name.
Note: File names do not have to be unique as long as the files are in different paths or environments. This
might result in different items displaying with the same name in the Enterprise Console.
18.3 Reference
If you have existing file server backends configured, such as Git or S3, they continue to work as expected, and jobs
created and executed in Enterprise Console can use these backends with no additional configuration.
If you plan to use the SaltStack Enterprise file server in conjunction with other file servers, be aware that files that
exist in Enterprise Console take precedence if they also exist in other file servers.
fileserver_backend:
- sseapi
- roots
- git
You can change this behavior by re-ordering the entries in the fileserver_backend section in the /etc/
salt/master.d/raas.conf file.
18.3.2 Environments
SaltStack Enterprise file server provides the ability to define multiple file environments.
Environments let you isolate files that have the same path and name. By default, files and pillar data exist in the base
environment. This is the environment you select when you create a state run job.
You can select the environment in which you want to create a file by specifying it during creation. See Creating a
file.
Users do not need file server privileges to run jobs. For example, if you create a job that runs the apache/init.
sls file (state.apply apache), users with access to this job can run it even though they can’t view, edit, or
delete the apache/init.sls file directly.
Only Superusers can view files created by other users. Only the Superuser and Admin default roles are granted
access to view and make changes to the file server. See Roles and permissions.
• Pillar
• Jobs
• Roles and permissions
NINETEEN
SECOPS COMPLIANCE
Note: SecOps Compliance is a SaltStack Enterprise add-on that provides automated compliance detection and
remediation for your infrastructure.
A SecOps Compliance license is required.
19.1 Overview
SecOps Compliance is an IT infrastructure security and compliance solution that combines security with IT opera-
tions all in a single platform. Its security library contains the latest security standards based on industry best practice
hardening guides such as CIS, and more. It uses the library to not only assess your infrastructure security, but also
to remediate noncompliant systems instantly.
Note: SaltStack Enterprise also include the SecOps Vulnerability add-on, for vulnerability scanning and remedia-
tion. For more on SecOps Vulnerability, see SecOps Vulnerability.
SecOps Compliance harnesses Salt’s powerful configuration management and remote execution capabilities to bring
all of your infrastructure assets to compliance with a range of industry-wide security benchmarks. It integrates
with SaltStack Enterprise to apply security measures at scale, while respecting custom exceptions based on your
organization’s needs.
19.1.1 Policies
To secure your infrastructure assets with SecOps Compliance, start by defining policies. SecOps Compliance provides
different industry benchmarks to choose from including checks for CIS and more. For more on defining policies, see
Building a policy.
Each benchmark includes a collection of security checks. You can choose to apply all available checks for a given
benchmark, or use only a subset of available checks. Using a subset of checks is useful for customizing SecOps
Compliance for your unique infrastructure needs, for example if remediating a given check poses the risk of breaking
a known dependency. For more on benchmarks and checks, see Benchmarks.
SecOps Compliance uses your compliance policy as the basis for assessing your infrastructure’s security. Following
each assessment, SecOps Compliance provides a report highlighting any noncompliant systems, along with the
recommended remediation. See Running an assessment.
91
SaltStack Enterprise Documentation, Release 6.1.0
Note: SecOps Compliance does not make any changes during the assessment.
Following an assessment, you can remediate any non-compliant nodes. For convenience, SecOps Compliance allows
you to remediate all at once, or remediate only a subset of either nodes or checks. For more on remediation, see
Remediating all checks.
19.1.3 Customization
To customize SecOps Compliance for your organization’s needs, you can exempt certain checks and nodes from
remediation. You can also insert variable values to enforce requirements that are stricter than industry standards.
For more on exemptions, see Adding exemptions.
Another customization method is to configure user permissions to allow only certain users to remediate, while
allowing others to assess or define policies. This offers you complete control over every action taken. For more on
permissions, see Roles and Permissions.
To use SecOps Compliance, first define a policy, then scan systems against the policy. The scan detects non-compliant
systems, and allows you to remediate issues instantly. Additionally, you can enter exemptions and specify user
permissions to ensure all paths to remediation are customized for your organization’s needs.
Note: This section describes how to use SecOps Compliance in the Enterprise Console. However, you can also use
SaltStack Enterprise through the Enterprise API. See the Sec API interface, or contact an administrator for assistance.
Note: A target is the group of minions, masters, or a single master that a job’s Salt command applies to.
Minions are nodes running the Salt Minion service, which can listen to commands from a master and perform
the requested tasks. For more on minions and targets, see Minions and Targets.
3. In the Benchmarks tab, select all benchmarks you want to include in the policy, then click Next.
Note: If no benchmarks display, you may need to download compliance content. See Updating the security
library, or contact your administrator for assistance.
4. In the Checks tab, select all checks you want to include in the policy. The available checks are determined by
the selected Benchmarks. A detailed description of each check displays in the right panel when selected.
Custom checks include a user icon , in contrast with SaltStack checks .
For more on understanding checks, see Checks.
To filter the list, click the Filter button |filtericonpdf|.
Note: Policies that include many checks might result in long processing times during assessment. This could
also delay other processes, such as jobs running, in SaltStack Enterprise. Make sure to include only the checks
you need, and account for extra time required to run large assessments.
5. Click Next.
6. In the Variables tab, enter or modify variables according to your needs, or accept the default values. Then
click Next.
Note: The values you enter define how SecOps Compliance performs the selected checks. The default values
are recommended. For more on variables, see Variables.
7. In the Schedule screen, define schedule frequency and click Save. For more on defining schedule settings, see
Schedules.
Editing a policy
1. In the SecOps Compliance home page, select the policy you want to edit.
2. In the policy screen, click Edit policy in the upper-right corner.
3. Edit the policy as needed and click Save.
Note: Policies that include many checks might result in long processing times during assessment. This could also
delay other processes, such as jobs running, in SaltStack Enterprise. Make sure to account for extra time required to
run large assessments.
Note: During the assessment, no changes are made. You will have the ability to remediate any issues later.
See Remediating all checks.
click the Filter button . You can also select a column heading to sort results, for example you might
sort the Not compliant column to view non-compliant nodes first.
You can select the Minions tab to view assessment results by minion.
Note: Before you can view assessment results, you must first run the assessment. See Running an assessment.
1. In the SecOps Compliance home page, select a policy to view the latest assessment results.
2. In the policy home page, go to the Report tab and click Download.
3. In the resulting dropdown, select JSON.
Your web browser begins downloading the report.
1. In the SecOps Compliance home page, select a policy to view the most recent assessment results.
2. In the Checks tab, click Remediate all in the upper-right corner.
3. In the confirmation dialog, click Remediate all.
Note: Any exempted checks or minions are not remediated when you run Remediate all.
Remediating by check
Remediating by minion
1. In the policy screen, select the checks you want to exempt from remediation.
2. Click Add exemption.
3. Enter the reason for exemption and click Add exemption to confirm. You can always remove the exemptions
later if needed.
Exempted items will not be remediated. If a remediation runs against a policy that includes the exempted item,
the remediation is skipped for that item.
Note: You can add an exemption either before or after running the assessment. You can also define a cus-
tomized policy that excludes checks based on your needs. See Building a policy.
Removing an exemption
Note: There might be more exemptions off-screen when you first open the Exemptions tab. Keep scrolling
to the bottom of the screen to view all exemptions.
• Go to the permissions editor to modify SecOps Compliance permissions. For more on SaltStack Enterprise
roles and permissions, see Roles and Permissions.
19.3 Reference
The SecOps Compliance content library consists of pre-built, industry best-practice security and compliance content,
including:
• CIS
Compliance policies are collections of security checks, and specifications for which nodes each check applies to, in
SecOps Compliance. Policies can also include schedules, as well as specifications for handling exemptions.
Each component of a security policy is described in more detail below.
Target
A target is the group of minions, masters, or a single master that a job’s Salt command applies to. When you choose
a target in SecOps Compliance, you define the nodes you want to run security checks against. You can choose an
existing target or create a new one. For more on targets, see Minions and Targets.
Benchmarks
Benchmarks are categories of security checks. SecOps Compliance benchmarks are defined by widely-accepted
experts, while custom benchmarks can be defined by your own organization’s standards. You can use benchmarks
to help create a range of different policies optimized for different groups of nodes. For example, you might create
an Oracle Linux policy that applies CIS checks to your Oracle Linux minions, and a Docker policy that applies CIS
checks to your Docker minions.
For more on custom benchmarks, see SecOps Compliance Custom Content.
SecOps Compliance helps simplify the process of defining your security policy by grouping security checks by bench-
mark.
Checks
A check is a security standard that SecOps Compliance assesses for compliance. The SecOps Compliance library
updates checks frequently as security standards change. In addition to checks included the SecOps Compliance
content library, you can create your own custom checks. Custom checks include a user icon , in contrast with
SaltStack checks . For more on custom checks, see secops-custom-content.
Each check includes the following information fields.
Note: Some of the following items are defined for each check, while others are defined for one or more benchmarks.
19.3. Reference 97
SaltStack Enterprise Documentation, Release 6.1.0
Break Used for internal testing purposes only. For more information, contact your administrator.
Global description Detailed description of the check.
Osfinger List of osfinger values the check is implemented for. osfinger is found in grains.items for each minion.
It identifies the minion’s operating system and major release version. Grains are an interface that derives
information about the underlying system. Grains are collected for the operating system, domain name, IP
address, kernel, OS type, memory, and many other system properties. For more on grains, see Salt grains
reference (https://docs.saltstack.com/en/latest/topics/grains/).
Profile List of configuration profiles for different benchmarks. These configuration profiles target a machine’s dif-
ferent roles within an environment (for example, on a server or a workstation), and different levels of security
in contrast with practical use.
Rationale Description of the rationale for implementing the check. This includes reasons why you might want to
implement the check.
Refs Compliance cross-references between benchmarks.
Remediate (Not included in all checks) - Value that indicates whether SecOps Compliance is capable of remediating
noncompliant nodes, as not all checks include specific, actionable remediation steps. For example, SecOps
Compliance doesn’t remediate CIS 1.1.6: Ensure separate partition exists for /var since no one universal method
exists for repartitioning every system. False indicates a check that can’t be remediated. When True (default),
this field is not displayed.
Remediaton Description of how any noncompliant systems will be remediated, if applicable. Note that some checks
don’t include specific, actionable remediation steps. See Remediate above.
Scored CIS benchmark Scored value. Scored recommendations impact the target’s benchmark score, while recom-
mendations that are not scored do not affect the score. True indicates scored and False indicates not scored.
State file Copy of the Salt State that will be applied to execute the check and if applicable, the subsequent remedi-
ation.
Variables
Variables in SecOps Compliance are used to pass values into the Salt States that make up security checks. For best
results, use the default values provided.
For more on Salt States, see the Salt States tutorial (https://docs.saltstack.com/en/latest/topics/tutorials/starting_
states.html).
Schedules
Note: In the schedule editor, the terms “Job” and “Assessment” are used interchangeably. When you define a
schedule for the policy, you are scheduling the assessment only - not the remediation.
Choose the schedule frequency from Recurring, Repeat Date & Time, Once, or Cron Expression. Additional
options are available, depending on the scheduled activity, and on the schedule frequency you choose.
Recurring Set an interval for repeating the schedule, with optional fields for start or end date, splay, and maximum
number of parallel jobs.
Repeat Date & Time Choose to repeat the schedule weekly or daily, with optional fields for start or end date, and
maximum number of parallel jobs.
Once Specify a date and time to run the job.
Cron Enter a cron expression to define a custom schedule based on Croniter syntax. See the CronTab editor (https:
//crontab.guru/examples.html) for syntax guidelines. For best results, avoid scheduling jobs fewer than 60
seconds apart when defining a custom cron expression.
Note: When defining an assessment schedule, you can choose from the additional Not Scheduled (on demand)
option. If you select this option, you choose to run a one-time assessment, and no schedule is defined.
In your policy home page, the Activity tab shows a list of completed or in-progress assessments and remediations.
It includes the following statuses.
Queued Operation is attempting to start running.
Completed Operation has finished running.
Partial Operation is still waiting for some minions to return, though the master has reported that the operation has
finished running.
Minions are nodes running the Salt Minion service, which can listen to commands from a master and perform
the requested tasks. The Salt Master is a central node used to issue commands to minions.
You can track all activity in SaltStack Enterprise, including assessments and remediations, in the SaltStack Enterprise
main Activity workspace. See Activity.
Refer to the following to understand assessment results. For more on how to access assessment results, see Viewing
assessment results.
Return statuses
Following a remediation, SecOps Compliance labels each system with one of the following return statuses.
Compliant Setting is in its intended state compared to the standard or benchmark.
Not compliant Setting is not in its intended state compared to the standard or benchmark. Further investigation
and possible remediation are recommended.
Not Applicable The setting is not applicable to this system, for example, if a running a CentOS check on AIX.
Unknown Assessment or remediations have not been run.
Error SecOps Compliance encountered an error while running the assessment or remediation.
• Schedules
• Roles and permissions
• Sec API interface
TWENTY
20.1 Overview
Custom Compliance content allows you to define your own security standards, to supplement the library of security
benchmarks and checks built into SecOps Compliance. This is useful for enhancing SecOps Compliance policies to
fit your internal requirements.
A check is a security standard that SecOps Compliance assesses for compliance. Benchmarks are categories of
security checks.
SecOps Compliance includes a Custom Content Software Development Kit (SDK) you can use to create, test, and
build your own custom security content. You can import your custom security content to use alongside SecOps
Compliance’s built-in security library for assessment and remediation. This also allows you to version your content
using a version control system of your choice.
To use custom checks, first initialize the SecOps Compliance Custom Content SDK. The SDK includes sample files
you can modify to create your own custom checks, as well as benchmarks. The SDK also includes a Docker-based
testing environment where you can test your new content.
Once your custom content is created and tested, you can build a content file and import it into SecOps Compliance to
begin assessing and remediating. Custom checks include a user icon , in contrast with SaltStack checks . SecOps
Compliance tracks dependencies between policies and your custom content, and provides a list of dependencies that
might break if you delete the content.
1. Download the SDK binary for your Operating System from https://enterprise.saltstack.com/, under the Salt-
Stack SecOps configuration tab.
2. From the command line, navigate to the directory containing the file and run the following according to your
OS.
• Mac OS or Linux
./secops_sdk init
• Windows
101
SaltStack Enterprise Documentation, Release 6.1.0
secops_sdk.exe init
No output shows. This is expected. Your directory now contains the following folders and files:
• benchmarks
• salt/locke/custom
• sample_tests
• README.md
For more on these folders and files, see Folders and files.
3. (Optional) Commit changes to a version-controlled repository.
Note: Initializing the SDK is a prerequisite to creating custom content. See Initializing the SDK
1. In the Custom Content SDK, go to salt/locke/custom. This directory contains various subdirectories
with sample state (.sls) and meta (.meta) files.
Note: All custom checks must be configured in both a state (.sls) and corresponding meta (.meta) file.
2. Make a copy of both a sample state (.sls) and its corresponding meta (.meta) file, renaming both with a
descriptive name for your custom check.
Both files associated with a check must be in the same directory and start with the same name, for example:
• my_first_check.meta
• my_first_check.sls
You can save these two files together in any subdirectory of salt/locke/custom.
3. Edit the contents of the meta file to customize the check based on your needs. The file is written in YAML. For
a list of the different options included in the file, see Check meta files.
Note: Check meta files contain references to different benchmarks. When creating custom content, make
sure to include all associated benchmarks in your check meta file.
4. Edit the contents of the state file. For more information, see Check state files.
5. Ensure both files are saved in the same directory.
You have now completed the minimum steps required to create a custom check. You can continue to test the
check, commit to version control, or build your content library.
Note: Initializing the SDK is a prerequisite to creating custom content. See Initializing the SDK
1. In the Custom Content SDK, go to the benchmarks directory. This contains a sample benchmark meta
(.meta) file.
2. Make a copy of Sample_Benchmark.meta, renaming it with a descriptive name for your benchmark.
3. Edit the contents of the meta file to customize the benchmark based on your needs. The file is written in YAML.
For a description of the different options included in the file, see Custom benchmark files.
Note: Installing Docker is a prerequisite to the following. For more on downloading and installing Docker, see the
Docker installation documentation.
1. Once you have created your custom content, open the command line and navigate to the Custom Content SDK
sample_tests directory.
2. Build a docker image of CentOS7 with Salt for testing.
./build.sh
./up.sh
4. Run sample tests on checks you created in the salt/locke/custom directory. You can execute custom
checks as you would normal Salt states, for example:
For more testing examples, see Test Custom Content in the SDK README. For more on Salt States, see the Salt
documentation.
5. When testing is complete, shut down the testing container.
./down.sh
1. Once you have created your custom content, open the command line and navigate to the Custom Content SDK
root directory.
2. Build your custom content library.
./secops_sdk build -a
The SDK root directory now includes the _dist subdirectory. This includes two tar.gz files you can use
to import your content through Enterprise Console or Enterprise API. For a description of all files included in
the directory, see Folders and files.
Note: If you have already downloaded SecOps Compliance content during your current session, you can skip
this step.
3. Click Upload Package and select the .tar.gz file from your file explorer.
Note: To make your custom checks easier to navigate, use the file containing a timestamp in the filename.
For more on files, see Folders and files.
Your custom content is now available in SecOps Compliance for building policies, running assessments, and
remediating your systems. Custom checks include a user icon , in contrast with SaltStack checks .
Note: You can also import content using the Enterprise API, or alternatively, through the command line
during installation. See Sec API interface or https://enterprise.saltstack.com/.
Note: Only custom content can be deleted. Custom content includes a user icon , in contrast with SaltStack
content .
3. In the Delete Check dialog, under In Use, review the list of policies and benchmarks that include the check.
This is useful for predicting any dependencies in your environment that might break if you delete the check.
When you have finished reviewing dependencies in use, click Next.
4. Under Delete Check > Warning, click Delete. The dialog confirms the check was deleted.
5. Click Done to close the dialog.
Note: Only custom content can be deleted. Custom content includes a user icon , in contrast with SaltStack
content .
3. In the Delete Benchmark dialog, under In Use, review the list of policies and checks associated with the bench-
mark. This is useful for predicting any dependencies in your environment that might break if you delete the
benchmark.
When you have finished reviewing dependencies in use, click Next.
4. Under Delete Benchmark > Warning, click Delete. The dialog confirms the benchmark was deleted.
5. Click Done to close the dialog.
20.3 Reference
20.3.1 Prerequisites
• Download the SecOps Compliance Custom Content SDK. See Initializing the SDK .
• Install Docker. See the Docker installation documentation.
After initializing the SDK, your directory includes the following folders and files:
• benchmarks - contains custom benchmark meta (.meta) files
• salt/locke/custom - contains custom check state (.sls) and meta (.meta) files
• sample_tests - contains example files for testing using Docker
• README.md - provides more detailed information about the SDK
Important files are described in more detail below.
Benchmarks are categories of security checks. SecOps Compliance built-in benchmarks are defined by widely-
accepted experts. However, custom benchmarks can be defined by your own organization’s standards. Each bench-
mark contains a list of recommendations, called checks, and has a corresponding .meta file in the benchmarks
directory. For more on benchmarks in SecOps Compliance, see Benchmarks.
By creating a benchmark meta file, you create a category of checks. You can then add checks to that benchmark by
naming the benchmark in a check meta file under benchmark_id. See Check meta files.
The meta file is written in YAML, and includes the following options you can customize for your content:
name Benchmark name
display_name Name of benchmark as it will appear in the list of benchmarks in SecOps Compliance
desc Benchmark description
Note: In addition to the above options, the meta file also includes a variety of reserved items, such as version,
authority, and ids. Do not modify these reserved items unless instructed by your administrator.
A check is a security standard that SecOps Compliance assesses for compliance. This is a recommendation associated
with a benchmark. The recommendation provides description, rationale, audit, and remediation information. Each
check is defined by at least two files: a state (.sls) and corresponding meta (.meta) file.
Note: Both files associated with a check must be in the same directory and start with the same name, for example:
• my_first_check.meta
• my_first_check.sls
You can save these two files together in any subdirectory of salt/locke/custom.
Check meta files include a description of a check, as well as additional details related to the check, such as its version,
applicable Operating Systems, and more. Meta files are written in YAML and use the .meta file extension.
Custom check meta files include the following options:
version Version of the check content. If a change is made to the check, this number should be incremented.
display_name The name of this check as it will appear in the list of checks in Enterprise Console.
global_description A detailed description of the check. This is a chance to give more information than is supplied
through the check and benchmark names.
osfinger List of operating systems that are allowed to run this check. If the host doesn’t have an osfinger value
that matches a value in this list, the assessment result of the check will come back as notapplicable.
refs Cross-reference information about other checks in other benchmarks or security standards that are satisfied
with this check.
benchmark_id List of each benchmark the check belongs to.
Each benchmark entry creates a new section which includes the following sub-options:
type Type of benchmark. Enter custom when defining a custom check not provided by a specific authority.
desc Title of the security recommendation as it will appear in the list of checks in Enterprise Console.
control_id Recommendation number, for example from a corresponding CIS document.
scored This field is modeled after CIS recommendations which may be Scored or Not Scored. CIS recommen-
dations that are Not Scored do not count for or against a security score.“true“ indicates scored and false
indicates not scored. You might choose to score or not score a check, based on your internal needs.
profile CIS and other benchmarks are divided into profiles. For example, the CIS CentOS Linux 7 benchmark
has four profiles, represented as:
profile:
server: level1
workstation: level1
server: level2
workstation: level3
information Description of the check. This may be similar to the check’s global_description field.
Check state files apply Salt states to perform assessments and remediations. A state function is a function contained
inside a state module which can manage the application of a particular state to a system. State functions frequently
call out to one or more execution modules to perform a given task. State files are written in both YAML and Jinja,
and use the .sls file extension.
The result of an assessment is the result of running the state file in test=True mode. If the result shows that
applying the state would have caused a change, the host is considered non-compliant. If applying the state would
not result in a change, the host is considered compliant.
For more on Salt States, see the Salt documentation.
After building your custom content library, your directory includes the _dist directory, which contains the fol-
lowing additional files:
• digest.json - contains hashes and other information about the content
• secops_custom.tar.gz - gzip tar file ready for ingestion. This is suitable for upload through Enterprise
Console. For more on content ingestion, see https://enterprise.saltstack.com/.
• secops_custom.txt - base64 encoded version of secops_custom.tar.gz. This is useful when mak-
ing API calls
• secops_custom_YYYY-MM-DDTHH:MM:SS.SSSSSS...tar.gz - an identical copy of
secops_custom.tar.gz, preferred for upload through Enterprise Console because of its descrip-
tive filename, which includes the creation date and tarball UUID
• SecOps Compliance
• Sec API interface
TWENTYONE
SECOPS VULNERABILITY
Note: SecOps Vulnerability is a SaltStack Enterprise add-on that provides automated vulnerability scanning and
remediation for your infrastructure.
A SecOps Vulnerability license is required.
21.1 Overview
SecOps Vulnerability is a vulnerability remediation solution. It allows Security and IT teams to work together to as-
sess the vulnerability status of your systems against the latest Common Vulnerabilities and Exposures (CVE) entries,
detect vulnerabilities, and remediate them. You can optionally exempt certain advisories or assets, to customize your
vulnerability management strategy around other existing security controls.
SecOps Vulnerability provides various vulnerability reporting options. It includes a quick, printable dashboard view
to help assess your vulnerability trend over time. For more on the dashboard, see Vulnerability dashboard. Following
a scan, you can access a downloadable list of all detected vulnerabilities, along with their corresponding advisory
name, severity, vulnerability score, and affected assets. For more on assessment results, see Assessment results.
As a SaltStack Enterprise add-on, SecOps Vulnerability goes beyond assessment, and takes advantage of Salt to
actively remediate vulnerabilities while also giving you full control over what to remediate and when.
To take advantage of SecOps Vulnerability, first define a security policy, scan your systems against it, and remediate
detected vulnerabilities as needed. You can optionally exempt certain advisories or assets, to customize the policy
around other existing security controls.
Note: This section describes how to use SecOps Vulnerability in the Enterprise Console. However, you can also use
it through the Enterprise API. See the Vman API interface, or contact an administrator for assistance.
109
SaltStack Enterprise Documentation, Release 6.1.0
Note: Before creating your first policy, you need access to the vulnerability library. See Updating the vulnerability
library.
Note: Scanning a large number of minions might result in long processing times. This could also delay other
processes, such as jobs running, in SaltStack Enterprise. Make sure to account for extra time required to run
large assessments.
4. To save the policy and define an assessment schedule, click Next step.
Note: You can also save and exit without defining a schedule. Click Save.
5. In the Schedule tab, define schedule frequency and click Save. For more on defining schedule settings, see
Schedules_.
Editing a policy
1. Go to SecOps > Vulnerability and select the policy you want to edit.
2. In the policy screen, click Edit policy in the upper-right corner.
3. Edit the policy as needed and click Save.
Note: After initial installation, SaltStack Enterprise takes about 15-20 minutes to ingest vulnerability content. For
best results, wait at least 20 minutes after installing SaltStack Enterprise before you run your first vulnerability scan.
Note: You can also run a scan from the Vulnerability workspace by selecting one or more policies and clicking
Run assessment.
3. In the policy home page, click Run assessment, then click Run assessment in the confirmation dialog.
SecOps Compliance begins to scan your systems against the latest CVE entries.
Note: During the assessment, no changes are made to any of your systems. You will have the ability to
remediate any issues later. See Remediating all vulnerabilities.
Tracking status
1. Go to SecOps > Vulnerability and select a policy to view the latest assessment results.
The policy home page includes a list of advisories returned from the most recent assessment. For an assessment
results reference, see Assessment results. For more on running assessments, see Running a vulnerability scan.
2. Select the Minions tab to view assessment results sorted by node.
1. Go to SecOps > Vulnerability and select a policy to view the latest assessment results.
2. In the policy home page, go to the Report tab and click Download.
Note: You can also view and print your vulnerability dashboard in the Vulnerability home page. See Viewing
your vulnerability dashboard.
Note: When you run Remediate all, SecOps Compliance remediates all advisories on all minions in your policy,
which may result in long processing times. A best practice is to remediate by advisory or by minion to reduce
processing times.
Note: Any exempted checks or minions are not remediated when you run Remediate all. See Adding
exemptions.
Remediating by advisory
Remediating by minion
Removing an exemption
• Go to the Roles editor to modify SecOps Compliance permissions. For more on SaltStack Enterprise roles and
permissions, see Roles and Permissions.
21.3 Reference
Vulnerability policies are collections of advisories, and specifications for which nodes each advisory applies to, in
SecOps Vulnerability. Policies can also include schedules, as well as specifications for handling exemptions.
Each component of a vulnerability policy is described in more detail below.
Target
A target is the group of minions, masters, or a single master that a job’s Salt command applies to. When you choose
a target in SecOps Vulnerability, you define the group of assets (referred to as Minions) your policy will apply to.
You can choose an existing target or create a new one. For more on targets, see Minions and targets.
Schedule
Note: In the schedule editor, the terms “Job” and “Assessment” are used interchangeably. When you define a
schedule for the policy, you are scheduling the assessment only - not the remediation.
Choose the schedule frequency from Recurring, Repeat Date & Time, Once, or Cron Expression. Additional
options are available, depending on the scheduled activity, and on the schedule frequency you choose.
Recurring Set an interval for repeating the schedule, with optional fields for start or end date, splay, and maximum
number of parallel jobs.
Repeat Date & Time Choose to repeat the schedule weekly or daily, with optional fields for start or end date, and
maximum number of parallel jobs.
Once Specify a date and time to run the job.
Cron Enter a cron expression to define a custom schedule based on Croniter syntax. See the CronTab editor (https:
//crontab.guru/examples.html) for syntax guidelines. For best results, avoid scheduling jobs fewer than 60
seconds apart when defining a custom cron expression.
Note: When defining an assessment schedule, you can choose from the additional Not Scheduled (on demand)
option. If you select this option, you choose to run only single assessments as needed, and no schedule is defined.
In your policy home page, the Activity tab shows a list of completed or in-progress assessments and remediations.
It includes the following statuses.
Queued Operation is attempting to start running.
Completed Operation has finished running.
Partial Operation is still waiting for some minions to return, though the master has reported that the operation has
finished running.
Minions are nodes running the Salt Minion service, which can listen to commands from a master and perform
the requested tasks. The Salt Master is a central node used to issue commands to minions.
You can track all activity in SaltStack Enterprise, including assessments and remediations, in the SaltStack Enterprise
main Activity workspace. See Activity.
Your vulnerability dashboard shows an overview of your vulnerability status. It includes various metrics, as well as
a list of known vulnerabilities and details about each.
The dashboard is useful for reporting your current vulnerability status. You can share the dashboard by linking to
the page URL, or by printing a PDF copy. See Viewing your vulnerability dashboard.
The dashboard includes the following metrics:
Metric Description
Vulnerability Summary The number of assets currently affected by vulnerabilities of different severity levels,
ranging from Critical to None.
Remediations The total number of vulnerabilities remediated through SecOps Vulnerability, sorted
by severity.
Vulnerability Trend Graph showing your vulnerability status over the last 30 days.
Top Advisories List of the most frequently-discovered vulnerabilities across your systems.
SecOps Vulnerability assessment results display in your policy home page. The page includes a list of advisories
with the following information fields:
Note: SecOps Vulnerability allows you to download assessment results in JSON. See Downloading the assessment
report.
Field Description
Severity Severity rating ranging from Critical to None. The severity rating is useful for prior-
itizing remediations.
Advisory title Official advisory title recognized by CVE. Click the advisory title to view its details.
CVE Common Vulnerabilities and Exposures, a list of common identifiers for publicly
known cybersecurity vulnerabilities.
Packages affected List of any system packages affected by the advisory
CVSS v3.0 Vulnerability rating according to the Common Vulnerability Scoring System version
3. This might not display for certain advisories as not all advisories have not been
scored yet.
CVSS v2.0 Vulnerability rating according to the Common Vulnerability Scoring System version
2
Minions Assets affected by the advisory. Minions are nodes running the Salt Minion service,
which can listen to commands from a master and perform the requested tasks. For
more on minions, see Minions and targets.
TWENTYTWO
SECOPS ARCHITECTURE
Note: SecOps Compliance is an add-on to SaltStack Enterprise that manages the security compliance posture
for all the systems in your environment. SecOps Vulnerability is an add-on to SaltStack Enterprise that manages
vulnerabilities on all the systems in your environment.
A license is required to use SecOps Compliance or SecOps Vulnerability.
22.1 Overview
The following diagram lists the primary components of SaltStack Enterprise and SecOps, along with the integration
points between each.
SecOps Compliance is an add-on to SaltStack Enterprise that manages the security compliance posture for all the
systems in your environment. For more on SecOps Compliance, see SecOps Compliance. SecOps Vulnerability is an
add-on to SaltStack Enterprise that manages vulnerabilities on all the systems in your environment. For more on
SecOps Vulnerability is an add-on to SaltStack Enterprise that manages vulnerabilities on all the systems in your
environment., see SecOps Vulnerability. For a description of each of SaltStack Enterprise’s primary components, see
Architecture.
In contrast with a standalone SaltStack Enterprise architecture, the SecOps add-ons includes regularly-updated con-
tent, as well as SecOps Compliance custom content. Together, SecOps includes the following content libraries:
117
SaltStack Enterprise Documentation, Release 6.1.0
• SecOps Compliance
• secops-custom-content
• SecOps Vulnerability
• SaltStack Enterprise architecture
• RPC Endpoint Documentation
TWENTYTHREE
23.1 Overview
SaltStack Enterprise configuration files are used during initial setup to define fundamental settings to allow the
Enterprise API to communicate with the database and connected Salt Masters.
You can customize your SaltStack Enterprise deployment during initial setup, or any time you want to improve
performance, by modifying your Enterprise API or Salt Master configuration files.
You can generate the default configuration files as needed. For example, you might find it useful to regenerate these
files when upgrading SaltStack Enterprise to take advantage of the latest features. For more on generating default
configuration files, see Configuration file example and Master Plugin.
23.3 Reference
Enterprise API settings are in the /etc/raas/raas configuration file. The following is a subset of frequently-used
configuration settings. For a full raas configuration reference, see Configuration file example.
119
SaltStack Enterprise Documentation, Release 6.1.0
Required settings
tls_crt Path to the crt file for encrypted communication. If this certificate is self-signed and should not be validated
using a known CA, be sure to set the sseapi_validate_cert option to False in the Salt Master config.
tls_key Certificate key file.
port Port that is used for connections from Enterprise Console and Salt Masters.
audit Include Enterprise API information in the Debug report for administrator accounts. If valid_logins is
set to True, this information is also included in bug reports that are generated by non-admin users. See
Troubleshooting.
raas_presence_expiration Seconds of inactivity before a minion is considered not present. Default is 3600 seconds
(one hour).
For a full reference of configuration options, see Configuration file example.
Communication with Enterprise API uses REST calls over HTTP(s) on standard web ports (80 or 443). Connections
to Enterprise API are initiated by the Enterprise Console or by the Salt Master, so incoming ports do not need to be
configured on those systems.
• Architecture
• Enterprise API (eAPI) RPC Endpoint Documentation
• Configuration file example
TWENTYFOUR
MASTER PLUGIN
24.1 Overview
The Salt Master plugin enables your masters to communicate with SaltStack Enterprise. The Salt Master is a central
node used to issue commands to minions. This article describes how to install, authenticate, and configure the master
plugin.
5. Edit the generated raas.conf file to update or comment out the following values: - id - sseapi_server
For more on other options in raas.conf, see Reference.
6. Restart the Salt Master.
During the master startup (unless using password authentication), the master will request a public key from raas.
Then raas will generate a public key file and the master will download the public key. At this point, you will need
to accept the master key in the Enterprise Console.
To accept the key:
1. Go to System Administration > Master Keys in the Enterprise Console.
2. Click Pending.
121
SaltStack Enterprise Documentation, Release 6.1.0
3. Verify the finger print matches the finger print in your master log files.
4. Select the master key and click Accept.
5. Accept keys for all masters.
Note: The master will continue to run but communication with raas will fail until the key is accepted. Also, the
master will react slowly as it continually tries to contact raas.
If you delete the public key, the master will need to request a new public key from raas. When a public key is
invalid or absent, the master will request a new key every five minutes until it is accepted and validated.
Public keys are rotated automatically based on the sseapi_key_rotation setting, which is set to 24 hours by
default. To rotate the key manually, delete the key file, restart the master, and accept the key by following the
previous steps. For more on key states, see Key states.
To allow masters to communicate with minions, make sure to accept minion keys on all masters. For more on minion
keys, see Minion Keys.
By default, a local user is associated with each Salt Master key used for authentication. For more on local users, see
Local Users.
1. Open /etc/salt/master.d/raas.conf.
2. Set sseapi_username and sseapi_password to authenticate using a username and password set, for
example:
sseapi_username: username
sseapi_password: password
You can generate the default configuration files as needed. For example, you might find it useful to regenerate these
files when upgrading SaltStack Enterprise to take advantage of the latest features.
To generate the default sseape (master plugin) configuration file, run this command on a master with the plugin
installed:
Note: The syntax is slightly different from generating the default RaaS configuration file. In this case, you’ll send
the output to stdout and then redirect it > to a file path that indicates where the generated file should be saved.
For information about generating the default RaaS configuration file, see Configuration file example.
24.3 Reference
Settings that enable each Salt Master to connect to Enterprise API are in the /etc/salt/master.d/raas.conf
configuration file. This file is initially created during the Enterprise API master plug-in installation.
Warning: Salt master settings in the raas.conf file take precedence over existing settings in /etc/salt/
master. If you have customized the FILESERVER_BACKEND or EXT_PILLAR settings in /etc/salt/
master, you need to manually merge these settings so that they appear in one file only. You can optionally
re-order the backends to change precedence.
After initial configuration generation be careful changing these settings. Modules will be copied into these directories
from the installation process. However, adding extra paths will not have an adverse effect.
• beacons_dirs: beacons External Modules Path(s)
• engines_dirs: engines External Modules Path(s)
• fileserver_dirs: fileserver External Modules Path(s)
• pillar_dirs: pillar External Modules Path(s)
• returner_dirs: returner External Modules Path(s)
• roster_dirs: roster External Modules Path(s)
• runner_dirs: runner External Modules Path(s)
• module_dirs: Salt External Modules Path(s)
• proxy_dirs: proxy External Modules Path(s)
• metaproxy_dirs: metaproxy External Modules Path(s)
• states_dirs: states External Modules Paths(s)
SaltStack Enterprise displays master keys with one of the following statuses.
Accepted Key was accepted and the master can communicate with the Enterprise API.
Pending Key is not accepted or denied. In this state, connections are not accepted from the Enterprise API.
Rejected Key was explicitly rejected using the Reject Key command. In this state, connections are not accepted
from the master.
For more on managing master keys, see Setting up public key authentication.
TWENTYFIVE
This topic includes a sample /etc/raas/raas configuration file listing all available configuration settings con-
figured with default options.
For more on configuring SaltStack Enterprise, see SaltStack Enterprise Configuration.
You can generate the default configuration files as needed. For example, you might find it useful to regenerate these
files when upgrading SaltStack Enterprise to take advantage of the latest features.
To generate the default RaaS configuration file, run this command on the RaaS server:
raas genconfig /path/to/default-raas-cfg.conf
Note: The last argument of the above command indicates where to save the generated file. You should not use the
file path /etc/raas/raas, as this will overwrite the current RaaS configuration file. Only use this file path if you
have no need to preserve an existing current RaaS configuration file.
For information about generating a default Master Plugin configuration file, see Master Plugin.
/etc/raas/raas
# RaaS Default Configuration
125
SaltStack Enterprise Documentation, Release 6.1.0
system: true
tasks: false
rpc_max_payload: 100
# authenication backends
authers:
ldap:
log_detail: ERROR
ssl: {}
# for use with the webpack dev server only, Add the Access-Control-Allow-Origin: *
˓→header
cors_header_for_webpack: false
# Your customer ID
customer_id: 43cab1f4-de60-4ab1-85b5-1d883c5c5d09
# enable (true) or disable (false) cmd details in get_cmds API call. Should be
˓→disabled when return counts are large.
enable_cmd_details: true
cmd_returns_max: 0
algorithm: HS256
max_logins: 100
# loglevel for logfile logs, options: all, garbage, trace, debug, profile, info,
˓→warning, error, critical, quiet
log_file_loglevel: error
%(message)s'
# options: all, garbage, trace, debug, profile, info, warning, error, critical, quiet
log_level: error
# 0=off, max seconds to lock when adding minion keys and cache. This throttles insert
˓→of minions into the database.
minion_onboarding_throttle: 0
# max number of auto calculated processes per type. example: 8 max web, 8 max
˓→background workers
max_processes: 8
newrelic_config_file: /etc/raas/newrelic.ini
newrelic_enabled: false
# number of web server processes (0 = auto calc one per core up to max)
num_processes: 0
# port to bind to
port: 8080
root_dir: /
# SecOps settings
sec:
stats_snapshot_interval: 3600 # Interval in seconds between when stats for
˓→Secops will be gathered (ENV Var: SSE_SEC_STATS_SNAPSHOT_INTERVAL)
˓→OVERRIDE)
˓→OVERRIDE)
˓→ENABLED)
˓→FREQUENCY)
˓→SEC_CONTENT_LOCK_BLOCK_TIMEOUT)
# for development only, always serve the session cookie regardless of the request
˓→being http or https
spa_serve_cookie_always: false
˓→ENABLED)
˓→VMAN_DOWNLOAD_FREQUENCY)
˓→CONTENT_URL)
# how long to wait while reading body (seconds), when None uses tornado default
webserver_body_timeout:
# maximum amount of data for body, when None uses tornado default
webserver_max_body_size:
# maximum amount of incoming data to buffer, when None uses tornado default
webserver_max_buffer_size:
# in kB, 0=auto
webserver_max_memory: 0
# in seconds, 0=disabled
webserver_max_time: 0
TWENTYSIX
SAMPLES
26.1 Overview
SaltStack Enterprise provides several default targets and jobs along with supporting files and pillar data.
Sample job files and pillar data are placed in the sse Salt environment so they don’t interfere with files and pillar
data in the base environment. For more on environments in SaltStack Enterprise, see Environments.
A target is the group of minions, masters, or a single master that a job’s Salt command applies to. For more on
targets, see Minions and targets. Jobs are used to run remote execution tasks, apply states, and start Salt runners.
For more on jobs, see Jobs.
Files in SaltStack Enterprise are useful for configuring states you can then apply through jobs. Files are stored in the
file server. The file server is a location for storing both Salt-specific files, such as top files or state files, as well as files
that can be distributed to minions, such as system configuration files. For more on the file server, see File Server.
Pillars are structures of data defined on the Salt Master and passed through to one or more minions, using targets.
They allow confidential, targeted data to be securely sent only to the relevant minion. For more on pillars, see Pillars.
Samples are used to save time setting up your SaltStack Enterprise environment. With default jobs, you can take
advantage of predefined state files and pillar data to begin running frequently-used operations.
You might also refer to samples as a model for how different system elements are configured to work together as
you build your own workflows.
26.3 Reference
SaltStack Enterprise includes a range of default target groups containing all minions of a given operating system.
The following default targets are defined by matching the os grain.
• CentOS
• Linux
• MacOS
• RedHat
133
SaltStack Enterprise Documentation, Release 6.1.0
• SUSE
• Ubuntu
• Windows
• Windows Servers
For more on targets, see Minions and targets.
SaltStack Enterprise provides various state and remote execution jobs. Each is described in further detail below, with
a description of related files and pillars where applicable.
Enable Presence
Enables more accurate presence detection. Presence indicates if SaltStack Enterprise has received any job data from
the minion recently, within a defined interval. For more on presence, see presence.
Highstate
Runs a state.highstate on targeted Salt Minions. A highstate is a state module that applies all states configured
in the top.sls file. top.sls must be user-defined and is not included as a sample file. For more on states, see
Jobs.
Sample Apache
files sse/apache/init.sls
pillar None
Installs Apache. This state contains logic to determine the correct name of the Apache package based on the target
OS.
Sample DokuWiki
files sse/htop/init.sls
pillar None
Installs HTOP.
files sse/htop/remove.sls
pillar None
Removes HTOP.
files sse/LAMP/init.sls
includes mySQL, PHP, Apache
pillar customization
• db_user: default dbuser.
• db_name: default dbname.
• db_pass: default password.
• db_host: default localhost.
Installs Apache, mySQL, and PHP.
Sample mySQL
files sse/mysql/init.sls
pillar None
Installs mySQL.
Sample PHP
files sse/php/init.sls
pillar None
Installs PHP.
Refreshes the Salt pillar on targeted Salt Minions. Run this after assigning pillar data to Salt Minions.
Sample WordPress
files sse/wordpress/init.sls
pillar None
Installs WordPress.
test.ping
TWENTYSEVEN
SECURITY GUIDELINES
27.1 Overview
This page contains guidelines you can use to increase security within your SaltStack Enterprise environment.
Note: This does not cover SaltStack SecOps. For more on SecOps, see either of the following:
• SecOps Compliance - SecOps Compliance is an add-on to SaltStack Enterprise that manages the security com-
pliance posture for all the systems in your environment.
• SecOps Vulnerability - SecOps Vulnerability is an add-on to SaltStack Enterprise that manages vulnerabilities
on all the systems in your environment.
A license is required to access SecOps.
27.2 Reference
You can set automatic logout as low as 1 minute, and up to 60 minutes. This is set to 30 minutes by default. For more
on modifying this and other preferences, see Enterprise Console.
27.2.2 Permissions
Make sure to limit access to the following tasks. For more on defining permissions, see Roles and Permissions.
Limit user access to creating and editing jobs. These privileges enable a user to run any command in the system.
Together with target create and edit permission, they enable a user to run any command on any minion.
Limit user access to creating and editing targets. These privileges, along with Job create and edit permission, enable
a user to run available jobs on any Salt Minion in the system.
137
SaltStack Enterprise Documentation, Release 6.1.0
Limit user access to creating and editing roles. These privileges enable a user to assign themselves any privilege in
the system.
Connect masters to the Enterprise API through public key authentication (default), rather than through username
authentication. For more on setting up public key authentication, see Master Plugin.
Database credentials
Store database credentials for both PostgreSQL and Redis in an encrypted file, rather than in plain text. For more on
credential storage, see the SaltStack Knowledge Base.
• Enterprise Console
• Roles and Permissions
• Master Plugin
TWENTYEIGHT
28.1 Introduction
In this document, SSE refers to the application server that SaltStack Enterprise clients connect to. These clients
include the user interface component of SaltStack Enterprise, properly configured salt masters, and other users of
the SaltStack Enterprise API. The application server is also known as the eAPI server.
The SSE API is organized into modules (called “resources”) and functions (called “methods”). In the API call
test.echo(‘hello, world’), the resource is test and the method is echo(). Arguments can be passed to methods by
position or by keyword.
The SSE API can be accessed in two ways: via an RPC client that works over a WebSocket connection, and via an
HTTP (or HTTPS) bridge.
To connect to the API, set these options in client = SyncClient.connect():
• server
• username
• password
• config_name=’internal’ Change to authentication backend name if using LDAP
• force_restfull=False # False = use WebSockets True = use REST bridge
• connect_timeout=5 # Take at most 5 seconds to connect to server
• request_timeout=15 # Each request times out at 15 seconds
• ssl_ca=None
• ssl_key=None
• ssl_cert=None
• ssl_context=None
• ssl_validate_cert=True = Set to False if using self signed certs
Example:
139
SaltStack Enterprise Documentation, Release 6.1.0
client.api.<interface>.<method>(parameter=parameter_value)
Example:
You can also use the Enterprise API with directly with HTTP and JSON. The following is an example of using the
API with curl. Note when xsrf is enabled you will need to obtain an xsrf cookie and token first. See HTTP Bridge
on how to obtain and use an xsrf token and cookie. When using the Python API client, this is done automatically by
default.
Example:
28.4 Permissions
You can assign permissions to a role or user in the Enterprise API using save_role(...) or save_user(...)
in the API AUTH interface. For more on roles and permissions in SaltStack Enterprise, see Roles and Permissions.
You can assign permissions to a role or user in the Enterprise API using save_role(...) or save_user(...)
in the API AUTH interface.
Permission values in the Enterprise API include a resource type and an action, based on the following syntax:
• resource-action
Some permission values include a qualifier as follows:
• resource-qualifier-action
For example, if you want to assign permission to run commands, you would use cmd-run. Whereas, to assign
permission to run wheel commands, you would use cmd-wheel-run.
Note: The above syntax does not apply to the Super user permission, whose API value is superuser.
The following list includes all resource types and permitted actions.
For a detailed explanation of each resource type, and of permissions in SaltStack Enterprise, see Roles and Permissions.
Commands
• cmd-delete
• cmd-read
• cmd-run
• cmd-write
Runner commands
• cmd-runner-run
SSH commands
• cmd-ssh-delete
• cmd-ssh-read
• cmd-ssh-run
• cmd-ssh-write
Wheel commands
• cmd-wheel-run
Formulas
• formula-delete
• formula-read
• formula-write
Filesystem
• fs-delete
• fs-read
• fs-write
Groups
• group-delete
• group-read
• group-write
Jobs
• job-delete
• job-read
• job-run
• job-write
License
• license-read
Master
• master-delete
• master-read
• master-write
Master configuration
• master-config-delete
• master-config-read
• master-config-write
Master filesystem
• master-fs-delete
• master-fs-read
• master-fs-write
Minions
• minion-delete
• minion-read
• minion-write
Pillar
• pillar-delete
• pillar-read
• pillar-write
Returners
• returner-delete
• returner-read
• returner-write
Roles
• role-delete
• role-read
• role-write
Schedules
• schedule-delete
• schedule-read
• schedule-write
Super user
• superuser
Target
• target-delete
• target-read
• target-write
• target-allminions-run
Users
• user-delete
• user-read
• user-write
28.5 Licensing
The SaltStack Enterprise web console displays notifications to warn when your license is close to expiring. As an
Enterprise API user, you must use the License interface to track license status and ensure it stays active. If your
license expires, the SaltStack Enterprise service stops. See License interface.
The programmatic RPC clients in the sseapiclient module work with Python version 2.7 and Python version 3.5
or later. The clients connect to SSE via HTTP or HTTPS, authenticate, then upgrade to a persistent WebSocket
connection, so that the overhead of establishing a connection and authenticating is incurred only once per session.
Using the RPC client also has the advantage of being somewhat easier to use than the HTTP bridge.
The HTTP (or HTTPS) bridge accepts JSON payloads POSTed to an endpoint exposed by SSE, translates the payloads
into RPC calls, then returns the result as JSON. The endpoint supports cookie-based authentication so that authenti-
cation credentials need to be passed only once per session. The bridge also allows sending multiple calls in a single
payload.
If xsrf is enabled (default with state install) in the /etc/raas/raas.conf tornado_xsrf_cookies_enabled: True you will
need to provide the X-Xsrftoken: on the header of the rest call. The best way is to save a cookie with a get call then
use the cookie to provide the header token. This cookie is saved in the $HOME (users home) directory. The payload
is a dictionary.
Example curl call with xsrf header:
trim_database(…)
Returns Dict.
Trim records from various database tables. Returns number of records of each type that would be deleted from the
database. When test=True these records will not be deleted. If test is None or False this call will delete the
records as well.
Returns
Dictionary with audit, events, jobs, and/or schedule keys, matching the arguments passed to the call. Each key is
associated with the number of corresponding records removed from the database, except jobs, which is a dictionary
containing the number of commands, minions-expected, returns, and jids entries that were deleted.
These results are also logged in the RaaS log at info level.
Example using the Python client
Additional connect arguments: If you have a large dataset and you want to wait longer than 15 seconds (default
timeout) for the request. request_timeout=None
Needed sometimes if your SSL Certificate is self signed. ssl_validate_cert=False
Example response
RPCResponse(
warnings=[],
error=None,
riq=139727129350384,
ret={
"test": True,
"jobs": {
"commands": 5394,
"minions-expected": 231,
"returns": 4403,
"jids": 299
},
"events": 30,
"audit": 123,
"schedule": 48
}
)
discover(…)
Returns Dict.
Return the RPC resources, their methods and the methods documentation. The RPC client calls this method on each
connection and stores the result in the client object in _discovered_api.
param dict or list include filter document to only include listed sections
client.api.api.discover(include=['constants'])
get_versions(…)
Returns Dict.
Return information on various software components used by RaaS.
RPCResponse(
riq=4,
ret={'python': '3.5.3 (default, Sep 14 2017, 22:58:41)',
'opts': {'sql': {'dialect': 'postgresql',
'host': 'localhost', 'pool_timeout': 10,
'driver': 'psycopg2', 'pool_recycle': 3600},
'customer_id': '43cab1f4-de60-4ab1-85b5-1d883c5c5d09'},
'raas': {'raas': '5.2.0-762-g3a64d15' ...
error=None,
warnings=[])
get_audit(…)
Returns Dict.
Return a list of audit records matching search criteria.
RPCResponse(
riq=4,
ret={'count': 1,
'results': [
{'id': 175,
'start_time': '2019-06-05T21:12:53.190506+00:00',
'end_time': '2019-06-05T21:13:24.729561+00:00',
'event_type': 'auth',
'event_name': 'login',
'username': 'root',
'account_uuid': None,
'session_uuid': '4642ef92-d5ac-4ea2-b95d-2055b43f2193',
'failed': True,
'event_data': {
'note': 'User root: authentication failed: invalid basic-auth
˓→credentials',
'status': 401,
'headers': {
'Host': 'localhost:8080',
'Accept': '*/*',
'User-Agent': 'curl/7.65.0',
'Content-Type': 'application/x-www-form-urlencoded',
'Authorization': 'Basic cm9vdDpzYWx0MQ==',
'Content-Length': '41'}}}],
error=None,
warnings=[])
save_group_link(…)
Returns None.
Link an external auth backend group to an SSE internal group. Users in the external group will inherit the roles
assigned to the SSE group.
delete_role(…)
Returns None.
Delete a role from the system.
save_group(…)
get_user(…)
Returns Dict.
Get details for a user account. See Local Users for more details about the user model.
client.api.auth.get_user(account_uuid='80c67364-cb31-4f4b-972a-e7ea3f752bb8')
RPCResponse(riq=12,
ret={'uuid': '80c67364-cb31-4f4b-972a-e7ea3f52bb8',
'groups': [],
'perms': ['cmd-read', 'master-config-read',
'job-run', 'fs-read', 'cloud-read',
'job-read', 'superuser', 'returner-read',
'metadata-auth-read', 'target-read',
'license-read', 'master-fs-read',
'minion-read', 'master-read'],
'config_name': 'internal',
'custom_data': None,
'roles': ['Superuser', 'User'],
'username': 'root'}, error=None, warnings=[])
save_role(…)
Returns None.
Update an existing or create a new role.
See Roles and Permissions for more details about roles in SaltStack Enterprise.
change_password(…)
Returns None.
Update a password for an account_uuid.
delete_user(…)
Returns None.
Delete a user account.
save_user(…)
Returns UUID.
Save a user account. This call supports both creating accounts and updating user account information.
See Local Users for more details about the user model.
get_role(…)
Returns Dict.
Retrieve details about a particular role. See Roles and Permissions for more information on roles and how they
function.
Example:
delete_group_link(…)
Returns None.
Delete the link between an external auth backend group and an SSE internal group.
get_group_links(…)
Returns List[Dict].
Get information on links between external auth backend groups and SSE internal groups.
get_all_users(…)
Returns List[Dict].
Get all users for the provided config_name or all users of all authentication configurations if the value of
config_name is None
See Local Users for more details about the user model.
client.api.auth.get_all_users(config_name='internal', include_roles=True)
RPCResponse(riq=13,
ret=[{'config_name': 'internal',
'uuid': '80c67364-cb31-4f4b-972a-e7ea3f752bb8',
'roles': ['Superuser', 'User'], 'username': 'root'},
{'config_name': 'internal',
'uuid': '59c4c....}], error=None, warnings=[])
get_group(…)
Returns Dict.
Retrieve information about a group.
get_jwt(…)
Returns Dict.
Get a JSON Web Token for the current user.
save_user_link(…)
Returns None.
Create a link between an external user and an internal RaaS user. Will create an internal user record if necessary.
transfer_resources(…)
Returns Dict.
Transfer resources that belong to one user to another.
delete_group(…)
Returns None.
Delete a group from the provided named configuration
get_all_groups(…)
get_all_roles(…)
Returns Dict.
Retrieve details about all roles in the system.
Example:
get_background_job(…)
Returns Dict.
Return the status information about a background running job
get_task_status(…)
Returns List.
Get the status of background tasks
task_ids list of task IDs
pause_job(…)
Returns str.
Pass a pause command through to the masters. Note that the pause command is itself a command, so this method
returns a jid corresponding to the state.pause call.
param job_uuid UUID of the job to attempt to pause
param jid Jid of the job to attempt to pause
return a Jid corresponding to the pause command
get_cmd_details(…)
Returns Dict.
Query commands based on jid and retrieve more detailed data.
jid A job ID to match against.
minion_id_exact Filter by a minion_id that match exactly. Also full return data will be returned.
minion_id Filter by a minion_id search.
master_id Filter by a master_id search.
has_errors Filter by whether there were errors, True|False.
has_return Filter by whether return data was recieved, True|False.
sort_by Sort by the specified field, such as ‘alter_time’.
reverse Sort ascending (False) or descending (True).
page This specifies which page, after the first, of results to return. Often used with limit.
limit This is how many records to return at a time. The default is 50. Often used with page.
Examples
Request
get_cmds(…)
Returns Dict.
Query commands based on a number of properties.
See Jobs for more information on commands and jobs.
Example:
client.api.cmd.get_cmds()
RPCResponse(riq=5,
ret={'count': 1,
'results': [
{'cmd': 'local',
'duration': None,
'expected': 2,
'fun': 'disk.usage',
'is_highstate': False,
'jid': '20190416202619938862',
'job_desc': None,
'job_name': None,
'job_source': 'raas',
'job_uuid': None,
'masters_done': ['master1'],
'masters_to': ['master1'],
'origination': 'Ad-Hoc',
'returned': 1,
'returned_failed': 0,
'returned_good': 1,
'sched_name': None,
'sched_uuid': None,
'start_time': '2019-04-16T20:26:19.93886Z',
'state': 'retrieved',
'tgt_desc': None,
'tgt_name': None,
'tgt_uuid': None,
'user': 'root',
'user_uuid': '80c67364-cb31-4f4b-972a-e7ea3f752bb8'}]},
error=None,
warnings=[])
stop_job(…)
Returns str.
Pass a ‘soft_kill’ command through to the masters.
param job_uuid UUID of the job to attempt to kill
param jid Jid of the job to attempt to kill
return a Jid corresponding to the kill command
route_cmd(…)
Returns str.
Create a command and route it to Salt. See Jobs for more information on commands and jobs.
Example:
client.api.cmd.route_cmd(cmd='local',
fun='cmd.run',
tgt={'master3_master': {'tgt': 'master3', 'tgt_type':
˓→'glob'}},
client.api.cmd.route_cmd(
job_uuid='5c5cc410-4f9f-11e6-88bc-080027a7289c',
tgt={'master3_master': {'tgt': '*', 'tgt_type': 'glob'}})
client.api.cmd.route_cmd(cmd='local',
fun='cmd.run',
tgt={'master3_master': {'tgt': 'master3', 'tgt_type': 'glob'}},
arg={'arg': ["ls /etc"]})
client.api.cmd.route_cmd(job_uuid='5c5cc410-4f9f-11e6-88bc-080027a7289c',
tgt={'master3_master': {'tgt': '*', 'tgt_type': 'glob'}})
resume_job(…)
Returns str.
Pass a resume command through to the masters
param job_uuid UUID of the job to attempt to resume
param jid Jid of the job to attempt to resume
return a Jid corresponding to the resume command
get_cmd_status(…)
Returns List.
Get the status of a command
jids list of JIDs
28.8.10 fs interface
get_env(…)
Returns List[Dict].
List all files in the given Salt environment.
See Environments for more information.
save_file(…)
Returns None.
Add or update a file to the database
See File Server and Environments for more information.
file_exists(…)
Returns bool.
Return True if file exists.
See File Server and Environments for more information.
delete_file(…)
Returns None.
Delete a file from the database.
get_envs(…)
Returns List[str].
Get a list of all available Salt environments
See Environments for more information.
update_file(…)
Returns None.
Add or update a file to the database
See File Server and Environments for more information.
get_file(…)
Returns Dict.
Get a file from the database. Returns a dictionary with the file’s metadata and a data field with the actual file contents.
See File Server and Environments for more information.
get_file_access(…)
Returns Dict.
Return access metadata for this file.
save_file_access(…)
Returns None.
Save access metadata for this file.
save_job_access(…)
Returns UUID.
Save access metadata for this job.
get_job_access(…)
Returns Dict.
Return access metadata for this job.
get_jobs(…)
Returns Dict.
Get a job by uuid or search jobs by other query parameters.
The flag include_no_tgt_jobs is intended to be used when a list of jobs that can be run at the time is desired. For
example, if a user clicks on a target in the GUI and is presented with a list of jobs that go with that target, we may
also want to show jobs that have NO target attached since those jobs may be run regardless of what target is selected.
This flag has no effect if tgt_uuid is None.
The return payload is a dict with the following elements:
{
'count': 100, # total job count
'limit': 50, # results count
'results': [...] # jobs
}
delete_job(…)
Returns None.
Delete a job.
raises FailedResourceDependency The job has one or more schedules that depend on it and force is
false. The details of the exception contain the results of get_schedules with the dependent sched-
ules.
save_job(…)
Returns str.
Create or update a job
28.8.12 kv interface
delete_system_key(…)
Returns int.
Delete a system key. System keys are used internally and cannot be retrieved directly.
set_system_key(…)
Returns None.
Set the value of a system key. System keys are used internally and cannot be retrieved directly.
check_usage(…)
Returns Dict.
Return a dictionary that contains information about the license status.
Note: Make sure to track your license status and keep it active. If your license expires, the SaltStack Enterprise
service will stop.
Example:
client.api.license.check_usage()
RPCResponse(riq=17,
ret={u'timestamp': u'2017-11-30T15:58:24.475034',
u'messages': [{u'detail': u'license expires 2018-06-01',
u'level': u'info'},
{u'detail': u'4 masters in use is within hard limit of 10',
u'level': u'info'},
{u'detail': u'4243 minions in use is within hard limit of 10000
˓→',
u'level': u'info'}]},
error=None, warnings=[])
get_license(…)
Returns Dict.
Return license for the passed uuid.
get_usage_snapshots(…)
Returns List.
Return snapshots of license usage for a given date range.
Snapshots are normally taken every hour.
Example:
client.api.license.get_usage_snapshots('2017-11-01','2017-11-17')
RPCResponse(riq=25,
ret=[{u'license_uuid': u'1dbb6f3c-c622-11e6-874c-002590058d18',
u'masters': 4,
u'minions': 4212,
u'datetime': u'2017-11-16T18:06:49.171497'},
{u'license_uuid': u'1dbb6f3c-c622-11e6-874c-002590058d18',
u'masters': 4, u'minions': 4243,
u'datetime': u'2017-11-16T19:55:26.095901'},
{u'license_uuid': u'1dbb6f3c-c622-11e6-874c-002590058d18',
u'masters': 4,
u'minions': 4222,
u'datetime': u'2017-11-16T20:55:26.092793'} .... ],
error=None, warnings=[])
delete_license(…)
Returns None.
Delete the license for this uuid. Deleting the active license with no alternative license in place can cause RaaS to
stop working.
get_current_license(…)
Returns Dict.
Retrieve the current active license for RaaS.
Note: Make sure to track your license status and keep it active. If your license expires, the SaltStack Enterprise
service will stop.
Example:
c.api.license.get_current_license()
RPCResponse(riq=16,
ret={u'alter_time': u'2017-11-15T23:39:04.227752',
u'uuid': u'1dbb6f3c-c622-11e6-874c-002590058d18',
u'license': {u'masters':
{u'policy': u'fixed',
u'hard_limit': 10},
u'term': {u'duration': -1,
u'policy': u'fixed'},
u'features': [u'*'],
u'minions': {u'policy': u'fixed',
u'hard_limit': 10000},
u'metadata': {u'customer': u'SaltStack',
u'uuid': u'1dbb6f3c-c622-11e6-874c-002590058d18',
u'created': u'2016-12-19'}},
u'desc': [u'Customer: SaltStack',
get_master_keys(…)
Returns List.
List RSA keys of masters.
get_master_grains(…)
Returns Dict.
Get grains for a master.
Example:
client.api.master.get_master_grains('saltmaster1_master')
RPCResponse(riq=26, ret=
{u'saltmaster1_master': {u'grains': {u'biosversion': u'4.2.amazon',
u'kernel': u'Linux',
u'domain': u'localdomain',
u'uid': 0,
u'zmqversion': u'4.1.4',
u'kernelrelease': u'3.10.0-693.5.2.el7.x86_64
˓→',
...... }}
error=None, warnings=[])
request_master_key(…)
Returns Dict.
Request RSA Public key for master authentication use.
delete_master(…)
Returns None.
Delete master and its grains from RaaS.
rotate_master_key(…)
Returns Dict.
Rotate RSA Public key for master authentication use.
save_master(…)
Returns str.
Update or add a salt-master to the database.
Returns the UUID of the master in the database.
get_master_jwt(…)
Returns Dict.
Get a JWT authenicating using a master RSA key pair
set_master_key_state(…)
Returns List.
Set RSA key state of masters.
get_masterfs(…)
Returns Dict.
Get a list of master filesystem files
get_minion_key_state(…)
Returns Dict.
Get minion key states
get_minion_details(…)
Returns Dict.
Get minion details.
delete_minion_cache(…)
Returns None.
Flush the minion’s cache on a master.
set_minion_key_state(…)
Returns Dict.
Set the minion key state on the provided master id/cluster id.
get_minion_cache(…)
Returns Dict.
Retrieve the minion cache for a particular master.
Example:
client.api.minions.get_minion_cache(master_id='saltmaster1_master',
minion_id='s01-m01')
RPCResponse(riq=28, ret=
{u'saltmaster1_master':
{u's01-m01':
{u'grains':
{u'biosversion': u'4.2.amazon',
u'kernel': u'Linux',
u'domain': u'us-west-1.compute.internal', ..... }}}},
error=None, warnings=[])
get_minion_grain_values(…)
Returns List[str].
Get a list of unique minion grain values for a particular key, optionally filtering by master id, minion id, or target
group.
Note: when enable_grains_indexing: False this will always return an empty list.
get_minion_grain_keys(…)
Returns List[str].
Get a list of unique minion grain keys, optionally filtering by master id, minion id, or target group.
Note: when enable_grains_indexing: False this will always return an empty list.
delete_minion_key_state(…)
Returns None.
Remove all key states from a particular master.
save_minion_key_state(…)
Returns None.
Save minion key state for a given master.
This function should only be called by a salt-master.
get_minion_presence(…)
Returns Dict.
Retrieve presence status for all minions in the infrastructure.
Example:
client.api.minions.get_minion_presence()
RPCResponse(riq=6543, ret={
'results': [
{'minion': 's01-m01', 'master': 'saltmaster1_master', 'status': 'present
˓→', 'timestamp': u'2017-11-27T23:06:12.674176'},
],
'count': 2
},
error=None, warnings=[])
save_minion_cache(…)
Returns None.
Update the minion data cache for a given master. Note that data about minions with unaccepted keys will be ignored.
This function should be called only by a salt-master.
get_pillars(…)
Returns Dict.
Get the data for the given pillar. See Pillars for more information.
{
'count': 100, # total job count
'limit': 50, # results count
'results': [...] # jobs
}
save_pillar(…)
Returns str.
Set data in the requested pillar. See Pillars for more information.
delete_pillar(…)
Returns None.
Delete pillar for the given UUID.
get_pillar_access(…)
Returns Dict.
Get the access metadata for a pillar entry.
save_pillar_access(…)
Returns None.
Save the access metadata for a target group.
get_jid(…)
Returns Dict.
Get the results for a specific job by its job id (jid).
More information on jobs can be found here: Jobs.
get_fun(…)
Returns Dict.
Return a dictionary of the last function called for all minions. Including fun will restrict the result set to minions
for which fun was their last function called.
get_minions(…)
client.api.ret.get_returns(jid='20171205214029544461')
client.api.ret.get_returns(minion_id='minion1')
client.api.ret.get_returns(minion_id='minion2')
Example:
client.api.ret.get_minions()
RPCResponse(riq=28, ret=
{u'saltmaster1_master':
[u's01-m01', u's01-m02', u's01-m03', ....],
u'saltmaster2_master':
[u's02-m01', u's02-m02', u's02-m03', ....],
u'saltmaster3_master':
[u's03-m01', u's03-m02', u's03-m03', ....]},
error=None, warnings=[])
get_jids(…)
Returns Dict.
Get all Job IDs for a given range. Warning, with no boundaries this call can return a huge amount of data.
More information on jobs can be found here: Jobs.
get_returns(…)
Returns Dict.
Return job results from the job cache based on the provided arguments.
For more on job returns, see Job Returns.
get_returns() example:
client.api.ret.get_returns()
Example:
client.api.ret.get_returns(jid='20150430164924016227')
RPCResponse(
{ 'count': 1,
'limit': 1,
'results': [ { 'alter_time': '2018-06-29T21:29:37.720943',
'full_ret': { '_stamp': '2015-04-30T16:49:24.379894',
'cmd': '_return',
'fun': 'pillar.items',
'fun_args': [],
'id': 'raas_test_ret_returns_minion',
'jid': '20150430164924016227',
'master_id': 'raas_test_ret_returns_master',
'retcode': 0,
'return': { 'baz': 'qux',
'lxc-cluster': True,
'qux': 'baz'},
'success': True},
'fun': 'pillar.items',
'fun_args': [],
'has_errors': False,
'jid': '20150430164924016227',
'master': 'raas_test_ret_returns_master',
'master_uuid': '5c56659b-0619-45bc-8ad7-e805c28d85ce',
'minion_id': 'raas_test_ret_returns_minion',
'return': {'baz': 'qux', 'lxc-cluster': True, 'qux': 'baz'}}]})
get_load(…)
Returns Dict.
Return the load for the given JID from the given master.
save(…)
Returns UUID.
Add/update a component in the schedule.
See Schedules for more information.
Descriptor above can be a number of things like seconds, once, when, cron, etc. See the SaltStack Enterprise documen-
tation for a complete list.
remove(…)
Returns bool.
Remove a schedule by uuid.
param uuid The uuid of the schedule to be removed.
futures(…)
Returns Dict.
Get a list of future times when the scheduled jobs will execute. If jobs is passed in then only the futures for those
jobs will be calculated. By default the job times will be queried out for 8 weeks
The parameter daterange, which is a date string in ISO8601 format has a sibling parameter, daterange_fmt,
which is a string that can represent an alternate date and time format used to parse the daterange values.
get_inflight(…)
Returns Dict.
Get a list of jobs that are in progress.
search_history(…)
Returns Dict.
Query the logs of past scheduler runs.
The parameter daterange, which is a date string in ISO8601 format has a sibling parameter, daterange_fmt,
which is a string that can represent an alternate date and time format used to parse the daterange values.
get(…)
Returns Dict.
Return the full schedule json structure.
See Schedules for more information.
param list names Matching names of the schedule entries to return
param bool show_past Include entries that were scheduled to run in the past.
param str query The text to search for in args or kwargs
param str cmd One of local, runner, ssh, wheel
param str fun The name of the function that was run
param list masters A list of masters that the job was assigned to
param str tgt A target string to search for
param bool arg Whether to search inside *args
param bool kwarg Whether to search inside **kwargs
param list state A list of states to match
param bool enabled is the scheduled item enabled to run or not
param UUID uuid Schedule UUID to match
param list job_names A list of job names to match
param list tgt_names A list of target group names to match
param str sort_by Field to sort by
param bool reverse Pass True to sort in descending order
param int limit How many records to return at a time
param int page Which page of the records to return (offset = page * limit)
NOTE: passing ['*'] as the value of masters will match the literal value * in the list of masters. get() is setup
this way so it will be possible to look up schedules that are targeted at all masters. If * was treated as the wildcard,
it would always match any job targeted
at any master
save_skip(…)
Returns Dict.
Update a list of futures (by UUID) skip flag
update(…)
Returns UUID.
Update a schedule.
See Schedules for more information.
param str name The name of the schedule item
param dict schedule A dictionary with schedule details.
param list masters List of masters on which to execute runner and wheel commands.
param str cmd One of local, runner, ssh, wheel
param dict arg Argument dictionary containing kwargs and args for fun below
param dict tgt The minion target dictionary (use this or tgt_uuid, not both)
param str tgt_uuid a UUID for an already saved target (use this or tgt, not both)
param str job_uuid a UUID for an already saved job (use this or fun+arg, not both)
param str fun The function to run (use this or job_uuid, not both)
param bool enabled Set the schedule job enabled or disabled
arg should have this format:
Descriptor above can be a number of things like seconds, once, when, cron, etc. See the SaltStack Enterprise documen-
tation for a complete list.
get_content_stats(…)
Returns dict.
Get the stats for the lastest ingested content :param hub: :param custom: True|False :return: dict = {
results: None|dict = { uuid, ingest_date, benchmarks, checks
} errors: List of error messages
download_content(…)
Returns None.
Download Locke tarball and expand the files into hub.opts[‘cachedir’] + /locke Once the download and expansion is
complete, call ingest to put them in the raas filesystem
delete_custom_benchmarks(…)
Returns None.
Delete custom benchmarks
Returns
Examples
Request
Response
RPCResponse(
riq=4,
ret={},
error=None,
warnings=[])
get_check_variables(…)
Returns Dict.
Get variables for one or more checks
Returns
Examples
Request
Response
RPCResponse(
riq=4,
ret={
"count": 1,
"results": [{
"check_uuid": "2e0e216d-1f8e-4e47-9bd5-e0a33ca7665c",
"check_name": "locke.system.service.sshd_maxauthtries",
"variables": [{
"name": "_locke.system.service.sshd_maxauthtries.SSHD_CONFIG_
˓→MAXAUTHTRIES",
"uuid": "a0e2a5fc-4a1f-49e8-a27f-55e983491f99",
"scope": "local",
"check_uuid": "2e0e216d-1f8e-4e47-9bd5-e0a33ca7665c",
"description": "Maximum number of authentication attempts permitted
˓→per connection",
"default_value": "4"
}]
}]
},
error=None,
warnings=[])
get_benchmark_dependencies(…)
Returns Dict.
Get the dependencies for a benchmark i.e. which policies and checks reference it
Returns
Returns the list of policies and checks that reference this benchmark
Examples
Request
Response
RPCResponse(
riq=4,
ret={
"policies": ["d3c68d55-04d7-4451-8f1e-f2b3e6d9ff3f", "b6da0147-2bbd-4497-b11b-
˓→b9f5548e7297"],
{"uuid":"475a6070-56d5-49a0-840b-000efe8780e0", "other_benchmark_
˓→references": False]
},
error=None,
warnings=[])
get_check_details(…)
Returns Dict.
Get detailed information about a check
Response
Examples
Request
Response
RPCResponse(
riq=4,
ret={
"uuid": "0c3df74e-d0ca-4c6e-9d2f-39035ff98f7a",
"name": "locke.system.file.at_cron_authorized_users",
"version": "1",
"display_name": "Ensure at/cron is restricted to authorized users",
"state_fs_uuid": "e78a934f-0355-4fc7-9d4c-3ccb1a5fcb79",
"mini_meta_fs_uuid": "16666977-7d8b-44bd-9cd3-909546673098",
.
.
.
},
error=None,
warnings=[])
download_policy_report(…)
Returns str.
Download report for a policy assessment
Response
Examples
Request
Response
get_stats(…)
Returns Dict.
Get statistics for SecOps
Returns
Examples
Request
Response
RPCResponse(
riq=4,
ret={
"policies_created": 2,
"policies_with_schedule": 0,
"remediation_jobs_run": 9,
"checks_by_benchmark": {"PCI-DSS-3.2": 44, "CCE": 81, "800-171": 76, "CIS-
˓→CentOS7": 223, "CIS-RHEL7": 222, "CIS": 182, "CIS-CentOS": 1, "CCE-Win16": 111,
"content_stats": {
"uuid": "16386268-f2e1-4ab3-8e46-7f59131dee48",
"content_benchmarks": 7,
"success": true,
"db_benchmarks": 7,
"ingest_date": "2019-01-27T14:07:49.898504",
"content_checks": 437,
"db_checks": 437,
"errors": null
},
"checks_assessed_all_time": 226,
"checks_remediated_all_time": 226
},
error=None,
warnings=[])
delete_custom_checks(…)
Returns None.
Delete custom checks
Returns
Examples
Request
Response
RPCResponse(
riq=4,
ret={},
error=None,
warnings=[])
get_benchmarks(…)
Returns Dict.
Get information about benchmarks
Get information about one or more benchmarks.
Returns
Examples
Request 1
Response 1
RPCResponse(
riq=4,
ret={
"count": 7,
"results": [
{
"uuid": "6b8ab80b-87a4-4f0c-8b6a-8bacf7c5853a",
"name": "CIS_CentOS_Linux_7_Benchmark_v2.2.0-1",
"display_name": "CIS CentOS Linux 7 Benchmark v2.2.0",
"version": "1",
"description": "Benchmark Description goes here",
"authority": "CIS",
"os": "None",
"type": "cis",
"dep_date": null,
"last_update": "2019-01-24T19:43:40.310324",
"user_flag": "None",
"policies": [
"b0714471-64cb-4446-a302-1e4ab6ec9cde"
]
}
]
},
error=None,
warnings=[])
Request 2
Response 2
RPCResponse(
riq=4,
ret={
"count": 1,
"results": [
{
"uuid": "6b8ab80b-87a4-4f0c-8b6a-8bacf7c5853a",
"name": "CIS_CentOS_Linux_7_Benchmark_v2.2.0-1",
"display_name": "CIS CentOS Linux 7 Benchmark v2.2.0",
"version": "1",
"description": "Benchmark Description goes here",
"authority": "CIS",
"os": "None",
"type": "cis",
"dep_date": null,
"last_update": "2019-01-24T19:43:40.310324",
"user_flag": "None",
"policies": [
"b0714471-64cb-4446-a302-1e4ab6ec9cde"
]
}
]
},
error=None,
warnings=[])
get_stats_history(…)
Returns Dict.
Get statistics History for SecOps
Returns
Examples
Request
Response
RPCResponse(
riq=4,
ret={
"results": [{
"uuid": "4db84e45-974f-4456-8125-57f7533f3d96",
"stats": {
"policies_created": 1,
"policies_with_schedule": 0,
"remediation_jobs_run": 1,
.
.
.
}
}]
},
error=None,
warnings=[])
get_policies(…)
Returns Dict.
Get summary information on known security policies.
Get information about configured policies.
Returns
Examples
Request 1
Response 1
RPCResponse(
riq=4,
ret={
"count": 1,
"results": [
{
"uuid": "51f06de4-60ae-4cf3-83c1-65635941b4ba",
"name": "Oracle",
"tgt_uuid": "2b6bbf3d-b728-44de-8c4a-9e019fc50175",
"tgt_name": "OracleLinux",
"schedule_uuid": null,
"last_update": "2018-12-13T05:21:33.170597",
"last_assess_jid": "20181213052141677720",
"last_assess_timestamp": "2018-12-13T05:21:41.637187",
"last_remed_jid": "20181213052240095855",
"last_remed_timestamp": "2018-12-13T05:22:40.050577",
"schedule": null,
"variables": [
{
"check_uuid": null,
"var_name": null,
"var_value": null
}
],
"stats": {
"compliant": 2,
"noncompliant": 18
}
}
],
"check_count": 20,
"minion_count": 1
},
error=None,
warnings=[])
Request 2
Response 2
RPCResponse(
riq=4,
ret={
"results": [
{
"last_remed_jid": null,
"name": "Security Policy",
"schedule_uuid": null,
"uuid": "fae4aa90-8e0c-4fda-b52b-b53ee0593f3e",
"last_assess_timestamp": null,
"tgt_uuid": "7f93b928-388b-11e6-b133-346895ecb8f3",
"stats": {
"unknown": 88
},
"schedule": null,
"variables": [
{
"var_name": null,
"var_value": null,
"check_uuid": null
}
],
"last_remed_timestamp": null,
"last_assess_jid": null,
"tgt_name": "All Minions",
"last_update": "2019-01-13T19:55:54.476425"
}
],
"check_count": 22,
"count": 1,
"minion_count": 0
},
error=None,
warnings=[])
save_exemption(…)
Returns Dict.
Add or update an exemption on a policy
Returns
Examples
Request
Response
RPCResponse(
riq=4,
ret={
"count": 1,
"results": [{
"uuid": "3a776df3-9c4d-4d54-8e1f-dc0c189f0f68",
"policy_uuid": "e912435e-2c38-4cfa-aa1e-985c83aa8a22",
"check_uuid": "02b952e3-1d8c-4db3-8771-3edf23e0a0dd",
"master_id": "master1_master",
"minion_id": "oracle",
"reason": "Approved by CISO"
}]
},
error=None,
warnings=[])
delete_policy(…)
Returns bool.
Delete a existing security policy.
Returns
Examples
Request
Response
RPCResponse(
riq=4,
ret=True,
error=None,
warnings=[])
get_checks(…)
Returns Dict.
Get information about checks
List information about checks
Returns
Examples
Request
Response
RPCResponse(
riq=4,
ret={
"count": 224,
"results": [
{
"uuid": "0c3df74e-d0ca-4c6e-9d2f-39035ff98f7a",
"name": "locke.system.file.at_cron_authorized_users",
"version": "1",
"display_name": "Ensure at/cron is restricted to authorized users",
"state_fs_uuid": "e78a934f-0355-4fc7-9d4c-3ccb1a5fcb79",
"mini_meta_fs_uuid": "16666977-7d8b-44bd-9cd3-909546673098",
.
.
.
}
]
},
error=None,
warnings=[])
save_policy(…)
Returns UUID.
Save a new security policy or update an existing one.
Saves a policy.
Returns
Examples
Request
"026e3afb-d4a7-45be-b405-4f83fa7a3b3a"
]
)
Return
RPCResponse(
riq=4,
ret="de301811-80d2-4a89-bd24-93d025347394",
error=None,
warnings=[])
Request
Response
RPCResponse(
riq=4,
ret="de301811-80d2-4a89-bd24-93d025347394",
error=None,
warnings=[])
get_check_minions(…)
Returns Dict.
Get minion-related information about checks
Response
Examples
Request
Response
RPCResponse(
riq=4,
ret={
"count": 3,
"results": [
{
"check_name": "locke.system.service.sshd_maxauthtries",
"check_display_name": "Ensure SSH MaxAuthTries is set to 4 or less",
"policy_uuid": "3c625016-9dbf-44d8-b97c-17f4361b78a0",
"policy_name": "SecOps",
"check_uuid": "80492e63-af0b-41c8-9a5b-b202be658561",
"check_version": "1",
.
.
.
}
]
},
error=None,
warnings=[])
remediate_policy(…)
Returns Dict.
Remediate one or more checks in a policy
Response
Examples
Request
Response
RPCResponse(
riq=4,
ret={
"success": true,
"errors": [],
"jid": "20190125002727876899"
},
error=None,
warnings=[])
delete_exemption(…)
Returns Dict.
Delete an exemption
Returns
Examples
Request
Response
RPCResponse(
riq=4,
ret={"uuid": "3a776df3-9c4d-4d54-8e1f-dc0c189f0f68"},
error=None,
warnings=[])
get_check_dependencies(…)
Returns Dict.
Get the dependencies for a check i.e. which policies and benchmarks reference it
Returns
Returns the list of policies and benchmarks that reference this check
Examples
Request
Response
RPCResponse(
riq=4,
ret={
"policies": ["d3c68d55-04d7-4451-8f1e-f2b3e6d9ff3f", "b6da0147-2bbd-4497-b11b-
˓→b9f5548e7297"],
},
error=None,
warnings=[])
get_policy_run_history(…)
Returns Dict.
Get assessment and remediation runs against the policy
Returns
Examples
Request
Response
RPCResponse(
riq=4,
ret={
"count": 2,
"results": [{
"jid": "20190127194046350020",
"state": "completed_failures",
"fun": "policy.assessment",
"user": "root",
"expected": 8,
"returned": 8,
"returned_good": 5,
"returned_failed": 3,
"create_time": "2019-01-27T19:42:53.087028",
"user_uuid": "80c67364-cb31-4f4b-972a-e7ea3f752bb8",
"uuid": "e912435e-2c38-4cfa-aa1e-985c83aa8a22",
"name": "demo",
"tgt_uuid": "7f93b928-388b-11e6-b133-346895ecb8f3",
"schedule_uuid": null,
"last_update": "2019-01-27T19:40:40.544772",
"last_assess_jid": "20190127194046350020",
"last_assess_timestamp": "2019-01-27T19:40:46.323247",
"last_remed_jid": null,
"last_remed_timestamp": null
}]
},
error=None,
warnings=[])
assess_policy(…)
Returns Dict.
Run assessment of checks in a policy
Response
Examples
Request
Response
RPCResponse(
riq=4,
ret={
"success": true,
"errors": [],
"jid": "20190125001746553804"
},
error=None,
warnings=[])
ingest_custom_content(…)
Returns None.
Download Custom Content tarball :param hub: :param filename: :param content_type: application/x-gzip :param
blob: binary blob or base64 encoded :return: dict = { }
save_auth_config(…)
Returns None.
Create or update the authentication configuration by the provided config_name.
delete_auth_config(…)
Returns None.
Delete the authentication configuration by the provided name
save_auth_config_access(…)
Returns None.
Save access metadata for this authentication configuration.
get_directory_preview_records(…)
Returns None.
Return the records retrieved from the LDAP directory as collected so far. The return payload will contain the LDAP
records under the entries key as well as the status of the background job that is querying the directory. The status
will appear in the status key of the return payload.
get_auth_config(…)
get_directory_preview_status(…)
Returns None.
Return a status for the background LDAP query job.
get_auth_config_access(…)
Returns Dict.
Return access metadata for this authentication configuration.
start_directory_preview(…)
Returns None.
Execute a background task that will return a set of example records from the defined LDAP or Active Directory.
Returns a task_id that can be used to check on the status of the preview. LDAP records are cached in Redis and can
be retrieved with get_directory_preview_records().
sync_auth_config(…)
Returns List.
Get updated information from the LDAP backend on users currently in use in SSE.
test_auth_config(…)
Returns Dict.
Test Active Directory/LDAP connectability and credentials for the provided authentication configuration details
Returns a dictionary with at least one key, validation_passed, for which the value is True or False depend-
ing on the outcome of the validation routines. If validation failed, an extra key, details is also included with an
explanation on what failed..
end_directory_preview(…)
Returns None.
Clears out the Redis cache entry for this particular preview job. This does not stop the background task, to stop a
background Celery task is somewhat ugly, we can revisit this later if it appears we really need to make sure the task
is dead.
db_health(…)
Returns None.
Get database health status
null(…)
Returns None.
Null RPC method to test the fastest RPC Api response
get_queue_size(…)
Returns None.
Get Celery queue size
Test utilities
sleep(…)
Returns str.
Sleep for the amount of time provided.
echo(…)
Returns str.
Echo the message.
warnings(…)
Returns bool.
Test how a warning is returned under the RPC Api.
error(…)
Returns bool.
Test how an error is returned under the RPC Api. Simply raises a generic exception.
delete_target_group(…)
Returns None.
Delete a target group.
raises FailedResourceDependency The target group has one or more schedules that depend on it and
force is false. The details of the exception contain the results of get_schedules with the dependent
schedules.
save_target_group_access(…)
get_target_group_access(…)
Returns Dict.
Get the access metadata for a target group.
get_target_group_minions(…)
Returns Dict.
Get the set of minions that match a target group according to the currently cached minion data. Minions are keyed
by master:
Documentation on how targets work in SaltStack Enterprise are here: Minions and targets
save_target_group(…)
Returns str.
Create a new or update an existing target group.
Documentation on how targets work in SaltStack Enterprise are here: Minions and targets
tgt_type is the type of target: glob, grain, grain_pcre, pillar, pillar_pcre, list, ipcidr, pcre,
or node.
tgt is the actual target. For glob this would be any string matching minion IDs and utilizing shell-globbing
characters (*, ?, [], etc).
For compound see Salt’s description of compound target indicators for a full explanation, but an overview is below:
Compound matchers allow very granular minion targeting using any of Salt’s matchers. The default matcher is a
glob match, just as with CLI and top file matching. To match using anything other than a glob, prefix the match
string with the appropriate letter from the table below, followed by an @ sign.
Matchers can be joined using boolean and, or, and not operators.
Here is an example for creating a target group with a compound target:
wintgtresult = c.api.tgt.save_target_group(
name='Windows',
desc='Windows',
tgt={'*':{'tgt_type':'compound', 'tgt':'G@os_family:Windows'}})
save_target_group() example:
˓→desc='newdescription')
get_target_group(…)
Returns Dict.
Retrieve details for a target group. For more on targets, see Minions and targets
Use either tgt_uuid or master_id, but not both. If tgt_uuid is used, other filters are not applied.
get_target_group() example:
client.api.tgt.get_target_group()
{
'count': 100, # total target group count
'limit': 50, # results count
'results': [...] # target groups
}
Example:
client.api.tgt.get_target_group(tgt_uuid='7f93b928-388b-11e6-b133-346895ecb8f3')
RPCResponse(
riq=5,
ret= {
u'results': [
{u'name': u'All Minions',
u'tgt': {u'*':
{u'tgt_type': u'compound',
u'tgt': u'*'}},
u'uuid': u'7f93b928-388b-11e6-b133-346895ecb8f3',
u'pillars': [],
u'metadata': {u'auth':
{u'access':
{u'Superuser':
{u'write': False,
u'read': True,
u'discover': True,
u'delete': False},
u'Administrator':
{u'write': False,
u'read': True,
u'discover': True,
u'delete': False},
u'User':
{u'write': False,
u'read': True,
u'discover': True,
u'delete': False}},
u'owner':
{u'username': u'--<{internal-access}>--',
u'config_name': u'internal',
u'uuid': u'c74f8bee-5ead-453e-8c86-
˓→344a4780c053'}}},
u'desc': u''}],
u'count': 1,
u'limit': 1
},
u'error'= None,
u'warnings'= [])
get_content_stats(…)
Returns dict.
Get the stats for the latest ingested content
Examples
Request
Response
RPCResponse(
riq=4,
ret={
"creation_date": "2019-08-26T20:52:18.479319",
"file_name": "vman_2019-08-26T20:52:18.479319_e5b4970e-250f-4b4e-b7a5-
˓→53df6e1d0448.tar.gz.e",
"ingest_date": "2019-09-24T17:04:07.865149",
"uuid": "e5b4970e-250f-4b4e-b7a5-53df6e1d0448"
},
error=None,
warnings=[])
get_exemptions(…)
Returns Dict.
Get exemptions
Returns
Examples
Request
Response
RPCResponse(
riq=4,
ret={
"count": 1,
"results": [{
"uuid": "3a776df3-9c4d-4d54-8e1f-dc0c189f0f68",
"policy_uuid": "e912435e-2c38-4cfa-aa1e-985c83aa8a22",
"advisory_uuid": "02b952e3-1d8c-4db3-8771-3edf23e0a0dd",
"master_id": "master1_master",
"minion_id": "oracle",
"reason": "Approved by CISO"
}]
},
error=None,
warnings=[])
delete_exemption_group(…)
Returns int.
Delete a specific exemption group.
Returns
Examples
Request
Response
RPCResponse(
riq=4,
ret=1
},
error=None,
warnings=[])
get_advisory_minions(…)
Returns Dict.
Get assessment and remediation results for a policy
Examples
Request
get_exemption_groups(…)
Returns Dict.
Get exemption groups.
An exemption group is a combination of minions and advisories that will not be remediated, with an associated
reason - perhaps your infrastructure requires an unsecure package, etc.
Returns
Examples
Request
Response
RPCResponse(
riq=4,
ret={
"count": 1,
"results": [{
"uuid": "3a776df3-9c4d-4d54-8e1f-dc0c189f0f68",
"policy_uuid": "e912435e-2c38-4cfa-aa1e-985c83aa8a22",
"advisory_uuid": "02b952e3-1d8c-4db3-8771-3edf23e0a0dd",
"master_id": "master1_master",
"minion_id": "oracle",
"reason": "Approved by CISO"
}]
},
error=None,
warnings=[])
get_stats(…)
Returns Dict.
Get statistics for Vulnerability management policies
ping(…)
Returns bool.
Check if Vulnerability Management feature is available.
download_content(…)
Returns Dict.
Download and ingest content
Download Vulneraiblity management tarball and expand the files into hub.opts[‘cachedir’] + /vman Once the down-
load and expansion is complete, calls ingest to put them in the raas filesystem
get_policy_run_history(…)
Returns Dict.
Get assessment and remediation runs against the policy
Returns
Examples
Request
Response
RPCResponse(
riq=4,
ret={
"count": 2,
"results": [{
"jid": "20190127194046350020",
"state": "completed_failures",
"fun": "policy.assessment",
"user": "root",
"expected": 8,
"returned": 8,
"returned_good": 5,
"returned_failed": 3,
"create_time": "2019-01-27T19:42:53.087028",
"user_uuid": "80c67364-cb31-4f4b-972a-e7ea3f752bb8",
"uuid": "e912435e-2c38-4cfa-aa1e-985c83aa8a22",
"name": "demo",
"tgt_uuid": "7f93b928-388b-11e6-b133-346895ecb8f3",
"schedule_uuid": null,
"last_update": "2019-01-27T19:40:40.544772",
"last_assess_jid": "20190127194046350020",
"last_assess_timestamp": "2019-01-27T19:40:46.323247",
"last_remed_jid": null,
"last_remed_timestamp": null
}]
},
error=None,
warnings=[]
get_reports(…)
Returns Dict.
Get vulnerability summary reports
Examples
Request
Response
RPCResponse(
riq=4,
ret={
"count": 1,
"results": [
{
"report_uuid": "53b79e83-1269-43fb-8e0f-f4d4c201df30",
"date": "2019-09-24",
"creation_date": "2019-09-24T17:11:57.449781",
"policy_uuid": "a5aa646e-f7fe-4d99-945b-7e40b929df7b",
"fun": "policy.assessment",
"critical": 42,
"high": 104,
"medium": 136,
"low": 0,
"none": 0,
"policy_name": "awesome policy",
"target_group_name": "All Minions",
"top_advisories": [
{
"name": "systemd security, bug fix, and enhancement update",
"uuid": "b4c3b40a-9f11-42e4-8777-df541f20f816",
"score": 9.8,
"minions": 6
},
{
"name": "systemd security, bug fix, and enhancement update",
"uuid": "91a0b654-cb2b-48eb-b27c-b085fd035ffa",
"score": 9.8,
"minions": 6
},
{
"name": "perl security update",
"uuid": "4c4549b4-564a-446f-af0e-fd642df58dc8",
"score": 9.8,
"minions": 2
},
{
"name": "libssh2 security, bug fix, and enhancement update",
"uuid": "9acffe23-1344-4d0a-895b-e4cc63d4bcd3",
"score": 9.1,
"minions": 2
},
{
"name": "curl security and bug fix update",
"uuid": "7e3c8b03-38da-40a5-b0bf-e689216e3dda",
"score": 9.1,
"minions": 4
}
]
}
]
},
error=None,
warnings=[])
save_exemption_group(…)
Returns UUID.
Add or update an exemption on a policy
Returns
Examples
Request
Response
RPCResponse(
riq=4,
ret="3a776df3-9c4d-4d54-8e1f-dc0c189f0f68",
error=None,
warnings=[])
get_stats_history(…)
Returns Dict.
Get statistics History for vulnerability management
Returns
Examples
Request
assess_policy(…)
Returns str.
Run assessment of advisories in a policy
Response
Examples
Request
Response
RPCResponse(
riq=4,
ret={
"success": true,
"errors": [],
"jid": "20190125001746553804"
},
error=None,
warnings=[])
remediate_policy(…)
Returns str.
Remediate one or more advisories in a policy
Response
Examples
Request
Response
RPCResponse(
riq=4,
ret={
"success": true,
"errors": [],
"jid": "20190125002727876899"
},
error=None,
warnings=[])
get_detail_report(…)
Returns None.
Get vulnerability detailed report
Examples
Request
Response
RPCResponse(
riq=4,
ret={
"minions": {
"master2": [
{
"usage": {
"cmd": [],
"enabled": [],
"network": [],
"running": []
},
"comment": null,
"pkg_name": "glibc",
"severity": "medium",
"master_id": "master2_master",
"advisory_id": "CESA-2019:2118",
"master_uuid": "60522eca-8ad0-43fb-9461-171027e03deb",
"advisory_uuid": "082e07e7-6abd-4617-b4d9-0800091baa9b",
"pkg_version_target": "2.17-292.el7",
"pkg_version_current": "2.17-260.el7_6.6",
"pkg_version_advisory": "2.17-292.el7"
},
]
},
"advisories": {
"CESA-2016:1064": {
"info": {
"cve": {
"uuid": "027bc255-638b-409b-9e66-613538cc93c8",
"cve_id": "CVE-2016-2149",
"cvssv2": "AV:N/AC:L/Au:S/C:P/I:N/A:N",
"cvssv3": "CVSS:3.0/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:N",
"references": {
"REDHAT": {
"url": "https://access.redhat.com/errata/RHSA-
˓→2016:1064",
"name": "RHSA-2016:1064"
}
},
"cvssv2_base": 4.0,
"cvssv3_base": 6.5,
"description": "Red Hat OpenShift Enterprise 3.2 allows remote
˓→ authenticated users",
"published_date": "2016-06-08T17:59:00",
"cvssv2_severity": "MEDIUM",
"cvssv3_severity": "MEDIUM",
"cvssv2_impact_score": 2.9,
"cvssv3_impact_score": 2.9
},
"uuid": "18b865af-47ad-4786-8124-d0748a0bb1f2",
"title": "CentOS OpenShift Enterprise 3.2 security, bug fix, and
˓→enhancement update",
"packages": {
"el7": {
"kibana": "4.1.2-2.el7aos",
"lucene": "4.10.4.redhat_1-5.el7",
"rubygem-fluent-plugin-kubernetes_metadata_filter-doc":
˓→"0.12.0-1.el7aos"
}
},
"severity": "high",
"advisory_id": "CESA-2016:1064",
"description": "OpenShift Enterprise by Red Hat is the company's
˓→cloud computing Platform",
},
"minions": [
"master2"
]
},
},
"meta": {
"policy_uuid": "a5aa646e-f7fe-4d99-945b-7e40b929df7b",
"policy_name": "awesome policy",
"target_group_name": "All Minions",
"creation_date": "2019-09-24T17:11:57.449781",
"function": "policy.assessment",
"critical": 42,
"high": 104,
"medium": 136,
"low": 0,
"none": 0
}
},
error=None,
warnings=[])
get_policies(…)
Returns Dict.
Get summary information on vulnerability management policies
Returns
Examples
Request 1
Response 1
RPCResponse(
riq=4,
ret={
"count": 1,
"results": [
{
"uuid": "a5aa646e-f7fe-4d99-945b-7e40b929df7b",
"name": "awesome policy",
"tgt_uuid": "7f93b928-388b-11e6-b133-346895ecb8f3",
"tgt_name": "All Minions",
"schedule_uuid": null,
"last_update": "2019-07-18T19:55:05.617862",
"last_assess_jid": "20190719154009438906",
"last_assess_timestamp": "2019-07-19T15:40:09.402146",
"last_remed_jid": null,
"last_remed_timestamp": null,
"stats": {
"CRITICAL": 1
},
"schedule": null,
"minions_assessed": 4
}
]
},
error=None,
warnings=[])
save_policy(…)
Returns UUID.
Save a new vulnerability management policy or update an existing one.
Returns
Examples
Request
Return
RPCResponse(
riq=4,
ret="de301811-80d2-4a89-bd24-93d025347394",
error=None,
warnings=[])
delete_policy(…)
Returns bool.
Delete an existing vulnerability management policy.
Returns
Examples
Request
Response
RPCResponse(
riq=4,
ret=True,
error=None,
warnings=[])
TWENTYNINE
TROUBLESHOOTING
If a page or section of a page fails to load, clicking the Reload button that appears on some pages or clicking the
browser refresh button often fixes the issue.
You might also encounter situations where a lack of permissions is also causing pages or page elements to not load
correctly. The following issues are often caused by insufficient permissions:
• Error loading users
• Blank roles page
• Blank file system page
• A red X after clicking Add on the Pillar page
If you encounter one of these issues, contact a Salt administrator to verify that your role membership and role
privileges are set correctly.
If some connected Salt minions are not returning job results, verify that the Salt minion key is accepted. Salt minions
that have unaccepted keys do not show presence or grains in the Targets workspace. You can view the Key State
report for all minions for detailed key status.
Salt masters do not use a persistent connection to Enterprise API, instead the Salt master connects to the Enterprise
API at defined intervals to check for jobs. This means that it can take up to the max interval amount for the Salt
master to receive the job before execution starts.
If button label text is partially cut off, or if the Graphic User Interface is otherwise not displaying correctly, make
sure you are using the latest version of one of the following web browsers.
• Google Chrome
• Mozilla Firefox
227
SaltStack Enterprise Documentation, Release 6.1.0
To assist SaltStack support, you can download a report that contains the previous 200 actions that you performed in
the current session from the help menu. If you have admin privileges, the previous 1000 entries are retrieved from
the Enterprise API and are also included in the bug report.
To download a bug report:
1. Refresh the browser.
2. (Optional, Admins only) Click the help icon in the top right corner and select Reset Server Stats.
3. Reproduce the issue using as few steps as possible. If the issue is not consistently reproducible, download the
bug report immediately after the issue occurs.
4. Click the help icon in the top-right corner and click Download Bug Report.
5. (Optional) Review the data that is contained in the log. Usernames and passwords are not logged.
6. Deliver the log to SaltStack support.
The Enterprise Console bug report information is stored locally in the browser, and is reset each session.
Additional troubleshooting information might be available in the SaltStack Enterprise Knowledgebase at https://
support.saltstack.com.