Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 14 additions & 0 deletions constants.go
Original file line number Diff line number Diff line change
Expand Up @@ -647,6 +647,20 @@ const (
// access to all user groups.
PresetGroupAccessRoleName = "group-access"

// PresetDeviceAdminRoleName is the name of the "device-admin" role.
// The role is used to administer trusted devices.
PresetDeviceAdminRoleName = "device-admin"

// PresetDeviceEnrollRoleName is the name of the "device-enroll" role.
// The role is used to grant device enrollment powers to users.
PresetDeviceEnrollRoleName = "device-enroll"

// PresetRequireTrustedDeviceRoleName is the name of the
// "require-trusted-device" role.
// The role is used as a basis for requiring trusted device access to
// resources.
PresetRequireTrustedDeviceRoleName = "require-trusted-device"

// SystemAutomaticAccessApprovalRoleName names a preset role that may
// automatically approve any Role Access Request
SystemAutomaticAccessApprovalRoleName = "@teleport-access-approver"
Expand Down
3 changes: 3 additions & 0 deletions lib/auth/init.go
Original file line number Diff line number Diff line change
Expand Up @@ -747,6 +747,9 @@ func createPresetRoles(ctx context.Context, rm PresetRoleManager) error {
services.NewPresetReviewerRole(),
services.NewPresetRequesterRole(),
services.NewSystemAutomaticAccessApproverRole(),
services.NewPresetDeviceAdminRole(),
services.NewPresetDeviceEnrollRole(),
services.NewPresetRequireTrustedDeviceRole(),
}

g, gctx := errgroup.WithContext(ctx)
Expand Down
3 changes: 3 additions & 0 deletions lib/auth/init_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -781,6 +781,9 @@ func TestPresets(t *testing.T) {
teleport.PresetGroupAccessRoleName,
teleport.PresetRequesterRoleName,
teleport.PresetReviewerRoleName,
teleport.PresetDeviceAdminRoleName,
teleport.PresetDeviceEnrollRoleName,
teleport.PresetRequireTrustedDeviceRoleName,
}, presetRoleNames...)

enterpriseSystemRoleNames := []string{
Expand Down
112 changes: 112 additions & 0 deletions lib/services/presets.go
Original file line number Diff line number Diff line change
Expand Up @@ -364,6 +364,118 @@ func NewPresetGroupAccessRole() types.Role {
return role
}

// NewPresetDeviceAdminRole returns the preset "device-admin" role, or nil for
// non-Enterprise builds.
// The role is used to administer trusted devices.
func NewPresetDeviceAdminRole() types.Role {
if modules.GetModules().BuildType() != modules.BuildEnterprise {
return nil
}

return &types.RoleV6{
Kind: types.KindRole,
Version: types.V6,
Metadata: types.Metadata{
Name: teleport.PresetDeviceAdminRoleName,
Namespace: apidefaults.Namespace,
Description: "Administer trusted devices",
Labels: map[string]string{
types.TeleportInternalResourceType: types.PresetResource,
},
},
Spec: types.RoleSpecV6{
Allow: types.RoleConditions{
Rules: []types.Rule{
types.NewRule(types.KindDevice, append(RW(), types.VerbCreateEnrollToken, types.VerbEnroll)),
},
},
},
}
}

// NewPresetDeviceEnrollRole returns the preset "device-enroll" role, or nil for
// non-Enterprise builds.
// The role is used to grant device enrollment powers to users.
func NewPresetDeviceEnrollRole() types.Role {
if modules.GetModules().BuildType() != modules.BuildEnterprise {
return nil
}

return &types.RoleV6{
Kind: types.KindRole,
Version: types.V6,
Metadata: types.Metadata{
Name: teleport.PresetDeviceEnrollRoleName,
Namespace: apidefaults.Namespace,
Description: "Grant permission to enroll trusted devices",
Labels: map[string]string{
types.TeleportInternalResourceType: types.PresetResource,
},
},
Spec: types.RoleSpecV6{
Allow: types.RoleConditions{
Rules: []types.Rule{
types.NewRule(types.KindDevice, []string{types.VerbEnroll}),
},
},
},
}
}

// NewPresetRequireTrustedDeviceRole returns the preset "require-trusted-device"
// role, or nil for non-Enterprise builds.
// The role is used as a basis for requiring trusted device access to
// resources.
func NewPresetRequireTrustedDeviceRole() types.Role {
if modules.GetModules().BuildType() != modules.BuildEnterprise {
return nil
}

return &types.RoleV6{
Kind: types.KindRole,
Version: types.V6,
Metadata: types.Metadata{
Name: teleport.PresetRequireTrustedDeviceRoleName,
Namespace: apidefaults.Namespace,
Description: "Require trusted device to access resources",
Labels: map[string]string{
types.TeleportInternalResourceType: types.PresetResource,
},
},
Spec: types.RoleSpecV6{
Options: types.RoleOptions{
DeviceTrustMode: constants.DeviceTrustModeRequired,
},
Allow: types.RoleConditions{
// All SSH nodes.
Logins: []string{"{{internal.logins}}"},
NodeLabels: types.Labels{
types.Wildcard: []string{types.Wildcard},
},

// All k8s nodes.
KubeGroups: []string{
"{{internal.kubernetes_groups}}",
// Common/example groups.
"system:masters",
Comment thread
flyinghermit marked this conversation as resolved.
"developers",
"viewers",
},
KubernetesLabels: types.Labels{
types.Wildcard: []string{types.Wildcard},
},

// All DB nodes.
DatabaseLabels: types.Labels{
types.Wildcard: []string{types.Wildcard},
},
DatabaseNames: []string{types.Wildcard},
DatabaseUsers: []string{types.Wildcard},
},
},
}
}

// bootstrapRoleMetadataLabels are metadata labels that will be applied to each role.
// These are intended to add labels for older roles that didn't previously have them.
func bootstrapRoleMetadataLabels() map[string]map[string]string {
Expand Down