truemark-cdk-lib 1.28.2 → 1.29.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.
@@ -0,0 +1 @@
1
+ export * from './lib/index';
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./lib/index"), exports);
18
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYXdzLXNlY3VyaXR5bGFrZS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsOENBQTRCIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9saWIvaW5kZXgnO1xuIl19
@@ -0,0 +1 @@
1
+ export * from './standard-security-lake';
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./standard-security-lake"), exports);
18
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXdzLXNlY3VyaXR5bGFrZS9saWIvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLDJEQUF5QyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vc3RhbmRhcmQtc2VjdXJpdHktbGFrZSc7XG4iXX0=
@@ -0,0 +1,223 @@
1
+ import { CfnServiceLinkedRole, Role } from 'aws-cdk-lib/aws-iam';
2
+ import { CfnAwsLogSource, CfnDataLake } from 'aws-cdk-lib/aws-securitylake';
3
+ import type { Construct } from 'constructs';
4
+ import { ExtendedConstruct, type ExtendedConstructProps } from '../../aws-cdk/index';
5
+ /**
6
+ * The AWS-native log sources that Amazon Security Lake can ingest.
7
+ *
8
+ * @see https://docs.aws.amazon.com/security-lake/latest/userguide/internal-sources.html
9
+ */
10
+ export declare enum AwsLogSourceName {
11
+ CLOUD_TRAIL_MGMT = "CLOUD_TRAIL_MGMT",
12
+ LAMBDA_EXECUTION = "LAMBDA_EXECUTION",
13
+ ROUTE53 = "ROUTE53",
14
+ S3_DATA = "S3_DATA",
15
+ SH_FINDINGS = "SH_FINDINGS",
16
+ VPC_FLOW = "VPC_FLOW",
17
+ EKS_AUDIT = "EKS_AUDIT",
18
+ WAF = "WAF"
19
+ }
20
+ /**
21
+ * Properties for an individual AWS log source to enable on the data lake.
22
+ */
23
+ export interface AwsLogSourceProps {
24
+ /**
25
+ * The name of the AWS log source to enable.
26
+ */
27
+ readonly sourceName: AwsLogSourceName | string;
28
+ /**
29
+ * The version of the AWS log source to enable.
30
+ *
31
+ * @default - '2.0'
32
+ */
33
+ readonly sourceVersion?: string;
34
+ /**
35
+ * The AWS accounts whose data should be collected for this source. If not
36
+ * provided, the data lake owner account is used.
37
+ *
38
+ * @default - [Stack.of(this).account]
39
+ */
40
+ readonly accounts?: string[];
41
+ }
42
+ /**
43
+ * Lifecycle transition for Security Lake data.
44
+ */
45
+ export interface SecurityLakeTransitionProps {
46
+ /**
47
+ * The number of days before data transitions to the given storage class.
48
+ */
49
+ readonly days: number;
50
+ /**
51
+ * The target S3 storage class. Supported values include `STANDARD_IA`,
52
+ * `ONEZONE_IA`, `INTELLIGENT_TIERING`, `GLACIER_IR`, `GLACIER` and
53
+ * `DEEP_ARCHIVE`.
54
+ */
55
+ readonly storageClass: string;
56
+ }
57
+ /**
58
+ * Lifecycle configuration options for Security Lake managed S3 storage.
59
+ */
60
+ export interface SecurityLakeLifecycleProps {
61
+ /**
62
+ * The number of days before Security Lake data is expired/deleted.
63
+ *
64
+ * @default - data is retained indefinitely
65
+ */
66
+ readonly expirationDays?: number;
67
+ /**
68
+ * Transitions applied to Security Lake data.
69
+ *
70
+ * @default - no transitions
71
+ */
72
+ readonly transitions?: SecurityLakeTransitionProps[];
73
+ }
74
+ /**
75
+ * Replication configuration for Security Lake data.
76
+ */
77
+ export interface SecurityLakeReplicationProps {
78
+ /**
79
+ * One or more rollup Regions to replicate data to.
80
+ */
81
+ readonly regions: string[];
82
+ /**
83
+ * The ARN of the IAM role Security Lake uses to replicate objects. If not
84
+ * provided, a role will be created automatically.
85
+ *
86
+ * @default - a new role is created
87
+ */
88
+ readonly roleArn?: string;
89
+ /**
90
+ * The ARN of the customer-managed KMS key encrypting the source
91
+ * (originating-Region) Security Lake bucket. Required when the enclosing
92
+ * `StandardSecurityLake` is configured with a customer-managed `kmsKeyId`
93
+ * and this construct creates the replication role (i.e. when `roleArn`
94
+ * is not provided); S3 needs `kms:Decrypt` on this key to read objects
95
+ * before replicating them. Not required when the source bucket uses
96
+ * S3-managed or AWS-managed encryption.
97
+ *
98
+ * This is independent of `destinationKmsKeyArns`: Security Lake rollup
99
+ * Regions may use their own encryption settings, so a CMK source can
100
+ * replicate to an SSE-S3 rollup and vice versa.
101
+ *
102
+ * @default - no KMS decrypt statement is added
103
+ */
104
+ readonly sourceKmsKeyArn?: string;
105
+ /**
106
+ * The ARNs of the customer-managed KMS keys encrypting the destination
107
+ * (rollup-Region) Security Lake buckets. Supply when any rollup Region's
108
+ * bucket uses a customer-managed KMS key so the replication role can
109
+ * `kms:Encrypt` / `kms:GenerateDataKey` against them. Not required when
110
+ * every rollup bucket uses S3-managed or AWS-managed encryption.
111
+ *
112
+ * This is independent of `sourceKmsKeyArn` and the source lake's
113
+ * `kmsKeyId`.
114
+ *
115
+ * @default - no KMS encrypt statement is added
116
+ */
117
+ readonly destinationKmsKeyArns?: string[];
118
+ }
119
+ /**
120
+ * Properties for StandardSecurityLake.
121
+ */
122
+ export interface StandardSecurityLakeProps extends ExtendedConstructProps {
123
+ /**
124
+ * The KMS key id to use to encrypt data stored by Security Lake. Use the
125
+ * literal string `S3_MANAGED_KEY` to use S3 managed keys (SSE-S3). Omit to
126
+ * let Security Lake use its default managed key.
127
+ *
128
+ * @default - Security Lake managed encryption
129
+ */
130
+ readonly kmsKeyId?: string;
131
+ /**
132
+ * The ARN of the role used by Security Lake to manage the AWS Glue
133
+ * metastore. If omitted, a role is created with the
134
+ * `AmazonSecurityLakeMetastoreManager` AWS managed policy attached.
135
+ *
136
+ * @default - a role is created
137
+ */
138
+ readonly metaStoreManagerRoleArn?: string;
139
+ /**
140
+ * The ARN of the customer-managed KMS key used to encrypt Security Lake
141
+ * data. Required when `kmsKeyId` is set to a customer-managed key and this
142
+ * construct creates the metastore manager role (i.e. when
143
+ * `metaStoreManagerRoleArn` is not provided). The metastore manager
144
+ * Lambda must decrypt and (re)encrypt Security Lake metadata; the AWS
145
+ * managed policy `AmazonSecurityLakeMetastoreManager` does not include
146
+ * KMS permissions, so without this grant the stack deploys but partition
147
+ * updates and subscriber queries silently fail. Not required when
148
+ * `kmsKeyId` is unset or set to `S3_MANAGED_KEY`.
149
+ *
150
+ * @default - no KMS statement is added (sufficient when the data lake
151
+ * uses Security Lake defaults or SSE-S3)
152
+ */
153
+ readonly metaStoreManagerKmsKeyArn?: string;
154
+ /**
155
+ * Lifecycle configuration for the Security Lake managed S3 storage.
156
+ *
157
+ * @default - Security Lake defaults
158
+ */
159
+ readonly lifecycle?: SecurityLakeLifecycleProps;
160
+ /**
161
+ * Replication configuration for the Security Lake managed S3 storage.
162
+ *
163
+ * @default - no replication
164
+ */
165
+ readonly replication?: SecurityLakeReplicationProps;
166
+ /**
167
+ * The AWS native log sources to enable on the data lake. Sources are
168
+ * created sequentially using `DependsOn` as required by Security Lake.
169
+ *
170
+ * @default - no log sources are enabled
171
+ */
172
+ readonly logSources?: AwsLogSourceProps[];
173
+ /**
174
+ * Whether to create the `AWSServiceRoleForLakeFormationDataAccess`
175
+ * service-linked role. Security Lake requires this role to exist in the
176
+ * account before a data lake can be created; however the role is a
177
+ * singleton per account and is frequently auto-created on first use of
178
+ * Lake Formation. Enable this only when you know the role does not yet
179
+ * exist in the account, otherwise stack creation will fail with
180
+ * `has been taken in this account`.
181
+ *
182
+ * The data lake will `DependsOn` this role when it is created so ordering
183
+ * is handled automatically.
184
+ *
185
+ * @default false
186
+ */
187
+ readonly createLakeFormationServiceLinkedRole?: boolean;
188
+ }
189
+ /**
190
+ * Standard Amazon Security Lake. Wraps the Security Lake L1 constructs to
191
+ * stand up a data lake with an optional set of AWS native log sources
192
+ * enabled, a metastore manager role, lifecycle policy and replication.
193
+ *
194
+ * Where this construct does not meet your needs, use the underlying
195
+ * `CfnDataLake` and `CfnAwsLogSource` constructs directly.
196
+ */
197
+ export declare class StandardSecurityLake extends ExtendedConstruct {
198
+ /**
199
+ * The underlying `CfnDataLake` resource.
200
+ */
201
+ readonly dataLake: CfnDataLake;
202
+ /**
203
+ * The IAM role used by Security Lake to manage the Glue metastore. When
204
+ * `metaStoreManagerRoleArn` is provided this will be `undefined`.
205
+ */
206
+ readonly metaStoreManagerRole?: Role;
207
+ /**
208
+ * The IAM role used by Security Lake to replicate objects. Only created
209
+ * when replication is enabled and no `roleArn` was supplied.
210
+ */
211
+ readonly replicationRole?: Role;
212
+ /**
213
+ * The Lake Formation `AWSServiceRoleForLakeFormationDataAccess`
214
+ * service-linked role, when it was provisioned by this construct.
215
+ */
216
+ readonly lakeFormationServiceLinkedRole?: CfnServiceLinkedRole;
217
+ /**
218
+ * The `CfnAwsLogSource` resources created by this construct, in the order
219
+ * they were declared.
220
+ */
221
+ readonly logSources: CfnAwsLogSource[];
222
+ constructor(scope: Construct, id: string, props?: StandardSecurityLakeProps);
223
+ }
@@ -0,0 +1,266 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.StandardSecurityLake = exports.AwsLogSourceName = void 0;
4
+ const aws_cdk_lib_1 = require("aws-cdk-lib");
5
+ const aws_iam_1 = require("aws-cdk-lib/aws-iam");
6
+ const aws_securitylake_1 = require("aws-cdk-lib/aws-securitylake");
7
+ const index_1 = require("../../aws-cdk/index");
8
+ /**
9
+ * The AWS-native log sources that Amazon Security Lake can ingest.
10
+ *
11
+ * @see https://docs.aws.amazon.com/security-lake/latest/userguide/internal-sources.html
12
+ */
13
+ var AwsLogSourceName;
14
+ (function (AwsLogSourceName) {
15
+ AwsLogSourceName["CLOUD_TRAIL_MGMT"] = "CLOUD_TRAIL_MGMT";
16
+ AwsLogSourceName["LAMBDA_EXECUTION"] = "LAMBDA_EXECUTION";
17
+ AwsLogSourceName["ROUTE53"] = "ROUTE53";
18
+ AwsLogSourceName["S3_DATA"] = "S3_DATA";
19
+ AwsLogSourceName["SH_FINDINGS"] = "SH_FINDINGS";
20
+ AwsLogSourceName["VPC_FLOW"] = "VPC_FLOW";
21
+ AwsLogSourceName["EKS_AUDIT"] = "EKS_AUDIT";
22
+ AwsLogSourceName["WAF"] = "WAF";
23
+ })(AwsLogSourceName || (exports.AwsLogSourceName = AwsLogSourceName = {}));
24
+ /**
25
+ * Standard Amazon Security Lake. Wraps the Security Lake L1 constructs to
26
+ * stand up a data lake with an optional set of AWS native log sources
27
+ * enabled, a metastore manager role, lifecycle policy and replication.
28
+ *
29
+ * Where this construct does not meet your needs, use the underlying
30
+ * `CfnDataLake` and `CfnAwsLogSource` constructs directly.
31
+ */
32
+ class StandardSecurityLake extends index_1.ExtendedConstruct {
33
+ constructor(scope, id, props) {
34
+ var _a, _b, _c, _d;
35
+ super(scope, id, props);
36
+ /**
37
+ * The `CfnAwsLogSource` resources created by this construct, in the order
38
+ * they were declared.
39
+ */
40
+ this.logSources = [];
41
+ // Optional Lake Formation service-linked role. Security Lake requires
42
+ // this SLR to exist in the account before a data lake can be created.
43
+ if (props === null || props === void 0 ? void 0 : props.createLakeFormationServiceLinkedRole) {
44
+ this.lakeFormationServiceLinkedRole = new aws_iam_1.CfnServiceLinkedRole(this, 'LakeFormationServiceLinkedRole', {
45
+ awsServiceName: 'lakeformation.amazonaws.com',
46
+ description: 'Service-linked role used by AWS Lake Formation to access registered S3 locations. Required by Amazon Security Lake.',
47
+ });
48
+ // The Lake Formation SLR is an account singleton that is frequently
49
+ // shared with other stacks and consoles. Retain it on
50
+ // stack-delete/opt-out so toggling this flag off (or removing this
51
+ // construct) does not strip Lake Formation access account-wide.
52
+ this.lakeFormationServiceLinkedRole.applyRemovalPolicy(aws_cdk_lib_1.RemovalPolicy.RETAIN);
53
+ }
54
+ // Metastore manager role.
55
+ let metaStoreManagerRoleArn = props === null || props === void 0 ? void 0 : props.metaStoreManagerRoleArn;
56
+ const usesCustomerManagedKey = (props === null || props === void 0 ? void 0 : props.kmsKeyId) !== undefined && props.kmsKeyId !== 'S3_MANAGED_KEY';
57
+ if (!metaStoreManagerRoleArn) {
58
+ // When the data lake is encrypted with a customer-managed KMS key,
59
+ // the metastore manager Lambda must be able to Decrypt / Encrypt /
60
+ // GenerateDataKey against that key. The AWS managed policy
61
+ // `AmazonSecurityLakeMetastoreManager` does NOT include KMS actions,
62
+ // so without this grant CFN deployment succeeds but partition
63
+ // updates and subscriber queries fail at runtime. The key ARN is
64
+ // not derivable at synth time, so require the caller to supply it
65
+ // explicitly via `metaStoreManagerKmsKeyArn` or pre-provision their
66
+ // own metastore manager role via `metaStoreManagerRoleArn`.
67
+ if (usesCustomerManagedKey && !(props === null || props === void 0 ? void 0 : props.metaStoreManagerKmsKeyArn)) {
68
+ throw new Error('StandardSecurityLake: a customer-managed `kmsKeyId` requires ' +
69
+ '`metaStoreManagerKmsKeyArn` so the generated metastore manager ' +
70
+ 'role can be granted the necessary KMS permissions. ' +
71
+ 'Alternatively, pre-provision the metastore manager role ' +
72
+ 'yourself and pass its ARN via `metaStoreManagerRoleArn`.');
73
+ }
74
+ const metaStoreInlinePolicies = {};
75
+ if (usesCustomerManagedKey && (props === null || props === void 0 ? void 0 : props.metaStoreManagerKmsKeyArn)) {
76
+ metaStoreInlinePolicies.AmazonSecurityLakeMetastoreManagerKmsPolicy =
77
+ new aws_iam_1.PolicyDocument({
78
+ statements: [
79
+ new aws_iam_1.PolicyStatement({
80
+ sid: 'AllowMetaStoreManagerKmsAccess',
81
+ actions: [
82
+ 'kms:Decrypt',
83
+ 'kms:Encrypt',
84
+ 'kms:GenerateDataKey',
85
+ 'kms:DescribeKey',
86
+ ],
87
+ resources: [props.metaStoreManagerKmsKeyArn],
88
+ }),
89
+ ],
90
+ });
91
+ }
92
+ this.metaStoreManagerRole = new aws_iam_1.Role(this, 'MetaStoreManagerRole', {
93
+ // The partition-updater Lambda functions created by Security Lake are
94
+ // hard-coded to assume a role named
95
+ // `AmazonSecurityLakeMetaStoreManagerV2` under the `/service-role/`
96
+ // path and do not honor an arbitrary role ARN. Without a matching
97
+ // role name, CFN deployment and `CreateDataLake` succeed but the
98
+ // partition updater silently fails and subscribers cannot query
99
+ // replicated objects. The role name is account-global; for
100
+ // multi-Region deploys in the same account pass
101
+ // `metaStoreManagerRoleArn` for all but one Region.
102
+ path: '/service-role/',
103
+ roleName: 'AmazonSecurityLakeMetaStoreManagerV2',
104
+ assumedBy: new aws_iam_1.ServicePrincipal('lambda.amazonaws.com'),
105
+ description: 'Role used by Amazon Security Lake metastore manager Lambda to manage the AWS Glue metastore.',
106
+ managedPolicies: [
107
+ aws_iam_1.ManagedPolicy.fromAwsManagedPolicyName('service-role/AmazonSecurityLakeMetastoreManager'),
108
+ ],
109
+ inlinePolicies: metaStoreInlinePolicies,
110
+ });
111
+ metaStoreManagerRoleArn = this.metaStoreManagerRole.roleArn;
112
+ }
113
+ // Encryption configuration.
114
+ const encryptionConfiguration = (props === null || props === void 0 ? void 0 : props.kmsKeyId) !== undefined ? { kmsKeyId: props.kmsKeyId } : undefined;
115
+ // Lifecycle configuration.
116
+ let lifecycleConfiguration;
117
+ if (props === null || props === void 0 ? void 0 : props.lifecycle) {
118
+ lifecycleConfiguration = {
119
+ expiration: props.lifecycle.expirationDays !== undefined
120
+ ? { days: props.lifecycle.expirationDays }
121
+ : undefined,
122
+ transitions: (_a = props.lifecycle.transitions) === null || _a === void 0 ? void 0 : _a.map((t) => ({
123
+ days: t.days,
124
+ storageClass: t.storageClass,
125
+ })),
126
+ };
127
+ }
128
+ // Replication configuration.
129
+ let replicationConfiguration;
130
+ if (props === null || props === void 0 ? void 0 : props.replication) {
131
+ let replicationRoleArn = props.replication.roleArn;
132
+ if (!replicationRoleArn) {
133
+ const account = aws_cdk_lib_1.Stack.of(this).account;
134
+ const sourceRegion = aws_cdk_lib_1.Stack.of(this).region;
135
+ const destinationRegions = props.replication.regions;
136
+ // Source and destination encryption are independent in Security
137
+ // Lake: a CMK source can replicate to an SSE-S3 rollup and vice
138
+ // versa. Grant `kms:Decrypt` on the source key only when the
139
+ // source lake uses a CMK, and grant `kms:Encrypt` /
140
+ // `kms:GenerateDataKey` on the destination keys only when any
141
+ // rollup bucket uses a CMK. The key ARNs are not derivable at
142
+ // synth time, so require the caller to supply them explicitly on
143
+ // the encrypted side (or pre-provision their own replication role
144
+ // via `replication.roleArn`).
145
+ if (usesCustomerManagedKey && !props.replication.sourceKmsKeyArn) {
146
+ throw new Error('StandardSecurityLake: a customer-managed `kmsKeyId` with ' +
147
+ 'replication requires `replication.sourceKmsKeyArn` so the ' +
148
+ 'generated replication role can `kms:Decrypt` source objects. ' +
149
+ 'If any rollup Region bucket is also encrypted with a ' +
150
+ 'customer-managed key, pass its ARN via ' +
151
+ '`replication.destinationKmsKeyArns`. Alternatively, ' +
152
+ 'pre-provision the replication role yourself and pass its ARN ' +
153
+ 'via `replication.roleArn`.');
154
+ }
155
+ const kmsStatements = [];
156
+ if (usesCustomerManagedKey && props.replication.sourceKmsKeyArn) {
157
+ kmsStatements.push(new aws_iam_1.PolicyStatement({
158
+ sid: 'AllowDecryptSourceKmsKey',
159
+ actions: ['kms:Decrypt'],
160
+ resources: [props.replication.sourceKmsKeyArn],
161
+ }));
162
+ }
163
+ if (props.replication.destinationKmsKeyArns &&
164
+ props.replication.destinationKmsKeyArns.length > 0) {
165
+ kmsStatements.push(new aws_iam_1.PolicyStatement({
166
+ sid: 'AllowEncryptDestinationKmsKeys',
167
+ actions: ['kms:Encrypt', 'kms:GenerateDataKey'],
168
+ resources: props.replication.destinationKmsKeyArns,
169
+ }));
170
+ }
171
+ this.replicationRole = new aws_iam_1.Role(this, 'ReplicationRole', {
172
+ // Security Lake requires the replication role to live under the
173
+ // service-role/ path and start with `SecurityLake`. IAM role names
174
+ // are account-global, so include the source Region in the suffix to
175
+ // avoid collisions when the construct is deployed to multiple
176
+ // Regions in the same account.
177
+ path: '/service-role/',
178
+ roleName: `SecurityLakeS3ReplicationRole-${sourceRegion}`,
179
+ // Amazon S3 performs the cross-Region replication, so it (not the
180
+ // Security Lake service) must be allowed to assume this role.
181
+ assumedBy: new aws_iam_1.ServicePrincipal('s3.amazonaws.com'),
182
+ description: 'Role used by Amazon S3 to replicate Amazon Security Lake objects across Regions.',
183
+ // No AWS managed policy exists for this role; attach the inline
184
+ // policy documented by Security Lake.
185
+ // https://docs.aws.amazon.com/security-lake/latest/userguide/add-rollup-region.html
186
+ inlinePolicies: {
187
+ AmazonSecurityLakeS3ReplicationRolePolicy: new aws_iam_1.PolicyDocument({
188
+ statements: [
189
+ new aws_iam_1.PolicyStatement({
190
+ sid: 'AllowReadS3ReplicationSetting',
191
+ actions: [
192
+ 's3:ListBucket',
193
+ 's3:GetReplicationConfiguration',
194
+ 's3:GetObjectVersionForReplication',
195
+ 's3:GetObjectVersion',
196
+ 's3:GetObjectVersionAcl',
197
+ 's3:GetObjectVersionTagging',
198
+ 's3:GetObjectRetention',
199
+ 's3:GetObjectLegalHold',
200
+ ],
201
+ resources: [
202
+ `arn:${aws_cdk_lib_1.Stack.of(this).partition}:s3:::aws-security-data-lake-${sourceRegion}*`,
203
+ `arn:${aws_cdk_lib_1.Stack.of(this).partition}:s3:::aws-security-data-lake-${sourceRegion}*/*`,
204
+ ],
205
+ conditions: {
206
+ StringEquals: { 's3:ResourceAccount': [account] },
207
+ },
208
+ }),
209
+ new aws_iam_1.PolicyStatement({
210
+ sid: 'AllowS3Replication',
211
+ actions: [
212
+ 's3:ReplicateObject',
213
+ 's3:ReplicateDelete',
214
+ 's3:ReplicateTags',
215
+ 's3:GetObjectVersionTagging',
216
+ ],
217
+ resources: destinationRegions.flatMap((r) => [
218
+ `arn:${aws_cdk_lib_1.Stack.of(this).partition}:s3:::aws-security-data-lake-${r}*/*`,
219
+ ]),
220
+ conditions: {
221
+ StringEquals: { 's3:ResourceAccount': [account] },
222
+ },
223
+ }),
224
+ ...kmsStatements,
225
+ ],
226
+ }),
227
+ },
228
+ });
229
+ replicationRoleArn = this.replicationRole.roleArn;
230
+ }
231
+ replicationConfiguration = {
232
+ regions: props.replication.regions,
233
+ roleArn: replicationRoleArn,
234
+ };
235
+ }
236
+ this.dataLake = new aws_securitylake_1.CfnDataLake(this, 'DataLake', {
237
+ metaStoreManagerRoleArn,
238
+ encryptionConfiguration,
239
+ lifecycleConfiguration,
240
+ replicationConfiguration,
241
+ });
242
+ if (this.lakeFormationServiceLinkedRole) {
243
+ this.dataLake.addDependency(this.lakeFormationServiceLinkedRole);
244
+ }
245
+ // Create AWS log sources sequentially using DependsOn, as required by
246
+ // Security Lake when more than one source is created in the same
247
+ // template.
248
+ let previous;
249
+ for (const source of (_b = props === null || props === void 0 ? void 0 : props.logSources) !== null && _b !== void 0 ? _b : []) {
250
+ const logSource = new aws_securitylake_1.CfnAwsLogSource(this, `LogSource${source.sourceName}`, {
251
+ dataLakeArn: this.dataLake.attrArn,
252
+ sourceName: source.sourceName,
253
+ sourceVersion: (_c = source.sourceVersion) !== null && _c !== void 0 ? _c : '2.0',
254
+ accounts: (_d = source.accounts) !== null && _d !== void 0 ? _d : [aws_cdk_lib_1.Stack.of(this).account],
255
+ });
256
+ logSource.addDependency(this.dataLake);
257
+ if (previous) {
258
+ logSource.addDependency(previous);
259
+ }
260
+ previous = logSource;
261
+ this.logSources.push(logSource);
262
+ }
263
+ }
264
+ }
265
+ exports.StandardSecurityLake = StandardSecurityLake;
266
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhbmRhcmQtc2VjdXJpdHktbGFrZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hd3Mtc2VjdXJpdHlsYWtlL2xpYi9zdGFuZGFyZC1zZWN1cml0eS1sYWtlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDZDQUFpRDtBQUNqRCxpREFPNkI7QUFDN0IsbUVBQTBFO0FBRTFFLCtDQUc2QjtBQUU3Qjs7OztHQUlHO0FBQ0gsSUFBWSxnQkFTWDtBQVRELFdBQVksZ0JBQWdCO0lBQzFCLHlEQUFxQyxDQUFBO0lBQ3JDLHlEQUFxQyxDQUFBO0lBQ3JDLHVDQUFtQixDQUFBO0lBQ25CLHVDQUFtQixDQUFBO0lBQ25CLCtDQUEyQixDQUFBO0lBQzNCLHlDQUFxQixDQUFBO0lBQ3JCLDJDQUF1QixDQUFBO0lBQ3ZCLCtCQUFXLENBQUE7QUFDYixDQUFDLEVBVFcsZ0JBQWdCLGdDQUFoQixnQkFBZ0IsUUFTM0I7QUE2TEQ7Ozs7Ozs7R0FPRztBQUNILE1BQWEsb0JBQXFCLFNBQVEseUJBQWlCO0lBOEJ6RCxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQWlDOztRQUN6RSxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQztRQVAxQjs7O1dBR0c7UUFDTSxlQUFVLEdBQXNCLEVBQUUsQ0FBQztRQUsxQyxzRUFBc0U7UUFDdEUsc0VBQXNFO1FBQ3RFLElBQUksS0FBSyxhQUFMLEtBQUssdUJBQUwsS0FBSyxDQUFFLG9DQUFvQyxFQUFFLENBQUM7WUFDaEQsSUFBSSxDQUFDLDhCQUE4QixHQUFHLElBQUksOEJBQW9CLENBQzVELElBQUksRUFDSixnQ0FBZ0MsRUFDaEM7Z0JBQ0UsY0FBYyxFQUFFLDZCQUE2QjtnQkFDN0MsV0FBVyxFQUNULHFIQUFxSDthQUN4SCxDQUNGLENBQUM7WUFDRixvRUFBb0U7WUFDcEUsc0RBQXNEO1lBQ3RELG1FQUFtRTtZQUNuRSxnRUFBZ0U7WUFDaEUsSUFB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QyxDQUFDLE9BQU8sQ0FBQzthQUN0RCxDQUNGLENBQUM7WUFDRixTQUFTLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUN2QyxJQUFJLFFBQVEsRUFBRSxDQUFDO2dCQUNiLFNBQVMsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDcEMsQ0FBQztZQUNELFFBQVEsR0FBRyxTQUFTLENBQUM7WUFDckIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDbEMsQ0FBQztJQUNILENBQUM7Q0FDRjtBQTNTRCxvREEyU0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1JlbW92YWxQb2xpY3ksIFN0YWNrfSBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQge1xuICBDZm5TZXJ2aWNlTGlua2VkUm9sZSxcbiAgTWFuYWdlZFBvbGljeSxcbiAgUG9saWN5RG9jdW1lbnQsXG4gIFBvbGljeVN0YXRlbWVudCxcbiAgUm9sZSxcbiAgU2VydmljZVByaW5jaXBhbCxcbn0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWlhbSc7XG5pbXBvcnQge0NmbkF3c0xvZ1NvdXJjZSwgQ2ZuRGF0YUxha2V9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1zZWN1cml0eWxha2UnO1xuaW1wb3J0IHR5cGUge0NvbnN0cnVjdH0gZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQge1xuICBFeHRlbmRlZENvbnN0cnVjdCxcbiAgdHlwZSBFeHRlbmRlZENvbnN0cnVjdFByb3BzLFxufSBmcm9tICcuLi8uLi9hd3MtY2RrL2luZGV4JztcblxuLyoqXG4gKiBUaGUgQVdTLW5hdGl2ZSBsb2cgc291cmNlcyB0aGF0IEFtYXpvbiBTZWN1cml0eSBMYWtlIGNhbiBpbmdlc3QuXG4gKlxuICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vc2VjdXJpdHktbGFrZS9sYXRlc3QvdXNlcmd1aWRlL2ludGVybmFsLXNvdXJjZXMuaHRtbFxuICovXG5leHBvcnQgZW51bSBBd3NMb2dTb3VyY2VOYW1lIHtcbiAgQ0xPVURfVFJBSUxfTUdNVCA9ICdDTE9VRF9UUkFJTF9NR01UJyxcbiAgTEFNQkRBX0VYRUNVVElPTiA9ICdMQU1CREFfRVhFQ1VUSU9OJyxcbiAgUk9VVEU1MyA9ICdST1VURTUzJyxcbiAgUzNfREFUQSA9ICdTM19EQVRBJyxcbiAgU0hfRklORElOR1MgPSAnU0hfRklORElOR1MnLFxuICBWUENfRkxPVyA9ICdWUENfRkxPVycsXG4gIEVLU19BVURJVCA9ICdFS1NfQVVESVQnLFxuICBXQUYgPSAnV0FGJyxcbn1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciBhbiBpbmRpdmlkdWFsIEFXUyBsb2cgc291cmNlIHRvIGVuYWJsZSBvbiB0aGUgZGF0YSBsYWtlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEF3c0xvZ1NvdXJjZVByb3BzIHtcbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBBV1MgbG9nIHNvdXJjZSB0byBlbmFibGUuXG4gICAqL1xuICByZWFkb25seSBzb3VyY2VOYW1lOiBBd3NMb2dTb3VyY2VOYW1lIHwgc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgdmVyc2lvbiBvZiB0aGUgQVdTIGxvZyBzb3VyY2UgdG8gZW5hYmxlLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtICcyLjAnXG4gICAqL1xuICByZWFkb25seSBzb3VyY2VWZXJzaW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgQVdTIGFjY291bnRzIHdob3NlIGRhdGEgc2hvdWxkIGJlIGNvbGxlY3RlZCBmb3IgdGhpcyBzb3VyY2UuIElmIG5vdFxuICAgKiBwcm92aWRlZCwgdGhlIGRhdGEgbGFrZSBvd25lciBhY2NvdW50IGlzIHVzZWQuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gW1N0YWNrLm9mKHRoaXMpLmFjY291bnRdXG4gICAqL1xuICByZWFkb25seSBhY2NvdW50cz86IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIExpZmVjeWNsZSB0cmFuc2l0aW9uIGZvciBTZWN1cml0eSBMYWtlIGRhdGEuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2VjdXJpdHlMYWtlVHJhbnNpdGlvblByb3BzIHtcbiAgLyoqXG4gICAqIFRoZSBudW1iZXIgb2YgZGF5cyBiZWZvcmUgZGF0YSB0cmFuc2l0aW9ucyB0byB0aGUgZ2l2ZW4gc3RvcmFnZSBjbGFzcy5cbiAgICovXG4gIHJlYWRvbmx5IGRheXM6IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIHRhcmdldCBTMyBzdG9yYWdlIGNsYXNzLiBTdXBwb3J0ZWQgdmFsdWVzIGluY2x1ZGUgYFNUQU5EQVJEX0lBYCxcbiAgICogYE9ORVpPTkVfSUFgLCBgSU5URUxMSUdFTlRfVElFUklOR2AsIGBHTEFDSUVSX0lSYCwgYEdMQUNJRVJgIGFuZFxuICAgKiBgREVFUF9BUkNISVZFYC5cbiAgICovXG4gIHJlYWRvbmx5IHN0b3JhZ2VDbGFzczogc3RyaW5nO1xufVxuXG4vKipcbiAqIExpZmVjeWNsZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIFNlY3VyaXR5IExha2UgbWFuYWdlZCBTMyBzdG9yYWdlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNlY3VyaXR5TGFrZUxpZmVjeWNsZVByb3BzIHtcbiAgLyoqXG4gICAqIFRoZSBudW1iZXIgb2YgZGF5cyBiZWZvcmUgU2VjdXJpdHkgTGFrZSBkYXRhIGlzIGV4cGlyZWQvZGVsZXRlZC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBkYXRhIGlzIHJldGFpbmVkIGluZGVmaW5pdGVseVxuICAgKi9cbiAgcmVhZG9ubHkgZXhwaXJhdGlvbkRheXM/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRyYW5zaXRpb25zIGFwcGxpZWQgdG8gU2VjdXJpdHkgTGFrZSBkYXRhLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vIHRyYW5zaXRpb25zXG4gICAqL1xuICByZWFkb25seSB0cmFuc2l0aW9ucz86IFNlY3VyaXR5TGFrZVRyYW5zaXRpb25Qcm9wc1tdO1xufVxuXG4vKipcbiAqIFJlcGxpY2F0aW9uIGNvbmZpZ3VyYXRpb24gZm9yIFNlY3VyaXR5IExha2UgZGF0YS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTZWN1cml0eUxha2VSZXBsaWNhdGlvblByb3BzIHtcbiAgLyoqXG4gICAqIE9uZSBvciBtb3JlIHJvbGx1cCBSZWdpb25zIHRvIHJlcGxpY2F0ZSBkYXRhIHRvLlxuICAgKi9cbiAgcmVhZG9ubHkgcmVnaW9uczogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFRoZSBBUk4gb2YgdGhlIElBTSByb2xlIFNlY3VyaXR5IExha2UgdXNlcyB0byByZXBsaWNhdGUgb2JqZWN0cy4gSWYgbm90XG4gICAqIHByb3ZpZGVkLCBhIHJvbGUgd2lsbCBiZSBjcmVhdGVkIGF1dG9tYXRpY2FsbHkuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gYSBuZXcgcm9sZSBpcyBjcmVhdGVkXG4gICAqL1xuICByZWFkb25seSByb2xlQXJuPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgQVJOIG9mIHRoZSBjdXN0b21lci1tYW5hZ2VkIEtNUyBrZXkgZW5jcnlwdGluZyB0aGUgc291cmNlXG4gICAqIChvcmlnaW5hdGluZy1SZWdpb24pIFNlY3VyaXR5IExha2UgYnVja2V0LiBSZXF1aXJlZCB3aGVuIHRoZSBlbmNsb3NpbmdcbiAgICogYFN0YW5kYXJkU2VjdXJpdHlMYWtlYCBpcyBjb25maWd1cmVkIHdpdGggYSBjdXN0b21lci1tYW5hZ2VkIGBrbXNLZXlJZGBcbiAgICogYW5kIHRoaXMgY29uc3RydWN0IGNyZWF0ZXMgdGhlIHJlcGxpY2F0aW9uIHJvbGUgKGkuZS4gd2hlbiBgcm9sZUFybmBcbiAgICogaXMgbm90IHByb3ZpZGVkKTsgUzMgbmVlZHMgYGttczpEZWNyeXB0YCBvbiB0aGlzIGtleSB0byByZWFkIG9iamVjdHNcbiAgICogYmVmb3JlIHJlcGxpY2F0aW5nIHRoZW0uIE5vdCByZXF1aXJlZCB3aGVuIHRoZSBzb3VyY2UgYnVja2V0IHVzZXNcbiAgICogUzMtbWFuYWdlZCBvciBBV1MtbWFuYWdlZCBlbmNyeXB0aW9uLlxuICAgKlxuICAgKiBUaGlzIGlzIGluZGVwZW5kZW50IG9mIGBkZXN0aW5hdGlvbkttc0tleUFybnNgOiBTZWN1cml0eSBMYWtlIHJvbGx1cFxuICAgKiBSZWdpb25zIG1heSB1c2UgdGhlaXIgb3duIGVuY3J5cHRpb24gc2V0dGluZ3MsIHNvIGEgQ01LIHNvdXJjZSBjYW5cbiAgICogcmVwbGljYXRlIHRvIGFuIFNTRS1TMyByb2xsdXAgYW5kIHZpY2UgdmVyc2EuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm8gS01TIGRlY3J5cHQgc3RhdGVtZW50IGlzIGFkZGVkXG4gICAqL1xuICByZWFkb25seSBzb3VyY2VLbXNLZXlBcm4/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBBUk5zIG9mIHRoZSBjdXN0b21lci1tYW5hZ2VkIEtNUyBrZXlzIGVuY3J5cHRpbmcgdGhlIGRlc3RpbmF0aW9uXG4gICAqIChyb2xsdXAtUmVnaW9uKSBTZWN1cml0eSBMYWtlIGJ1Y2tldHMuIFN1cHBseSB3aGVuIGFueSByb2xsdXAgUmVnaW9uJ3NcbiAgICogYnVja2V0IHVzZXMgYSBjdXN0b21lci1tYW5hZ2VkIEtNUyBrZXkgc28gdGhlIHJlcGxpY2F0aW9uIHJvbGUgY2FuXG4gICAqIGBrbXM6RW5jcnlwdGAgLyBga21zOkdlbmVyYXRlRGF0YUtleWAgYWdhaW5zdCB0aGVtLiBOb3QgcmVxdWlyZWQgd2hlblxuICAgKiBldmVyeSByb2xsdXAgYnVja2V0IHVzZXMgUzMtbWFuYWdlZCBvciBBV1MtbWFuYWdlZCBlbmNyeXB0aW9uLlxuICAgKlxuICAgKiBUaGlzIGlzIGluZGVwZW5kZW50IG9mIGBzb3VyY2VLbXNLZXlBcm5gIGFuZCB0aGUgc291cmNlIGxha2Unc1xuICAgKiBga21zS2V5SWRgLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vIEtNUyBlbmNyeXB0IHN0YXRlbWVudCBpcyBhZGRlZFxuICAgKi9cbiAgcmVhZG9ubHkgZGVzdGluYXRpb25LbXNLZXlBcm5zPzogc3RyaW5nW107XG59XG5cbi8qKlxuICogUHJvcGVydGllcyBmb3IgU3RhbmRhcmRTZWN1cml0eUxha2UuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3RhbmRhcmRTZWN1cml0eUxha2VQcm9wcyBleHRlbmRzIEV4dGVuZGVkQ29uc3RydWN0UHJvcHMge1xuICAvKipcbiAgICogVGhlIEtNUyBrZXkgaWQgdG8gdXNlIHRvIGVuY3J5cHQgZGF0YSBzdG9yZWQgYnkgU2VjdXJpdHkgTGFrZS4gVXNlIHRoZVxuICAgKiBsaXRlcmFsIHN0cmluZyBgUzNfTUFOQUdFRF9LRVlgIHRvIHVzZSBTMyBtYW5hZ2VkIGtleXMgKFNTRS1TMykuIE9taXQgdG9cbiAgICogbGV0IFNlY3VyaXR5IExha2UgdXNlIGl0cyBkZWZhdWx0IG1hbmFnZWQga2V5LlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIFNlY3VyaXR5IExha2UgbWFuYWdlZCBlbmNyeXB0aW9uXG4gICAqL1xuICByZWFkb25seSBrbXNLZXlJZD86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIEFSTiBvZiB0aGUgcm9sZSB1c2VkIGJ5IFNlY3VyaXR5IExha2UgdG8gbWFuYWdlIHRoZSBBV1MgR2x1ZVxuICAgKiBtZXRhc3RvcmUuIElmIG9taXR0ZWQsIGEgcm9sZSBpcyBjcmVhdGVkIHdpdGggdGhlXG4gICAqIGBBbWF6b25TZWN1cml0eUxha2VNZXRhc3RvcmVNYW5hZ2VyYCBBV1MgbWFuYWdlZCBwb2xpY3kgYXR0YWNoZWQuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gYSByb2xlIGlzIGNyZWF0ZWRcbiAgICovXG4gIHJlYWRvbmx5IG1ldGFTdG9yZU1hbmFnZXJSb2xlQXJuPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgQVJOIG9mIHRoZSBjdXN0b21lci1tYW5hZ2VkIEtNUyBrZXkgdXNlZCB0byBlbmNyeXB0IFNlY3VyaXR5IExha2VcbiAgICogZGF0YS4gUmVxdWlyZWQgd2hlbiBga21zS2V5SWRgIGlzIHNldCB0byBhIGN1c3RvbWVyLW1hbmFnZWQga2V5IGFuZCB0aGlzXG4gICAqIGNvbnN0cnVjdCBjcmVhdGVzIHRoZSBtZXRhc3RvcmUgbWFuYWdlciByb2xlIChpLmUuIHdoZW5cbiAgICogYG1ldGFTdG9yZU1hbmFnZXJSb2xlQXJuYCBpcyBub3QgcHJvdmlkZWQpLiBUaGUgbWV0YXN0b3JlIG1hbmFnZXJcbiAgICogTGFtYmRhIG11c3QgZGVjcnlwdCBhbmQgKHJlKWVuY3J5cHQgU2VjdXJpdHkgTGFrZSBtZXRhZGF0YTsgdGhlIEFXU1xuICAgKiBtYW5hZ2VkIHBvbGljeSBgQW1hem9uU2VjdXJpdHlMYWtlTWV0YXN0b3JlTWFuYWdlcmAgZG9lcyBub3QgaW5jbHVkZVxuICAgKiBLTVMgcGVybWlzc2lvbnMsIHNvIHdpdGhvdXQgdGhpcyBncmFudCB0aGUgc3RhY2sgZGVwbG95cyBidXQgcGFydGl0aW9uXG4gICAqIHVwZGF0ZXMgYW5kIHN1YnNjcmliZXIgcXVlcmllcyBzaWxlbnRseSBmYWlsLiBOb3QgcmVxdWlyZWQgd2hlblxuICAgKiBga21zS2V5SWRgIGlzIHVuc2V0IG9yIHNldCB0byBgUzNfTUFOQUdFRF9LRVlgLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vIEtNUyBzdGF0ZW1lbnQgaXMgYWRkZWQgKHN1ZmZpY2llbnQgd2hlbiB0aGUgZGF0YSBsYWtlXG4gICAqIHVzZXMgU2VjdXJpdHkgTGFrZSBkZWZhdWx0cyBvciBTU0UtUzMpXG4gICAqL1xuICByZWFkb25seSBtZXRhU3RvcmVNYW5hZ2VyS21zS2V5QXJuPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBMaWZlY3ljbGUgY29uZmlndXJhdGlvbiBmb3IgdGhlIFNlY3VyaXR5IExha2UgbWFuYWdlZCBTMyBzdG9yYWdlLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIFNlY3VyaXR5IExha2UgZGVmYXVsdHNcbiAgICovXG4gIHJlYWRvbmx5IGxpZmVjeWNsZT86IFNlY3VyaXR5TGFrZUxpZmVjeWNsZVByb3BzO1xuXG4gIC8qKlxuICAgKiBSZXBsaWNhdGlvbiBjb25maWd1cmF0aW9uIGZvciB0aGUgU2VjdXJpdHkgTGFrZSBtYW5hZ2VkIFMzIHN0b3JhZ2UuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm8gcmVwbGljYXRpb25cbiAgICovXG4gIHJlYWRvbmx5IHJlcGxpY2F0aW9uPzogU2VjdXJpdHlMYWtlUmVwbGljYXRpb25Qcm9wcztcblxuICAvKipcbiAgICogVGhlIEFXUyBuYXRpdmUgbG9nIHNvdXJjZXMgdG8gZW5hYmxlIG9uIHRoZSBkYXRhIGxha2UuIFNvdXJjZXMgYXJlXG4gICAqIGNyZWF0ZWQgc2VxdWVudGlhbGx5IHVzaW5nIGBEZXBlbmRzT25gIGFzIHJlcXVpcmVkIGJ5IFNlY3VyaXR5IExha2UuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm8gbG9nIHNvdXJjZXMgYXJlIGVuYWJsZWRcbiAgICovXG4gIHJlYWRvbmx5IGxvZ1NvdXJjZXM/OiBBd3NMb2dTb3VyY2VQcm9wc1tdO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGNyZWF0ZSB0aGUgYEFXU1NlcnZpY2VSb2xlRm9yTGFrZUZvcm1hdGlvbkRhdGFBY2Nlc3NgXG4gICAqIHNlcnZpY2UtbGlua2VkIHJvbGUuIFNlY3VyaXR5IExha2UgcmVxdWlyZXMgdGhpcyByb2xlIHRvIGV4aXN0IGluIHRoZVxuICAgKiBhY2NvdW50IGJlZm9yZSBhIGRhdGEgbGFrZSBjYW4gYmUgY3JlYXRlZDsgaG93ZXZlciB0aGUgcm9sZSBpcyBhXG4gICAqIHNpbmdsZXRvbiBwZXIgYWNjb3VudCBhbmQgaXMgZnJlcXVlbnRseSBhdXRvLWNyZWF0ZWQgb24gZmlyc3QgdXNlIG9mXG4gICAqIExha2UgRm9ybWF0aW9uLiBFbmFibGUgdGhpcyBvbmx5IHdoZW4geW91IGtub3cgdGhlIHJvbGUgZG9lcyBub3QgeWV0XG4gICAqIGV4aXN0IGluIHRoZSBhY2NvdW50LCBvdGhlcndpc2Ugc3RhY2sgY3JlYXRpb24gd2lsbCBmYWlsIHdpdGhcbiAgICogYGhhcyBiZWVuIHRha2VuIGluIHRoaXMgYWNjb3VudGAuXG4gICAqXG4gICAqIFRoZSBkYXRhIGxha2Ugd2lsbCBgRGVwZW5kc09uYCB0aGlzIHJvbGUgd2hlbiBpdCBpcyBjcmVhdGVkIHNvIG9yZGVyaW5nXG4gICAqIGlzIGhhbmRsZWQgYXV0b21hdGljYWxseS5cbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IGNyZWF0ZUxha2VGb3JtYXRpb25TZXJ2aWNlTGlua2VkUm9sZT86IGJvb2xlYW47XG59XG5cbi8qKlxuICogU3RhbmRhcmQgQW1hem9uIFNlY3VyaXR5IExha2UuIFdyYXBzIHRoZSBTZWN1cml0eSBMYWtlIEwxIGNvbnN0cnVjdHMgdG9cbiAqIHN0YW5kIHVwIGEgZGF0YSBsYWtlIHdpdGggYW4gb3B0aW9uYWwgc2V0IG9mIEFXUyBuYXRpdmUgbG9nIHNvdXJjZXNcbiAqIGVuYWJsZWQsIGEgbWV0YXN0b3JlIG1hbmFnZXIgcm9sZSwgbGlmZWN5Y2xlIHBvbGljeSBhbmQgcmVwbGljYXRpb24uXG4gKlxuICogV2hlcmUgdGhpcyBjb25zdHJ1Y3QgZG9lcyBub3QgbWVldCB5b3VyIG5lZWRzLCB1c2UgdGhlIHVuZGVybHlpbmdcbiAqIGBDZm5EYXRhTGFrZWAgYW5kIGBDZm5Bd3NMb2dTb3VyY2VgIGNvbnN0cnVjdHMgZGlyZWN0bHkuXG4gKi9cbmV4cG9ydCBjbGFzcyBTdGFuZGFyZFNlY3VyaXR5TGFrZSBleHRlbmRzIEV4dGVuZGVkQ29uc3RydWN0IHtcbiAgLyoqXG4gICAqIFRoZSB1bmRlcmx5aW5nIGBDZm5EYXRhTGFrZWAgcmVzb3VyY2UuXG4gICAqL1xuICByZWFkb25seSBkYXRhTGFrZTogQ2ZuRGF0YUxha2U7XG5cbiAgLyoqXG4gICAqIFRoZSBJQU0gcm9sZSB1c2VkIGJ5IFNlY3VyaXR5IExha2UgdG8gbWFuYWdlIHRoZSBHbHVlIG1ldGFzdG9yZS4gV2hlblxuICAgKiBgbWV0YVN0b3JlTWFuYWdlclJvbGVBcm5gIGlzIHByb3ZpZGVkIHRoaXMgd2lsbCBiZSBgdW5kZWZpbmVkYC5cbiAgICovXG4gIHJlYWRvbmx5IG1ldGFTdG9yZU1hbmFnZXJSb2xlPzogUm9sZTtcblxuICAvKipcbiAgICogVGhlIElBTSByb2xlIHVzZWQgYnkgU2VjdXJpdHkgTGFrZSB0byByZXBsaWNhdGUgb2JqZWN0cy4gT25seSBjcmVhdGVkXG4gICAqIHdoZW4gcmVwbGljYXRpb24gaXMgZW5hYmxlZCBhbmQgbm8gYHJvbGVBcm5gIHdhcyBzdXBwbGllZC5cbiAgICovXG4gIHJlYWRvbmx5IHJlcGxpY2F0aW9uUm9sZT86IFJvbGU7XG5cbiAgLyoqXG4gICAqIFRoZSBMYWtlIEZvcm1hdGlvbiBgQVdTU2VydmljZVJvbGVGb3JMYWtlRm9ybWF0aW9uRGF0YUFjY2Vzc2BcbiAgICogc2VydmljZS1saW5rZWQgcm9sZSwgd2hlbiBpdCB3YXMgcHJvdmlzaW9uZWQgYnkgdGhpcyBjb25zdHJ1Y3QuXG4gICAqL1xuICByZWFkb25seSBsYWtlRm9ybWF0aW9uU2VydmljZUxpbmtlZFJvbGU/OiBDZm5TZXJ2aWNlTGlua2VkUm9sZTtcblxuICAvKipcbiAgICogVGhlIGBDZm5Bd3NMb2dTb3VyY2VgIHJlc291cmNlcyBjcmVhdGVkIGJ5IHRoaXMgY29uc3RydWN0LCBpbiB0aGUgb3JkZXJcbiAgICogdGhleSB3ZXJlIGRlY2xhcmVkLlxuICAgKi9cbiAgcmVhZG9ubHkgbG9nU291cmNlczogQ2ZuQXdzTG9nU291cmNlW10gPSBbXTtcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wcz86IFN0YW5kYXJkU2VjdXJpdHlMYWtlUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIHByb3BzKTtcblxuICAgIC8vIE9wdGlvbmFsIExha2UgRm9ybWF0aW9uIHNlcnZpY2UtbGlua2VkIHJvbGUuIFNlY3VyaXR5IExha2UgcmVxdWlyZXNcbiAgICAvLyB0aGlzIFNMUiB0byBleGlzdCBpbiB0aGUgYWNjb3VudCBiZWZvcmUgYSBkYXRhIGxha2UgY2FuIGJlIGNyZWF0ZWQuXG4gICAgaWYgKHByb3BzPy5jcmVhdGVMYWtlRm9ybWF0aW9uU2VydmljZUxpbmtlZFJvbGUpIHtcbiAgICAgIHRoaXMubGFrZUZvcm1hdGlvblNlcnZpY2VMaW5rZWRSb2xlID0gbmV3IENmblNlcnZpY2VMaW5rZWRSb2xlKFxuICAgICAgICB0aGlzLFxuICAgICAgICAnTGFrZUZvcm1hdGlvblNlcnZpY2VMaW5rZWRSb2xlJyxcbiAgICAgICAge1xuICAgICAgICAgIGF3c1NlcnZpY2VOYW1lOiAnbGFrZWZvcm1hdGlvbi5hbWF6b25hd3MuY29tJyxcbiAgICAgICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgICAgICdTZXJ2aWNlLWxpbmtlZCByb2xlIHVzZWQgYnkgQVdTIExha2UgRm9ybWF0aW9uIHRvIGFjY2VzcyByZWdpc3RlcmVkIFMzIGxvY2F0aW9ucy4gUmVxdWlyZWQgYnkgQW1hem9uIFNlY3VyaXR5IExha2UuJyxcbiAgICAgICAgfSxcbiAgICAgICk7XG4gICAgICAvLyBUaGUgTGFrZSBGb3JtYXRpb24gU0xSIGlzIGFuIGFjY291bnQgc2luZ2xldG9uIHRoYXQgaXMgZnJlcXVlbnRseVxuICAgICAgLy8gc2hhcmVkIHdpdGggb3RoZXIgc3RhY2tzIGFuZCBjb25zb2xlcy4gUmV0YWluIGl0IG9uXG4gICAgICAvLyBzdGFjay1kZWxldGUvb3B0LW91dCBzbyB0b2dnbGluZyB0aGlzIGZsYWcgb2ZmIChvciByZW1vdmluZyB0aGlzXG4gICAgICAvLyBjb25zdHJ1Y3QpIGRvZXMgbm90IHN0cmlwIExha2UgRm9ybWF0aW9uIGFjY2VzcyBhY2NvdW50LXdpZGUuXG4gICAgICB0aGlzLmxha2VGb3JtYXRpb25TZXJ2aWNlTGlua2VkUm9sZS5hcHBseVJlbW92YWxQb2xpY3koXG4gICAgICAgIFJlbW92YWxQb2xpY3kuUkVUQUlOLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBNZXRhc3RvcmUgbWFuYWdlciByb2xlLlxuICAgIGxldCBtZXRhU3RvcmVNYW5hZ2VyUm9sZUFybiA9IHByb3BzPy5tZXRhU3RvcmVNYW5hZ2VyUm9sZUFybjtcbiAgICBjb25zdCB1c2VzQ3VzdG9tZXJNYW5hZ2VkS2V5ID1cbiAgICAgIHByb3BzPy5rbXNLZXlJZCAhPT0gdW5kZWZpbmVkICYmIHByb3BzLmttc0tleUlkICE9PSAnUzNfTUFOQUdFRF9LRVknO1xuICAgIGlmICghbWV0YVN0b3JlTWFuYWdlclJvbGVBcm4pIHtcbiAgICAgIC8vIFdoZW4gdGhlIGRhdGEgbGFrZSBpcyBlbmNyeXB0ZWQgd2l0aCBhIGN1c3RvbWVyLW1hbmFnZWQgS01TIGtleSxcbiAgICAgIC8vIHRoZSBtZXRhc3RvcmUgbWFuYWdlciBMYW1iZGEgbXVzdCBiZSBhYmxlIHRvIERlY3J5cHQgLyBFbmNyeXB0IC9cbiAgICAgIC8vIEdlbmVyYXRlRGF0YUtleSBhZ2FpbnN0IHRoYXQga2V5LiBUaGUgQVdTIG1hbmFnZWQgcG9saWN5XG4gICAgICAvLyBgQW1hem9uU2VjdXJpdHlMYWtlTWV0YXN0b3JlTWFuYWdlcmAgZG9lcyBOT1QgaW5jbHVkZSBLTVMgYWN0aW9ucyxcbiAgICAgIC8vIHNvIHdpdGhvdXQgdGhpcyBncmFudCBDRk4gZGVwbG95bWVudCBzdWNjZWVkcyBidXQgcGFydGl0aW9uXG4gICAgICAvLyB1cGRhdGVzIGFuZCBzdWJzY3JpYmVyIHF1ZXJpZXMgZmFpbCBhdCBydW50aW1lLiBUaGUga2V5IEFSTiBpc1xuICAgICAgLy8gbm90IGRlcml2YWJsZSBhdCBzeW50aCB0aW1lLCBzbyByZXF1aXJlIHRoZSBjYWxsZXIgdG8gc3VwcGx5IGl0XG4gICAgICAvLyBleHBsaWNpdGx5IHZpYSBgbWV0YVN0b3JlTWFuYWdlckttc0tleUFybmAgb3IgcHJlLXByb3Zpc2lvbiB0aGVpclxuICAgICAgLy8gb3duIG1ldGFzdG9yZSBtYW5hZ2VyIHJvbGUgdmlhIGBtZXRhU3RvcmVNYW5hZ2VyUm9sZUFybmAuXG4gICAgICBpZiAodXNlc0N1c3RvbWVyTWFuYWdlZEtleSAmJiAhcHJvcHM/Lm1ldGFTdG9yZU1hbmFnZXJLbXNLZXlBcm4pIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICdTdGFuZGFyZFNlY3VyaXR5TGFrZTogYSBjdXN0b21lci1tYW5hZ2VkIGBrbXNLZXlJZGAgcmVxdWlyZXMgJyArXG4gICAgICAgICAgICAnYG1ldGFTdG9yZU1hbmFnZXJLbXNLZXlBcm5gIHNvIHRoZSBnZW5lcmF0ZWQgbWV0YXN0b3JlIG1hbmFnZXIgJyArXG4gICAgICAgICAgICAncm9sZSBjYW4gYmUgZ3JhbnRlZCB0aGUgbmVjZXNzYXJ5IEtNUyBwZXJtaXNzaW9ucy4gJyArXG4gICAgICAgICAgICAnQWx0ZXJuYXRpdmVseSwgcHJlLXByb3Zpc2lvbiB0aGUgbWV0YXN0b3JlIG1hbmFnZXIgcm9sZSAnICtcbiAgICAgICAgICAgICd5b3Vyc2VsZiBhbmQgcGFzcyBpdHMgQVJOIHZpYSBgbWV0YVN0b3JlTWFuYWdlclJvbGVBcm5gLicsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBjb25zdCBtZXRhU3RvcmVJbmxpbmVQb2xpY2llczoge1tuYW1lOiBzdHJpbmddOiBQb2xpY3lEb2N1bWVudH0gPSB7fTtcbiAgICAgIGlmICh1c2VzQ3VzdG9tZXJNYW5hZ2VkS2V5ICYmIHByb3BzPy5tZXRhU3RvcmVNYW5hZ2VyS21zS2V5QXJuKSB7XG4gICAgICAgIG1ldGFTdG9yZUlubGluZVBvbGljaWVzLkFtYXpvblNlY3VyaXR5TGFrZU1ldGFzdG9yZU1hbmFnZXJLbXNQb2xpY3kgPVxuICAgICAgICAgIG5ldyBQb2xpY3lEb2N1bWVudCh7XG4gICAgICAgICAgICBzdGF0ZW1lbnRzOiBbXG4gICAgICAgICAgICAgIG5ldyBQb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICAgICAgICAgIHNpZDogJ0FsbG93TWV0YVN0b3JlTWFuYWdlckttc0FjY2VzcycsXG4gICAgICAgICAgICAgICAgYWN0aW9uczogW1xuICAgICAgICAgICAgICAgICAgJ2ttczpEZWNyeXB0JyxcbiAgICAgICAgICAgICAgICAgICdrbXM6RW5jcnlwdCcsXG4gICAgICAgICAgICAgICAgICAna21zOkdlbmVyYXRlRGF0YUtleScsXG4gICAgICAgICAgICAgICAgICAna21zOkRlc2NyaWJlS2V5JyxcbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIHJlc291cmNlczogW3Byb3BzLm1ldGFTdG9yZU1hbmFnZXJLbXNLZXlBcm5dLFxuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICB0aGlzLm1ldGFTdG9yZU1hbmFnZXJSb2xlID0gbmV3IFJvbGUodGhpcywgJ01ldGFTdG9yZU1hbmFnZXJSb2xlJywge1xuICAgICAgICAvLyBUaGUgcGFydGl0aW9uLXVwZGF0ZXIgTGFtYmRhIGZ1bmN0aW9ucyBjcmVhdGVkIGJ5IFNlY3VyaXR5IExha2UgYXJlXG4gICAgICAgIC8vIGhhcmQtY29kZWQgdG8gYXNzdW1lIGEgcm9sZSBuYW1lZFxuICAgICAgICAvLyBgQW1hem9uU2VjdXJpdHlMYWtlTWV0YVN0b3JlTWFuYWdlclYyYCB1bmRlciB0aGUgYC9zZXJ2aWNlLXJvbGUvYFxuICAgICAgICAvLyBwYXRoIGFuZCBkbyBub3QgaG9ub3IgYW4gYXJiaXRyYXJ5IHJvbGUgQVJOLiBXaXRob3V0IGEgbWF0Y2hpbmdcbiAgICAgICAgLy8gcm9sZSBuYW1lLCBDRk4gZGVwbG95bWVudCBhbmQgYENyZWF0ZURhdGFMYWtlYCBzdWNjZWVkIGJ1dCB0aGVcbiAgICAgICAgLy8gcGFydGl0aW9uIHVwZGF0ZXIgc2lsZW50bHkgZmFpbHMgYW5kIHN1YnNjcmliZXJzIGNhbm5vdCBxdWVyeVxuICAgICAgICAvLyByZXBsaWNhdGVkIG9iamVjdHMuIFRoZSByb2xlIG5hbWUgaXMgYWNjb3VudC1nbG9iYWw7IGZvclxuICAgICAgICAvLyBtdWx0aS1SZWdpb24gZGVwbG95cyBpbiB0aGUgc2FtZSBhY2NvdW50IHBhc3NcbiAgICAgICAgLy8gYG1ldGFTdG9yZU1hbmFnZXJSb2xlQXJuYCBmb3IgYWxsIGJ1dCBvbmUgUmVnaW9uLlxuICAgICAgICBwYXRoOiAnL3NlcnZpY2Utcm9sZS8nLFxuICAgICAgICByb2xlTmFtZTogJ0FtYXpvblNlY3VyaXR5TGFrZU1ldGFTdG9yZU1hbmFnZXJWMicsXG4gICAgICAgIGFzc3VtZWRCeTogbmV3IFNlcnZpY2VQcmluY2lwYWwoJ2xhbWJkYS5hbWF6b25hd3MuY29tJyksXG4gICAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICAgICdSb2xlIHVzZWQgYnkgQW1hem9uIFNlY3VyaXR5IExha2UgbWV0YXN0b3JlIG1hbmFnZXIgTGFtYmRhIHRvIG1hbmFnZSB0aGUgQVdTIEdsdWUgbWV0YXN0b3JlLicsXG4gICAgICAgIG1hbmFnZWRQb2xpY2llczogW1xuICAgICAgICAgIE1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKFxuICAgICAgICAgICAgJ3NlcnZpY2Utcm9sZS9BbWF6b25TZWN1cml0eUxha2VNZXRhc3RvcmVNYW5hZ2VyJyxcbiAgICAgICAgICApLFxuICAgICAgICBdLFxuICAgICAgICBpbmxpbmVQb2xpY2llczogbWV0YVN0b3JlSW5saW5lUG9saWNpZXMsXG4gICAgICB9KTtcbiAgICAgIG1ldGFTdG9yZU1hbmFnZXJSb2xlQXJuID0gdGhpcy5tZXRhU3RvcmVNYW5hZ2VyUm9sZS5yb2xlQXJuO1xuICAgIH1cblxuICAgIC8vIEVuY3J5cHRpb24gY29uZmlndXJhdGlvbi5cbiAgICBjb25zdCBlbmNyeXB0aW9uQ29uZmlndXJhdGlvbjpcbiAgICAgIHwgQ2ZuRGF0YUxha2UuRW5jcnlwdGlvbkNvbmZpZ3VyYXRpb25Qcm9wZXJ0eVxuICAgICAgfCB1bmRlZmluZWQgPVxuICAgICAgcHJvcHM/Lmttc0tleUlkICE9PSB1bmRlZmluZWQgPyB7a21zS2V5SWQ6IHByb3BzLmttc0tleUlkfSA6IHVuZGVmaW5lZDtcblxuICAgIC8vIExpZmVjeWNsZSBjb25maWd1cmF0aW9uLlxuICAgIGxldCBsaWZlY3ljbGVDb25maWd1cmF0aW9uOlxuICAgICAgfCBDZm5EYXRhTGFrZS5MaWZlY3ljbGVDb25maWd1cmF0aW9uUHJvcGVydHlcbiAgICAgIHwgdW5kZWZpbmVkO1xuICAgIGlmIChwcm9wcz8ubGlmZWN5Y2xlKSB7XG4gICAgICBsaWZlY3ljbGVDb25maWd1cmF0aW9uID0ge1xuICAgICAgICBleHBpcmF0aW9uOlxuICAgICAgICAgIHByb3BzLmxpZmVjeWNsZS5leHBpcmF0aW9uRGF5cyAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgICA/IHtkYXlzOiBwcm9wcy5saWZlY3ljbGUuZXhwaXJhdGlvbkRheXN9XG4gICAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgICAgdHJhbnNpdGlvbnM6IHByb3BzLmxpZmVjeWNsZS50cmFuc2l0aW9ucz8ubWFwKCh0KSA9PiAoe1xuICAgICAgICAgIGRheXM6IHQuZGF5cyxcbiAgICAgICAgICBzdG9yYWdlQ2xhc3M6IHQuc3RvcmFnZUNsYXNzLFxuICAgICAgICB9KSksXG4gICAgICB9O1xuICAgIH1cblxuICAgIC8vIFJlcGxpY2F0aW9uIGNvbmZpZ3VyYXRpb24uXG4gICAgbGV0IHJlcGxpY2F0aW9uQ29uZmlndXJhdGlvbjpcbiAgICAgIHwgQ2ZuRGF0YUxha2UuUmVwbGljYXRpb25Db25maWd1cmF0aW9uUHJvcGVydHlcbiAgICAgIHwgdW5kZWZpbmVkO1xuICAgIGlmIChwcm9wcz8ucmVwbGljYXRpb24pIHtcbiAgICAgIGxldCByZXBsaWNhdGlvblJvbGVBcm4gPSBwcm9wcy5yZXBsaWNhdGlvbi5yb2xlQXJuO1xuICAgICAgaWYgKCFyZXBsaWNhdGlvblJvbGVBcm4pIHtcbiAgICAgICAgY29uc3QgYWNjb3VudCA9IFN0YWNrLm9mKHRoaXMpLmFjY291bnQ7XG4gICAgICAgIGNvbnN0IHNvdXJjZVJlZ2lvbiA9IFN0YWNrLm9mKHRoaXMpLnJlZ2lvbjtcbiAgICAgICAgY29uc3QgZGVzdGluYXRpb25SZWdpb25zID0gcHJvcHMucmVwbGljYXRpb24ucmVnaW9ucztcblxuICAgICAgICAvLyBTb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGVuY3J5cHRpb24gYXJlIGluZGVwZW5kZW50IGluIFNlY3VyaXR5XG4gICAgICAgIC8vIExha2U6IGEgQ01LIHNvdXJjZSBjYW4gcmVwbGljYXRlIHRvIGFuIFNTRS1TMyByb2xsdXAgYW5kIHZpY2VcbiAgICAgICAgLy8gdmVyc2EuIEdyYW50IGBrbXM6RGVjcnlwdGAgb24gdGhlIHNvdXJjZSBrZXkgb25seSB3aGVuIHRoZVxuICAgICAgICAvLyBzb3VyY2UgbGFrZSB1c2VzIGEgQ01LLCBhbmQgZ3JhbnQgYGttczpFbmNyeXB0YCAvXG4gICAgICAgIC8vIGBrbXM6R2VuZXJhdGVEYXRhS2V5YCBvbiB0aGUgZGVzdGluYXRpb24ga2V5cyBvbmx5IHdoZW4gYW55XG4gICAgICAgIC8vIHJvbGx1cCBidWNrZXQgdXNlcyBhIENNSy4gVGhlIGtleSBBUk5zIGFyZSBub3QgZGVyaXZhYmxlIGF0XG4gICAgICAgIC8vIHN5bnRoIHRpbWUsIHNvIHJlcXVpcmUgdGhlIGNhbGxlciB0byBzdXBwbHkgdGhlbSBleHBsaWNpdGx5IG9uXG4gICAgICAgIC8vIHRoZSBlbmNyeXB0ZWQgc2lkZSAob3IgcHJlLXByb3Zpc2lvbiB0aGVpciBvd24gcmVwbGljYXRpb24gcm9sZVxuICAgICAgICAvLyB2aWEgYHJlcGxpY2F0aW9uLnJvbGVBcm5gKS5cbiAgICAgICAgaWYgKHVzZXNDdXN0b21lck1hbmFnZWRLZXkgJiYgIXByb3BzLnJlcGxpY2F0aW9uLnNvdXJjZUttc0tleUFybikge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICdTdGFuZGFyZFNlY3VyaXR5TGFrZTogYSBjdXN0b21lci1tYW5hZ2VkIGBrbXNLZXlJZGAgd2l0aCAnICtcbiAgICAgICAgICAgICAgJ3JlcGxpY2F0aW9uIHJlcXVpcmVzIGByZXBsaWNhdGlvbi5zb3VyY2VLbXNLZXlBcm5gIHNvIHRoZSAnICtcbiAgICAgICAgICAgICAgJ2dlbmVyYXRlZCByZXBsaWNhdGlvbiByb2xlIGNhbiBga21zOkRlY3J5cHRgIHNvdXJjZSBvYmplY3RzLiAnICtcbiAgICAgICAgICAgICAgJ0lmIGFueSByb2xsdXAgUmVnaW9uIGJ1Y2tldCBpcyBhbHNvIGVuY3J5cHRlZCB3aXRoIGEgJyArXG4gICAgICAgICAgICAgICdjdXN0b21lci1tYW5hZ2VkIGtleSwgcGFzcyBpdHMgQVJOIHZpYSAnICtcbiAgICAgICAgICAgICAgJ2ByZXBsaWNhdGlvbi5kZXN0aW5hdGlvbkttc0tleUFybnNgLiBBbHRlcm5hdGl2ZWx5LCAnICtcbiAgICAgICAgICAgICAgJ3ByZS1wcm92aXNpb24gdGhlIHJlcGxpY2F0aW9uIHJvbGUgeW91cnNlbGYgYW5kIHBhc3MgaXRzIEFSTiAnICtcbiAgICAgICAgICAgICAgJ3ZpYSBgcmVwbGljYXRpb24ucm9sZUFybmAuJyxcbiAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qga21zU3RhdGVtZW50czogUG9saWN5U3RhdGVtZW50W10gPSBbXTtcbiAgICAgICAgaWYgKHVzZXNDdXN0b21lck1hbmFnZWRLZXkgJiYgcHJvcHMucmVwbGljYXRpb24uc291cmNlS21zS2V5QXJuKSB7XG4gICAgICAgICAga21zU3RhdGVtZW50cy5wdXNoKFxuICAgICAgICAgICAgbmV3IFBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgICAgICAgIHNpZDogJ0FsbG93RGVjcnlwdFNvdXJjZUttc0tleScsXG4gICAgICAgICAgICAgIGFjdGlvbnM6IFsna21zOkRlY3J5cHQnXSxcbiAgICAgICAgICAgICAgcmVzb3VyY2VzOiBbcHJvcHMucmVwbGljYXRpb24uc291cmNlS21zS2V5QXJuXSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKFxuICAgICAgICAgIHByb3BzLnJlcGxpY2F0aW9uLmRlc3RpbmF0aW9uS21zS2V5QXJucyAmJlxuICAgICAgICAgIHByb3BzLnJlcGxpY2F0aW9uLmRlc3RpbmF0aW9uS21zS2V5QXJucy5sZW5ndGggPiAwXG4gICAgICAgICkge1xuICAgICAgICAgIGttc1N0YXRlbWVudHMucHVzaChcbiAgICAgICAgICAgIG5ldyBQb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICAgICAgICBzaWQ6ICdBbGxvd0VuY3J5cHREZXN0aW5hdGlvbkttc0tleXMnLFxuICAgICAgICAgICAgICBhY3Rpb25zOiBbJ2ttczpFbmNyeXB0JywgJ2ttczpHZW5lcmF0ZURhdGFLZXknXSxcbiAgICAgICAgICAgICAgcmVzb3VyY2VzOiBwcm9wcy5yZXBsaWNhdGlvbi5kZXN0aW5hdGlvbkttc0tleUFybnMsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5yZXBsaWNhdGlvblJvbGUgPSBuZXcgUm9sZSh0aGlzLCAnUmVwbGljYXRpb25Sb2xlJywge1xuICAgICAgICAgIC8vIFNlY3VyaXR5IExha2UgcmVxdWlyZXMgdGhlIHJlcGxpY2F0aW9uIHJvbGUgdG8gbGl2ZSB1bmRlciB0aGVcbiAgICAgICAgICAvLyBzZXJ2aWNlLXJvbGUvIHBhdGggYW5kIHN0YXJ0IHdpdGggYFNlY3VyaXR5TGFrZWAuIElBTSByb2xlIG5hbWVzXG4gICAgICAgICAgLy8gYXJlIGFjY291bnQtZ2xvYmFsLCBzbyBpbmNsdWRlIHRoZSBzb3VyY2UgUmVnaW9uIGluIHRoZSBzdWZmaXggdG9cbiAgICAgICAgICAvLyBhdm9pZCBjb2xsaXNpb25zIHdoZW4gdGhlIGNvbnN0cnVjdCBpcyBkZXBsb3llZCB0byBtdWx0aXBsZVxuICAgICAgICAgIC8vIFJlZ2lvbnMgaW4gdGhlIHNhbWUgYWNjb3VudC5cbiAgICAgICAgICBwYXRoOiAnL3NlcnZpY2Utcm9sZS8nLFxuICAgICAgICAgIHJvbGVOYW1lOiBgU2VjdXJpdHlMYWtlUzNSZXBsaWNhdGlvblJvbGUtJHtzb3VyY2VSZWdpb259YCxcbiAgICAgICAgICAvLyBBbWF6b24gUzMgcGVyZm9ybXMgdGhlIGNyb3NzLVJlZ2lvbiByZXBsaWNhdGlvbiwgc28gaXQgKG5vdCB0aGVcbiAgICAgICAgICAvLyBTZWN1cml0eSBMYWtlIHNlcnZpY2UpIG11c3QgYmUgYWxsb3dlZCB0byBhc3N1bWUgdGhpcyByb2xlLlxuICAgICAgICAgIGFzc3VtZWRCeTogbmV3IFNlcnZpY2VQcmluY2lwYWwoJ3MzLmFtYXpvbmF3cy5jb20nKSxcbiAgICAgICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgICAgICdSb2xlIHVzZWQgYnkgQW1hem9uIFMzIHRvIHJlcGxpY2F0ZSBBbWF6b24gU2VjdXJpdHkgTGFrZSBvYmplY3RzIGFjcm9zcyBSZWdpb25zLicsXG4gICAgICAgICAgLy8gTm8gQVdTIG1hbmFnZWQgcG9saWN5IGV4aXN0cyBmb3IgdGhpcyByb2xlOyBhdHRhY2ggdGhlIGlubGluZVxuICAgICAgICAgIC8vIHBvbGljeSBkb2N1bWVudGVkIGJ5IFNlY3VyaXR5IExha2UuXG4gICAgICAgICAgLy8gaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL3NlY3VyaXR5LWxha2UvbGF0ZXN0L3VzZXJndWlkZS9hZGQtcm9sbHVwLXJlZ2lvbi5odG1sXG4gICAgICAgICAgaW5saW5lUG9saWNpZXM6IHtcbiAgICAgICAgICAgIEFtYXpvblNlY3VyaXR5TGFrZVMzUmVwbGljYXRpb25Sb2xlUG9saWN5OiBuZXcgUG9saWN5RG9jdW1lbnQoe1xuICAgICAgICAgICAgICBzdGF0ZW1lbnRzOiBbXG4gICAgICAgICAgICAgICAgbmV3IFBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgICAgICAgICAgICBzaWQ6ICdBbGxvd1JlYWRTM1JlcGxpY2F0aW9uU2V0dGluZycsXG4gICAgICAgICAgICAgICAgICBhY3Rpb25zOiBbXG4gICAgICAgICAgICAgICAgICAgICdzMzpMaXN0QnVja2V0JyxcbiAgICAgICAgICAgICAgICAgICAgJ3MzOkdldFJlcGxpY2F0aW9uQ29uZmlndXJhdGlvbicsXG4gICAgICAgICAgICAgICAgICAgICdzMzpHZXRPYmplY3RWZXJzaW9uRm9yUmVwbGljYXRpb24nLFxuICAgICAgICAgICAgICAgICAgICAnczM6R2V0T2JqZWN0VmVyc2lvbicsXG4gICAgICAgICAgICAgICAgICAgICdzMzpHZXRPYmplY3RWZXJzaW9uQWNsJyxcbiAgICAgICAgICAgICAgICAgICAgJ3MzOkdldE9iamVjdFZlcnNpb25UYWdnaW5nJyxcbiAgICAgICAgICAgICAgICAgICAgJ3MzOkdldE9iamVjdFJldGVudGlvbicsXG4gICAgICAgICAgICAgICAgICAgICdzMzpHZXRPYmplY3RMZWdhbEhvbGQnLFxuICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgIHJlc291cmNlczogW1xuICAgICAgICAgICAgICAgICAgICBgYXJuOiR7U3RhY2sub2YodGhpcykucGFydGl0aW9ufTpzMzo6OmF3cy1zZWN1cml0eS1kYXRhLWxha2UtJHtzb3VyY2VSZWdpb259KmAsXG4gICAgICAgICAgICAgICAgICAgIGBhcm46JHtTdGFjay5vZih0aGlzKS5wYXJ0aXRpb259OnMzOjo6YXdzLXNlY3VyaXR5LWRhdGEtbGFrZS0ke3NvdXJjZVJlZ2lvbn0qLypgLFxuICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgIGNvbmRpdGlvbnM6IHtcbiAgICAgICAgICAgICAgICAgICAgU3RyaW5nRXF1YWxzOiB7J3MzOlJlc291cmNlQWNjb3VudCc6IFthY2NvdW50XX0sXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIG5ldyBQb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICAgICAgICAgICAgc2lkOiAnQWxsb3dTM1JlcGxpY2F0aW9uJyxcbiAgICAgICAgICAgICAgICAgIGFjdGlvbnM6IFtcbiAgICAgICAgICAgICAgICAgICAgJ3MzOlJlcGxpY2F0ZU9iamVjdCcsXG4gICAgICAgICAgICAgICAgICAgICdzMzpSZXBsaWNhdGVEZWxldGUnLFxuICAgICAgICAgICAgICAgICAgICAnczM6UmVwbGljYXRlVGFncycsXG4gICAgICAgICAgICAgICAgICAgICdzMzpHZXRPYmplY3RWZXJzaW9uVGFnZ2luZycsXG4gICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgcmVzb3VyY2VzOiBkZXN0aW5hdGlvblJlZ2lvbnMuZmxhdE1hcCgocikgPT4gW1xuICAgICAgICAgICAgICAgICAgICBgYXJuOiR7U3RhY2sub2YodGhpcykucGFydGl0aW9ufTpzMzo6OmF3cy1zZWN1cml0eS1kYXRhLWxha2UtJHtyfSovKmAsXG4gICAgICAgICAgICAgICAgICBdKSxcbiAgICAgICAgICAgICAgICAgIGNvbmRpdGlvbnM6IHtcbiAgICAgICAgICAgICAgICAgICAgU3RyaW5nRXF1YWxzOiB7J3MzOlJlc291cmNlQWNjb3VudCc6IFthY2NvdW50XX0sXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIC4uLmttc1N0YXRlbWVudHMsXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgICAgcmVwbGljYXRpb25Sb2xlQXJuID0gdGhpcy5yZXBsaWNhdGlvblJvbGUucm9sZUFybjtcbiAgICAgIH1cbiAgICAgIHJlcGxpY2F0aW9uQ29uZmlndXJhdGlvbiA9IHtcbiAgICAgICAgcmVnaW9uczogcHJvcHMucmVwbGljYXRpb24ucmVnaW9ucyxcbiAgICAgICAgcm9sZUFybjogcmVwbGljYXRpb25Sb2xlQXJuLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICB0aGlzLmRhdGFMYWtlID0gbmV3IENmbkRhdGFMYWtlKHRoaXMsICdEYXRhTGFrZScsIHtcbiAgICAgIG1ldGFTdG9yZU1hbmFnZXJSb2xlQXJuLFxuICAgICAgZW5jcnlwdGlvbkNvbmZpZ3VyYXRpb24sXG4gICAgICBsaWZlY3ljbGVDb25maWd1cmF0aW9uLFxuICAgICAgcmVwbGljYXRpb25Db25maWd1cmF0aW9uLFxuICAgIH0pO1xuICAgIGlmICh0aGlzLmxha2VGb3JtYXRpb25TZXJ2aWNlTGlua2VkUm9sZSkge1xuICAgICAgdGhpcy5kYXRhTGFrZS5hZGREZXBlbmRlbmN5KHRoaXMubGFrZUZvcm1hdGlvblNlcnZpY2VMaW5rZWRSb2xlKTtcbiAgICB9XG5cbiAgICAvLyBDcmVhdGUgQVdTIGxvZyBzb3VyY2VzIHNlcXVlbnRpYWxseSB1c2luZyBEZXBlbmRzT24sIGFzIHJlcXVpcmVkIGJ5XG4gICAgLy8gU2VjdXJpdHkgTGFrZSB3aGVuIG1vcmUgdGhhbiBvbmUgc291cmNlIGlzIGNyZWF0ZWQgaW4gdGhlIHNhbWVcbiAgICAvLyB0ZW1wbGF0ZS5cbiAgICBsZXQgcHJldmlvdXM6IENmbkF3c0xvZ1NvdXJjZSB8IHVuZGVmaW5lZDtcbiAgICBmb3IgKGNvbnN0IHNvdXJjZSBvZiBwcm9wcz8ubG9nU291cmNlcyA/PyBbXSkge1xuICAgICAgY29uc3QgbG9nU291cmNlID0gbmV3IENmbkF3c0xvZ1NvdXJjZShcbiAgICAgICAgdGhpcyxcbiAgICAgICAgYExvZ1NvdXJjZSR7c291cmNlLnNvdXJjZU5hbWV9YCxcbiAgICAgICAge1xuICAgICAgICAgIGRhdGFMYWtlQXJuOiB0aGlzLmRhdGFMYWtlLmF0dHJBcm4sXG4gICAgICAgICAgc291cmNlTmFtZTogc291cmNlLnNvdXJjZU5hbWUsXG4gICAgICAgICAgc291cmNlVmVyc2lvbjogc291cmNlLnNvdXJjZVZlcnNpb24gPz8gJzIuMCcsXG4gICAgICAgICAgYWNjb3VudHM6IHNvdXJjZS5hY2NvdW50cyA/PyBbU3RhY2sub2YodGhpcykuYWNjb3VudF0sXG4gICAgICAgIH0sXG4gICAgICApO1xuICAgICAgbG9nU291cmNlLmFkZERlcGVuZGVuY3kodGhpcy5kYXRhTGFrZSk7XG4gICAgICBpZiAocHJldmlvdXMpIHtcbiAgICAgICAgbG9nU291cmNlLmFkZERlcGVuZGVuY3kocHJldmlvdXMpO1xuICAgICAgfVxuICAgICAgcHJldmlvdXMgPSBsb2dTb3VyY2U7XG4gICAgICB0aGlzLmxvZ1NvdXJjZXMucHVzaChsb2dTb3VyY2UpO1xuICAgIH1cbiAgfVxufVxuIl19
package/dist/index.d.ts CHANGED
@@ -17,6 +17,7 @@ export * as aws_patterns_workspaces from './aws-patterns-workspaces/index';
17
17
  export * as aws_rds from './aws-rds/index';
18
18
  export * as aws_route53 from './aws-route53/index';
19
19
  export * as aws_s3 from './aws-s3/index';
20
+ export * as aws_securitylake from './aws-securitylake/index';
20
21
  export * as aws_ses from './aws-ses/index';
21
22
  export * as aws_sqs from './aws-sqs/index';
22
23
  export * as aws_ssm from './aws-ssm/index';
package/dist/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.helpers = exports.aws_workspaces = exports.aws_wafv2 = exports.aws_vpc = exports.aws_ssm_patch = exports.aws_ssm_activation = exports.aws_ssm = exports.aws_sqs = exports.aws_ses = exports.aws_s3 = exports.aws_route53 = exports.aws_rds = exports.aws_patterns_workspaces = exports.wordpress = exports.website = exports.domain_redirect = exports.aws_monitoring = exports.aws_lambda = exports.aws_ecs = exports.aws_dynamodb = exports.aws_directory_service = exports.aws_codepipeline = exports.aws_cloudwatch = exports.aws_cloudfront = exports.aws_centergauge = exports.aws_cdk = exports.aws_bedrock = exports.aws_apigatewayv2 = void 0;
3
+ exports.helpers = exports.aws_workspaces = exports.aws_wafv2 = exports.aws_vpc = exports.aws_ssm_patch = exports.aws_ssm_activation = exports.aws_ssm = exports.aws_sqs = exports.aws_ses = exports.aws_securitylake = exports.aws_s3 = exports.aws_route53 = exports.aws_rds = exports.aws_patterns_workspaces = exports.wordpress = exports.website = exports.domain_redirect = exports.aws_monitoring = exports.aws_lambda = exports.aws_ecs = exports.aws_dynamodb = exports.aws_directory_service = exports.aws_codepipeline = exports.aws_cloudwatch = exports.aws_cloudfront = exports.aws_centergauge = exports.aws_cdk = exports.aws_bedrock = exports.aws_apigatewayv2 = void 0;
4
4
  exports.aws_apigatewayv2 = require("./aws-apigatewayv2/index");
5
5
  exports.aws_bedrock = require("./aws-bedrock/index");
6
6
  exports.aws_cdk = require("./aws-cdk/index");
@@ -20,6 +20,7 @@ exports.aws_patterns_workspaces = require("./aws-patterns-workspaces/index");
20
20
  exports.aws_rds = require("./aws-rds/index");
21
21
  exports.aws_route53 = require("./aws-route53/index");
22
22
  exports.aws_s3 = require("./aws-s3/index");
23
+ exports.aws_securitylake = require("./aws-securitylake/index");
23
24
  exports.aws_ses = require("./aws-ses/index");
24
25
  exports.aws_sqs = require("./aws-sqs/index");
25
26
  exports.aws_ssm = require("./aws-ssm/index");
@@ -29,4 +30,4 @@ exports.aws_vpc = require("./aws-vpc/index");
29
30
  exports.aws_wafv2 = require("./aws-wafv2/index");
30
31
  exports.aws_workspaces = require("./aws-workspaces/index");
31
32
  exports.helpers = require("./helpers/index");
32
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsK0RBQTZEO0FBQzdELHFEQUFtRDtBQUNuRCw2Q0FBMkM7QUFDM0MsNkRBQTJEO0FBQzNELDJEQUF5RDtBQUN6RCwyREFBeUQ7QUFDekQsK0RBQTZEO0FBQzdELHlFQUF1RTtBQUN2RSx1REFBcUQ7QUFDckQsNkNBQTJDO0FBQzNDLG1EQUFpRDtBQUNqRCwyREFBeUQ7QUFDekQsMEVBQXdFO0FBQ3hFLDBEQUF3RDtBQUN4RCw4REFBNEQ7QUFDNUQsNkVBQTJFO0FBQzNFLDZDQUEyQztBQUMzQyxxREFBbUQ7QUFDbkQsMkNBQXlDO0FBQ3pDLDZDQUEyQztBQUMzQyw2Q0FBMkM7QUFDM0MsNkNBQTJDO0FBQzNDLG1FQUFpRTtBQUNqRSx5REFBdUQ7QUFDdkQsNkNBQTJDO0FBQzNDLGlEQUErQztBQUMvQywyREFBeUQ7QUFDekQsNkNBQTJDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogYXMgYXdzX2FwaWdhdGV3YXl2MiBmcm9tICcuL2F3cy1hcGlnYXRld2F5djIvaW5kZXgnO1xuZXhwb3J0ICogYXMgYXdzX2JlZHJvY2sgZnJvbSAnLi9hd3MtYmVkcm9jay9pbmRleCc7XG5leHBvcnQgKiBhcyBhd3NfY2RrIGZyb20gJy4vYXdzLWNkay9pbmRleCc7XG5leHBvcnQgKiBhcyBhd3NfY2VudGVyZ2F1Z2UgZnJvbSAnLi9hd3MtY2VudGVyZ2F1Z2UvaW5kZXgnO1xuZXhwb3J0ICogYXMgYXdzX2Nsb3VkZnJvbnQgZnJvbSAnLi9hd3MtY2xvdWRmcm9udC9pbmRleCc7XG5leHBvcnQgKiBhcyBhd3NfY2xvdWR3YXRjaCBmcm9tICcuL2F3cy1jbG91ZHdhdGNoL2luZGV4JztcbmV4cG9ydCAqIGFzIGF3c19jb2RlcGlwZWxpbmUgZnJvbSAnLi9hd3MtY29kZXBpcGVsaW5lL2luZGV4JztcbmV4cG9ydCAqIGFzIGF3c19kaXJlY3Rvcnlfc2VydmljZSBmcm9tICcuL2F3cy1kaXJlY3Rvcnktc2VydmljZS9pbmRleCc7XG5leHBvcnQgKiBhcyBhd3NfZHluYW1vZGIgZnJvbSAnLi9hd3MtZHluYW1vZGIvaW5kZXgnO1xuZXhwb3J0ICogYXMgYXdzX2VjcyBmcm9tICcuL2F3cy1lY3MvaW5kZXgnO1xuZXhwb3J0ICogYXMgYXdzX2xhbWJkYSBmcm9tICcuL2F3cy1sYW1iZGEvaW5kZXgnO1xuZXhwb3J0ICogYXMgYXdzX21vbml0b3JpbmcgZnJvbSAnLi9hd3MtbW9uaXRvcmluZy9pbmRleCc7XG5leHBvcnQgKiBhcyBkb21haW5fcmVkaXJlY3QgZnJvbSAnLi9hd3MtcGF0dGVybnMtZG9tYWluLXJlZGlyZWN0L2luZGV4JztcbmV4cG9ydCAqIGFzIHdlYnNpdGUgZnJvbSAnLi9hd3MtcGF0dGVybnMtd2Vic2l0ZS9pbmRleCc7XG5leHBvcnQgKiBhcyB3b3JkcHJlc3MgZnJvbSAnLi9hd3MtcGF0dGVybnMtd29yZHByZXNzL2luZGV4JztcbmV4cG9ydCAqIGFzIGF3c19wYXR0ZXJuc193b3Jrc3BhY2VzIGZyb20gJy4vYXdzLXBhdHRlcm5zLXdvcmtzcGFjZXMvaW5kZXgnO1xuZXhwb3J0ICogYXMgYXdzX3JkcyBmcm9tICcuL2F3cy1yZHMvaW5kZXgnO1xuZXhwb3J0ICogYXMgYXdzX3JvdXRlNTMgZnJvbSAnLi9hd3Mtcm91dGU1My9pbmRleCc7XG5leHBvcnQgKiBhcyBhd3NfczMgZnJvbSAnLi9hd3MtczMvaW5kZXgnO1xuZXhwb3J0ICogYXMgYXdzX3NlcyBmcm9tICcuL2F3cy1zZXMvaW5kZXgnO1xuZXhwb3J0ICogYXMgYXdzX3NxcyBmcm9tICcuL2F3cy1zcXMvaW5kZXgnO1xuZXhwb3J0ICogYXMgYXdzX3NzbSBmcm9tICcuL2F3cy1zc20vaW5kZXgnO1xuZXhwb3J0ICogYXMgYXdzX3NzbV9hY3RpdmF0aW9uIGZyb20gJy4vYXdzLXNzbS1hY3RpdmF0aW9uL2luZGV4JztcbmV4cG9ydCAqIGFzIGF3c19zc21fcGF0Y2ggZnJvbSAnLi9hd3Mtc3NtLXBhdGNoL2luZGV4JztcbmV4cG9ydCAqIGFzIGF3c192cGMgZnJvbSAnLi9hd3MtdnBjL2luZGV4JztcbmV4cG9ydCAqIGFzIGF3c193YWZ2MiBmcm9tICcuL2F3cy13YWZ2Mi9pbmRleCc7XG5leHBvcnQgKiBhcyBhd3Nfd29ya3NwYWNlcyBmcm9tICcuL2F3cy13b3Jrc3BhY2VzL2luZGV4JztcbmV4cG9ydCAqIGFzIGhlbHBlcnMgZnJvbSAnLi9oZWxwZXJzL2luZGV4JztcbiJdfQ==
33
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsK0RBQTZEO0FBQzdELHFEQUFtRDtBQUNuRCw2Q0FBMkM7QUFDM0MsNkRBQTJEO0FBQzNELDJEQUF5RDtBQUN6RCwyREFBeUQ7QUFDekQsK0RBQTZEO0FBQzdELHlFQUF1RTtBQUN2RSx1REFBcUQ7QUFDckQsNkNBQTJDO0FBQzNDLG1EQUFpRDtBQUNqRCwyREFBeUQ7QUFDekQsMEVBQXdFO0FBQ3hFLDBEQUF3RDtBQUN4RCw4REFBNEQ7QUFDNUQsNkVBQTJFO0FBQzNFLDZDQUEyQztBQUMzQyxxREFBbUQ7QUFDbkQsMkNBQXlDO0FBQ3pDLCtEQUE2RDtBQUM3RCw2Q0FBMkM7QUFDM0MsNkNBQTJDO0FBQzNDLDZDQUEyQztBQUMzQyxtRUFBaUU7QUFDakUseURBQXVEO0FBQ3ZELDZDQUEyQztBQUMzQyxpREFBK0M7QUFDL0MsMkRBQXlEO0FBQ3pELDZDQUEyQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGFzIGF3c19hcGlnYXRld2F5djIgZnJvbSAnLi9hd3MtYXBpZ2F0ZXdheXYyL2luZGV4JztcbmV4cG9ydCAqIGFzIGF3c19iZWRyb2NrIGZyb20gJy4vYXdzLWJlZHJvY2svaW5kZXgnO1xuZXhwb3J0ICogYXMgYXdzX2NkayBmcm9tICcuL2F3cy1jZGsvaW5kZXgnO1xuZXhwb3J0ICogYXMgYXdzX2NlbnRlcmdhdWdlIGZyb20gJy4vYXdzLWNlbnRlcmdhdWdlL2luZGV4JztcbmV4cG9ydCAqIGFzIGF3c19jbG91ZGZyb250IGZyb20gJy4vYXdzLWNsb3VkZnJvbnQvaW5kZXgnO1xuZXhwb3J0ICogYXMgYXdzX2Nsb3Vkd2F0Y2ggZnJvbSAnLi9hd3MtY2xvdWR3YXRjaC9pbmRleCc7XG5leHBvcnQgKiBhcyBhd3NfY29kZXBpcGVsaW5lIGZyb20gJy4vYXdzLWNvZGVwaXBlbGluZS9pbmRleCc7XG5leHBvcnQgKiBhcyBhd3NfZGlyZWN0b3J5X3NlcnZpY2UgZnJvbSAnLi9hd3MtZGlyZWN0b3J5LXNlcnZpY2UvaW5kZXgnO1xuZXhwb3J0ICogYXMgYXdzX2R5bmFtb2RiIGZyb20gJy4vYXdzLWR5bmFtb2RiL2luZGV4JztcbmV4cG9ydCAqIGFzIGF3c19lY3MgZnJvbSAnLi9hd3MtZWNzL2luZGV4JztcbmV4cG9ydCAqIGFzIGF3c19sYW1iZGEgZnJvbSAnLi9hd3MtbGFtYmRhL2luZGV4JztcbmV4cG9ydCAqIGFzIGF3c19tb25pdG9yaW5nIGZyb20gJy4vYXdzLW1vbml0b3JpbmcvaW5kZXgnO1xuZXhwb3J0ICogYXMgZG9tYWluX3JlZGlyZWN0IGZyb20gJy4vYXdzLXBhdHRlcm5zLWRvbWFpbi1yZWRpcmVjdC9pbmRleCc7XG5leHBvcnQgKiBhcyB3ZWJzaXRlIGZyb20gJy4vYXdzLXBhdHRlcm5zLXdlYnNpdGUvaW5kZXgnO1xuZXhwb3J0ICogYXMgd29yZHByZXNzIGZyb20gJy4vYXdzLXBhdHRlcm5zLXdvcmRwcmVzcy9pbmRleCc7XG5leHBvcnQgKiBhcyBhd3NfcGF0dGVybnNfd29ya3NwYWNlcyBmcm9tICcuL2F3cy1wYXR0ZXJucy13b3Jrc3BhY2VzL2luZGV4JztcbmV4cG9ydCAqIGFzIGF3c19yZHMgZnJvbSAnLi9hd3MtcmRzL2luZGV4JztcbmV4cG9ydCAqIGFzIGF3c19yb3V0ZTUzIGZyb20gJy4vYXdzLXJvdXRlNTMvaW5kZXgnO1xuZXhwb3J0ICogYXMgYXdzX3MzIGZyb20gJy4vYXdzLXMzL2luZGV4JztcbmV4cG9ydCAqIGFzIGF3c19zZWN1cml0eWxha2UgZnJvbSAnLi9hd3Mtc2VjdXJpdHlsYWtlL2luZGV4JztcbmV4cG9ydCAqIGFzIGF3c19zZXMgZnJvbSAnLi9hd3Mtc2VzL2luZGV4JztcbmV4cG9ydCAqIGFzIGF3c19zcXMgZnJvbSAnLi9hd3Mtc3FzL2luZGV4JztcbmV4cG9ydCAqIGFzIGF3c19zc20gZnJvbSAnLi9hd3Mtc3NtL2luZGV4JztcbmV4cG9ydCAqIGFzIGF3c19zc21fYWN0aXZhdGlvbiBmcm9tICcuL2F3cy1zc20tYWN0aXZhdGlvbi9pbmRleCc7XG5leHBvcnQgKiBhcyBhd3Nfc3NtX3BhdGNoIGZyb20gJy4vYXdzLXNzbS1wYXRjaC9pbmRleCc7XG5leHBvcnQgKiBhcyBhd3NfdnBjIGZyb20gJy4vYXdzLXZwYy9pbmRleCc7XG5leHBvcnQgKiBhcyBhd3Nfd2FmdjIgZnJvbSAnLi9hd3Mtd2FmdjIvaW5kZXgnO1xuZXhwb3J0ICogYXMgYXdzX3dvcmtzcGFjZXMgZnJvbSAnLi9hd3Mtd29ya3NwYWNlcy9pbmRleCc7XG5leHBvcnQgKiBhcyBoZWxwZXJzIGZyb20gJy4vaGVscGVycy9pbmRleCc7XG4iXX0=
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "truemark-cdk-lib",
3
3
  "description": "AWS CDK constructs created by TrueMark",
4
- "version": "1.28.2",
4
+ "version": "1.29.0",
5
5
  "main": "./dist/index.js",
6
6
  "types": "./dist/index.d.ts",
7
7
  "typesVersions": {
@@ -57,6 +57,9 @@
57
57
  "aws-s3": [
58
58
  "./dist/aws-s3/index.d.ts"
59
59
  ],
60
+ "aws-securitylake": [
61
+ "./dist/aws-securitylake/index.d.ts"
62
+ ],
60
63
  "aws-ses": [
61
64
  "./dist/aws-ses/index.d.ts"
62
65
  ],
@@ -200,6 +203,10 @@
200
203
  "types": "./dist/aws-s3/index.d.ts",
201
204
  "default": "./dist/aws-s3/index.js"
202
205
  },
206
+ "./aws-securitylake": {
207
+ "types": "./dist/aws-securitylake/index.d.ts",
208
+ "default": "./dist/aws-securitylake/index.js"
209
+ },
203
210
  "./aws-ses": {
204
211
  "types": "./dist/aws-ses/index.d.ts",
205
212
  "default": "./dist/aws-ses/index.js"