diff options
author | Andrei Rykov <arykov@ydb.tech> | 2025-05-27 18:03:44 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2025-05-27 18:03:44 +0200 |
commit | 5e8a1fbf654f549ccd6c061d35c24bd9be0897d8 (patch) | |
tree | 465443d31fc4f0ab5eb771aa123920f9b8f284af | |
parent | ff2d5687adbb2958f3ed1249610c2b1b1a59dabb (diff) | |
download | ydb-5e8a1fbf654f549ccd6c061d35c24bd9be0897d8.tar.gz |
pass folder_id parameter to ticket parser (#18663)
-rw-r--r-- | ydb/core/grpc_services/grpc_request_check_actor.h | 2 | ||||
-rw-r--r-- | ydb/core/security/ticket_parser_impl.h | 7 | ||||
-rw-r--r-- | ydb/core/security/ticket_parser_ut.cpp | 41 |
3 files changed, 31 insertions, 19 deletions
diff --git a/ydb/core/grpc_services/grpc_request_check_actor.h b/ydb/core/grpc_services/grpc_request_check_actor.h index a17f95078fb..ff28c384a08 100644 --- a/ydb/core/grpc_services/grpc_request_check_actor.h +++ b/ydb/core/grpc_services/grpc_request_check_actor.h @@ -68,7 +68,7 @@ inline TVector<TEvTicketParser::TEvAuthorizeTicket::TEntry> GetEntriesForAuthAnd return {}; } return { - {permissions, {{"gizmo_id", it->second}}} + {permissions, {{"folder_id", it->second}}} }; } else { return {}; diff --git a/ydb/core/security/ticket_parser_impl.h b/ydb/core/security/ticket_parser_impl.h index f5a507e3459..06c0f6b3ee1 100644 --- a/ydb/core/security/ticket_parser_impl.h +++ b/ydb/core/security/ticket_parser_impl.h @@ -474,13 +474,6 @@ private: AddNebiusResourcePath(pathsContainer, databaseId); } - // Use attribute "gizmo_id" as container id that contains cluster access resource - // IAM can link roles for cluster access resource - // Note: "gizmo_id" and "folder_id" are always sent in separate TEvAuthorizeTicket requests - if (const auto gizmoId = record.GetAttributeValue(permission, "gizmo_id"); gizmoId) { - SetNebiusContainerId(pathsContainer, gizmoId); - } - // Use attribute "folder_id" as container id that contains our database // IAM can link roles for containers hierarchy if (const auto folderId = record.GetAttributeValue(permission, "folder_id"); folderId) { diff --git a/ydb/core/security/ticket_parser_ut.cpp b/ydb/core/security/ticket_parser_ut.cpp index 2904d755835..58e6b67452a 100644 --- a/ydb/core/security/ticket_parser_ut.cpp +++ b/ydb/core/security/ticket_parser_ut.cpp @@ -1661,17 +1661,36 @@ Y_UNIT_TEST_SUITE(TTicketParserTest) { UNIT_ASSERT_C(result->Error.empty(), result->Error); UNIT_ASSERT_C(result->Token->IsExist("something.read-bbbb4554@as"), result->Token->ShortDebugString()); - // Authorization successful for gizmo resource - accessServiceMock.AllowedResourceIds.clear(); - accessServiceMock.AllowedResourceIds.emplace("gizmo"); - runtime->Send(new IEventHandle(MakeTicketParserID(), sender, new TEvTicketParser::TEvAuthorizeTicket( - userToken, - {{"gizmo_id", "gizmo"}, }, - {"monitoring.view"})), 0); - result = runtime->GrabEdgeEvent<TEvTicketParser::TEvAuthorizeTicketResult>(handle); - UNIT_ASSERT_C(result->Error.empty(), result->Error); - UNIT_ASSERT_C(result->Token->IsExist("monitoring.view@as"), result->Token->ShortDebugString()); - UNIT_ASSERT_C(result->Token->IsExist("monitoring.view-gizmo@as"), result->Token->ShortDebugString()); + if constexpr (!IsNebiusAccessService<TAccessServiceMock>()) { + // Authorization successful for gizmo resource + accessServiceMock.AllowedResourceIds.clear(); + accessServiceMock.AllowedResourceIds.emplace("gizmo"); + runtime->Send(new IEventHandle(MakeTicketParserID(), sender, new TEvTicketParser::TEvAuthorizeTicket( + userToken, + {{"gizmo_id", "gizmo"}, }, + {"monitoring.view"})), 0); + result = runtime->GrabEdgeEvent<TEvTicketParser::TEvAuthorizeTicketResult>(handle); + UNIT_ASSERT_C(result->Error.empty(), result->Error); + UNIT_ASSERT_VALUES_EQUAL_C(result->Token->GetGroupSIDs().size(), 4, result->Token->ShortDebugString()); + UNIT_ASSERT_C(result->Token->IsExist("all-users@well-known"), result->Token->ShortDebugString()); + UNIT_ASSERT_C(result->Token->IsExist("monitoring.view@as"), result->Token->ShortDebugString()); + UNIT_ASSERT_C(result->Token->IsExist("monitoring.view-gizmo@as"), result->Token->ShortDebugString()); + UNIT_ASSERT_C(result->Token->IsExist("user1@as"), result->Token->ShortDebugString()); + } else { + // Authorization successful for cluster resource + accessServiceMock.AllowedResourceIds.clear(); + accessServiceMock.AllowedResourceIds.emplace("folder"); + runtime->Send(new IEventHandle(MakeTicketParserID(), sender, new TEvTicketParser::TEvAuthorizeTicket( + userToken, + {{"folder_id", "folder"}, }, + {"monitoring.view"})), 0); + result = runtime->GrabEdgeEvent<TEvTicketParser::TEvAuthorizeTicketResult>(handle); + UNIT_ASSERT_C(result->Error.empty(), result->Error); + UNIT_ASSERT_VALUES_EQUAL_C(result->Token->GetGroupSIDs().size(), 3, result->Token->ShortDebugString()); + UNIT_ASSERT_C(result->Token->IsExist("all-users@well-known"), result->Token->ShortDebugString()); + UNIT_ASSERT_C(result->Token->IsExist("monitoring.view@as"), result->Token->ShortDebugString()); + UNIT_ASSERT_C(result->Token->IsExist("user1@as"), result->Token->ShortDebugString()); + } } Y_UNIT_TEST(Authorization) { |