Skip to content

Commit 8f77613

Browse files
authored
Merge 5b64adf into bd6334d
2 parents bd6334d + 5b64adf commit 8f77613

File tree

7 files changed

+91
-13
lines changed

7 files changed

+91
-13
lines changed

ydb/public/api/client/yc_private/iam/iam_token_service.proto

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,9 @@ service IamTokenService {
1818
// create iam token for service account
1919
rpc CreateForServiceAccount (CreateIamTokenForServiceAccountRequest) returns (CreateIamTokenResponse);
2020

21+
// create iam token for service
22+
rpc CreateForService (CreateIamTokenForServiceRequest) returns (CreateIamTokenResponse);
23+
2124
// create iam token for compute instance
2225
rpc CreateForComputeInstance (CreateIamTokenForComputeInstanceRequest) returns (CreateIamTokenResponse);
2326

@@ -50,6 +53,14 @@ message CreateIamTokenForServiceAccountRequest {
5053
string service_account_id = 1;
5154
}
5255

56+
message CreateIamTokenForServiceRequest {
57+
string service_id = 1;
58+
string microservice_id = 2;
59+
string resource_id = 3;
60+
string resource_type = 4;
61+
string target_service_account_id = 5;
62+
}
63+
5364
message CreateIamTokenForComputeInstanceRequest {
5465
string service_account_id = 1;
5566
string instance_id = 2;

ydb/public/sdk/cpp/include/ydb-cpp-sdk/client/iam_private/iam.h

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,21 @@
44

55
namespace NYdb::inline V3 {
66

7+
struct TIamServiceParams : TIamEndpoint {
8+
std::string ServiceId;
9+
std::string MicroserviceId;
10+
std::string ResourceId;
11+
std::string ResourceType;
12+
std::string TargetServiceAccountId;
13+
};
14+
715
/// Acquire an IAM token using a JSON Web Token (JWT) file name.
816
TCredentialsProviderFactoryPtr CreateIamJwtFileCredentialsProviderFactoryPrivate(const TIamJwtFilename& params);
917

1018
/// Acquire an IAM token using JSON Web Token (JWT) contents.
1119
TCredentialsProviderFactoryPtr CreateIamJwtParamsCredentialsProviderFactoryPrivate(const TIamJwtContent& param);
1220

21+
/// Acquire an IAM token for system service account (SSA).
22+
TCredentialsProviderFactoryPtr CreateIamServiceCredentialsProviderFactory(const TIamServiceParams& params);
23+
1324
} // namespace NYdb

ydb/public/sdk/cpp/src/client/iam/common/iam.h

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -19,12 +19,19 @@ class TGrpcIamCredentialsProvider : public ICredentialsProvider {
1919
protected:
2020
using TRequestFiller = std::function<void(TRequest&)>;
2121

22+
using TSimpleRpc =
23+
typename NYdbGrpc::TSimpleRequestProcessor<
24+
typename TService::Stub,
25+
TRequest,
26+
TResponse>::TAsyncRequest;
27+
2228
private:
2329
class TImpl : public std::enable_shared_from_this<TGrpcIamCredentialsProvider<TRequest, TResponse, TService>::TImpl> {
2430
public:
25-
TImpl(const TIamEndpoint& iamEndpoint, const TRequestFiller& requestFiller)
31+
TImpl(const TIamEndpoint& iamEndpoint, const TRequestFiller& requestFiller, TSimpleRpc rpc)
2632
: Client(std::make_unique<NYdbGrpc::TGRpcClientLow>())
2733
, Connection_(nullptr)
34+
, Rpc_(rpc)
2835
, Ticket_("")
2936
, NextTicketUpdate_(TInstant::Zero())
3037
, IamEndpoint_(iamEndpoint)
@@ -67,7 +74,7 @@ class TGrpcIamCredentialsProvider : public ICredentialsProvider {
6774
Connection_->template DoRequest<TRequest, TResponse>(
6875
std::move(req),
6976
std::move(cb),
70-
&TService::Stub::AsyncCreate,
77+
Rpc_,
7178
{ {}, {}, IamEndpoint_.RequestTimeout }
7279
);
7380

@@ -142,9 +149,9 @@ class TGrpcIamCredentialsProvider : public ICredentialsProvider {
142149
}
143150

144151
private:
145-
146152
std::unique_ptr<NYdbGrpc::TGRpcClientLow> Client;
147153
std::unique_ptr<NYdbGrpc::TServiceConnection<TService>> Connection_;
154+
TSimpleRpc Rpc_;
148155
std::string Ticket_;
149156
TInstant NextTicketUpdate_;
150157
const TIamEndpoint IamEndpoint_;
@@ -157,8 +164,8 @@ class TGrpcIamCredentialsProvider : public ICredentialsProvider {
157164
};
158165

159166
public:
160-
TGrpcIamCredentialsProvider(const TIamEndpoint& endpoint, const TRequestFiller& requestFiller)
161-
: Impl_(std::make_shared<TImpl>(endpoint, requestFiller))
167+
TGrpcIamCredentialsProvider(const TIamEndpoint& endpoint, const TRequestFiller& requestFiller, TSimpleRpc rpc)
168+
: Impl_(std::make_shared<TImpl>(endpoint, requestFiller, rpc))
162169
{
163170
Impl_->UpdateTicket(true);
164171
}
@@ -186,7 +193,7 @@ class TIamJwtCredentialsProvider : public TGrpcIamCredentialsProvider<TRequest,
186193
: TGrpcIamCredentialsProvider<TRequest, TResponse, TService>(params,
187194
[jwtParams = params.JwtParams](TRequest& req) {
188195
req.set_jwt(MakeSignedJwt(jwtParams));
189-
}) {}
196+
}, &TService::Stub::AsyncCreate) {}
190197
};
191198

192199
template<typename TRequest, typename TResponse, typename TService>
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
#include <ydb-cpp-sdk/client/iam_private/iam.h>
2+
3+
#include <src/client/iam/common/iam.h>
4+
5+
namespace NYdb::inline V3 {
6+
7+
template<typename TRequest, typename TResponse, typename TService>
8+
9+
class TIamServiceCredentialsProviderFactory : public ICredentialsProviderFactory {
10+
public:
11+
TIamServiceCredentialsProviderFactory(const TIamServiceParams& params) : Params_(params) {}
12+
13+
TCredentialsProviderPtr CreateProvider() const final {
14+
return std::make_shared<TGrpcIamCredentialsProvider<TRequest, TResponse, TService>>(Params_,
15+
[params = Params_](TRequest& req) {
16+
req.set_service_id(params.ServiceId);
17+
req.set_microservice_id(params.MicroserviceId);
18+
req.set_resource_id(params.ResourceId);
19+
req.set_resource_type(params.ResourceType);
20+
req.set_target_service_account_id(params.TargetServiceAccountId);
21+
}, &TService::Stub::AsyncCreateForService);
22+
}
23+
24+
private:
25+
TIamServiceParams Params_;
26+
};
27+
28+
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
LIBRARY()
2+
3+
INCLUDE(${ARCADIA_ROOT}/ydb/public/sdk/cpp/sdk_common.inc)
4+
5+
SRCS(
6+
iam.h
7+
)
8+
9+
PEERDIR(
10+
ydb/public/sdk/cpp/src/client/iam/common
11+
)
12+
13+
END()
Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,17 @@
1-
#include <ydb-cpp-sdk/client/iam_private/iam.h>
2-
3-
#include <src/client/iam/common/iam.h>
1+
#include "common/iam.h"
42

53
#include <ydb/public/api/client/yc_private/iam/iam_token_service.pb.h>
64
#include <ydb/public/api/client/yc_private/iam/iam_token_service.grpc.pb.h>
75

6+
using namespace yandex::cloud::priv::iam::v1;
7+
88
namespace NYdb::inline V3 {
99

1010
TCredentialsProviderFactoryPtr CreateIamJwtCredentialsProviderFactoryImplPrivate(TIamJwtParams&& jwtParams) {
1111
return std::make_shared<TIamJwtCredentialsProviderFactory<
12-
yandex::cloud::priv::iam::v1::CreateIamTokenRequest,
13-
yandex::cloud::priv::iam::v1::CreateIamTokenResponse,
14-
yandex::cloud::priv::iam::v1::IamTokenService
12+
CreateIamTokenRequest,
13+
CreateIamTokenResponse,
14+
IamTokenService
1515
>>(std::move(jwtParams));
1616
}
1717

@@ -25,4 +25,12 @@ TCredentialsProviderFactoryPtr CreateIamJwtParamsCredentialsProviderFactoryPriva
2525
return CreateIamJwtCredentialsProviderFactoryImplPrivate(std::move(jwtParams));
2626
}
2727

28+
TCredentialsProviderFactoryPtr CreateIamServiceCredentialsProviderFactory(const TIamServiceParams& params) {
29+
return std::make_shared<TIamServiceCredentialsProviderFactory<
30+
CreateIamTokenForServiceRequest,
31+
CreateIamTokenResponse,
32+
IamTokenService
33+
>>(std::move(params));
34+
}
35+
2836
}

ydb/public/sdk/cpp/src/client/iam_private/ya.make

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ SRCS(
88

99
PEERDIR(
1010
ydb/public/api/client/yc_private/iam
11-
ydb/public/sdk/cpp/src/client/iam/common
11+
ydb/public/sdk/cpp/src/client/iam_private/common
1212
)
1313

1414
END()

0 commit comments

Comments
 (0)