Skip to content

Commit da994ee

Browse files
authored
Add private resource destinations to egress rules (#193)
1 parent fc82395 commit da994ee

4 files changed

Lines changed: 122 additions & 0 deletions

File tree

‎proto/agynio/api/egress/v1/egress.proto‎

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,9 @@ service EgressRulesService {
2424
rpc ListEgressRulesByAgent(ListEgressRulesByAgentRequest) returns (ListEgressRulesByAgentResponse);
2525
rpc ListEgressRulesByEnvironment(ListEgressRulesByEnvironmentRequest) returns (ListEgressRulesByEnvironmentResponse);
2626
rpc CountRulesReferencingSecret(CountRulesReferencingSecretRequest) returns (CountRulesReferencingSecretResponse);
27+
rpc CountRulesReferencingPrivateResource(CountRulesReferencingPrivateResourceRequest) returns (CountRulesReferencingPrivateResourceResponse);
28+
rpc ListMediatedPrivateResources(ListMediatedPrivateResourcesRequest) returns (ListMediatedPrivateResourcesResponse);
29+
rpc ListAttachedRuleDomains(ListAttachedRuleDomainsRequest) returns (ListAttachedRuleDomainsResponse);
2730
}
2831

2932
// Metadata shared by egress resources.
@@ -57,6 +60,15 @@ message EgressRuleMatcher {
5760
repeated string methods = 3;
5861
// Glob over the request path. Empty means any path.
5962
string path_pattern = 4;
63+
string private_resource_id = 5;
64+
}
65+
66+
message EgressRuleUpstreamTls {
67+
string server_name = 1;
68+
oneof trust {
69+
string ca_bundle_secret_id = 2;
70+
bool insecure_skip_verify = 3;
71+
}
6072
}
6173

6274
// Header credential injected by the egress gateway.
@@ -83,6 +95,7 @@ message EgressRule {
8395
string description = 4;
8496
EgressRuleMatcher matcher = 5;
8597
EgressRuleEffect effect = 6;
98+
optional EgressRuleUpstreamTls upstream_tls = 7;
8699
}
87100

88101
// Attachment binding an egress rule to an agent or environment.
@@ -102,6 +115,7 @@ message CreateEgressRuleRequest {
102115
string description = 3;
103116
EgressRuleMatcher matcher = 4;
104117
EgressRuleEffect effect = 5;
118+
optional EgressRuleUpstreamTls upstream_tls = 6;
105119
}
106120

107121
message CreateEgressRuleResponse {
@@ -116,10 +130,18 @@ message GetEgressRuleResponse {
116130
EgressRule egress_rule = 1;
117131
}
118132

133+
enum EgressRuleTargetKind {
134+
EGRESS_RULE_TARGET_KIND_UNSPECIFIED = 0;
135+
EGRESS_RULE_TARGET_KIND_PUBLIC = 1;
136+
EGRESS_RULE_TARGET_KIND_PRIVATE = 2;
137+
}
138+
119139
message ListEgressRulesRequest {
120140
string organization_id = 1;
121141
int32 page_size = 2;
122142
string page_token = 3;
143+
optional string private_resource_id = 4;
144+
optional EgressRuleTargetKind target_kind = 5;
123145
}
124146

125147
message ListEgressRulesResponse {
@@ -133,6 +155,7 @@ message UpdateEgressRuleRequest {
133155
optional string description = 3;
134156
optional EgressRuleMatcher matcher = 4;
135157
optional EgressRuleEffect effect = 5;
158+
optional EgressRuleUpstreamTls upstream_tls = 6;
136159
}
137160

138161
message UpdateEgressRuleResponse {
@@ -179,12 +202,24 @@ message ListEgressRuleAttachmentsResponse {
179202
string next_page_token = 2;
180203
}
181204

205+
enum EgressPrivateResourceProtocol {
206+
EGRESS_PRIVATE_RESOURCE_PROTOCOL_UNSPECIFIED = 0;
207+
EGRESS_PRIVATE_RESOURCE_PROTOCOL_HTTP = 1;
208+
EGRESS_PRIVATE_RESOURCE_PROTOCOL_HTTPS = 2;
209+
}
210+
211+
message PrivateResourceInfo {
212+
string intercept_host = 1;
213+
EgressPrivateResourceProtocol protocol = 2;
214+
}
215+
182216
message ListEgressRulesByAgentRequest {
183217
string agent_id = 1;
184218
}
185219

186220
message ListEgressRulesByAgentResponse {
187221
repeated EgressRule egress_rules = 1;
222+
map<string, PrivateResourceInfo> private_resources = 2;
188223
}
189224

190225
message ListEgressRulesByEnvironmentRequest {
@@ -193,6 +228,7 @@ message ListEgressRulesByEnvironmentRequest {
193228

194229
message ListEgressRulesByEnvironmentResponse {
195230
repeated EgressRule egress_rules = 1;
231+
map<string, PrivateResourceInfo> private_resources = 2;
196232
}
197233

198234
message CountRulesReferencingSecretRequest {
@@ -203,3 +239,37 @@ message CountRulesReferencingSecretResponse {
203239
int32 count = 1;
204240
repeated string egress_rule_ids = 2;
205241
}
242+
243+
message CountRulesReferencingPrivateResourceRequest {
244+
string private_resource_id = 1;
245+
}
246+
247+
message CountRulesReferencingPrivateResourceResponse {
248+
int32 count = 1;
249+
repeated string egress_rule_ids = 2;
250+
}
251+
252+
message ListMediatedPrivateResourcesRequest {
253+
string organization_id = 1;
254+
}
255+
256+
message ListMediatedPrivateResourcesResponse {
257+
repeated string private_resource_ids = 1;
258+
}
259+
260+
message AttachedRuleDomain {
261+
string egress_rule_id = 1;
262+
string domain_pattern = 2;
263+
repeated int32 ports = 3;
264+
}
265+
266+
message ListAttachedRuleDomainsRequest {
267+
oneof principal {
268+
string agent_id = 1;
269+
string environment_id = 2;
270+
}
271+
}
272+
273+
message ListAttachedRuleDomainsResponse {
274+
repeated AttachedRuleDomain domains = 1;
275+
}

‎proto/agynio/api/gateway/v1/networks.proto‎

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,3 +32,7 @@ service NetworksGateway {
3232
rpc DeletePrivateResourceAccess(agynio.api.networks.v1.DeletePrivateResourceAccessRequest) returns (agynio.api.networks.v1.DeletePrivateResourceAccessResponse);
3333
rpc ListPrivateResourceAccess(agynio.api.networks.v1.ListPrivateResourceAccessRequest) returns (agynio.api.networks.v1.ListPrivateResourceAccessResponse);
3434
}
35+
36+
// SetPrivateResourceMediation and ListPrivateResourcesReachableBy are
37+
// deliberately absent: they are internal calls from the EgressRules service,
38+
// and the Gateway is the external surface.

‎proto/agynio/api/networks/v1/networks.proto‎

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,10 @@ service NetworksService {
3232
rpc CreatePrivateResourceAccess(CreatePrivateResourceAccessRequest) returns (CreatePrivateResourceAccessResponse);
3333
rpc DeletePrivateResourceAccess(DeletePrivateResourceAccessRequest) returns (DeletePrivateResourceAccessResponse);
3434
rpc ListPrivateResourceAccess(ListPrivateResourceAccessRequest) returns (ListPrivateResourceAccessResponse);
35+
36+
// --- Internal ---
37+
rpc SetPrivateResourceMediation(SetPrivateResourceMediationRequest) returns (SetPrivateResourceMediationResponse);
38+
rpc ListPrivateResourcesReachableBy(ListPrivateResourcesReachableByRequest) returns (ListPrivateResourcesReachableByResponse);
3539
}
3640

3741
// Metadata shared by network resources.
@@ -71,6 +75,12 @@ enum PrivateResourceProtocol {
7175
PRIVATE_RESOURCE_PROTOCOL_HTTPS = 3;
7276
}
7377

78+
enum PrivateResourceMediation {
79+
PRIVATE_RESOURCE_MEDIATION_UNSPECIFIED = 0;
80+
PRIVATE_RESOURCE_MEDIATION_TUNNEL = 1;
81+
PRIVATE_RESOURCE_MEDIATION_EGRESS_GATEWAY = 2;
82+
}
83+
7484
// Principal types eligible for private resource access.
7585
enum PrivateResourceAccessPrincipalType {
7686
PRIVATE_RESOURCE_ACCESS_PRINCIPAL_TYPE_UNSPECIFIED = 0;
@@ -118,6 +128,7 @@ message PrivateResource {
118128
// Numeric intercept ports. Each value must be in the range 1..65535.
119129
repeated int32 intercept_ports = 9;
120130
ProvisioningState provisioning_state = 10;
131+
PrivateResourceMediation mediation = 11;
121132
}
122133

123134
// Immutable grant authorizing a principal to dial a private resource.
@@ -304,3 +315,35 @@ message ListPrivateResourceAccessResponse {
304315
repeated PrivateResourceAccess private_resource_access = 1;
305316
string next_page_token = 2;
306317
}
318+
319+
message SetPrivateResourceMediationRequest {
320+
string id = 1;
321+
PrivateResourceMediation mediation = 2;
322+
}
323+
324+
message SetPrivateResourceMediationResponse {
325+
PrivateResource private_resource = 1;
326+
}
327+
328+
message ReachablePrivateResourceGrant {
329+
PrivateResourceAccessPrincipalType principal_type = 1;
330+
string principal_id = 2;
331+
}
332+
333+
message ReachablePrivateResource {
334+
string id = 1;
335+
string intercept_host = 2;
336+
repeated int32 intercept_ports = 3;
337+
repeated ReachablePrivateResourceGrant grants = 4;
338+
}
339+
340+
message ListPrivateResourcesReachableByRequest {
341+
oneof principal {
342+
string agent_id = 1;
343+
string environment_id = 2;
344+
}
345+
}
346+
347+
message ListPrivateResourcesReachableByResponse {
348+
repeated ReachablePrivateResource private_resources = 1;
349+
}

‎proto/agynio/api/ziti_management/v1/ziti_management.proto‎

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -594,12 +594,17 @@ message UpdateServiceRequest {
594594
// Deprecated: use tags_update to distinguish omitted from empty.
595595
map<string, string> tags = 4 [deprecated = true];
596596
optional TagsUpdate tags_update = 5;
597+
optional RoleAttributesUpdate role_attributes_update = 6;
597598
}
598599

599600
message TagsUpdate {
600601
map<string, string> tags = 1;
601602
}
602603

604+
message RoleAttributesUpdate {
605+
repeated string role_attributes = 1;
606+
}
607+
603608
message UpdateServiceResponse {
604609
OpenZitiService service = 1;
605610
}

0 commit comments

Comments
 (0)