strongdm 3.6.1 → 3.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (52) hide show
  1. checksums.yaml +4 -4
  2. data/.git/ORIG_HEAD +1 -1
  3. data/.git/index +0 -0
  4. data/.git/logs/HEAD +3 -3
  5. data/.git/logs/refs/heads/master +2 -2
  6. data/.git/logs/refs/remotes/origin/HEAD +1 -1
  7. data/.git/objects/pack/{pack-c0eff6575c38c9865988c2b59ce4060fff518355.idx → pack-6ff24cd25221e788819ff2b8012b5e54f3c5d426.idx} +0 -0
  8. data/.git/objects/pack/{pack-c0eff6575c38c9865988c2b59ce4060fff518355.pack → pack-6ff24cd25221e788819ff2b8012b5e54f3c5d426.pack} +0 -0
  9. data/.git/packed-refs +3 -2
  10. data/.git/refs/heads/master +1 -1
  11. data/lib/constants.rb +311 -0
  12. data/lib/grpc/account_attachments_history_pb.rb +48 -0
  13. data/lib/grpc/account_attachments_history_services_pb.rb +37 -0
  14. data/lib/grpc/account_grants_history_pb.rb +48 -0
  15. data/lib/grpc/account_grants_history_services_pb.rb +37 -0
  16. data/lib/grpc/account_permissions_pb.rb +48 -0
  17. data/lib/grpc/account_permissions_services_pb.rb +38 -0
  18. data/lib/grpc/account_resources_pb.rb +49 -0
  19. data/lib/grpc/account_resources_services_pb.rb +38 -0
  20. data/lib/grpc/accounts_history_pb.rb +48 -0
  21. data/lib/grpc/accounts_history_services_pb.rb +37 -0
  22. data/lib/grpc/activities_pb.rb +77 -0
  23. data/lib/grpc/activities_services_pb.rb +41 -0
  24. data/lib/grpc/nodes_history_pb.rb +48 -0
  25. data/lib/grpc/nodes_history_services_pb.rb +37 -0
  26. data/lib/grpc/organization_history_pb.rb +74 -0
  27. data/lib/grpc/organization_history_services_pb.rb +37 -0
  28. data/lib/grpc/plumbing.rb +977 -4
  29. data/lib/grpc/queries_pb.rb +67 -0
  30. data/lib/grpc/queries_services_pb.rb +39 -0
  31. data/lib/grpc/remote_identities_history_pb.rb +48 -0
  32. data/lib/grpc/remote_identities_history_services_pb.rb +37 -0
  33. data/lib/grpc/remote_identity_groups_history_pb.rb +48 -0
  34. data/lib/grpc/remote_identity_groups_history_services_pb.rb +37 -0
  35. data/lib/grpc/replays_pb.rb +50 -0
  36. data/lib/grpc/replays_services_pb.rb +38 -0
  37. data/lib/grpc/resources_history_pb.rb +48 -0
  38. data/lib/grpc/resources_history_services_pb.rb +37 -0
  39. data/lib/grpc/role_resources_history_pb.rb +48 -0
  40. data/lib/grpc/role_resources_history_services_pb.rb +37 -0
  41. data/lib/grpc/role_resources_pb.rb +46 -0
  42. data/lib/grpc/role_resources_services_pb.rb +38 -0
  43. data/lib/grpc/roles_history_pb.rb +48 -0
  44. data/lib/grpc/roles_history_services_pb.rb +37 -0
  45. data/lib/grpc/secret_stores_history_pb.rb +48 -0
  46. data/lib/grpc/secret_stores_history_services_pb.rb +37 -0
  47. data/lib/models/porcelain.rb +912 -0
  48. data/lib/strongdm.rb +219 -1
  49. data/lib/svc.rb +1555 -120
  50. data/lib/version +1 -1
  51. data/lib/version.rb +1 -1
  52. metadata +38 -4
data/lib/strongdm.rb CHANGED
@@ -29,7 +29,7 @@ module SDM #:nodoc:
29
29
  DEFAULT_BASE_RETRY_DELAY = 0.0030 # 30 ms
30
30
  DEFAULT_MAX_RETRY_DELAY = 300 # 300 seconds
31
31
  API_VERSION = "2021-08-23"
32
- USER_AGENT = "strongdm-sdk-ruby/3.6.1"
32
+ USER_AGENT = "strongdm-sdk-ruby/3.7.0"
33
33
  private_constant :DEFAULT_MAX_RETRIES, :DEFAULT_BASE_RETRY_DELAY, :DEFAULT_MAX_RETRY_DELAY, :API_VERSION, :USER_AGENT
34
34
 
35
35
  # Creates a new strongDM API client.
@@ -43,6 +43,7 @@ module SDM #:nodoc:
43
43
  @base_retry_delay = DEFAULT_BASE_RETRY_DELAY
44
44
  @max_retry_delay = DEFAULT_MAX_RETRY_DELAY
45
45
  @expose_rate_limit_errors = (not retry_rate_limit_errors)
46
+ @snapshot_time = nil
46
47
  begin
47
48
  if insecure
48
49
  @channel = GRPC::Core::Channel.new(host, {}, :this_channel_is_insecure)
@@ -54,15 +55,32 @@ module SDM #:nodoc:
54
55
  raise Plumbing::convert_error_to_porcelain(exception)
55
56
  end
56
57
  @account_attachments = AccountAttachments.new(@channel, self)
58
+ @account_attachments_history = AccountAttachmentsHistory.new(@channel, self)
57
59
  @account_grants = AccountGrants.new(@channel, self)
60
+ @account_grants_history = AccountGrantsHistory.new(@channel, self)
61
+ @account_permissions = AccountPermissions.new(@channel, self)
62
+ @account_resources = AccountResources.new(@channel, self)
58
63
  @accounts = Accounts.new(@channel, self)
64
+ @accounts_history = AccountsHistory.new(@channel, self)
65
+ @activities = Activities.new(@channel, self)
59
66
  @control_panel = ControlPanel.new(@channel, self)
60
67
  @nodes = Nodes.new(@channel, self)
68
+ @nodes_history = NodesHistory.new(@channel, self)
69
+ @organization_history = OrganizationHistory.new(@channel, self)
70
+ @queries = Queries.new(@channel, self)
61
71
  @remote_identities = RemoteIdentities.new(@channel, self)
72
+ @remote_identities_history = RemoteIdentitiesHistory.new(@channel, self)
62
73
  @remote_identity_groups = RemoteIdentityGroups.new(@channel, self)
74
+ @remote_identity_groups_history = RemoteIdentityGroupsHistory.new(@channel, self)
75
+ @replays = Replays.new(@channel, self)
63
76
  @resources = Resources.new(@channel, self)
77
+ @resources_history = ResourcesHistory.new(@channel, self)
78
+ @role_resources = RoleResources.new(@channel, self)
79
+ @role_resources_history = RoleResourcesHistory.new(@channel, self)
64
80
  @roles = Roles.new(@channel, self)
81
+ @roles_history = RolesHistory.new(@channel, self)
65
82
  @secret_stores = SecretStores.new(@channel, self)
83
+ @secret_stores_history = SecretStoresHistory.new(@channel, self)
66
84
  @_test_options = Hash.new
67
85
  end
68
86
 
@@ -137,26 +155,64 @@ module SDM #:nodoc:
137
155
  return (err.code() == 13 or err.code() == 14)
138
156
  end
139
157
 
158
+ # Constructs a read-only client that will provide historical data from the provided timestamp.
159
+ # See {SnapshotClient}.
160
+ def snapshot_at(snapshot_time)
161
+ client = self.clone
162
+ client.snapshot_time = snapshot_time
163
+ return SnapshotClient.new(client)
164
+ end
165
+
140
166
  attr_reader :max_retries
141
167
  attr_reader :base_retry_delay
142
168
  attr_reader :max_retry_delay
143
169
 
144
170
  # API authentication token (read-only).
145
171
  attr_reader :api_access_key
172
+ # Optional timestamp at which to provide historical data
173
+ attr_reader :snapshot_time
146
174
  # AccountAttachments assign an account to a role.
147
175
  #
148
176
  # See {AccountAttachments}.
149
177
  attr_reader :account_attachments
178
+ # AccountAttachmentsHistory records all changes to the state of an AccountAttachment.
179
+ #
180
+ # See {AccountAttachmentsHistory}.
181
+ attr_reader :account_attachments_history
150
182
  # AccountGrants assign a resource directly to an account, giving the account the permission to connect to that resource.
151
183
  #
152
184
  # See {AccountGrants}.
153
185
  attr_reader :account_grants
186
+ # AccountGrantsHistory records all changes to the state of an AccountGrant.
187
+ #
188
+ # See {AccountGrantsHistory}.
189
+ attr_reader :account_grants_history
190
+ # AccountPermissions records the granular permissions accounts have, allowing them to execute
191
+ # relevant commands via StrongDM's APIs.
192
+ #
193
+ # See {AccountPermissions}.
194
+ attr_reader :account_permissions
195
+ # AccountResources enumerates the resources to which accounts have access.
196
+ # The AccountResources service is read-only.
197
+ #
198
+ # See {AccountResources}.
199
+ attr_reader :account_resources
154
200
  # Accounts are users that have access to strongDM. There are two types of accounts:
155
201
  # 1. **Users:** humans who are authenticated through username and password or SSO.
156
202
  # 2. **Service Accounts:** machines that are authenticated using a service token.
157
203
  #
158
204
  # See {Accounts}.
159
205
  attr_reader :accounts
206
+ # AccountsHistory records all changes to the state of an Account.
207
+ #
208
+ # See {AccountsHistory}.
209
+ attr_reader :accounts_history
210
+ # An Activity is a record of an action taken against a strongDM deployment, e.g.
211
+ # a user creation, resource deletion, sso configuration change, etc. The Activities
212
+ # service is read-only.
213
+ #
214
+ # See {Activities}.
215
+ attr_reader :activities
160
216
  # ControlPanel contains all administrative controls.
161
217
  #
162
218
  # See {ControlPanel}.
@@ -167,31 +223,193 @@ module SDM #:nodoc:
167
223
  #
168
224
  # See {Nodes}.
169
225
  attr_reader :nodes
226
+ # NodesHistory records all changes to the state of a Node.
227
+ #
228
+ # See {NodesHistory}.
229
+ attr_reader :nodes_history
230
+ # OrganizationHistory records all changes to the state of an Organization.
231
+ #
232
+ # See {OrganizationHistory}.
233
+ attr_reader :organization_history
234
+ # A Query is a record of a single client request to a resource, such as an SQL query.
235
+ # Long-running SSH, RDP, or Kubernetes interactive sessions also count as queries.
236
+ # The Queries service is read-only.
237
+ #
238
+ # See {Queries}.
239
+ attr_reader :queries
170
240
  # RemoteIdentities assign a resource directly to an account, giving the account the permission to connect to that resource.
171
241
  #
172
242
  # See {RemoteIdentities}.
173
243
  attr_reader :remote_identities
244
+ # RemoteIdentitiesHistory records all changes to the state of a RemoteIdentity.
245
+ #
246
+ # See {RemoteIdentitiesHistory}.
247
+ attr_reader :remote_identities_history
174
248
  # A RemoteIdentityGroup is a named grouping of Remote Identities for Accounts.
175
249
  # An Account's relationship to a RemoteIdentityGroup is defined via RemoteIdentity objects.
176
250
  #
177
251
  # See {RemoteIdentityGroups}.
178
252
  attr_reader :remote_identity_groups
253
+ # RemoteIdentityGroupsHistory records all changes to the state of a RemoteIdentityGroup.
254
+ #
255
+ # See {RemoteIdentityGroupsHistory}.
256
+ attr_reader :remote_identity_groups_history
257
+ # A Replay captures the data transferred over a long-running SSH, RDP, or Kubernetes interactive session
258
+ # (otherwise referred to as a query). The Replays service is read-only.
259
+ #
260
+ # See {Replays}.
261
+ attr_reader :replays
179
262
  # Resources are databases, servers, clusters, websites, or clouds that strongDM
180
263
  # delegates access to.
181
264
  #
182
265
  # See {Resources}.
183
266
  attr_reader :resources
267
+ # ResourcesHistory records all changes to the state of a Resource.
268
+ #
269
+ # See {ResourcesHistory}.
270
+ attr_reader :resources_history
271
+ # RoleResources enumerates the resources to which roles have access.
272
+ # The RoleResources service is read-only.
273
+ #
274
+ # See {RoleResources}.
275
+ attr_reader :role_resources
276
+ # RoleResourcesHistory records all changes to the state of a RoleResource.
277
+ #
278
+ # See {RoleResourcesHistory}.
279
+ attr_reader :role_resources_history
184
280
  # A Role has a list of access rules which determine which Resources the members
185
281
  # of the Role have access to. An Account can be a member of multiple Roles via
186
282
  # AccountAttachments.
187
283
  #
188
284
  # See {Roles}.
189
285
  attr_reader :roles
286
+ # RolesHistory records all changes to the state of a Role.
287
+ #
288
+ # See {RolesHistory}.
289
+ attr_reader :roles_history
190
290
  # SecretStores are servers where resource secrets (passwords, keys) are stored.
191
291
  #
192
292
  # See {SecretStores}.
193
293
  attr_reader :secret_stores
294
+ # SecretStoresHistory records all changes to the state of a SecretStore.
295
+ #
296
+ # See {SecretStoresHistory}.
297
+ attr_reader :secret_stores_history
194
298
  # @private
195
299
  attr_reader :_test_options
300
+
301
+ protected
302
+
303
+ attr_writer :snapshot_time
304
+
305
+ private
306
+
307
+ def initialize_copy(other)
308
+ @account_attachments = AccountAttachments.new(@channel, self)
309
+ @account_attachments_history = AccountAttachmentsHistory.new(@channel, self)
310
+ @account_grants = AccountGrants.new(@channel, self)
311
+ @account_grants_history = AccountGrantsHistory.new(@channel, self)
312
+ @account_permissions = AccountPermissions.new(@channel, self)
313
+ @account_resources = AccountResources.new(@channel, self)
314
+ @accounts = Accounts.new(@channel, self)
315
+ @accounts_history = AccountsHistory.new(@channel, self)
316
+ @activities = Activities.new(@channel, self)
317
+ @control_panel = ControlPanel.new(@channel, self)
318
+ @nodes = Nodes.new(@channel, self)
319
+ @nodes_history = NodesHistory.new(@channel, self)
320
+ @organization_history = OrganizationHistory.new(@channel, self)
321
+ @queries = Queries.new(@channel, self)
322
+ @remote_identities = RemoteIdentities.new(@channel, self)
323
+ @remote_identities_history = RemoteIdentitiesHistory.new(@channel, self)
324
+ @remote_identity_groups = RemoteIdentityGroups.new(@channel, self)
325
+ @remote_identity_groups_history = RemoteIdentityGroupsHistory.new(@channel, self)
326
+ @replays = Replays.new(@channel, self)
327
+ @resources = Resources.new(@channel, self)
328
+ @resources_history = ResourcesHistory.new(@channel, self)
329
+ @role_resources = RoleResources.new(@channel, self)
330
+ @role_resources_history = RoleResourcesHistory.new(@channel, self)
331
+ @roles = Roles.new(@channel, self)
332
+ @roles_history = RolesHistory.new(@channel, self)
333
+ @secret_stores = SecretStores.new(@channel, self)
334
+ @secret_stores_history = SecretStoresHistory.new(@channel, self)
335
+ end
336
+ end
337
+
338
+ # SnapshotClient exposes methods to query historical records at a provided timestamp.
339
+ class SnapshotClient
340
+ def initialize(client)
341
+ @account_attachments = SnapshotAccountAttachments.new(client.account_attachments)
342
+ @account_grants = SnapshotAccountGrants.new(client.account_grants)
343
+ @account_permissions = SnapshotAccountPermissions.new(client.account_permissions)
344
+ @account_resources = SnapshotAccountResources.new(client.account_resources)
345
+ @accounts = SnapshotAccounts.new(client.accounts)
346
+ @nodes = SnapshotNodes.new(client.nodes)
347
+ @remote_identities = SnapshotRemoteIdentities.new(client.remote_identities)
348
+ @remote_identity_groups = SnapshotRemoteIdentityGroups.new(client.remote_identity_groups)
349
+ @resources = SnapshotResources.new(client.resources)
350
+ @role_resources = SnapshotRoleResources.new(client.role_resources)
351
+ @roles = SnapshotRoles.new(client.roles)
352
+ @secret_stores = SnapshotSecretStores.new(client.secret_stores)
353
+ end
354
+
355
+ # AccountAttachments assign an account to a role.
356
+ #
357
+ # See {SnapshotAccountAttachments}.
358
+ attr_reader :account_attachments
359
+ # AccountGrants assign a resource directly to an account, giving the account the permission to connect to that resource.
360
+ #
361
+ # See {SnapshotAccountGrants}.
362
+ attr_reader :account_grants
363
+ # AccountPermissions records the granular permissions accounts have, allowing them to execute
364
+ # relevant commands via StrongDM's APIs.
365
+ #
366
+ # See {SnapshotAccountPermissions}.
367
+ attr_reader :account_permissions
368
+ # AccountResources enumerates the resources to which accounts have access.
369
+ # The AccountResources service is read-only.
370
+ #
371
+ # See {SnapshotAccountResources}.
372
+ attr_reader :account_resources
373
+ # Accounts are users that have access to strongDM. There are two types of accounts:
374
+ # 1. **Users:** humans who are authenticated through username and password or SSO.
375
+ # 2. **Service Accounts:** machines that are authenticated using a service token.
376
+ #
377
+ # See {SnapshotAccounts}.
378
+ attr_reader :accounts
379
+ # Nodes make up the strongDM network, and allow your users to connect securely to your resources. There are two types of nodes:
380
+ # - **Gateways** are the entry points into network. They listen for connection from the strongDM client, and provide access to databases and servers.
381
+ # - **Relays** are used to extend the strongDM network into segmented subnets. They provide access to databases and servers but do not listen for incoming connections.
382
+ #
383
+ # See {SnapshotNodes}.
384
+ attr_reader :nodes
385
+ # RemoteIdentities assign a resource directly to an account, giving the account the permission to connect to that resource.
386
+ #
387
+ # See {SnapshotRemoteIdentities}.
388
+ attr_reader :remote_identities
389
+ # A RemoteIdentityGroup is a named grouping of Remote Identities for Accounts.
390
+ # An Account's relationship to a RemoteIdentityGroup is defined via RemoteIdentity objects.
391
+ #
392
+ # See {SnapshotRemoteIdentityGroups}.
393
+ attr_reader :remote_identity_groups
394
+ # Resources are databases, servers, clusters, websites, or clouds that strongDM
395
+ # delegates access to.
396
+ #
397
+ # See {SnapshotResources}.
398
+ attr_reader :resources
399
+ # RoleResources enumerates the resources to which roles have access.
400
+ # The RoleResources service is read-only.
401
+ #
402
+ # See {SnapshotRoleResources}.
403
+ attr_reader :role_resources
404
+ # A Role has a list of access rules which determine which Resources the members
405
+ # of the Role have access to. An Account can be a member of multiple Roles via
406
+ # AccountAttachments.
407
+ #
408
+ # See {SnapshotRoles}.
409
+ attr_reader :roles
410
+ # SecretStores are servers where resource secrets (passwords, keys) are stored.
411
+ #
412
+ # See {SnapshotSecretStores}.
413
+ attr_reader :secret_stores
196
414
  end
197
415
  end