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
2 changes: 1 addition & 1 deletion lib/auth/access_request_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -257,7 +257,7 @@ func testSingleAccessRequests(t *testing.T, testPack *accessRequestTestPack) {
desc: "no search_as_roles",
requester: "nobody",
requestResources: []string{"prod"},
expectRequestError: trace.BadParameter(`user attempted a resource request but does not have any "search_as_roles"`),
expectRequestError: trace.AccessDenied(`Resource Access Requests require usable "search_as_roles", none found for user "nobody"`),
},
}
for _, tc := range testCases {
Expand Down
2 changes: 1 addition & 1 deletion lib/services/access_request.go
Original file line number Diff line number Diff line change
Expand Up @@ -230,7 +230,7 @@ func (m *RequestValidator) applicableSearchAsRoles(ctx context.Context, resource
rolesToRequest = append(rolesToRequest, roleName)
}
if len(rolesToRequest) == 0 {
return nil, trace.BadParameter(`user attempted a resource request but does not have any "search_as_roles"`)
return nil, trace.AccessDenied(`Resource Access Requests require usable "search_as_roles", none found for user %q`, m.user.GetName())
}

// Prune the list of roles to request to only those which may be necessary
Expand Down
6 changes: 3 additions & 3 deletions lib/services/access_request_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -990,13 +990,13 @@ func TestRolesForResourceRequest(t *testing.T) {
desc: "deny search",
currentRoles: []string{"db-response-team", "deny-db-search"},
requestResourceIDs: resourceIDs,
expectError: trace.BadParameter(`user attempted a resource request but does not have any "search_as_roles"`),
expectError: trace.AccessDenied(`Resource Access Requests require usable "search_as_roles", none found for user "test-user"`),
},
{
desc: "deny request",
currentRoles: []string{"db-response-team", "deny-db-request"},
requestResourceIDs: resourceIDs,
expectError: trace.BadParameter(`user attempted a resource request but does not have any "search_as_roles"`),
expectError: trace.AccessDenied(`Resource Access Requests require usable "search_as_roles", none found for user "test-user"`),
},
{
desc: "multi allowed roles",
Expand Down Expand Up @@ -1028,7 +1028,7 @@ func TestRolesForResourceRequest(t *testing.T) {
desc: "no allowed roles",
currentRoles: nil,
requestResourceIDs: resourceIDs,
expectError: trace.BadParameter(`user attempted a resource request but does not have any "search_as_roles"`),
expectError: trace.AccessDenied(`Resource Access Requests require usable "search_as_roles", none found for user "test-user"`),
},
}
for _, tc := range testCases {
Expand Down
8 changes: 5 additions & 3 deletions tool/tsh/tsh.go
Original file line number Diff line number Diff line change
Expand Up @@ -2897,9 +2897,11 @@ func retryWithAccessRequest(cf *CLIConf, tc *client.TeleportClient, fn func() er
// Try to construct an access request for this node.
req, err := accessRequestForSSH(cf.Context, tc)
if err != nil {
// We can't request access to the node or it doesn't exist, return the
// original error but put this one in the debug log.
log.WithError(err).Debug("unable to request access to node")
// We can't request access to the node or we couldn't query the ID. Log
// a short debug message in case this is unexpected, but return the
// original AccessDenied error from the ssh attempt which is likely to
// be far more relevant to the user.
log.Debugf("Not attempting to automatically request access, reason: %v", err)
return trace.Wrap(origErr)
}
cf.RequestID = req.GetName()
Expand Down