strongdm 15.1.0 → 15.4.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.
@@ -286,6 +286,7 @@ module SDM
286
286
  end
287
287
  end
288
288
 
289
+ # AKSServiceAccountUserImpersonation is deprecated, see docs for more info.
289
290
  class AKSServiceAccountUserImpersonation
290
291
  # The bind interface is the IP address to which the port override of a resource is bound (for example, 127.0.0.1). It is automatically generated if not provided.
291
292
  attr_accessor :bind_interface
@@ -357,6 +358,7 @@ module SDM
357
358
  end
358
359
  end
359
360
 
361
+ # AKSUserImpersonation is deprecated, see docs for more info.
360
362
  class AKSUserImpersonation
361
363
  # The bind interface is the IP address to which the port override of a resource is bound (for example, 127.0.0.1). It is automatically generated if not provided.
362
364
  attr_accessor :bind_interface
@@ -436,6 +438,82 @@ module SDM
436
438
  end
437
439
  end
438
440
 
441
+ # AMQP is currently unstable, and its API may change, or it may be removed, without a major version bump.
442
+ class AMQP
443
+ # The bind interface is the IP address to which the port override of a resource is bound (for example, 127.0.0.1). It is automatically generated if not provided.
444
+ attr_accessor :bind_interface
445
+ # A filter applied to the routing logic to pin datasource to nodes.
446
+ attr_accessor :egress_filter
447
+ # True if the datasource is reachable and the credentials are valid.
448
+ attr_accessor :healthy
449
+ # The host to dial to initiate a connection from the egress node to this resource.
450
+ attr_accessor :hostname
451
+ # Unique identifier of the Resource.
452
+ attr_accessor :id
453
+ # Unique human-readable name of the Resource.
454
+ attr_accessor :name
455
+ # The password to authenticate with.
456
+ attr_accessor :password
457
+ # The port to dial to initiate a connection from the egress node to this resource.
458
+ attr_accessor :port
459
+ # The local port used by clients to connect to this resource.
460
+ attr_accessor :port_override
461
+ # ID of the proxy cluster for this resource, if any.
462
+ attr_accessor :proxy_cluster_id
463
+ # ID of the secret store containing credentials for this resource, if any.
464
+ attr_accessor :secret_store_id
465
+ # Subdomain is the local DNS address. (e.g. app-prod1 turns into app-prod1.your-org-name.sdm.network)
466
+ attr_accessor :subdomain
467
+ # Tags is a map of key, value pairs.
468
+ attr_accessor :tags
469
+ # If set, TLS must be used to connect to this resource.
470
+ attr_accessor :tls_required
471
+ # The username to authenticate with.
472
+ attr_accessor :username
473
+
474
+ def initialize(
475
+ bind_interface: nil,
476
+ egress_filter: nil,
477
+ healthy: nil,
478
+ hostname: nil,
479
+ id: nil,
480
+ name: nil,
481
+ password: nil,
482
+ port: nil,
483
+ port_override: nil,
484
+ proxy_cluster_id: nil,
485
+ secret_store_id: nil,
486
+ subdomain: nil,
487
+ tags: nil,
488
+ tls_required: nil,
489
+ username: nil
490
+ )
491
+ @bind_interface = bind_interface == nil ? "" : bind_interface
492
+ @egress_filter = egress_filter == nil ? "" : egress_filter
493
+ @healthy = healthy == nil ? false : healthy
494
+ @hostname = hostname == nil ? "" : hostname
495
+ @id = id == nil ? "" : id
496
+ @name = name == nil ? "" : name
497
+ @password = password == nil ? "" : password
498
+ @port = port == nil ? 0 : port
499
+ @port_override = port_override == nil ? 0 : port_override
500
+ @proxy_cluster_id = proxy_cluster_id == nil ? "" : proxy_cluster_id
501
+ @secret_store_id = secret_store_id == nil ? "" : secret_store_id
502
+ @subdomain = subdomain == nil ? "" : subdomain
503
+ @tags = tags == nil ? SDM::_porcelain_zero_value_tags() : tags
504
+ @tls_required = tls_required == nil ? false : tls_required
505
+ @username = username == nil ? "" : username
506
+ end
507
+
508
+ def to_json(options = {})
509
+ hash = {}
510
+ self.instance_variables.each do |var|
511
+ hash[var.id2name.delete_prefix("@")] = self.instance_variable_get var
512
+ end
513
+ hash.to_json
514
+ end
515
+ end
516
+
439
517
  class AWS
440
518
  # The Access Key ID to use to authenticate.
441
519
  attr_accessor :access_key
@@ -2243,6 +2321,7 @@ module SDM
2243
2321
  end
2244
2322
  end
2245
2323
 
2324
+ # AmazonEKSInstanceProfileUserImpersonation is deprecated, see docs for more info.
2246
2325
  class AmazonEKSInstanceProfileUserImpersonation
2247
2326
  # The bind interface is the IP address to which the port override of a resource is bound (for example, 127.0.0.1). It is automatically generated if not provided.
2248
2327
  attr_accessor :bind_interface
@@ -2326,6 +2405,7 @@ module SDM
2326
2405
  end
2327
2406
  end
2328
2407
 
2408
+ # AmazonEKSUserImpersonation is deprecated, see docs for more info.
2329
2409
  class AmazonEKSUserImpersonation
2330
2410
  # The Access Key ID to use to authenticate.
2331
2411
  attr_accessor :access_key
@@ -2741,6 +2821,7 @@ module SDM
2741
2821
  end
2742
2822
 
2743
2823
  # ApprovalWorkflowApprover links an approval workflow approver to an ApprovalWorkflowStep
2824
+ # ApprovalWorkflowApprover is deprecated, see docs for more info.
2744
2825
  class ApprovalWorkflowApprover
2745
2826
  # The approver account id.
2746
2827
  attr_accessor :account_id
@@ -3047,6 +3128,7 @@ module SDM
3047
3128
  end
3048
3129
 
3049
3130
  # ApprovalWorkflowStep links an approval workflow step to an ApprovalWorkflow
3131
+ # ApprovalWorkflowStep is deprecated, see docs for more info.
3050
3132
  class ApprovalWorkflowStep
3051
3133
  # The approval flow id specified the approval workflow that this step belongs to
3052
3134
  attr_accessor :approval_flow_id
@@ -4002,6 +4084,86 @@ module SDM
4002
4084
  end
4003
4085
  end
4004
4086
 
4087
+ # AzureMysqlManagedIdentity is currently unstable, and its API may change, or it may be removed, without a major version bump.
4088
+ class AzureMysqlManagedIdentity
4089
+ # The bind interface is the IP address to which the port override of a resource is bound (for example, 127.0.0.1). It is automatically generated if not provided.
4090
+ attr_accessor :bind_interface
4091
+ # The database for healthchecks. Does not affect client requests.
4092
+ attr_accessor :database
4093
+ # A filter applied to the routing logic to pin datasource to nodes.
4094
+ attr_accessor :egress_filter
4095
+ # True if the datasource is reachable and the credentials are valid.
4096
+ attr_accessor :healthy
4097
+ # The host to dial to initiate a connection from the egress node to this resource.
4098
+ attr_accessor :hostname
4099
+ # Unique identifier of the Resource.
4100
+ attr_accessor :id
4101
+ # Unique human-readable name of the Resource.
4102
+ attr_accessor :name
4103
+ # The password to authenticate with.
4104
+ attr_accessor :password
4105
+ # The port to dial to initiate a connection from the egress node to this resource.
4106
+ attr_accessor :port
4107
+ # The local port used by clients to connect to this resource.
4108
+ attr_accessor :port_override
4109
+ # ID of the proxy cluster for this resource, if any.
4110
+ attr_accessor :proxy_cluster_id
4111
+ # ID of the secret store containing credentials for this resource, if any.
4112
+ attr_accessor :secret_store_id
4113
+ # Subdomain is the local DNS address. (e.g. app-prod1 turns into app-prod1.your-org-name.sdm.network)
4114
+ attr_accessor :subdomain
4115
+ # Tags is a map of key, value pairs.
4116
+ attr_accessor :tags
4117
+ # If true, appends the hostname to the username when hitting a database.azure.com address
4118
+ attr_accessor :use_azure_single_server_usernames
4119
+ # The username to authenticate with.
4120
+ attr_accessor :username
4121
+
4122
+ def initialize(
4123
+ bind_interface: nil,
4124
+ database: nil,
4125
+ egress_filter: nil,
4126
+ healthy: nil,
4127
+ hostname: nil,
4128
+ id: nil,
4129
+ name: nil,
4130
+ password: nil,
4131
+ port: nil,
4132
+ port_override: nil,
4133
+ proxy_cluster_id: nil,
4134
+ secret_store_id: nil,
4135
+ subdomain: nil,
4136
+ tags: nil,
4137
+ use_azure_single_server_usernames: nil,
4138
+ username: nil
4139
+ )
4140
+ @bind_interface = bind_interface == nil ? "" : bind_interface
4141
+ @database = database == nil ? "" : database
4142
+ @egress_filter = egress_filter == nil ? "" : egress_filter
4143
+ @healthy = healthy == nil ? false : healthy
4144
+ @hostname = hostname == nil ? "" : hostname
4145
+ @id = id == nil ? "" : id
4146
+ @name = name == nil ? "" : name
4147
+ @password = password == nil ? "" : password
4148
+ @port = port == nil ? 0 : port
4149
+ @port_override = port_override == nil ? 0 : port_override
4150
+ @proxy_cluster_id = proxy_cluster_id == nil ? "" : proxy_cluster_id
4151
+ @secret_store_id = secret_store_id == nil ? "" : secret_store_id
4152
+ @subdomain = subdomain == nil ? "" : subdomain
4153
+ @tags = tags == nil ? SDM::_porcelain_zero_value_tags() : tags
4154
+ @use_azure_single_server_usernames = use_azure_single_server_usernames == nil ? false : use_azure_single_server_usernames
4155
+ @username = username == nil ? "" : username
4156
+ end
4157
+
4158
+ def to_json(options = {})
4159
+ hash = {}
4160
+ self.instance_variables.each do |var|
4161
+ hash[var.id2name.delete_prefix("@")] = self.instance_variable_get var
4162
+ end
4163
+ hash.to_json
4164
+ end
4165
+ end
4166
+
4005
4167
  class AzurePostgres
4006
4168
  # The bind interface is the IP address to which the port override of a resource is bound (for example, 127.0.0.1). It is automatically generated if not provided.
4007
4169
  attr_accessor :bind_interface
@@ -6548,6 +6710,7 @@ module SDM
6548
6710
  end
6549
6711
  end
6550
6712
 
6713
+ # GoogleGKEUserImpersonation is deprecated, see docs for more info.
6551
6714
  class GoogleGKEUserImpersonation
6552
6715
  # The bind interface is the IP address to which the port override of a resource is bound (for example, 127.0.0.1). It is automatically generated if not provided.
6553
6716
  attr_accessor :bind_interface
@@ -7953,6 +8116,7 @@ module SDM
7953
8116
  end
7954
8117
  end
7955
8118
 
8119
+ # KubernetesServiceAccountUserImpersonation is deprecated, see docs for more info.
7956
8120
  class KubernetesServiceAccountUserImpersonation
7957
8121
  # The bind interface is the IP address to which the port override of a resource is bound (for example, 127.0.0.1). It is automatically generated if not provided.
7958
8122
  attr_accessor :bind_interface
@@ -8024,6 +8188,7 @@ module SDM
8024
8188
  end
8025
8189
  end
8026
8190
 
8191
+ # KubernetesUserImpersonation is deprecated, see docs for more info.
8027
8192
  class KubernetesUserImpersonation
8028
8193
  # The bind interface is the IP address to which the port override of a resource is bound (for example, 127.0.0.1). It is automatically generated if not provided.
8029
8194
  attr_accessor :bind_interface
@@ -8103,6 +8268,72 @@ module SDM
8103
8268
  end
8104
8269
  end
8105
8270
 
8271
+ class LogCategoryConfig
8272
+ # Indicates if the Organization should exclude replay data from remote logging for the log category.
8273
+ attr_accessor :remote_discard_replays
8274
+ # The Organization's remote log encryption encoder, one of the LogRemoteEncoder constants.
8275
+ attr_accessor :remote_encoder
8276
+
8277
+ def initialize(
8278
+ remote_discard_replays: nil,
8279
+ remote_encoder: nil
8280
+ )
8281
+ @remote_discard_replays = remote_discard_replays == nil ? false : remote_discard_replays
8282
+ @remote_encoder = remote_encoder == nil ? "" : remote_encoder
8283
+ end
8284
+
8285
+ def to_json(options = {})
8286
+ hash = {}
8287
+ self.instance_variables.each do |var|
8288
+ hash[var.id2name.delete_prefix("@")] = self.instance_variable_get var
8289
+ end
8290
+ hash.to_json
8291
+ end
8292
+ end
8293
+
8294
+ class LogConfig
8295
+ # The Organization's log category configuration settings.
8296
+ attr_accessor :categories
8297
+ # The Organization's local log encryption encoder, one of the LogLocalEncoder constants.
8298
+ attr_accessor :local_encoder
8299
+ # The Organization's local log format, one of the LogLocalFormat constants.
8300
+ attr_accessor :local_format
8301
+ # The Organization's local log socket path.
8302
+ attr_accessor :local_socket_path
8303
+ # The Organization's local log storage, one of the LogLocalStorage constants.
8304
+ attr_accessor :local_storage
8305
+ # The Organization's local log TCP address.
8306
+ attr_accessor :local_tcp_address
8307
+ # The Organization's public key in PEM format for encrypting logs.
8308
+ attr_accessor :public_key
8309
+
8310
+ def initialize(
8311
+ categories: nil,
8312
+ local_encoder: nil,
8313
+ local_format: nil,
8314
+ local_socket_path: nil,
8315
+ local_storage: nil,
8316
+ local_tcp_address: nil,
8317
+ public_key: nil
8318
+ )
8319
+ @categories = categories == nil ? SDM::_porcelain_zero_value_log_category_config_map() : categories
8320
+ @local_encoder = local_encoder == nil ? "" : local_encoder
8321
+ @local_format = local_format == nil ? "" : local_format
8322
+ @local_socket_path = local_socket_path == nil ? "" : local_socket_path
8323
+ @local_storage = local_storage == nil ? "" : local_storage
8324
+ @local_tcp_address = local_tcp_address == nil ? "" : local_tcp_address
8325
+ @public_key = public_key == nil ? "" : public_key
8326
+ end
8327
+
8328
+ def to_json(options = {})
8329
+ hash = {}
8330
+ self.instance_variables.each do |var|
8331
+ hash[var.id2name.delete_prefix("@")] = self.instance_variable_get var
8332
+ end
8333
+ hash.to_json
8334
+ end
8335
+ end
8336
+
8106
8337
  # MTLSMysql is currently unstable, and its API may change, or it may be removed, without a major version bump.
8107
8338
  class MTLSMysql
8108
8339
  # The bind interface is the IP address to which the port override of a resource is bound (for example, 127.0.0.1). It is automatically generated if not provided.
@@ -10108,6 +10339,7 @@ module SDM
10108
10339
  # The Organization's device trust provider, one of the DeviceTrustProvider constants.
10109
10340
  attr_accessor :device_trust_provider
10110
10341
  # Indicates if the Organization should drop replay data for SSH, RDP, and K8s logs.
10342
+ # Deprecated: use categories specific log_config.categories[].remote_discard_replays instead
10111
10343
  attr_accessor :discard_replays
10112
10344
  # Indicates if the Organization enforces a single session per user for the CLI and AdminUI.
10113
10345
  attr_accessor :enforce_single_session
@@ -10117,17 +10349,25 @@ module SDM
10117
10349
  attr_accessor :idle_timeout_enabled
10118
10350
  # The Organization's type, one of the OrgKind constants.
10119
10351
  attr_accessor :kind
10352
+ # The Organization's logging settings
10353
+ attr_accessor :log_config
10120
10354
  # The Organization's local log encryption encoder, one of the LogLocalEncoder constants.
10355
+ # Deprecated: use log_config.local_encoder instead
10121
10356
  attr_accessor :log_local_encoder
10122
10357
  # The Organization's local log format, one of the LogLocalFormat constants.
10358
+ # Deprecated: use log_config.local_format instead
10123
10359
  attr_accessor :log_local_format
10124
10360
  # The Organization's local log storage, one of the LogLocalStorage constants.
10361
+ # Deprecated: use log_config.local_storage instead
10125
10362
  attr_accessor :log_local_storage
10126
10363
  # The Organization's remote log encryption encoder, one of the LogRemoteEncoder constants.
10364
+ # Deprecated: use categories specific log_config.categories[].remote_encoder instead
10127
10365
  attr_accessor :log_remote_encoder
10128
10366
  # The Organization's socket path for Socket local log storage.
10367
+ # Deprecated: use log_config.local_socket_path instead
10129
10368
  attr_accessor :log_socket_path
10130
10369
  # The Organization's TCP address for TCP or Syslog local log storage.
10370
+ # Deprecated: use log_config.local_tcp_address instead
10131
10371
  attr_accessor :log_tcp_address
10132
10372
  # The Organization's loopback range.
10133
10373
  attr_accessor :loopback_range
@@ -10138,6 +10378,7 @@ module SDM
10138
10378
  # The Organization's name.
10139
10379
  attr_accessor :name
10140
10380
  # The Organization's public key PEM for encrypting remote logs.
10381
+ # Deprecated: use log_config.public_key instead
10141
10382
  attr_accessor :public_key_pem
10142
10383
  # Indicates if the Organization requires secret stores.
10143
10384
  attr_accessor :require_secret_store
@@ -10170,6 +10411,7 @@ module SDM
10170
10411
  idle_timeout: nil,
10171
10412
  idle_timeout_enabled: nil,
10172
10413
  kind: nil,
10414
+ log_config: nil,
10173
10415
  log_local_encoder: nil,
10174
10416
  log_local_format: nil,
10175
10417
  log_local_storage: nil,
@@ -10201,6 +10443,7 @@ module SDM
10201
10443
  @idle_timeout = idle_timeout == nil ? nil : idle_timeout
10202
10444
  @idle_timeout_enabled = idle_timeout_enabled == nil ? false : idle_timeout_enabled
10203
10445
  @kind = kind == nil ? "" : kind
10446
+ @log_config = log_config == nil ? nil : log_config
10204
10447
  @log_local_encoder = log_local_encoder == nil ? "" : log_local_encoder
10205
10448
  @log_local_format = log_local_format == nil ? "" : log_local_format
10206
10449
  @log_local_storage = log_local_storage == nil ? "" : log_local_storage
@@ -15621,6 +15864,7 @@ module SDM
15621
15864
  end
15622
15865
 
15623
15866
  # WorkflowApprover is an account or a role with the ability to approve requests bound to a workflow.
15867
+ # WorkflowApprover is deprecated, see docs for more info.
15624
15868
  class WorkflowApprover
15625
15869
  # The approver account id.
15626
15870
  attr_accessor :account_id
@@ -16224,4 +16468,8 @@ module SDM
16224
16468
  def self._porcelain_zero_value_access_rule()
16225
16469
  {}
16226
16470
  end
16471
+ # @private
16472
+ def self._porcelain_zero_value_log_category_config_map()
16473
+ {}
16474
+ end
16227
16475
  end
data/lib/strongdm.rb CHANGED
@@ -30,7 +30,7 @@ module SDM #:nodoc:
30
30
  DEFAULT_RETRY_FACTOR = 1.6
31
31
  DEFAULT_RETRY_JITTER = 0.2
32
32
  API_VERSION = "2025-04-14"
33
- USER_AGENT = "strongdm-sdk-ruby/15.1.0"
33
+ USER_AGENT = "strongdm-sdk-ruby/15.4.0"
34
34
  private_constant :DEFAULT_BASE_RETRY_DELAY, :DEFAULT_MAX_RETRY_DELAY, :DEFAULT_RETRY_FACTOR, :DEFAULT_RETRY_JITTER, :API_VERSION, :USER_AGENT
35
35
 
36
36
  # Creates a new strongDM API client.
@@ -77,6 +77,7 @@ module SDM #:nodoc:
77
77
  @approval_workflows = ApprovalWorkflows.new(@channel, self)
78
78
  @approval_workflows_history = ApprovalWorkflowsHistory.new(@channel, self)
79
79
  @control_panel = ControlPanel.new(@channel, self)
80
+ @roles = Roles.new(@channel, self)
80
81
  @health_checks = HealthChecks.new(@channel, self)
81
82
  @identity_aliases = IdentityAliases.new(@channel, self)
82
83
  @identity_aliases_history = IdentityAliasesHistory.new(@channel, self)
@@ -103,7 +104,6 @@ module SDM #:nodoc:
103
104
  @resources_history = ResourcesHistory.new(@channel, self)
104
105
  @role_resources = RoleResources.new(@channel, self)
105
106
  @role_resources_history = RoleResourcesHistory.new(@channel, self)
106
- @roles = Roles.new(@channel, self)
107
107
  @roles_history = RolesHistory.new(@channel, self)
108
108
  @secret_stores = SecretStores.new(@channel, self)
109
109
  @secret_engines = SecretEngines.new(@channel, self)
@@ -315,6 +315,12 @@ module SDM #:nodoc:
315
315
  #
316
316
  # See {ControlPanel}.
317
317
  attr_reader :control_panel
318
+ # A Role has a list of access rules which determine which Resources the members
319
+ # of the Role have access to. An Account can be a member of multiple Roles via
320
+ # AccountAttachments.
321
+ #
322
+ # See {Roles}.
323
+ attr_reader :roles
318
324
  # HealthChecks lists the last healthcheck between each node and resource.
319
325
  # Note the unconventional capitalization here is to prevent having a collision with GRPC
320
326
  #
@@ -435,12 +441,6 @@ module SDM #:nodoc:
435
441
  #
436
442
  # See {RoleResourcesHistory}.
437
443
  attr_reader :role_resources_history
438
- # A Role has a list of access rules which determine which Resources the members
439
- # of the Role have access to. An Account can be a member of multiple Roles via
440
- # AccountAttachments.
441
- #
442
- # See {Roles}.
443
- attr_reader :roles
444
444
  # RolesHistory records all changes to the state of a Role.
445
445
  #
446
446
  # See {RolesHistory}.
@@ -516,6 +516,7 @@ module SDM #:nodoc:
516
516
  @approval_workflows = ApprovalWorkflows.new(@channel, self)
517
517
  @approval_workflows_history = ApprovalWorkflowsHistory.new(@channel, self)
518
518
  @control_panel = ControlPanel.new(@channel, self)
519
+ @roles = Roles.new(@channel, self)
519
520
  @health_checks = HealthChecks.new(@channel, self)
520
521
  @identity_aliases = IdentityAliases.new(@channel, self)
521
522
  @identity_aliases_history = IdentityAliasesHistory.new(@channel, self)
@@ -542,7 +543,6 @@ module SDM #:nodoc:
542
543
  @resources_history = ResourcesHistory.new(@channel, self)
543
544
  @role_resources = RoleResources.new(@channel, self)
544
545
  @role_resources_history = RoleResourcesHistory.new(@channel, self)
545
- @roles = Roles.new(@channel, self)
546
546
  @roles_history = RolesHistory.new(@channel, self)
547
547
  @secret_stores = SecretStores.new(@channel, self)
548
548
  @secret_engines = SecretEngines.new(@channel, self)
@@ -569,6 +569,7 @@ module SDM #:nodoc:
569
569
  @approval_workflow_approvers = SnapshotApprovalWorkflowApprovers.new(client.approval_workflow_approvers)
570
570
  @approval_workflow_steps = SnapshotApprovalWorkflowSteps.new(client.approval_workflow_steps)
571
571
  @approval_workflows = SnapshotApprovalWorkflows.new(client.approval_workflows)
572
+ @roles = SnapshotRoles.new(client.roles)
572
573
  @identity_aliases = SnapshotIdentityAliases.new(client.identity_aliases)
573
574
  @identity_sets = SnapshotIdentitySets.new(client.identity_sets)
574
575
  @nodes = SnapshotNodes.new(client.nodes)
@@ -578,7 +579,6 @@ module SDM #:nodoc:
578
579
  @remote_identity_groups = SnapshotRemoteIdentityGroups.new(client.remote_identity_groups)
579
580
  @resources = SnapshotResources.new(client.resources)
580
581
  @role_resources = SnapshotRoleResources.new(client.role_resources)
581
- @roles = SnapshotRoles.new(client.roles)
582
582
  @secret_stores = SnapshotSecretStores.new(client.secret_stores)
583
583
  @workflow_approvers = SnapshotWorkflowApprovers.new(client.workflow_approvers)
584
584
  @workflow_roles = SnapshotWorkflowRoles.new(client.workflow_roles)
@@ -627,6 +627,12 @@ module SDM #:nodoc:
627
627
  #
628
628
  # See {SnapshotApprovalWorkflows}.
629
629
  attr_reader :approval_workflows
630
+ # A Role has a list of access rules which determine which Resources the members
631
+ # of the Role have access to. An Account can be a member of multiple Roles via
632
+ # AccountAttachments.
633
+ #
634
+ # See {SnapshotRoles}.
635
+ attr_reader :roles
630
636
  # IdentityAliases assign an alias to an account within an IdentitySet.
631
637
  # The alias is used as the username when connecting to a identity supported resource.
632
638
  #
@@ -673,12 +679,6 @@ module SDM #:nodoc:
673
679
  #
674
680
  # See {SnapshotRoleResources}.
675
681
  attr_reader :role_resources
676
- # A Role has a list of access rules which determine which Resources the members
677
- # of the Role have access to. An Account can be a member of multiple Roles via
678
- # AccountAttachments.
679
- #
680
- # See {SnapshotRoles}.
681
- attr_reader :roles
682
682
  # SecretStores are servers where resource secrets (passwords, keys) are stored.
683
683
  #
684
684
  # See {SnapshotSecretStores}.