Skip to content

Commit 9ef9044

Browse files
authored
chore: remove read all provisioners from users (coder#14801)
* chore: remove read all provisioners from users Reading provisioner daemons now extends from org member, not site wide member. * update rbac perm test * add unit test
1 parent 2cffb55 commit 9ef9044

File tree

3 files changed

+17
-18
lines changed

3 files changed

+17
-18
lines changed

coderd/rbac/roles.go

+9-14
Original file line numberDiff line numberDiff line change
@@ -274,8 +274,6 @@ func ReloadBuiltinRoles(opts *RoleOptions) {
274274
DisplayName: "Member",
275275
Site: Permissions(map[string][]policy.Action{
276276
ResourceAssignRole.Type: {policy.ActionRead},
277-
// All users can see the provisioner daemons.
278-
ResourceProvisionerDaemon.Type: {policy.ActionRead},
279277
// All users can see OAuth2 provider applications.
280278
ResourceOauth2App.Type: {policy.ActionRead},
281279
ResourceWorkspaceProxy.Type: {policy.ActionRead},
@@ -414,18 +412,15 @@ func ReloadBuiltinRoles(opts *RoleOptions) {
414412
DisplayName: "",
415413
Site: []Permission{},
416414
Org: map[string][]Permission{
417-
organizationID.String(): {
418-
{
419-
// All org members can read the organization
420-
ResourceType: ResourceOrganization.Type,
421-
Action: policy.ActionRead,
422-
},
423-
{
424-
// Can read available roles.
425-
ResourceType: ResourceAssignOrgRole.Type,
426-
Action: policy.ActionRead,
427-
},
428-
},
415+
organizationID.String(): Permissions(map[string][]policy.Action{
416+
// All users can see the provisioner daemons for workspace
417+
// creation.
418+
ResourceProvisionerDaemon.Type: {policy.ActionRead},
419+
// All org members can read the organization
420+
ResourceOrganization.Type: {policy.ActionRead},
421+
// Can read available roles.
422+
ResourceAssignOrgRole.Type: {policy.ActionRead},
423+
}),
429424
},
430425
User: []Permission{
431426
{

coderd/rbac/roles_test.go

+2-3
Original file line numberDiff line numberDiff line change
@@ -531,9 +531,8 @@ func TestRolePermissions(t *testing.T) {
531531
Actions: []policy.Action{policy.ActionRead},
532532
Resource: rbac.ResourceProvisionerDaemon.InOrg(orgID),
533533
AuthorizeMap: map[bool][]hasAuthSubjects{
534-
// This should be fixed when multi-org goes live
535-
true: {setOtherOrg, owner, templateAdmin, setOrgNotMe, memberMe, orgMemberMe, userAdmin},
536-
false: {},
534+
true: {owner, templateAdmin, setOrgNotMe, orgMemberMe},
535+
false: {setOtherOrg, memberMe, userAdmin},
537536
},
538537
},
539538
{

enterprise/coderd/provisionerdaemons_test.go

+6-1
Original file line numberDiff line numberDiff line change
@@ -739,7 +739,7 @@ func TestGetProvisionerDaemons(t *testing.T) {
739739
t.Parallel()
740740
dv := coderdtest.DeploymentValues(t)
741741
dv.Experiments = []string{string(codersdk.ExperimentMultiOrganization)}
742-
client, _ := coderdenttest.New(t, &coderdenttest.Options{
742+
client, first := coderdenttest.New(t, &coderdenttest.Options{
743743
Options: &coderdtest.Options{
744744
DeploymentValues: dv,
745745
},
@@ -753,6 +753,7 @@ func TestGetProvisionerDaemons(t *testing.T) {
753753
})
754754
org := coderdenttest.CreateOrganization(t, client, coderdenttest.CreateOrganizationOptions{})
755755
orgAdmin, _ := coderdtest.CreateAnotherUser(t, client, org.ID, rbac.ScopedRoleOrgAdmin(org.ID))
756+
outsideOrg, _ := coderdtest.CreateAnotherUser(t, client, first.OrganizationID)
756757

757758
res, err := orgAdmin.CreateProvisionerKey(context.Background(), org.ID, codersdk.CreateProvisionerKeyRequest{
758759
Name: "my-key",
@@ -800,5 +801,9 @@ func TestGetProvisionerDaemons(t *testing.T) {
800801
assert.Equal(t, buildinfo.Version(), pkDaemons[0].Daemons[0].Version)
801802
assert.Equal(t, proto.CurrentVersion.String(), pkDaemons[0].Daemons[0].APIVersion)
802803
assert.Equal(t, keys[0].ID, pkDaemons[0].Daemons[0].KeyID)
804+
805+
// Verify user outside the org cannot read the provisioners
806+
_, err = outsideOrg.ListProvisionerKeyDaemons(ctx, org.ID)
807+
require.Error(t, err)
803808
})
804809
}

0 commit comments

Comments
 (0)