aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndrei Rykov <arykov@ydb.tech>2025-05-27 18:03:44 +0200
committerGitHub <noreply@github.com>2025-05-27 18:03:44 +0200
commit5e8a1fbf654f549ccd6c061d35c24bd9be0897d8 (patch)
tree465443d31fc4f0ab5eb771aa123920f9b8f284af
parentff2d5687adbb2958f3ed1249610c2b1b1a59dabb (diff)
downloadydb-5e8a1fbf654f549ccd6c061d35c24bd9be0897d8.tar.gz
pass folder_id parameter to ticket parser (#18663)
-rw-r--r--ydb/core/grpc_services/grpc_request_check_actor.h2
-rw-r--r--ydb/core/security/ticket_parser_impl.h7
-rw-r--r--ydb/core/security/ticket_parser_ut.cpp41
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) {