stack_master 2.16.0 → 2.17.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: b4266652d84c1c02817d9db7dfcdf52dc475d86b24013066362ff9db91ef7703
4
- data.tar.gz: 3da40d30397a13adea77a79db06162c6006b7d2d6c77748b01fea17dfc1a50fc
3
+ metadata.gz: 637daba2dddc707df22584fad412d87df4ee24aab069885231561d847c762496
4
+ data.tar.gz: 7abcea21ecfbc080886b4181dc66392066a9360255ed2186bf2e7d652f6101e2
5
5
  SHA512:
6
- metadata.gz: af293fcc93bd620fe8b37e3220b265470ad59fa35cf790fc303d4f070ec9bb1e5b447a7c37e2f4bc10cd60ed637bc4febc98dd6c430f98a2a51e6466edb3abd4
7
- data.tar.gz: 55f59fd4ceb3175cf2660e5285058900696d0fadf899f271bdf58a81dc472f5b2660f1efef2b37be0357a9d1c68c61b4c383be88ae8f98b0bc2a8f57b883e191
6
+ metadata.gz: dba94d8ecf220d837673ef95f68c8d534b979bd31d67b8056e0836355a88f713499ca55420906ffb16855f7c3acb17e320c41ec90cb9c84263c59539f00c4cb2
7
+ data.tar.gz: 680f31e8fef7a94d387582acdb6c9381844aae4e2c56e6c4088f36d9c1ac2969feb27b9703c90c21416cef96572efc32455d4621951567611a18cb3481f22f56
data/README.md CHANGED
@@ -416,6 +416,24 @@ ssh_sg:
416
416
  - WebAccessSecurityGroup
417
417
  ```
418
418
 
419
+ ### AWS IIC/SSO Group IDs
420
+
421
+ Looks up AWS Identity Center group name in the configured Identity Store and returns the ID suitable for use in AWS IIC assignments.
422
+ It is likely that account and role will need to be specified to do the lookup, the region specification is optional it defaults to stack region.
423
+
424
+ ```yaml
425
+ GroupId:
426
+ sso_group_id: '[region:]identity-store-id/SSO Group Name'
427
+ ```
428
+
429
+ e.g.
430
+ ```yaml
431
+ GroupIdNotInStackRegion:
432
+ sso_group_id: 'us-east-1:d-123456df8:Okta-App-AWS-FooBar'
433
+ GroupIdInStackRegion:
434
+ sso_group_id: 'd-123456df8:Okta-App-AWS-FooBar'
435
+ ```
436
+
419
437
  ### SNS Topic
420
438
 
421
439
  Looks up an SNS topic by name and returns the ARN.
@@ -0,0 +1,60 @@
1
+ module StackMaster
2
+ module ParameterResolvers
3
+ class AccountsByTags < Resolver
4
+ array_resolver class_name: 'AccountsByTags'
5
+
6
+ def initialize(config, stack_definition)
7
+ @config = config
8
+ @stack_definition = stack_definition
9
+ end
10
+
11
+ def resolve(team)
12
+
13
+ end
14
+
15
+ private
16
+
17
+ def fetch_all_aws_accounts()
18
+ return @aws_accounts if defined(@aws_accounts)
19
+ @aws_accounts = []
20
+ next_token = nil
21
+ client = Aws::Organizations::Client.new(region: @stack_definition.region)
22
+ loop do
23
+ resp = client.list_accounts(next_token: next_token)
24
+ @aws_accounts << resp.accounts
25
+ next_token = resp.next_token
26
+ break if next_token.nil?
27
+ end
28
+ @aws_accounts.flatten! || @aws_accounts
29
+ end
30
+
31
+ def_fetch_tags_for_account(account)
32
+ client = Aws::Organizations::Client.new(region: @stack_definition.region)
33
+ next_token = nil
34
+ tags = []
35
+ loop do
36
+ client.list_tags_for_resource(resource_id: account.id, next_token: next_token)
37
+ tags << resp.tags
38
+ next_token = resp.next_token
39
+ break if next_token.nil?
40
+ end
41
+ tags.flatten! || tags
42
+ end
43
+
44
+ def fetch_tags_for_accounts()
45
+ return @tagged_aws_accounts if defined?(@tagged_aws_accounts )
46
+ @tagged_aws_accounts = Hash.new()
47
+ fetch_all_aws_accounts()
48
+ @aws_accounts.each do |account|
49
+ @tagged_aws_accounts[account.id.to_sym] = { :account => account.id, :tags => fetch_tags_for_account(account.id) }
50
+ end
51
+ end
52
+
53
+ def account_in_group?(account, group)
54
+ fetch_tags_for_accounts if defined?(@tagged_aws_accounts)
55
+ @tagged_aws_accounts[:account.to_sym][:tags].select {|tag| tag['key'] =='Group' && tag['value']==group}
56
+ end
57
+
58
+ end
59
+ end
60
+ end
@@ -0,0 +1,21 @@
1
+ module StackMaster
2
+ module ParameterResolvers
3
+ class SsoGroupId < Resolver
4
+ InvalidParameter = Class.new(StandardError)
5
+
6
+ def initialize(config, stack_definition)
7
+ @config = config
8
+ @stack_definition = stack_definition
9
+ end
10
+
11
+ def resolve(value)
12
+ sso_group_id_finder.find(value)
13
+ end
14
+
15
+ private
16
+ def sso_group_id_finder
17
+ StackMaster::SsoGroupIdFinder.new()
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,33 @@
1
+ module StackMaster
2
+ class SsoGroupIdFinder
3
+ SsoGroupNotFound = Class.new(StandardError)
4
+
5
+ def find(reference)
6
+ output_regex = %r{(?:(?<region>[^:]+):)?(?<identity_store_id>[^:/]+)/(?<group_name>.+)}
7
+
8
+ if !reference.is_a?(String) || !(match = output_regex.match(reference))
9
+ raise ArgumentError, 'Sso group lookup parameter must be in the form of [region:]identity-store-id/group_name'
10
+ end
11
+
12
+ region = match[:region] || StackMaster.cloud_formation_driver.region
13
+ client = Aws::IdentityStore::Client.new({ region: region })
14
+
15
+ begin
16
+ response = client.get_group_id({
17
+ identity_store_id: match[:identity_store_id],
18
+ alternate_identifier: {
19
+ unique_attribute: {
20
+ attribute_path: 'displayName',
21
+ attribute_value: match[:group_name],
22
+ },
23
+ },
24
+ })
25
+ return response.group_id
26
+ rescue Aws::IdentityStore::Errors::ServiceError => e
27
+ puts "Error calling GetGroupId: #{e.message}"
28
+ end
29
+
30
+ raise SsoGroupNotFound, "No group with name #{match[:group_name]} found in identity store #{match[:identity_store_id]} in #{region}"
31
+ end
32
+ end
33
+ end
@@ -1,3 +1,4 @@
1
+ require 'ostruct'
1
2
  require 'securerandom'
2
3
 
3
4
  module StackMaster
@@ -1,3 +1,3 @@
1
1
  module StackMaster
2
- VERSION = "2.16.0"
2
+ VERSION = "2.17.0"
3
3
  end
data/lib/stack_master.rb CHANGED
@@ -4,6 +4,7 @@ require 'aws-sdk-acm'
4
4
  require 'aws-sdk-cloudformation'
5
5
  require 'aws-sdk-ec2'
6
6
  require 'aws-sdk-ecr'
7
+ require 'aws-sdk-identitystore'
7
8
  require 'aws-sdk-s3'
8
9
  require 'aws-sdk-sns'
9
10
  require 'aws-sdk-ssm'
@@ -33,6 +34,7 @@ module StackMaster
33
34
  autoload :StackStatus, 'stack_master/stack_status'
34
35
  autoload :SnsTopicFinder, 'stack_master/sns_topic_finder'
35
36
  autoload :SecurityGroupFinder, 'stack_master/security_group_finder'
37
+ autoload :SsoGroupIdFinder, 'stack_master/sso_group_id_finder'
36
38
  autoload :ParameterLoader, 'stack_master/parameter_loader'
37
39
  autoload :ParameterResolver, 'stack_master/parameter_resolver'
38
40
  autoload :RoleAssumer, 'stack_master/role_assumer'
@@ -84,6 +86,7 @@ module StackMaster
84
86
  autoload :Ejson, 'stack_master/parameter_resolvers/ejson'
85
87
  autoload :SnsTopicName, 'stack_master/parameter_resolvers/sns_topic_name'
86
88
  autoload :SecurityGroup, 'stack_master/parameter_resolvers/security_group'
89
+ autoload :SsoGroupId, 'stack_master/parameter_resolvers/sso_group_id'
87
90
  autoload :LatestAmiByTags, 'stack_master/parameter_resolvers/latest_ami_by_tags'
88
91
  autoload :LatestAmi, 'stack_master/parameter_resolvers/latest_ami'
89
92
  autoload :Env, 'stack_master/parameter_resolvers/env'
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: stack_master
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.16.0
4
+ version: 2.17.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Steve Hodgkiss
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2024-07-31 00:00:00.000000000 Z
12
+ date: 2025-07-11 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bundler
@@ -109,6 +109,20 @@ dependencies:
109
109
  - - ">="
110
110
  - !ruby/object:Gem::Version
111
111
  version: '0'
112
+ - !ruby/object:Gem::Dependency
113
+ name: ostruct
114
+ requirement: !ruby/object:Gem::Requirement
115
+ requirements:
116
+ - - ">="
117
+ - !ruby/object:Gem::Version
118
+ version: '0'
119
+ type: :development
120
+ prerelease: false
121
+ version_requirements: !ruby/object:Gem::Requirement
122
+ requirements:
123
+ - - ">="
124
+ - !ruby/object:Gem::Version
125
+ version: '0'
112
126
  - !ruby/object:Gem::Dependency
113
127
  name: os
114
128
  requirement: !ruby/object:Gem::Requirement
@@ -199,6 +213,20 @@ dependencies:
199
213
  - - "~>"
200
214
  - !ruby/object:Gem::Version
201
215
  version: '1'
216
+ - !ruby/object:Gem::Dependency
217
+ name: aws-sdk-identitystore
218
+ requirement: !ruby/object:Gem::Requirement
219
+ requirements:
220
+ - - "~>"
221
+ - !ruby/object:Gem::Version
222
+ version: '1'
223
+ type: :runtime
224
+ prerelease: false
225
+ version_requirements: !ruby/object:Gem::Requirement
226
+ requirements:
227
+ - - "~>"
228
+ - !ruby/object:Gem::Version
229
+ version: '1'
202
230
  - !ruby/object:Gem::Dependency
203
231
  name: aws-sdk-s3
204
232
  requirement: !ruby/object:Gem::Requirement
@@ -514,6 +542,7 @@ files:
514
542
  - lib/stack_master/paged_response_accumulator.rb
515
543
  - lib/stack_master/parameter_loader.rb
516
544
  - lib/stack_master/parameter_resolver.rb
545
+ - lib/stack_master/parameter_resolvers/accounts_by_tags.rb
517
546
  - lib/stack_master/parameter_resolvers/acm_certificate.rb
518
547
  - lib/stack_master/parameter_resolvers/ami_finder.rb
519
548
  - lib/stack_master/parameter_resolvers/ejson.rb
@@ -525,6 +554,7 @@ files:
525
554
  - lib/stack_master/parameter_resolvers/parameter_store.rb
526
555
  - lib/stack_master/parameter_resolvers/security_group.rb
527
556
  - lib/stack_master/parameter_resolvers/sns_topic_name.rb
557
+ - lib/stack_master/parameter_resolvers/sso_group_id.rb
528
558
  - lib/stack_master/parameter_resolvers/stack_output.rb
529
559
  - lib/stack_master/parameter_validator.rb
530
560
  - lib/stack_master/prompter.rb
@@ -548,6 +578,7 @@ files:
548
578
  - lib/stack_master/sparkle_formation/compile_time/value_validator.rb
549
579
  - lib/stack_master/sparkle_formation/compile_time/value_validator_factory.rb
550
580
  - lib/stack_master/sparkle_formation/template_file.rb
581
+ - lib/stack_master/sso_group_id_finder.rb
551
582
  - lib/stack_master/stack.rb
552
583
  - lib/stack_master/stack_definition.rb
553
584
  - lib/stack_master/stack_differ.rb
@@ -579,8 +610,8 @@ licenses:
579
610
  metadata:
580
611
  bug_tracker_uri: https://github.com/envato/stack_master/issues
581
612
  changelog_uri: https://github.com/envato/stack_master/blob/master/CHANGELOG.md
582
- documentation_uri: https://www.rubydoc.info/gems/stack_master/2.16.0
583
- source_code_uri: https://github.com/envato/stack_master/tree/v2.16.0
613
+ documentation_uri: https://www.rubydoc.info/gems/stack_master/2.17.0
614
+ source_code_uri: https://github.com/envato/stack_master/tree/v2.17.0
584
615
  post_install_message:
585
616
  rdoc_options: []
586
617
  require_paths:
@@ -596,7 +627,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
596
627
  - !ruby/object:Gem::Version
597
628
  version: '0'
598
629
  requirements: []
599
- rubygems_version: 3.5.16
630
+ rubygems_version: 3.0.3.1
600
631
  signing_key:
601
632
  specification_version: 4
602
633
  summary: StackMaster is a sure-footed way of creating, updating and keeping track