aws-sdk-accessanalyzer 1.30.0 → 1.32.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 5b6a98531fa5ff3c515cf04c3de3b59622b464386914805f24df4805be0e0a63
4
- data.tar.gz: 181800d363950abd288279a26764e257b088d778cf24829c35e641cd4bf6e58b
3
+ metadata.gz: e4767c74c079c96b5f2c48282f0b3e9bd8f64dc6ba5e695bde76e55833726d14
4
+ data.tar.gz: ef1a1bedf42ab501f4b136145c599126ac9701f75e5601103f2e265934737788
5
5
  SHA512:
6
- metadata.gz: c76bc0c96995f063c9e23b8cfb55c847e6703adc18c09710faba97677593b9aef5da3799443101d580dd72b80d60a201bf57c97cd604be2bfa6ed883f89d25c6
7
- data.tar.gz: 816a8aff96899c012361e807647d6a449a56c00cca396dc2df6bdea96f020d358ff38db18d5fa80ce9d403ac3da28b4a5465362f405e33f7eb8d07b6766ca880
6
+ metadata.gz: ad9a954f61f0658a6cff9a5e1b4436ab240ae665a2ed815361d842c3e5d4537810d65def2f0bfb937a01d20d0f96905e94392a08fce76c1a36c3c22b00c43798
7
+ data.tar.gz: e2f56615abc29d51e50354a420e75b2fe8ab3830503f5a8abc839114acfcdcb6eec18b54b3aa52493d4e33b28eb8d7d938ed2e196535b17f948a41252a8d52e5
data/CHANGELOG.md CHANGED
@@ -1,6 +1,16 @@
1
1
  Unreleased Changes
2
2
  ------------------
3
3
 
4
+ 1.32.0 (2022-11-30)
5
+ ------------------
6
+
7
+ * Feature - This release adds support for S3 cross account access points. IAM Access Analyzer will now produce public or cross account findings when it detects bucket delegation to external account access points.
8
+
9
+ 1.31.0 (2022-10-25)
10
+ ------------------
11
+
12
+ * Feature - This release adds support for six new resource types in IAM Access Analyzer to help you easily identify public and cross-account access to your AWS resources. Updated service API, documentation, and paginators.
13
+
4
14
  1.30.0 (2022-10-03)
5
15
  ------------------
6
16
 
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.30.0
1
+ 1.32.0
@@ -30,7 +30,7 @@ require 'aws-sdk-core/plugins/http_checksum.rb'
30
30
  require 'aws-sdk-core/plugins/checksum_algorithm.rb'
31
31
  require 'aws-sdk-core/plugins/defaults_mode.rb'
32
32
  require 'aws-sdk-core/plugins/recursion_detection.rb'
33
- require 'aws-sdk-core/plugins/signature_v4.rb'
33
+ require 'aws-sdk-core/plugins/sign.rb'
34
34
  require 'aws-sdk-core/plugins/protocols/rest_json.rb'
35
35
 
36
36
  Aws::Plugins::GlobalConfiguration.add_identifier(:accessanalyzer)
@@ -79,8 +79,9 @@ module Aws::AccessAnalyzer
79
79
  add_plugin(Aws::Plugins::ChecksumAlgorithm)
80
80
  add_plugin(Aws::Plugins::DefaultsMode)
81
81
  add_plugin(Aws::Plugins::RecursionDetection)
82
- add_plugin(Aws::Plugins::SignatureV4)
82
+ add_plugin(Aws::Plugins::Sign)
83
83
  add_plugin(Aws::Plugins::Protocols::RestJson)
84
+ add_plugin(Aws::AccessAnalyzer::Plugins::Endpoints)
84
85
 
85
86
  # @overload initialize(options)
86
87
  # @param [Hash] options
@@ -287,6 +288,19 @@ module Aws::AccessAnalyzer
287
288
  # ** Please note ** When response stubbing is enabled, no HTTP
288
289
  # requests are made, and retries are disabled.
289
290
  #
291
+ # @option options [Aws::TokenProvider] :token_provider
292
+ # A Bearer Token Provider. This can be an instance of any one of the
293
+ # following classes:
294
+ #
295
+ # * `Aws::StaticTokenProvider` - Used for configuring static, non-refreshing
296
+ # tokens.
297
+ #
298
+ # * `Aws::SSOTokenProvider` - Used for loading tokens from AWS SSO using an
299
+ # access token generated from `aws login`.
300
+ #
301
+ # When `:token_provider` is not configured directly, the `Aws::TokenProviderChain`
302
+ # will be used to search for tokens configured for your profile in shared configuration files.
303
+ #
290
304
  # @option options [Boolean] :use_dualstack_endpoint
291
305
  # When set to `true`, dualstack enabled endpoints (with `.aws` TLD)
292
306
  # will be used if available.
@@ -300,6 +314,9 @@ module Aws::AccessAnalyzer
300
314
  # When `true`, request parameters are validated before
301
315
  # sending the request.
302
316
  #
317
+ # @option options [Aws::AccessAnalyzer::EndpointProvider] :endpoint_provider
318
+ # The endpoint provider used to resolve endpoints. Any object that responds to `#resolve_endpoint(parameters)` where `parameters` is a Struct similar to `Aws::AccessAnalyzer::EndpointParameters`
319
+ #
303
320
  # @option options [URI::HTTP,String] :http_proxy A proxy to send
304
321
  # requests through. Formatted like 'http://proxy.com:123'.
305
322
  #
@@ -446,9 +463,20 @@ module Aws::AccessAnalyzer
446
463
  # analyzer_arn: "AnalyzerArn", # required
447
464
  # configurations: { # required
448
465
  # "ConfigurationsMapKey" => {
466
+ # ebs_snapshot: {
467
+ # user_ids: ["EbsUserId"],
468
+ # groups: ["EbsGroup"],
469
+ # kms_key_id: "EbsSnapshotDataEncryptionKeyId",
470
+ # },
471
+ # ecr_repository: {
472
+ # repository_policy: "EcrRepositoryPolicy",
473
+ # },
449
474
  # iam_role: {
450
475
  # trust_policy: "IamTrustPolicy",
451
476
  # },
477
+ # efs_file_system: {
478
+ # file_system_policy: "EfsFileSystemPolicy",
479
+ # },
452
480
  # kms_key: {
453
481
  # key_policies: {
454
482
  # "PolicyName" => "KmsKeyPolicy",
@@ -470,6 +498,22 @@ module Aws::AccessAnalyzer
470
498
  # },
471
499
  # ],
472
500
  # },
501
+ # rds_db_cluster_snapshot: {
502
+ # attributes: {
503
+ # "RdsDbClusterSnapshotAttributeName" => {
504
+ # account_ids: ["RdsDbClusterSnapshotAccountId"],
505
+ # },
506
+ # },
507
+ # kms_key_id: "RdsDbClusterSnapshotKmsKeyId",
508
+ # },
509
+ # rds_db_snapshot: {
510
+ # attributes: {
511
+ # "RdsDbSnapshotAttributeName" => {
512
+ # account_ids: ["RdsDbSnapshotAccountId"],
513
+ # },
514
+ # },
515
+ # kms_key_id: "RdsDbSnapshotKmsKeyId",
516
+ # },
473
517
  # secrets_manager_secret: {
474
518
  # kms_key_id: "SecretsManagerSecretKmsId",
475
519
  # secret_policy: "SecretsManagerSecretPolicy",
@@ -506,6 +550,9 @@ module Aws::AccessAnalyzer
506
550
  # },
507
551
  # },
508
552
  # },
553
+ # sns_topic: {
554
+ # topic_policy: "SnsTopicPolicy",
555
+ # },
509
556
  # sqs_queue: {
510
557
  # queue_policy: "SqsQueuePolicy",
511
558
  # },
@@ -741,7 +788,14 @@ module Aws::AccessAnalyzer
741
788
  # resp.access_preview.id #=> String
742
789
  # resp.access_preview.analyzer_arn #=> String
743
790
  # resp.access_preview.configurations #=> Hash
791
+ # resp.access_preview.configurations["ConfigurationsMapKey"].ebs_snapshot.user_ids #=> Array
792
+ # resp.access_preview.configurations["ConfigurationsMapKey"].ebs_snapshot.user_ids[0] #=> String
793
+ # resp.access_preview.configurations["ConfigurationsMapKey"].ebs_snapshot.groups #=> Array
794
+ # resp.access_preview.configurations["ConfigurationsMapKey"].ebs_snapshot.groups[0] #=> String
795
+ # resp.access_preview.configurations["ConfigurationsMapKey"].ebs_snapshot.kms_key_id #=> String
796
+ # resp.access_preview.configurations["ConfigurationsMapKey"].ecr_repository.repository_policy #=> String
744
797
  # resp.access_preview.configurations["ConfigurationsMapKey"].iam_role.trust_policy #=> String
798
+ # resp.access_preview.configurations["ConfigurationsMapKey"].efs_file_system.file_system_policy #=> String
745
799
  # resp.access_preview.configurations["ConfigurationsMapKey"].kms_key.key_policies #=> Hash
746
800
  # resp.access_preview.configurations["ConfigurationsMapKey"].kms_key.key_policies["PolicyName"] #=> String
747
801
  # resp.access_preview.configurations["ConfigurationsMapKey"].kms_key.grants #=> Array
@@ -754,6 +808,14 @@ module Aws::AccessAnalyzer
754
808
  # resp.access_preview.configurations["ConfigurationsMapKey"].kms_key.grants[0].constraints.encryption_context_subset #=> Hash
755
809
  # resp.access_preview.configurations["ConfigurationsMapKey"].kms_key.grants[0].constraints.encryption_context_subset["KmsConstraintsKey"] #=> String
756
810
  # resp.access_preview.configurations["ConfigurationsMapKey"].kms_key.grants[0].issuing_account #=> String
811
+ # resp.access_preview.configurations["ConfigurationsMapKey"].rds_db_cluster_snapshot.attributes #=> Hash
812
+ # resp.access_preview.configurations["ConfigurationsMapKey"].rds_db_cluster_snapshot.attributes["RdsDbClusterSnapshotAttributeName"].account_ids #=> Array
813
+ # resp.access_preview.configurations["ConfigurationsMapKey"].rds_db_cluster_snapshot.attributes["RdsDbClusterSnapshotAttributeName"].account_ids[0] #=> String
814
+ # resp.access_preview.configurations["ConfigurationsMapKey"].rds_db_cluster_snapshot.kms_key_id #=> String
815
+ # resp.access_preview.configurations["ConfigurationsMapKey"].rds_db_snapshot.attributes #=> Hash
816
+ # resp.access_preview.configurations["ConfigurationsMapKey"].rds_db_snapshot.attributes["RdsDbSnapshotAttributeName"].account_ids #=> Array
817
+ # resp.access_preview.configurations["ConfigurationsMapKey"].rds_db_snapshot.attributes["RdsDbSnapshotAttributeName"].account_ids[0] #=> String
818
+ # resp.access_preview.configurations["ConfigurationsMapKey"].rds_db_snapshot.kms_key_id #=> String
757
819
  # resp.access_preview.configurations["ConfigurationsMapKey"].secrets_manager_secret.kms_key_id #=> String
758
820
  # resp.access_preview.configurations["ConfigurationsMapKey"].secrets_manager_secret.secret_policy #=> String
759
821
  # resp.access_preview.configurations["ConfigurationsMapKey"].s3_bucket.bucket_policy #=> String
@@ -768,6 +830,7 @@ module Aws::AccessAnalyzer
768
830
  # resp.access_preview.configurations["ConfigurationsMapKey"].s3_bucket.access_points["AccessPointArn"].public_access_block.ignore_public_acls #=> Boolean
769
831
  # resp.access_preview.configurations["ConfigurationsMapKey"].s3_bucket.access_points["AccessPointArn"].public_access_block.restrict_public_buckets #=> Boolean
770
832
  # resp.access_preview.configurations["ConfigurationsMapKey"].s3_bucket.access_points["AccessPointArn"].network_origin.vpc_configuration.vpc_id #=> String
833
+ # resp.access_preview.configurations["ConfigurationsMapKey"].sns_topic.topic_policy #=> String
771
834
  # resp.access_preview.configurations["ConfigurationsMapKey"].sqs_queue.queue_policy #=> String
772
835
  # resp.access_preview.created_at #=> Time
773
836
  # resp.access_preview.status #=> String, one of "COMPLETED", "CREATING", "FAILED"
@@ -808,7 +871,7 @@ module Aws::AccessAnalyzer
808
871
  # @example Response structure
809
872
  #
810
873
  # resp.resource.resource_arn #=> String
811
- # resp.resource.resource_type #=> String, one of "AWS::S3::Bucket", "AWS::IAM::Role", "AWS::SQS::Queue", "AWS::Lambda::Function", "AWS::Lambda::LayerVersion", "AWS::KMS::Key", "AWS::SecretsManager::Secret"
874
+ # resp.resource.resource_type #=> String, one of "AWS::S3::Bucket", "AWS::IAM::Role", "AWS::SQS::Queue", "AWS::Lambda::Function", "AWS::Lambda::LayerVersion", "AWS::KMS::Key", "AWS::SecretsManager::Secret", "AWS::EFS::FileSystem", "AWS::EC2::Snapshot", "AWS::ECR::Repository", "AWS::RDS::DBSnapshot", "AWS::RDS::DBClusterSnapshot", "AWS::SNS::Topic"
812
875
  # resp.resource.created_at #=> Time
813
876
  # resp.resource.analyzed_at #=> Time
814
877
  # resp.resource.updated_at #=> Time
@@ -948,7 +1011,7 @@ module Aws::AccessAnalyzer
948
1011
  # resp.finding.action[0] #=> String
949
1012
  # resp.finding.resource #=> String
950
1013
  # resp.finding.is_public #=> Boolean
951
- # resp.finding.resource_type #=> String, one of "AWS::S3::Bucket", "AWS::IAM::Role", "AWS::SQS::Queue", "AWS::Lambda::Function", "AWS::Lambda::LayerVersion", "AWS::KMS::Key", "AWS::SecretsManager::Secret"
1014
+ # resp.finding.resource_type #=> String, one of "AWS::S3::Bucket", "AWS::IAM::Role", "AWS::SQS::Queue", "AWS::Lambda::Function", "AWS::Lambda::LayerVersion", "AWS::KMS::Key", "AWS::SecretsManager::Secret", "AWS::EFS::FileSystem", "AWS::EC2::Snapshot", "AWS::ECR::Repository", "AWS::RDS::DBSnapshot", "AWS::RDS::DBClusterSnapshot", "AWS::SNS::Topic"
952
1015
  # resp.finding.condition #=> Hash
953
1016
  # resp.finding.condition["String"] #=> String
954
1017
  # resp.finding.created_at #=> Time
@@ -958,8 +1021,9 @@ module Aws::AccessAnalyzer
958
1021
  # resp.finding.resource_owner_account #=> String
959
1022
  # resp.finding.error #=> String
960
1023
  # resp.finding.sources #=> Array
961
- # resp.finding.sources[0].type #=> String, one of "POLICY", "BUCKET_ACL", "S3_ACCESS_POINT"
1024
+ # resp.finding.sources[0].type #=> String, one of "POLICY", "BUCKET_ACL", "S3_ACCESS_POINT", "S3_ACCESS_POINT_ACCOUNT"
962
1025
  # resp.finding.sources[0].detail.access_point_arn #=> String
1026
+ # resp.finding.sources[0].detail.access_point_account #=> String
963
1027
  #
964
1028
  # @see http://docs.aws.amazon.com/goto/WebAPI/accessanalyzer-2019-11-01/GetFinding AWS API Documentation
965
1029
  #
@@ -1097,15 +1161,16 @@ module Aws::AccessAnalyzer
1097
1161
  # resp.findings[0].condition["String"] #=> String
1098
1162
  # resp.findings[0].resource #=> String
1099
1163
  # resp.findings[0].is_public #=> Boolean
1100
- # resp.findings[0].resource_type #=> String, one of "AWS::S3::Bucket", "AWS::IAM::Role", "AWS::SQS::Queue", "AWS::Lambda::Function", "AWS::Lambda::LayerVersion", "AWS::KMS::Key", "AWS::SecretsManager::Secret"
1164
+ # resp.findings[0].resource_type #=> String, one of "AWS::S3::Bucket", "AWS::IAM::Role", "AWS::SQS::Queue", "AWS::Lambda::Function", "AWS::Lambda::LayerVersion", "AWS::KMS::Key", "AWS::SecretsManager::Secret", "AWS::EFS::FileSystem", "AWS::EC2::Snapshot", "AWS::ECR::Repository", "AWS::RDS::DBSnapshot", "AWS::RDS::DBClusterSnapshot", "AWS::SNS::Topic"
1101
1165
  # resp.findings[0].created_at #=> Time
1102
1166
  # resp.findings[0].change_type #=> String, one of "CHANGED", "NEW", "UNCHANGED"
1103
1167
  # resp.findings[0].status #=> String, one of "ACTIVE", "ARCHIVED", "RESOLVED"
1104
1168
  # resp.findings[0].resource_owner_account #=> String
1105
1169
  # resp.findings[0].error #=> String
1106
1170
  # resp.findings[0].sources #=> Array
1107
- # resp.findings[0].sources[0].type #=> String, one of "POLICY", "BUCKET_ACL", "S3_ACCESS_POINT"
1171
+ # resp.findings[0].sources[0].type #=> String, one of "POLICY", "BUCKET_ACL", "S3_ACCESS_POINT", "S3_ACCESS_POINT_ACCOUNT"
1108
1172
  # resp.findings[0].sources[0].detail.access_point_arn #=> String
1173
+ # resp.findings[0].sources[0].detail.access_point_account #=> String
1109
1174
  # resp.next_token #=> String
1110
1175
  #
1111
1176
  # @see http://docs.aws.amazon.com/goto/WebAPI/accessanalyzer-2019-11-01/ListAccessPreviewFindings AWS API Documentation
@@ -1197,7 +1262,7 @@ module Aws::AccessAnalyzer
1197
1262
  #
1198
1263
  # resp = client.list_analyzed_resources({
1199
1264
  # analyzer_arn: "AnalyzerArn", # required
1200
- # resource_type: "AWS::S3::Bucket", # accepts AWS::S3::Bucket, AWS::IAM::Role, AWS::SQS::Queue, AWS::Lambda::Function, AWS::Lambda::LayerVersion, AWS::KMS::Key, AWS::SecretsManager::Secret
1265
+ # resource_type: "AWS::S3::Bucket", # accepts AWS::S3::Bucket, AWS::IAM::Role, AWS::SQS::Queue, AWS::Lambda::Function, AWS::Lambda::LayerVersion, AWS::KMS::Key, AWS::SecretsManager::Secret, AWS::EFS::FileSystem, AWS::EC2::Snapshot, AWS::ECR::Repository, AWS::RDS::DBSnapshot, AWS::RDS::DBClusterSnapshot, AWS::SNS::Topic
1201
1266
  # next_token: "Token",
1202
1267
  # max_results: 1,
1203
1268
  # })
@@ -1207,7 +1272,7 @@ module Aws::AccessAnalyzer
1207
1272
  # resp.analyzed_resources #=> Array
1208
1273
  # resp.analyzed_resources[0].resource_arn #=> String
1209
1274
  # resp.analyzed_resources[0].resource_owner_account #=> String
1210
- # resp.analyzed_resources[0].resource_type #=> String, one of "AWS::S3::Bucket", "AWS::IAM::Role", "AWS::SQS::Queue", "AWS::Lambda::Function", "AWS::Lambda::LayerVersion", "AWS::KMS::Key", "AWS::SecretsManager::Secret"
1275
+ # resp.analyzed_resources[0].resource_type #=> String, one of "AWS::S3::Bucket", "AWS::IAM::Role", "AWS::SQS::Queue", "AWS::Lambda::Function", "AWS::Lambda::LayerVersion", "AWS::KMS::Key", "AWS::SecretsManager::Secret", "AWS::EFS::FileSystem", "AWS::EC2::Snapshot", "AWS::ECR::Repository", "AWS::RDS::DBSnapshot", "AWS::RDS::DBClusterSnapshot", "AWS::SNS::Topic"
1211
1276
  # resp.next_token #=> String
1212
1277
  #
1213
1278
  # @see http://docs.aws.amazon.com/goto/WebAPI/accessanalyzer-2019-11-01/ListAnalyzedResources AWS API Documentation
@@ -1386,7 +1451,7 @@ module Aws::AccessAnalyzer
1386
1451
  # resp.findings[0].action[0] #=> String
1387
1452
  # resp.findings[0].resource #=> String
1388
1453
  # resp.findings[0].is_public #=> Boolean
1389
- # resp.findings[0].resource_type #=> String, one of "AWS::S3::Bucket", "AWS::IAM::Role", "AWS::SQS::Queue", "AWS::Lambda::Function", "AWS::Lambda::LayerVersion", "AWS::KMS::Key", "AWS::SecretsManager::Secret"
1454
+ # resp.findings[0].resource_type #=> String, one of "AWS::S3::Bucket", "AWS::IAM::Role", "AWS::SQS::Queue", "AWS::Lambda::Function", "AWS::Lambda::LayerVersion", "AWS::KMS::Key", "AWS::SecretsManager::Secret", "AWS::EFS::FileSystem", "AWS::EC2::Snapshot", "AWS::ECR::Repository", "AWS::RDS::DBSnapshot", "AWS::RDS::DBClusterSnapshot", "AWS::SNS::Topic"
1390
1455
  # resp.findings[0].condition #=> Hash
1391
1456
  # resp.findings[0].condition["String"] #=> String
1392
1457
  # resp.findings[0].created_at #=> Time
@@ -1396,8 +1461,9 @@ module Aws::AccessAnalyzer
1396
1461
  # resp.findings[0].resource_owner_account #=> String
1397
1462
  # resp.findings[0].error #=> String
1398
1463
  # resp.findings[0].sources #=> Array
1399
- # resp.findings[0].sources[0].type #=> String, one of "POLICY", "BUCKET_ACL", "S3_ACCESS_POINT"
1464
+ # resp.findings[0].sources[0].type #=> String, one of "POLICY", "BUCKET_ACL", "S3_ACCESS_POINT", "S3_ACCESS_POINT_ACCOUNT"
1400
1465
  # resp.findings[0].sources[0].detail.access_point_arn #=> String
1466
+ # resp.findings[0].sources[0].detail.access_point_account #=> String
1401
1467
  # resp.next_token #=> String
1402
1468
  #
1403
1469
  # @see http://docs.aws.amazon.com/goto/WebAPI/accessanalyzer-2019-11-01/ListFindings AWS API Documentation
@@ -1561,6 +1627,11 @@ module Aws::AccessAnalyzer
1561
1627
  # @option params [required, String] :resource_arn
1562
1628
  # The ARN of the resource to scan.
1563
1629
  #
1630
+ # @option params [String] :resource_owner_account
1631
+ # The Amazon Web Services account ID that owns the resource. For most
1632
+ # Amazon Web Services resources, the owning account is the account in
1633
+ # which the resource was created.
1634
+ #
1564
1635
  # @return [Struct] Returns an empty {Seahorse::Client::Response response}.
1565
1636
  #
1566
1637
  # @example Request syntax with placeholder values
@@ -1568,6 +1639,7 @@ module Aws::AccessAnalyzer
1568
1639
  # resp = client.start_resource_scan({
1569
1640
  # analyzer_arn: "AnalyzerArn", # required
1570
1641
  # resource_arn: "ResourceArn", # required
1642
+ # resource_owner_account: "String",
1571
1643
  # })
1572
1644
  #
1573
1645
  # @see http://docs.aws.amazon.com/goto/WebAPI/accessanalyzer-2019-11-01/StartResourceScan AWS API Documentation
@@ -1830,7 +1902,7 @@ module Aws::AccessAnalyzer
1830
1902
  params: params,
1831
1903
  config: config)
1832
1904
  context[:gem_name] = 'aws-sdk-accessanalyzer'
1833
- context[:gem_version] = '1.30.0'
1905
+ context[:gem_version] = '1.32.0'
1834
1906
  Seahorse::Client::Request.new(handlers, context)
1835
1907
  end
1836
1908
 
@@ -60,6 +60,16 @@ module Aws::AccessAnalyzer
60
60
  Criterion = Shapes::StructureShape.new(name: 'Criterion')
61
61
  DeleteAnalyzerRequest = Shapes::StructureShape.new(name: 'DeleteAnalyzerRequest')
62
62
  DeleteArchiveRuleRequest = Shapes::StructureShape.new(name: 'DeleteArchiveRuleRequest')
63
+ EbsGroup = Shapes::StringShape.new(name: 'EbsGroup')
64
+ EbsGroupList = Shapes::ListShape.new(name: 'EbsGroupList')
65
+ EbsSnapshotConfiguration = Shapes::StructureShape.new(name: 'EbsSnapshotConfiguration')
66
+ EbsSnapshotDataEncryptionKeyId = Shapes::StringShape.new(name: 'EbsSnapshotDataEncryptionKeyId')
67
+ EbsUserId = Shapes::StringShape.new(name: 'EbsUserId')
68
+ EbsUserIdList = Shapes::ListShape.new(name: 'EbsUserIdList')
69
+ EcrRepositoryConfiguration = Shapes::StructureShape.new(name: 'EcrRepositoryConfiguration')
70
+ EcrRepositoryPolicy = Shapes::StringShape.new(name: 'EcrRepositoryPolicy')
71
+ EfsFileSystemConfiguration = Shapes::StructureShape.new(name: 'EfsFileSystemConfiguration')
72
+ EfsFileSystemPolicy = Shapes::StringShape.new(name: 'EfsFileSystemPolicy')
63
73
  FilterCriteriaMap = Shapes::MapShape.new(name: 'FilterCriteriaMap')
64
74
  Finding = Shapes::StructureShape.new(name: 'Finding')
65
75
  FindingChangeType = Shapes::StringShape.new(name: 'FindingChangeType')
@@ -150,6 +160,20 @@ module Aws::AccessAnalyzer
150
160
  Position = Shapes::StructureShape.new(name: 'Position')
151
161
  PrincipalArn = Shapes::StringShape.new(name: 'PrincipalArn')
152
162
  PrincipalMap = Shapes::MapShape.new(name: 'PrincipalMap')
163
+ RdsDbClusterSnapshotAccountId = Shapes::StringShape.new(name: 'RdsDbClusterSnapshotAccountId')
164
+ RdsDbClusterSnapshotAccountIdsList = Shapes::ListShape.new(name: 'RdsDbClusterSnapshotAccountIdsList')
165
+ RdsDbClusterSnapshotAttributeName = Shapes::StringShape.new(name: 'RdsDbClusterSnapshotAttributeName')
166
+ RdsDbClusterSnapshotAttributeValue = Shapes::UnionShape.new(name: 'RdsDbClusterSnapshotAttributeValue')
167
+ RdsDbClusterSnapshotAttributesMap = Shapes::MapShape.new(name: 'RdsDbClusterSnapshotAttributesMap')
168
+ RdsDbClusterSnapshotConfiguration = Shapes::StructureShape.new(name: 'RdsDbClusterSnapshotConfiguration')
169
+ RdsDbClusterSnapshotKmsKeyId = Shapes::StringShape.new(name: 'RdsDbClusterSnapshotKmsKeyId')
170
+ RdsDbSnapshotAccountId = Shapes::StringShape.new(name: 'RdsDbSnapshotAccountId')
171
+ RdsDbSnapshotAccountIdsList = Shapes::ListShape.new(name: 'RdsDbSnapshotAccountIdsList')
172
+ RdsDbSnapshotAttributeName = Shapes::StringShape.new(name: 'RdsDbSnapshotAttributeName')
173
+ RdsDbSnapshotAttributeValue = Shapes::UnionShape.new(name: 'RdsDbSnapshotAttributeValue')
174
+ RdsDbSnapshotAttributesMap = Shapes::MapShape.new(name: 'RdsDbSnapshotAttributesMap')
175
+ RdsDbSnapshotConfiguration = Shapes::StructureShape.new(name: 'RdsDbSnapshotConfiguration')
176
+ RdsDbSnapshotKmsKeyId = Shapes::StringShape.new(name: 'RdsDbSnapshotKmsKeyId')
153
177
  ReasonCode = Shapes::StringShape.new(name: 'ReasonCode')
154
178
  RegionList = Shapes::ListShape.new(name: 'RegionList')
155
179
  ResourceArn = Shapes::StringShape.new(name: 'ResourceArn')
@@ -169,6 +193,8 @@ module Aws::AccessAnalyzer
169
193
  SecretsManagerSecretPolicy = Shapes::StringShape.new(name: 'SecretsManagerSecretPolicy')
170
194
  ServiceQuotaExceededException = Shapes::StructureShape.new(name: 'ServiceQuotaExceededException')
171
195
  SharedViaList = Shapes::ListShape.new(name: 'SharedViaList')
196
+ SnsTopicConfiguration = Shapes::StructureShape.new(name: 'SnsTopicConfiguration')
197
+ SnsTopicPolicy = Shapes::StringShape.new(name: 'SnsTopicPolicy')
172
198
  SortCriteria = Shapes::StructureShape.new(name: 'SortCriteria')
173
199
  Span = Shapes::StructureShape.new(name: 'Span')
174
200
  SqsQueueConfiguration = Shapes::StructureShape.new(name: 'SqsQueueConfiguration')
@@ -326,16 +352,28 @@ module Aws::AccessAnalyzer
326
352
  ConditionKeyMap.key = Shapes::ShapeRef.new(shape: String)
327
353
  ConditionKeyMap.value = Shapes::ShapeRef.new(shape: String)
328
354
 
355
+ Configuration.add_member(:ebs_snapshot, Shapes::ShapeRef.new(shape: EbsSnapshotConfiguration, location_name: "ebsSnapshot"))
356
+ Configuration.add_member(:ecr_repository, Shapes::ShapeRef.new(shape: EcrRepositoryConfiguration, location_name: "ecrRepository"))
329
357
  Configuration.add_member(:iam_role, Shapes::ShapeRef.new(shape: IamRoleConfiguration, location_name: "iamRole"))
358
+ Configuration.add_member(:efs_file_system, Shapes::ShapeRef.new(shape: EfsFileSystemConfiguration, location_name: "efsFileSystem"))
330
359
  Configuration.add_member(:kms_key, Shapes::ShapeRef.new(shape: KmsKeyConfiguration, location_name: "kmsKey"))
360
+ Configuration.add_member(:rds_db_cluster_snapshot, Shapes::ShapeRef.new(shape: RdsDbClusterSnapshotConfiguration, location_name: "rdsDbClusterSnapshot"))
361
+ Configuration.add_member(:rds_db_snapshot, Shapes::ShapeRef.new(shape: RdsDbSnapshotConfiguration, location_name: "rdsDbSnapshot"))
331
362
  Configuration.add_member(:secrets_manager_secret, Shapes::ShapeRef.new(shape: SecretsManagerSecretConfiguration, location_name: "secretsManagerSecret"))
332
363
  Configuration.add_member(:s3_bucket, Shapes::ShapeRef.new(shape: S3BucketConfiguration, location_name: "s3Bucket"))
364
+ Configuration.add_member(:sns_topic, Shapes::ShapeRef.new(shape: SnsTopicConfiguration, location_name: "snsTopic"))
333
365
  Configuration.add_member(:sqs_queue, Shapes::ShapeRef.new(shape: SqsQueueConfiguration, location_name: "sqsQueue"))
334
366
  Configuration.add_member(:unknown, Shapes::ShapeRef.new(shape: nil, location_name: 'unknown'))
367
+ Configuration.add_member_subclass(:ebs_snapshot, Types::Configuration::EbsSnapshot)
368
+ Configuration.add_member_subclass(:ecr_repository, Types::Configuration::EcrRepository)
335
369
  Configuration.add_member_subclass(:iam_role, Types::Configuration::IamRole)
370
+ Configuration.add_member_subclass(:efs_file_system, Types::Configuration::EfsFileSystem)
336
371
  Configuration.add_member_subclass(:kms_key, Types::Configuration::KmsKey)
372
+ Configuration.add_member_subclass(:rds_db_cluster_snapshot, Types::Configuration::RdsDbClusterSnapshot)
373
+ Configuration.add_member_subclass(:rds_db_snapshot, Types::Configuration::RdsDbSnapshot)
337
374
  Configuration.add_member_subclass(:secrets_manager_secret, Types::Configuration::SecretsManagerSecret)
338
375
  Configuration.add_member_subclass(:s3_bucket, Types::Configuration::S3Bucket)
376
+ Configuration.add_member_subclass(:sns_topic, Types::Configuration::SnsTopic)
339
377
  Configuration.add_member_subclass(:sqs_queue, Types::Configuration::SqsQueue)
340
378
  Configuration.add_member_subclass(:unknown, Types::Configuration::Unknown)
341
379
  Configuration.struct_class = Types::Configuration
@@ -387,6 +425,21 @@ module Aws::AccessAnalyzer
387
425
  DeleteArchiveRuleRequest.add_member(:client_token, Shapes::ShapeRef.new(shape: String, location: "querystring", location_name: "clientToken", metadata: {"idempotencyToken"=>true}))
388
426
  DeleteArchiveRuleRequest.struct_class = Types::DeleteArchiveRuleRequest
389
427
 
428
+ EbsGroupList.member = Shapes::ShapeRef.new(shape: EbsGroup)
429
+
430
+ EbsSnapshotConfiguration.add_member(:user_ids, Shapes::ShapeRef.new(shape: EbsUserIdList, location_name: "userIds"))
431
+ EbsSnapshotConfiguration.add_member(:groups, Shapes::ShapeRef.new(shape: EbsGroupList, location_name: "groups"))
432
+ EbsSnapshotConfiguration.add_member(:kms_key_id, Shapes::ShapeRef.new(shape: EbsSnapshotDataEncryptionKeyId, location_name: "kmsKeyId"))
433
+ EbsSnapshotConfiguration.struct_class = Types::EbsSnapshotConfiguration
434
+
435
+ EbsUserIdList.member = Shapes::ShapeRef.new(shape: EbsUserId)
436
+
437
+ EcrRepositoryConfiguration.add_member(:repository_policy, Shapes::ShapeRef.new(shape: EcrRepositoryPolicy, location_name: "repositoryPolicy"))
438
+ EcrRepositoryConfiguration.struct_class = Types::EcrRepositoryConfiguration
439
+
440
+ EfsFileSystemConfiguration.add_member(:file_system_policy, Shapes::ShapeRef.new(shape: EfsFileSystemPolicy, location_name: "fileSystemPolicy"))
441
+ EfsFileSystemConfiguration.struct_class = Types::EfsFileSystemConfiguration
442
+
390
443
  FilterCriteriaMap.key = Shapes::ShapeRef.new(shape: String)
391
444
  FilterCriteriaMap.value = Shapes::ShapeRef.new(shape: Criterion)
392
445
 
@@ -413,6 +466,7 @@ module Aws::AccessAnalyzer
413
466
  FindingSource.struct_class = Types::FindingSource
414
467
 
415
468
  FindingSourceDetail.add_member(:access_point_arn, Shapes::ShapeRef.new(shape: String, location_name: "accessPointArn"))
469
+ FindingSourceDetail.add_member(:access_point_account, Shapes::ShapeRef.new(shape: String, location_name: "accessPointAccount"))
416
470
  FindingSourceDetail.struct_class = Types::FindingSourceDetail
417
471
 
418
472
  FindingSourceList.member = Shapes::ShapeRef.new(shape: FindingSource)
@@ -665,6 +719,36 @@ module Aws::AccessAnalyzer
665
719
  PrincipalMap.key = Shapes::ShapeRef.new(shape: String)
666
720
  PrincipalMap.value = Shapes::ShapeRef.new(shape: String)
667
721
 
722
+ RdsDbClusterSnapshotAccountIdsList.member = Shapes::ShapeRef.new(shape: RdsDbClusterSnapshotAccountId)
723
+
724
+ RdsDbClusterSnapshotAttributeValue.add_member(:account_ids, Shapes::ShapeRef.new(shape: RdsDbClusterSnapshotAccountIdsList, location_name: "accountIds"))
725
+ RdsDbClusterSnapshotAttributeValue.add_member(:unknown, Shapes::ShapeRef.new(shape: nil, location_name: 'unknown'))
726
+ RdsDbClusterSnapshotAttributeValue.add_member_subclass(:account_ids, Types::RdsDbClusterSnapshotAttributeValue::AccountIds)
727
+ RdsDbClusterSnapshotAttributeValue.add_member_subclass(:unknown, Types::RdsDbClusterSnapshotAttributeValue::Unknown)
728
+ RdsDbClusterSnapshotAttributeValue.struct_class = Types::RdsDbClusterSnapshotAttributeValue
729
+
730
+ RdsDbClusterSnapshotAttributesMap.key = Shapes::ShapeRef.new(shape: RdsDbClusterSnapshotAttributeName)
731
+ RdsDbClusterSnapshotAttributesMap.value = Shapes::ShapeRef.new(shape: RdsDbClusterSnapshotAttributeValue)
732
+
733
+ RdsDbClusterSnapshotConfiguration.add_member(:attributes, Shapes::ShapeRef.new(shape: RdsDbClusterSnapshotAttributesMap, location_name: "attributes"))
734
+ RdsDbClusterSnapshotConfiguration.add_member(:kms_key_id, Shapes::ShapeRef.new(shape: RdsDbClusterSnapshotKmsKeyId, location_name: "kmsKeyId"))
735
+ RdsDbClusterSnapshotConfiguration.struct_class = Types::RdsDbClusterSnapshotConfiguration
736
+
737
+ RdsDbSnapshotAccountIdsList.member = Shapes::ShapeRef.new(shape: RdsDbSnapshotAccountId)
738
+
739
+ RdsDbSnapshotAttributeValue.add_member(:account_ids, Shapes::ShapeRef.new(shape: RdsDbSnapshotAccountIdsList, location_name: "accountIds"))
740
+ RdsDbSnapshotAttributeValue.add_member(:unknown, Shapes::ShapeRef.new(shape: nil, location_name: 'unknown'))
741
+ RdsDbSnapshotAttributeValue.add_member_subclass(:account_ids, Types::RdsDbSnapshotAttributeValue::AccountIds)
742
+ RdsDbSnapshotAttributeValue.add_member_subclass(:unknown, Types::RdsDbSnapshotAttributeValue::Unknown)
743
+ RdsDbSnapshotAttributeValue.struct_class = Types::RdsDbSnapshotAttributeValue
744
+
745
+ RdsDbSnapshotAttributesMap.key = Shapes::ShapeRef.new(shape: RdsDbSnapshotAttributeName)
746
+ RdsDbSnapshotAttributesMap.value = Shapes::ShapeRef.new(shape: RdsDbSnapshotAttributeValue)
747
+
748
+ RdsDbSnapshotConfiguration.add_member(:attributes, Shapes::ShapeRef.new(shape: RdsDbSnapshotAttributesMap, location_name: "attributes"))
749
+ RdsDbSnapshotConfiguration.add_member(:kms_key_id, Shapes::ShapeRef.new(shape: RdsDbSnapshotKmsKeyId, location_name: "kmsKeyId"))
750
+ RdsDbSnapshotConfiguration.struct_class = Types::RdsDbSnapshotConfiguration
751
+
668
752
  RegionList.member = Shapes::ShapeRef.new(shape: String)
669
753
 
670
754
  ResourceNotFoundException.add_member(:message, Shapes::ShapeRef.new(shape: String, required: true, location_name: "message"))
@@ -707,6 +791,9 @@ module Aws::AccessAnalyzer
707
791
 
708
792
  SharedViaList.member = Shapes::ShapeRef.new(shape: String)
709
793
 
794
+ SnsTopicConfiguration.add_member(:topic_policy, Shapes::ShapeRef.new(shape: SnsTopicPolicy, location_name: "topicPolicy"))
795
+ SnsTopicConfiguration.struct_class = Types::SnsTopicConfiguration
796
+
710
797
  SortCriteria.add_member(:attribute_name, Shapes::ShapeRef.new(shape: String, location_name: "attributeName"))
711
798
  SortCriteria.add_member(:order_by, Shapes::ShapeRef.new(shape: OrderBy, location_name: "orderBy"))
712
799
  SortCriteria.struct_class = Types::SortCriteria
@@ -728,6 +815,7 @@ module Aws::AccessAnalyzer
728
815
 
729
816
  StartResourceScanRequest.add_member(:analyzer_arn, Shapes::ShapeRef.new(shape: AnalyzerArn, required: true, location_name: "analyzerArn"))
730
817
  StartResourceScanRequest.add_member(:resource_arn, Shapes::ShapeRef.new(shape: ResourceArn, required: true, location_name: "resourceArn"))
818
+ StartResourceScanRequest.add_member(:resource_owner_account, Shapes::ShapeRef.new(shape: String, location_name: "resourceOwnerAccount"))
731
819
  StartResourceScanRequest.struct_class = Types::StartResourceScanRequest
732
820
 
733
821
  StatusReason.add_member(:code, Shapes::ShapeRef.new(shape: ReasonCode, required: true, location_name: "code"))
@@ -0,0 +1,69 @@
1
+ # frozen_string_literal: true
2
+
3
+ # WARNING ABOUT GENERATED CODE
4
+ #
5
+ # This file is generated. See the contributing guide for more information:
6
+ # https://github.com/aws/aws-sdk-ruby/blob/version-3/CONTRIBUTING.md
7
+ #
8
+ # WARNING ABOUT GENERATED CODE
9
+
10
+ module Aws::AccessAnalyzer
11
+ # Endpoint parameters used to influence endpoints per request.
12
+ #
13
+ # @!attribute region
14
+ # The AWS region used to dispatch the request.
15
+ #
16
+ # @return [String]
17
+ #
18
+ # @!attribute use_dual_stack
19
+ # When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.
20
+ #
21
+ # @return [Boolean]
22
+ #
23
+ # @!attribute use_fips
24
+ # When true, send this request to the FIPS-compliant regional endpoint. If the configured endpoint does not have a FIPS compliant endpoint, dispatching the request will return an error.
25
+ #
26
+ # @return [Boolean]
27
+ #
28
+ # @!attribute endpoint
29
+ # Override the endpoint used to send this request
30
+ #
31
+ # @return [String]
32
+ #
33
+ EndpointParameters = Struct.new(
34
+ :region,
35
+ :use_dual_stack,
36
+ :use_fips,
37
+ :endpoint,
38
+ ) do
39
+ include Aws::Structure
40
+
41
+ # @api private
42
+ class << self
43
+ PARAM_MAP = {
44
+ 'Region' => :region,
45
+ 'UseDualStack' => :use_dual_stack,
46
+ 'UseFIPS' => :use_fips,
47
+ 'Endpoint' => :endpoint,
48
+ }.freeze
49
+ end
50
+
51
+ def initialize(options = {})
52
+ self[:region] = options[:region]
53
+ if self[:region].nil?
54
+ raise ArgumentError, "Missing required EndpointParameter: :region"
55
+ end
56
+ self[:use_dual_stack] = options[:use_dual_stack]
57
+ self[:use_dual_stack] = false if self[:use_dual_stack].nil?
58
+ if self[:use_dual_stack].nil?
59
+ raise ArgumentError, "Missing required EndpointParameter: :use_dual_stack"
60
+ end
61
+ self[:use_fips] = options[:use_fips]
62
+ self[:use_fips] = false if self[:use_fips].nil?
63
+ if self[:use_fips].nil?
64
+ raise ArgumentError, "Missing required EndpointParameter: :use_fips"
65
+ end
66
+ self[:endpoint] = options[:endpoint]
67
+ end
68
+ end
69
+ end
@@ -0,0 +1,112 @@
1
+ # frozen_string_literal: true
2
+
3
+ # WARNING ABOUT GENERATED CODE
4
+ #
5
+ # This file is generated. See the contributing guide for more information:
6
+ # https://github.com/aws/aws-sdk-ruby/blob/version-3/CONTRIBUTING.md
7
+ #
8
+ # WARNING ABOUT GENERATED CODE
9
+
10
+ module Aws::AccessAnalyzer
11
+ class EndpointProvider
12
+ def initialize(rule_set = nil)
13
+ @@rule_set ||= begin
14
+ endpoint_rules = Aws::Json.load(Base64.decode64(RULES))
15
+ Aws::Endpoints::RuleSet.new(
16
+ version: endpoint_rules['version'],
17
+ service_id: endpoint_rules['serviceId'],
18
+ parameters: endpoint_rules['parameters'],
19
+ rules: endpoint_rules['rules']
20
+ )
21
+ end
22
+ @provider = Aws::Endpoints::RulesProvider.new(rule_set || @@rule_set)
23
+ end
24
+
25
+ def resolve_endpoint(parameters)
26
+ @provider.resolve_endpoint(parameters)
27
+ end
28
+
29
+ # @api private
30
+ RULES = <<-JSON
31
+ eyJ2ZXJzaW9uIjoiMS4wIiwicGFyYW1ldGVycyI6eyJSZWdpb24iOnsiYnVp
32
+ bHRJbiI6IkFXUzo6UmVnaW9uIiwicmVxdWlyZWQiOnRydWUsImRvY3VtZW50
33
+ YXRpb24iOiJUaGUgQVdTIHJlZ2lvbiB1c2VkIHRvIGRpc3BhdGNoIHRoZSBy
34
+ ZXF1ZXN0LiIsInR5cGUiOiJTdHJpbmcifSwiVXNlRHVhbFN0YWNrIjp7ImJ1
35
+ aWx0SW4iOiJBV1M6OlVzZUR1YWxTdGFjayIsInJlcXVpcmVkIjp0cnVlLCJk
36
+ ZWZhdWx0IjpmYWxzZSwiZG9jdW1lbnRhdGlvbiI6IldoZW4gdHJ1ZSwgdXNl
37
+ IHRoZSBkdWFsLXN0YWNrIGVuZHBvaW50LiBJZiB0aGUgY29uZmlndXJlZCBl
38
+ bmRwb2ludCBkb2VzIG5vdCBzdXBwb3J0IGR1YWwtc3RhY2ssIGRpc3BhdGNo
39
+ aW5nIHRoZSByZXF1ZXN0IE1BWSByZXR1cm4gYW4gZXJyb3IuIiwidHlwZSI6
40
+ IkJvb2xlYW4ifSwiVXNlRklQUyI6eyJidWlsdEluIjoiQVdTOjpVc2VGSVBT
41
+ IiwicmVxdWlyZWQiOnRydWUsImRlZmF1bHQiOmZhbHNlLCJkb2N1bWVudGF0
42
+ aW9uIjoiV2hlbiB0cnVlLCBzZW5kIHRoaXMgcmVxdWVzdCB0byB0aGUgRklQ
43
+ Uy1jb21wbGlhbnQgcmVnaW9uYWwgZW5kcG9pbnQuIElmIHRoZSBjb25maWd1
44
+ cmVkIGVuZHBvaW50IGRvZXMgbm90IGhhdmUgYSBGSVBTIGNvbXBsaWFudCBl
45
+ bmRwb2ludCwgZGlzcGF0Y2hpbmcgdGhlIHJlcXVlc3Qgd2lsbCByZXR1cm4g
46
+ YW4gZXJyb3IuIiwidHlwZSI6IkJvb2xlYW4ifSwiRW5kcG9pbnQiOnsiYnVp
47
+ bHRJbiI6IlNESzo6RW5kcG9pbnQiLCJyZXF1aXJlZCI6ZmFsc2UsImRvY3Vt
48
+ ZW50YXRpb24iOiJPdmVycmlkZSB0aGUgZW5kcG9pbnQgdXNlZCB0byBzZW5k
49
+ IHRoaXMgcmVxdWVzdCIsInR5cGUiOiJTdHJpbmcifX0sInJ1bGVzIjpbeyJj
50
+ b25kaXRpb25zIjpbeyJmbiI6ImF3cy5wYXJ0aXRpb24iLCJhcmd2IjpbeyJy
51
+ ZWYiOiJSZWdpb24ifV0sImFzc2lnbiI6IlBhcnRpdGlvblJlc3VsdCJ9XSwi
52
+ dHlwZSI6InRyZWUiLCJydWxlcyI6W3siY29uZGl0aW9ucyI6W3siZm4iOiJp
53
+ c1NldCIsImFyZ3YiOlt7InJlZiI6IkVuZHBvaW50In1dfSx7ImZuIjoicGFy
54
+ c2VVUkwiLCJhcmd2IjpbeyJyZWYiOiJFbmRwb2ludCJ9XSwiYXNzaWduIjoi
55
+ dXJsIn1dLCJ0eXBlIjoidHJlZSIsInJ1bGVzIjpbeyJjb25kaXRpb25zIjpb
56
+ eyJmbiI6ImJvb2xlYW5FcXVhbHMiLCJhcmd2IjpbeyJyZWYiOiJVc2VGSVBT
57
+ In0sdHJ1ZV19XSwiZXJyb3IiOiJJbnZhbGlkIENvbmZpZ3VyYXRpb246IEZJ
58
+ UFMgYW5kIGN1c3RvbSBlbmRwb2ludCBhcmUgbm90IHN1cHBvcnRlZCIsInR5
59
+ cGUiOiJlcnJvciJ9LHsiY29uZGl0aW9ucyI6W10sInR5cGUiOiJ0cmVlIiwi
60
+ cnVsZXMiOlt7ImNvbmRpdGlvbnMiOlt7ImZuIjoiYm9vbGVhbkVxdWFscyIs
61
+ ImFyZ3YiOlt7InJlZiI6IlVzZUR1YWxTdGFjayJ9LHRydWVdfV0sImVycm9y
62
+ IjoiSW52YWxpZCBDb25maWd1cmF0aW9uOiBEdWFsc3RhY2sgYW5kIGN1c3Rv
63
+ bSBlbmRwb2ludCBhcmUgbm90IHN1cHBvcnRlZCIsInR5cGUiOiJlcnJvciJ9
64
+ LHsiY29uZGl0aW9ucyI6W10sImVuZHBvaW50Ijp7InVybCI6eyJyZWYiOiJF
65
+ bmRwb2ludCJ9LCJwcm9wZXJ0aWVzIjp7fSwiaGVhZGVycyI6e319LCJ0eXBl
66
+ IjoiZW5kcG9pbnQifV19XX0seyJjb25kaXRpb25zIjpbeyJmbiI6ImJvb2xl
67
+ YW5FcXVhbHMiLCJhcmd2IjpbeyJyZWYiOiJVc2VGSVBTIn0sdHJ1ZV19LHsi
68
+ Zm4iOiJib29sZWFuRXF1YWxzIiwiYXJndiI6W3sicmVmIjoiVXNlRHVhbFN0
69
+ YWNrIn0sdHJ1ZV19XSwidHlwZSI6InRyZWUiLCJydWxlcyI6W3siY29uZGl0
70
+ aW9ucyI6W3siZm4iOiJib29sZWFuRXF1YWxzIiwiYXJndiI6W3RydWUseyJm
71
+ biI6ImdldEF0dHIiLCJhcmd2IjpbeyJyZWYiOiJQYXJ0aXRpb25SZXN1bHQi
72
+ fSwic3VwcG9ydHNGSVBTIl19XX0seyJmbiI6ImJvb2xlYW5FcXVhbHMiLCJh
73
+ cmd2IjpbdHJ1ZSx7ImZuIjoiZ2V0QXR0ciIsImFyZ3YiOlt7InJlZiI6IlBh
74
+ cnRpdGlvblJlc3VsdCJ9LCJzdXBwb3J0c0R1YWxTdGFjayJdfV19XSwidHlw
75
+ ZSI6InRyZWUiLCJydWxlcyI6W3siY29uZGl0aW9ucyI6W10sImVuZHBvaW50
76
+ Ijp7InVybCI6Imh0dHBzOi8vYWNjZXNzLWFuYWx5emVyLWZpcHMue1JlZ2lv
77
+ bn0ue1BhcnRpdGlvblJlc3VsdCNkdWFsU3RhY2tEbnNTdWZmaXh9IiwicHJv
78
+ cGVydGllcyI6e30sImhlYWRlcnMiOnt9fSwidHlwZSI6ImVuZHBvaW50In1d
79
+ fSx7ImNvbmRpdGlvbnMiOltdLCJlcnJvciI6IkZJUFMgYW5kIER1YWxTdGFj
80
+ ayBhcmUgZW5hYmxlZCwgYnV0IHRoaXMgcGFydGl0aW9uIGRvZXMgbm90IHN1
81
+ cHBvcnQgb25lIG9yIGJvdGgiLCJ0eXBlIjoiZXJyb3IifV19LHsiY29uZGl0
82
+ aW9ucyI6W3siZm4iOiJib29sZWFuRXF1YWxzIiwiYXJndiI6W3sicmVmIjoi
83
+ VXNlRklQUyJ9LHRydWVdfV0sInR5cGUiOiJ0cmVlIiwicnVsZXMiOlt7ImNv
84
+ bmRpdGlvbnMiOlt7ImZuIjoiYm9vbGVhbkVxdWFscyIsImFyZ3YiOlt0cnVl
85
+ LHsiZm4iOiJnZXRBdHRyIiwiYXJndiI6W3sicmVmIjoiUGFydGl0aW9uUmVz
86
+ dWx0In0sInN1cHBvcnRzRklQUyJdfV19XSwidHlwZSI6InRyZWUiLCJydWxl
87
+ cyI6W3siY29uZGl0aW9ucyI6W10sInR5cGUiOiJ0cmVlIiwicnVsZXMiOlt7
88
+ ImNvbmRpdGlvbnMiOltdLCJlbmRwb2ludCI6eyJ1cmwiOiJodHRwczovL2Fj
89
+ Y2Vzcy1hbmFseXplci1maXBzLntSZWdpb259LntQYXJ0aXRpb25SZXN1bHQj
90
+ ZG5zU3VmZml4fSIsInByb3BlcnRpZXMiOnt9LCJoZWFkZXJzIjp7fX0sInR5
91
+ cGUiOiJlbmRwb2ludCJ9XX1dfSx7ImNvbmRpdGlvbnMiOltdLCJlcnJvciI6
92
+ IkZJUFMgaXMgZW5hYmxlZCBidXQgdGhpcyBwYXJ0aXRpb24gZG9lcyBub3Qg
93
+ c3VwcG9ydCBGSVBTIiwidHlwZSI6ImVycm9yIn1dfSx7ImNvbmRpdGlvbnMi
94
+ Olt7ImZuIjoiYm9vbGVhbkVxdWFscyIsImFyZ3YiOlt7InJlZiI6IlVzZUR1
95
+ YWxTdGFjayJ9LHRydWVdfV0sInR5cGUiOiJ0cmVlIiwicnVsZXMiOlt7ImNv
96
+ bmRpdGlvbnMiOlt7ImZuIjoiYm9vbGVhbkVxdWFscyIsImFyZ3YiOlt0cnVl
97
+ LHsiZm4iOiJnZXRBdHRyIiwiYXJndiI6W3sicmVmIjoiUGFydGl0aW9uUmVz
98
+ dWx0In0sInN1cHBvcnRzRHVhbFN0YWNrIl19XX1dLCJ0eXBlIjoidHJlZSIs
99
+ InJ1bGVzIjpbeyJjb25kaXRpb25zIjpbXSwiZW5kcG9pbnQiOnsidXJsIjoi
100
+ aHR0cHM6Ly9hY2Nlc3MtYW5hbHl6ZXIue1JlZ2lvbn0ue1BhcnRpdGlvblJl
101
+ c3VsdCNkdWFsU3RhY2tEbnNTdWZmaXh9IiwicHJvcGVydGllcyI6e30sImhl
102
+ YWRlcnMiOnt9fSwidHlwZSI6ImVuZHBvaW50In1dfSx7ImNvbmRpdGlvbnMi
103
+ OltdLCJlcnJvciI6IkR1YWxTdGFjayBpcyBlbmFibGVkIGJ1dCB0aGlzIHBh
104
+ cnRpdGlvbiBkb2VzIG5vdCBzdXBwb3J0IER1YWxTdGFjayIsInR5cGUiOiJl
105
+ cnJvciJ9XX0seyJjb25kaXRpb25zIjpbXSwiZW5kcG9pbnQiOnsidXJsIjoi
106
+ aHR0cHM6Ly9hY2Nlc3MtYW5hbHl6ZXIue1JlZ2lvbn0ue1BhcnRpdGlvblJl
107
+ c3VsdCNkbnNTdWZmaXh9IiwicHJvcGVydGllcyI6e30sImhlYWRlcnMiOnt9
108
+ fSwidHlwZSI6ImVuZHBvaW50In1dfV19
109
+
110
+ JSON
111
+ end
112
+ end