Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[v14] Prevent Cloud tenants from being a leaf cluster #35687

Merged
merged 1 commit into from Dec 13, 2023
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.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
9 changes: 7 additions & 2 deletions lib/auth/auth_with_roles.go
Expand Up @@ -4596,6 +4596,11 @@ func (a *ServerWithRoles) GetTrustedCluster(ctx context.Context, name string) (t

// UpsertTrustedCluster creates or updates a trusted cluster.
func (a *ServerWithRoles) UpsertTrustedCluster(ctx context.Context, tc types.TrustedCluster) (types.TrustedCluster, error) {
// Don't allow a Cloud tenant to be a leaf cluster.
if modules.GetModules().Features().Cloud {
return nil, trace.NotImplemented("cloud tenants cannot be leaf clusters")
}

if err := a.action(apidefaults.Namespace, types.KindTrustedCluster, types.VerbCreate, types.VerbUpdate); err != nil {
return nil, trace.Wrap(err)
}
Expand All @@ -4604,9 +4609,9 @@ func (a *ServerWithRoles) UpsertTrustedCluster(ctx context.Context, tc types.Tru
}

func (a *ServerWithRoles) ValidateTrustedCluster(ctx context.Context, validateRequest *ValidateTrustedClusterRequest) (*ValidateTrustedClusterResponse, error) {
// Don't allow leaf clusters if running in Cloud.
// Don't allow a leaf cluster to be added to a Cloud tenant.
if modules.GetModules().Features().Cloud {
return nil, trace.NotImplemented("cloud clusters do not support trusted cluster resources")
return nil, trace.NotImplemented("leaf clusters cannot be added to cloud tenants")
}

// the token provides it's own authorization and authentication
Expand Down
18 changes: 17 additions & 1 deletion lib/auth/trustedcluster_test.go
Expand Up @@ -391,7 +391,7 @@ func TestValidateTrustedCluster(t *testing.T) {
)
})

t.Run("trusted clusters prevented on cloud", func(t *testing.T) {
t.Run("Cloud prohibits adding leaf clusters", func(t *testing.T) {
modules.SetTestModules(t, &modules.TestModules{
TestFeatures: modules.Features{Cloud: true},
})
Expand Down Expand Up @@ -577,4 +577,20 @@ func TestUpsertTrustedCluster(t *testing.T) {
_, err = a.UpsertTrustedCluster(ctx, trustedCluster)
require.NoError(t, err)
})
t.Run("Cloud prohibits being a leaf cluster", func(t *testing.T) {
modules.SetTestModules(t, &modules.TestModules{
TestFeatures: modules.Features{Cloud: true},
})

tc, err := types.NewTrustedCluster("test", types.TrustedClusterSpecV2{
RoleMap: []types.RoleMapping{
{Remote: teleport.PresetAccessRoleName, Local: []string{teleport.PresetAccessRoleName}},
},
})
require.NoError(t, err, "creating trusted cluster resource")

server := ServerWithRoles{authServer: a}
_, err = server.UpsertTrustedCluster(ctx, tc)
require.True(t, trace.IsNotImplemented(err), "UpsertTrustedCluster returned an unexpected error, got = %v (%T), want trace.NotImplementedError", err, err)
})
}