@fjall/components-infrastructure 0.10.0 → 0.12.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.
- package/dist/lib/config/aws/bootstrap.d.ts +12 -0
- package/dist/lib/config/aws/bootstrap.js +72 -0
- package/dist/lib/config/aws/bootstrap.original.d.ts +13 -0
- package/dist/lib/config/aws/bootstrap.original.js +94 -0
- package/dist/lib/config/aws/bootstrapAccounts.d.ts +12 -0
- package/dist/lib/config/aws/bootstrapAccounts.js +89 -0
- package/dist/lib/config/aws/bootstrapMultiRegion.example.d.ts +15 -0
- package/dist/lib/config/aws/bootstrapMultiRegion.example.js +105 -0
- package/dist/lib/config/aws/bootstrapSelfManaged.example.d.ts +13 -0
- package/dist/lib/config/aws/bootstrapSelfManaged.example.js +56 -0
- package/dist/lib/config/aws/managedAccountStackSet.d.ts +16 -0
- package/dist/lib/config/aws/managedAccountStackSet.js +75 -0
- package/dist/lib/config/aws/managedPlatformStackSet.d.ts +24 -0
- package/dist/lib/config/aws/managedPlatformStackSet.js +101 -0
- package/dist/lib/config/aws/organisation.d.ts +4 -2
- package/dist/lib/config/aws/organisation.js +21 -37
- package/dist/lib/patterns/aws/managedAccount.d.ts +0 -3
- package/dist/lib/patterns/aws/managedAccount.js +1 -10
- package/dist/lib/patterns/aws/managedAccountStackSet.d.ts +11 -0
- package/dist/lib/patterns/aws/managedAccountStackSet.js +36 -0
- package/dist/lib/patterns/aws/managedIdentityCenter.js +2 -2
- package/dist/lib/patterns/aws/managedOrganisation.d.ts +6 -3
- package/dist/lib/patterns/aws/managedOrganisation.js +39 -15
- package/dist/lib/patterns/aws/managedPlatform.d.ts +4 -4
- package/dist/lib/patterns/aws/managedPlatform.js +4 -5
- package/dist/lib/patterns/aws/managedPlatformStackSet.d.ts +17 -0
- package/dist/lib/patterns/aws/managedPlatformStackSet.js +45 -0
- package/dist/lib/resources/aws/iam/identityCenter/assignmentNew.d.ts +11 -0
- package/dist/lib/resources/aws/iam/identityCenter/assignmentNew.js +102 -0
- package/dist/lib/resources/aws/iam/identityCenter/lambda/assignmentHandler.d.ts +24 -0
- package/dist/lib/resources/aws/iam/identityCenter/lambda/assignmentHandler.js +246 -0
- package/dist/lib/utils/getAsync.js +2 -4
- package/dist/lib/utils/getCidr.js +2 -4
- package/dist/lib/utils/getConfig.js +2 -2
- package/package.json +3 -3
- package/dist/lib/patterns/aws/ec2.d.ts +0 -43
- package/dist/lib/patterns/aws/ec2.js +0 -123
|
@@ -9,26 +9,21 @@ const ramSharing_1 = require("../../config/aws/ramSharing");
|
|
|
9
9
|
const costAllocationTags_1 = require("../../config/aws/costAllocationTags");
|
|
10
10
|
const organisation_1 = require("../../config/aws/organisation");
|
|
11
11
|
const organisationsAccess_1 = require("../../config/aws/organisationsAccess");
|
|
12
|
+
const util_1 = require("@fjall/util");
|
|
12
13
|
class ManagedOrganisation extends aws_cdk_lib_1.Stack {
|
|
13
14
|
constructor(id, props) {
|
|
14
15
|
super(app_1.default.getInstance(), id, props);
|
|
15
|
-
this.
|
|
16
|
-
this.createOrganisation(id, props);
|
|
16
|
+
this.createOrganisation(props);
|
|
17
17
|
this.setupOrganisationFeatures({
|
|
18
18
|
...props,
|
|
19
19
|
identityCenter: props.identityCenter ?? true
|
|
20
20
|
});
|
|
21
|
+
this.updateEnvironmentConfig(props);
|
|
21
22
|
}
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
throw new Error(`Platform account "${props.platformAccount}" is not listed in account names. Valid accounts are: ${props.orgAccounts.join(", ")}`);
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
createOrganisation(id, props) {
|
|
28
|
-
this.organisation = new organisation_1.default(this, id, {
|
|
23
|
+
createOrganisation(props) {
|
|
24
|
+
this.organisation = new organisation_1.default(this, "ManagedOrganisation", {
|
|
29
25
|
organisationName: props.organisationName,
|
|
30
|
-
|
|
31
|
-
platformAccount: props.platformAccount,
|
|
26
|
+
accounts: props.accounts,
|
|
32
27
|
orgEmail: props.orgEmail,
|
|
33
28
|
env: props.env,
|
|
34
29
|
existingAccounts: props.existingAccounts
|
|
@@ -36,15 +31,29 @@ class ManagedOrganisation extends aws_cdk_lib_1.Stack {
|
|
|
36
31
|
}
|
|
37
32
|
setupOrganisationFeatures(props) {
|
|
38
33
|
const orgAccounts = this.organisation.getAccounts();
|
|
39
|
-
this.
|
|
34
|
+
const platformAccountId = this.getPlatformAccountId(orgAccounts, props);
|
|
35
|
+
this.setupIpamDelegation(platformAccountId);
|
|
40
36
|
this.enableRamSharing();
|
|
41
37
|
this.enableTrustedAccess(props);
|
|
42
38
|
this.enableCostAllocationTags(props);
|
|
43
39
|
this.setupIdentityCenter(orgAccounts, props);
|
|
44
40
|
}
|
|
45
|
-
|
|
41
|
+
getPlatformAccountId(orgAccounts, props) {
|
|
42
|
+
const platformEntry = Object.entries(props.accounts).find(([key]) => key.toLowerCase() === "platform");
|
|
43
|
+
if (!platformEntry) {
|
|
44
|
+
throw new Error('No platform account found. Please include a "platform" key in your accounts configuration.');
|
|
45
|
+
}
|
|
46
|
+
const account = platformEntry[1];
|
|
47
|
+
const platformAccount = Array.isArray(account) ? account[0] : account;
|
|
48
|
+
const platformAccountId = orgAccounts[platformAccount];
|
|
49
|
+
if (!platformAccountId) {
|
|
50
|
+
throw new Error(`Platform account ID not found for account name: ${platformAccount}`);
|
|
51
|
+
}
|
|
52
|
+
return platformAccountId;
|
|
53
|
+
}
|
|
54
|
+
setupIpamDelegation(platformAccountId) {
|
|
46
55
|
new ipamDelegateAdmin_1.IpamDelegateAdmin(this, "IpamDelegateAdmin", {
|
|
47
|
-
accountId:
|
|
56
|
+
accountId: platformAccountId
|
|
48
57
|
});
|
|
49
58
|
}
|
|
50
59
|
enableRamSharing() {
|
|
@@ -70,6 +79,21 @@ class ManagedOrganisation extends aws_cdk_lib_1.Stack {
|
|
|
70
79
|
});
|
|
71
80
|
}
|
|
72
81
|
}
|
|
82
|
+
updateEnvironmentConfig(props) {
|
|
83
|
+
try {
|
|
84
|
+
const config = util_1.Config.loadConfig();
|
|
85
|
+
// Convert accounts to accountTypes format
|
|
86
|
+
const accountTypes = {};
|
|
87
|
+
for (const [envType, accounts] of Object.entries(props.accounts)) {
|
|
88
|
+
accountTypes[envType] = Array.isArray(accounts) ? accounts : [accounts];
|
|
89
|
+
}
|
|
90
|
+
config.updateProviderAccountEnvironments(accountTypes);
|
|
91
|
+
config.saveConfig();
|
|
92
|
+
}
|
|
93
|
+
catch (error) {
|
|
94
|
+
console.warn("Failed to update fjall-config.json with environment mappings:", error);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
73
97
|
}
|
|
74
98
|
exports.ManagedOrganisation = ManagedOrganisation;
|
|
75
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFuYWdlZE9yZ2FuaXNhdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9wYXR0ZXJucy9hd3MvbWFuYWdlZE9yZ2FuaXNhdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSw2Q0FBNkQ7QUFFN0QsbUNBQTRCO0FBRTVCLG9FQUFpRTtBQUNqRSwwRUFBdUU7QUFDdkUsNERBQXlEO0FBQ3pELDRFQUc2QztBQUM3QyxnRUFBeUQ7QUFFekQsOEVBQW1GO0FBaUJuRixNQUFhLG1CQUFvQixTQUFRLG1CQUFLO0lBRzVDLFlBQVksRUFBVSxFQUFFLEtBQStCO1FBQ3JELEtBQUssQ0FBQyxhQUFHLENBQUMsV0FBVyxFQUFFLEVBQUUsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ3BDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNwQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ25DLElBQUksQ0FBQyx5QkFBeUIsQ0FBQztZQUM3QixHQUFHLEtBQUs7WUFDUixjQUFjLEVBQUUsS0FBSyxDQUFDLGNBQWMsSUFBSSxJQUFJO1NBQzdDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTyx1QkFBdUIsQ0FBQyxLQUErQjtRQUM3RCxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxFQUFFLENBQUM7WUFDdkQsTUFBTSxJQUFJLEtBQUssQ0FDYixxQkFDRSxLQUFLLENBQUMsZUFDUix5REFBeUQsS0FBSyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQzdFLElBQUksQ0FDTCxFQUFFLENBQ0osQ0FBQztRQUNKLENBQUM7SUFDSCxDQUFDO0lBRU8sa0JBQWtCLENBQUMsRUFBVSxFQUFFLEtBQStCO1FBQ3BFLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxzQkFBWSxDQUFDLElBQUksRUFBRSxFQUFFLEVBQUU7WUFDN0MsZ0JBQWdCLEVBQUUsS0FBSyxDQUFDLGdCQUFnQjtZQUN4QyxXQUFXLEVBQUUsS0FBSyxDQUFDLFdBQVc7WUFDOUIsZUFBZSxFQUFFLEtBQUssQ0FBQyxlQUFlO1lBQ3RDLFFBQVEsRUFBRSxLQUFLLENBQUMsUUFBUTtZQUN4QixHQUFHLEVBQUUsS0FBSyxDQUFDLEdBQUc7WUFDZCxnQkFBZ0IsRUFBRSxLQUFLLENBQUMsZ0JBQWdCO1NBQ3pDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTyx5QkFBeUIsQ0FBQyxLQUErQjtRQUMvRCxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBRXBELElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxXQUFXLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDN0MsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFDeEIsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2hDLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNyQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsV0FBVyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQy9DLENBQUM7SUFFTyxtQkFBbUIsQ0FDekIsV0FBbUMsRUFDbkMsS0FBK0I7UUFFL0IsSUFBSSxxQ0FBaUIsQ0FBQyxJQUFJLEVBQUUsbUJBQW1CLEVBQUU7WUFDL0MsU0FBUyxFQUFFLFdBQVcsQ0FBQyxLQUFLLENBQUMsZUFBZSxDQUFDO1NBQzlDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTyxnQkFBZ0I7UUFDdEIsSUFBSSx1QkFBVSxDQUFDLElBQUksRUFBRSxZQUFZLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBRU8sbUJBQW1CLENBQUMsS0FBK0I7UUFDekQsSUFBSSxpREFBMkIsQ0FBQyxJQUFJLEVBQUUsNkJBQTZCLEVBQUU7WUFDbkUsT0FBTyxFQUFFLEtBQUssQ0FBQyxHQUFHLENBQUMsT0FBTztZQUMxQixNQUFNLEVBQUUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxNQUFNO1NBQ3pCLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTyx3QkFBd0IsQ0FBQyxLQUErQjtRQUM5RCxJQUFJLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDeEMsSUFBSSx1Q0FBa0IsQ0FBQyxJQUFJLEVBQUUsb0JBQW9CLEVBQUU7Z0JBQ2pELGtCQUFrQixFQUFFLEtBQUssQ0FBQyxrQkFBa0I7YUFDN0MsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztJQUNILENBQUM7SUFFTyxtQkFBbUIsQ0FDekIsV0FBbUMsRUFDbkMsS0FBK0I7UUFFL0IsSUFBSSxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDekIsSUFBSSwrQkFBYyxDQUFDLElBQUksRUFBRSxnQkFBZ0IsRUFBRTtnQkFDekMsUUFBUSxFQUFFLFdBQVc7YUFDdEIsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztJQUNILENBQUM7Q0FDRjtBQXBGRCxrREFvRkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFbnZpcm9ubWVudCwgU3RhY2ssIFN0YWNrUHJvcHMgfSBmcm9tIFwiYXdzLWNkay1saWJcIjtcblxuaW1wb3J0IEFwcCBmcm9tIFwiLi4vLi4vYXBwXCI7XG5cbmltcG9ydCB7IElkZW50aXR5Q2VudGVyIH0gZnJvbSBcIi4uLy4uL2NvbmZpZy9hd3MvaWRlbnRpdHlDZW50ZXJcIjtcbmltcG9ydCB7IElwYW1EZWxlZ2F0ZUFkbWluIH0gZnJvbSBcIi4uLy4uL2NvbmZpZy9hd3MvaXBhbURlbGVnYXRlQWRtaW5cIjtcbmltcG9ydCB7IFJhbVNoYXJpbmcgfSBmcm9tIFwiLi4vLi4vY29uZmlnL2F3cy9yYW1TaGFyaW5nXCI7XG5pbXBvcnQge1xuICBDb3N0QWxsb2NhdGlvblRhZ3MsXG4gIElDb3N0QWxsb2NhdGlvblRhZ3Ncbn0gZnJvbSBcIi4uLy4uL2NvbmZpZy9hd3MvY29zdEFsbG9jYXRpb25UYWdzXCI7XG5pbXBvcnQgT3JnYW5pc2F0aW9uIGZyb20gXCIuLi8uLi9jb25maWcvYXdzL29yZ2FuaXNhdGlvblwiO1xuaW1wb3J0IHsgQWNjb3VudCB9IGZyb20gXCJAYXdzLXNkay9jbGllbnQtb3JnYW5pemF0aW9uc1wiO1xuaW1wb3J0IHsgQWN0aXZhdGVPcmdhbmlzYXRpb25zQWNjZXNzIH0gZnJvbSBcIi4uLy4uL2NvbmZpZy9hd3Mvb3JnYW5pc2F0aW9uc0FjY2Vzc1wiO1xuXG50eXBlIEV4dGVuZGVkU3RhY2tQcm9wcyA9IE9taXQ8U3RhY2tQcm9wcywgXCJlbnZcIj4gJiB7XG4gIGVudjogUmVxdWlyZWQ8UGljazxFbnZpcm9ubWVudCwgXCJyZWdpb25cIiB8IFwiYWNjb3VudFwiPj4gJlxuICAgIFBhcnRpYWw8T21pdDxFbnZpcm9ubWVudCwgXCJyZWdpb25cIiB8IFwiYWNjb3VudFwiPj47XG59O1xuXG5pbnRlcmZhY2UgTWFuYWdlZE9yZ2FuaXNhdGlvblByb3BzIGV4dGVuZHMgRXh0ZW5kZWRTdGFja1Byb3BzIHtcbiAgb3JnYW5pc2F0aW9uTmFtZTogc3RyaW5nO1xuICBvcmdBY2NvdW50czogc3RyaW5nW107XG4gIHBsYXRmb3JtQWNjb3VudDogc3RyaW5nO1xuICBvcmdFbWFpbDogc3RyaW5nO1xuICBleGlzdGluZ0FjY291bnRzPzogQWNjb3VudFtdO1xuICBjb3N0QWxsb2NhdGlvblRhZ3M6IElDb3N0QWxsb2NhdGlvblRhZ3NbXTtcbiAgaWRlbnRpdHlDZW50ZXI/OiBib29sZWFuO1xufVxuXG5leHBvcnQgY2xhc3MgTWFuYWdlZE9yZ2FuaXNhdGlvbiBleHRlbmRzIFN0YWNrIHtcbiAgcHJpdmF0ZSBvcmdhbmlzYXRpb246IE9yZ2FuaXNhdGlvbjtcblxuICBjb25zdHJ1Y3RvcihpZDogc3RyaW5nLCBwcm9wczogTWFuYWdlZE9yZ2FuaXNhdGlvblByb3BzKSB7XG4gICAgc3VwZXIoQXBwLmdldEluc3RhbmNlKCksIGlkLCBwcm9wcyk7XG4gICAgdGhpcy52YWxpZGF0ZVBsYXRmb3JtQWNjb3VudChwcm9wcyk7XG4gICAgdGhpcy5jcmVhdGVPcmdhbmlzYXRpb24oaWQsIHByb3BzKTtcbiAgICB0aGlzLnNldHVwT3JnYW5pc2F0aW9uRmVhdHVyZXMoe1xuICAgICAgLi4ucHJvcHMsXG4gICAgICBpZGVudGl0eUNlbnRlcjogcHJvcHMuaWRlbnRpdHlDZW50ZXIgPz8gdHJ1ZVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSB2YWxpZGF0ZVBsYXRmb3JtQWNjb3VudChwcm9wczogTWFuYWdlZE9yZ2FuaXNhdGlvblByb3BzKSB7XG4gICAgaWYgKCFwcm9wcy5vcmdBY2NvdW50cy5pbmNsdWRlcyhwcm9wcy5wbGF0Zm9ybUFjY291bnQpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBQbGF0Zm9ybSBhY2NvdW50IFwiJHtcbiAgICAgICAgICBwcm9wcy5wbGF0Zm9ybUFjY291bnRcbiAgICAgICAgfVwiIGlzIG5vdCBsaXN0ZWQgaW4gYWNjb3VudCBuYW1lcy4gVmFsaWQgYWNjb3VudHMgYXJlOiAke3Byb3BzLm9yZ0FjY291bnRzLmpvaW4oXG4gICAgICAgICAgXCIsIFwiXG4gICAgICAgICl9YFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZU9yZ2FuaXNhdGlvbihpZDogc3RyaW5nLCBwcm9wczogTWFuYWdlZE9yZ2FuaXNhdGlvblByb3BzKSB7XG4gICAgdGhpcy5vcmdhbmlzYXRpb24gPSBuZXcgT3JnYW5pc2F0aW9uKHRoaXMsIGlkLCB7XG4gICAgICBvcmdhbmlzYXRpb25OYW1lOiBwcm9wcy5vcmdhbmlzYXRpb25OYW1lLFxuICAgICAgb3JnQWNjb3VudHM6IHByb3BzLm9yZ0FjY291bnRzLFxuICAgICAgcGxhdGZvcm1BY2NvdW50OiBwcm9wcy5wbGF0Zm9ybUFjY291bnQsXG4gICAgICBvcmdFbWFpbDogcHJvcHMub3JnRW1haWwsXG4gICAgICBlbnY6IHByb3BzLmVudixcbiAgICAgIGV4aXN0aW5nQWNjb3VudHM6IHByb3BzLmV4aXN0aW5nQWNjb3VudHNcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0dXBPcmdhbmlzYXRpb25GZWF0dXJlcyhwcm9wczogTWFuYWdlZE9yZ2FuaXNhdGlvblByb3BzKSB7XG4gICAgY29uc3Qgb3JnQWNjb3VudHMgPSB0aGlzLm9yZ2FuaXNhdGlvbi5nZXRBY2NvdW50cygpO1xuXG4gICAgdGhpcy5zZXR1cElwYW1EZWxlZ2F0aW9uKG9yZ0FjY291bnRzLCBwcm9wcyk7XG4gICAgdGhpcy5lbmFibGVSYW1TaGFyaW5nKCk7XG4gICAgdGhpcy5lbmFibGVUcnVzdGVkQWNjZXNzKHByb3BzKTtcbiAgICB0aGlzLmVuYWJsZUNvc3RBbGxvY2F0aW9uVGFncyhwcm9wcyk7XG4gICAgdGhpcy5zZXR1cElkZW50aXR5Q2VudGVyKG9yZ0FjY291bnRzLCBwcm9wcyk7XG4gIH1cblxuICBwcml2YXRlIHNldHVwSXBhbURlbGVnYXRpb24oXG4gICAgb3JnQWNjb3VudHM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4sXG4gICAgcHJvcHM6IE1hbmFnZWRPcmdhbmlzYXRpb25Qcm9wc1xuICApIHtcbiAgICBuZXcgSXBhbURlbGVnYXRlQWRtaW4odGhpcywgXCJJcGFtRGVsZWdhdGVBZG1pblwiLCB7XG4gICAgICBhY2NvdW50SWQ6IG9yZ0FjY291bnRzW3Byb3BzLnBsYXRmb3JtQWNjb3VudF1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZW5hYmxlUmFtU2hhcmluZygpIHtcbiAgICBuZXcgUmFtU2hhcmluZyh0aGlzLCBcIlJhbVNoYXJpbmdcIik7XG4gIH1cblxuICBwcml2YXRlIGVuYWJsZVRydXN0ZWRBY2Nlc3MocHJvcHM6IE1hbmFnZWRPcmdhbmlzYXRpb25Qcm9wcykge1xuICAgIG5ldyBBY3RpdmF0ZU9yZ2FuaXNhdGlvbnNBY2Nlc3ModGhpcywgXCJBY3RpdmF0ZU9yZ2FuaXNhdGlvbnNBY2Nlc3NcIiwge1xuICAgICAgYWNjb3VudDogcHJvcHMuZW52LmFjY291bnQsXG4gICAgICByZWdpb246IHByb3BzLmVudi5yZWdpb25cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZW5hYmxlQ29zdEFsbG9jYXRpb25UYWdzKHByb3BzOiBNYW5hZ2VkT3JnYW5pc2F0aW9uUHJvcHMpIHtcbiAgICBpZiAocHJvcHMuY29zdEFsbG9jYXRpb25UYWdzLmxlbmd0aCA+IDApIHtcbiAgICAgIG5ldyBDb3N0QWxsb2NhdGlvblRhZ3ModGhpcywgXCJDb3N0QWxsb2NhdGlvblRhZ3NcIiwge1xuICAgICAgICBjb3N0QWxsb2NhdGlvblRhZ3M6IHByb3BzLmNvc3RBbGxvY2F0aW9uVGFnc1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzZXR1cElkZW50aXR5Q2VudGVyKFxuICAgIG9yZ0FjY291bnRzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+LFxuICAgIHByb3BzOiBNYW5hZ2VkT3JnYW5pc2F0aW9uUHJvcHNcbiAgKSB7XG4gICAgaWYgKHByb3BzLmlkZW50aXR5Q2VudGVyKSB7XG4gICAgICBuZXcgSWRlbnRpdHlDZW50ZXIodGhpcywgXCJJZGVudGl0eUNlbnRlclwiLCB7XG4gICAgICAgIGFjY291bnRzOiBvcmdBY2NvdW50c1xuICAgICAgfSk7XG4gICAgfVxuICB9XG59XG4iXX0=
|
|
99
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFuYWdlZE9yZ2FuaXNhdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9wYXR0ZXJucy9hd3MvbWFuYWdlZE9yZ2FuaXNhdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSw2Q0FBNkQ7QUFFN0QsbUNBQTRCO0FBRTVCLG9FQUFpRTtBQUNqRSwwRUFBdUU7QUFDdkUsNERBQXlEO0FBQ3pELDRFQUc2QztBQUM3QyxnRUFBeUQ7QUFFekQsOEVBQW1GO0FBQ25GLHNDQUFxQztBQW9CckMsTUFBYSxtQkFBb0IsU0FBUSxtQkFBSztJQUc1QyxZQUFZLEVBQVUsRUFBRSxLQUErQjtRQUNyRCxLQUFLLENBQUMsYUFBRyxDQUFDLFdBQVcsRUFBRSxFQUFFLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUNwQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDL0IsSUFBSSxDQUFDLHlCQUF5QixDQUFDO1lBQzdCLEdBQUcsS0FBSztZQUNSLGNBQWMsRUFBRSxLQUFLLENBQUMsY0FBYyxJQUFJLElBQUk7U0FDN0MsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLHVCQUF1QixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3RDLENBQUM7SUFFTyxrQkFBa0IsQ0FBQyxLQUErQjtRQUN4RCxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksc0JBQVksQ0FBQyxJQUFJLEVBQUUscUJBQXFCLEVBQUU7WUFDaEUsZ0JBQWdCLEVBQUUsS0FBSyxDQUFDLGdCQUFnQjtZQUN4QyxRQUFRLEVBQUUsS0FBSyxDQUFDLFFBQVE7WUFDeEIsUUFBUSxFQUFFLEtBQUssQ0FBQyxRQUFRO1lBQ3hCLEdBQUcsRUFBRSxLQUFLLENBQUMsR0FBRztZQUNkLGdCQUFnQixFQUFFLEtBQUssQ0FBQyxnQkFBZ0I7U0FDekMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLHlCQUF5QixDQUFDLEtBQStCO1FBQy9ELE1BQU0sV0FB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QyxFQUFFLENBQUM7WUFDM0QsS0FBSyxNQUFNLENBQUMsT0FBTyxFQUFFLFFBQVEsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7Z0JBQ2pFLFlBQVksQ0FBQyxPQUFPLENBQUMsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDMUUsQ0FBQztZQUNELE1BQU0sQ0FBQyxpQ0FBaUMsQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUN2RCxNQUFNLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDdEIsQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZixPQUFPLENBQUMsSUFBSSxDQUNWLCtEQUErRCxFQUMvRCxLQUFLLENBQ04sQ0FBQztRQUNKLENBQUM7SUFDSCxDQUFDO0NBQ0Y7QUFuSEQsa0RBbUhDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRW52aXJvbm1lbnQsIFN0YWNrLCBTdGFja1Byb3BzIH0gZnJvbSBcImF3cy1jZGstbGliXCI7XG5cbmltcG9ydCBBcHAgZnJvbSBcIi4uLy4uL2FwcFwiO1xuXG5pbXBvcnQgeyBJZGVudGl0eUNlbnRlciB9IGZyb20gXCIuLi8uLi9jb25maWcvYXdzL2lkZW50aXR5Q2VudGVyXCI7XG5pbXBvcnQgeyBJcGFtRGVsZWdhdGVBZG1pbiB9IGZyb20gXCIuLi8uLi9jb25maWcvYXdzL2lwYW1EZWxlZ2F0ZUFkbWluXCI7XG5pbXBvcnQgeyBSYW1TaGFyaW5nIH0gZnJvbSBcIi4uLy4uL2NvbmZpZy9hd3MvcmFtU2hhcmluZ1wiO1xuaW1wb3J0IHtcbiAgQ29zdEFsbG9jYXRpb25UYWdzLFxuICBJQ29zdEFsbG9jYXRpb25UYWdzXG59IGZyb20gXCIuLi8uLi9jb25maWcvYXdzL2Nvc3RBbGxvY2F0aW9uVGFnc1wiO1xuaW1wb3J0IE9yZ2FuaXNhdGlvbiBmcm9tIFwiLi4vLi4vY29uZmlnL2F3cy9vcmdhbmlzYXRpb25cIjtcbmltcG9ydCB7IEFjY291bnQgfSBmcm9tIFwiQGF3cy1zZGsvY2xpZW50LW9yZ2FuaXphdGlvbnNcIjtcbmltcG9ydCB7IEFjdGl2YXRlT3JnYW5pc2F0aW9uc0FjY2VzcyB9IGZyb20gXCIuLi8uLi9jb25maWcvYXdzL29yZ2FuaXNhdGlvbnNBY2Nlc3NcIjtcbmltcG9ydCB7IENvbmZpZyB9IGZyb20gXCJAZmphbGwvdXRpbFwiO1xuXG50eXBlIEV4dGVuZGVkU3RhY2tQcm9wcyA9IE9taXQ8U3RhY2tQcm9wcywgXCJlbnZcIj4gJiB7XG4gIGVudjogUmVxdWlyZWQ8UGljazxFbnZpcm9ubWVudCwgXCJyZWdpb25cIiB8IFwiYWNjb3VudFwiPj4gJlxuICAgIFBhcnRpYWw8T21pdDxFbnZpcm9ubWVudCwgXCJyZWdpb25cIiB8IFwiYWNjb3VudFwiPj47XG59O1xuXG50eXBlIEFjY291bnRzQ29uZmlnID0ge1xuICByZWFkb25seSBba2V5OiBzdHJpbmddOiByZWFkb25seSBzdHJpbmdbXSB8IHN0cmluZztcbn07XG5cbmludGVyZmFjZSBNYW5hZ2VkT3JnYW5pc2F0aW9uUHJvcHMgZXh0ZW5kcyBFeHRlbmRlZFN0YWNrUHJvcHMge1xuICBvcmdhbmlzYXRpb25OYW1lOiBzdHJpbmc7XG4gIGFjY291bnRzOiBBY2NvdW50c0NvbmZpZztcbiAgb3JnRW1haWw6IHN0cmluZztcbiAgZXhpc3RpbmdBY2NvdW50cz86IEFjY291bnRbXTtcbiAgY29zdEFsbG9jYXRpb25UYWdzOiBJQ29zdEFsbG9jYXRpb25UYWdzW107XG4gIGlkZW50aXR5Q2VudGVyPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGNsYXNzIE1hbmFnZWRPcmdhbmlzYXRpb24gZXh0ZW5kcyBTdGFjayB7XG4gIHByaXZhdGUgb3JnYW5pc2F0aW9uOiBPcmdhbmlzYXRpb247XG5cbiAgY29uc3RydWN0b3IoaWQ6IHN0cmluZywgcHJvcHM6IE1hbmFnZWRPcmdhbmlzYXRpb25Qcm9wcykge1xuICAgIHN1cGVyKEFwcC5nZXRJbnN0YW5jZSgpLCBpZCwgcHJvcHMpO1xuICAgIHRoaXMuY3JlYXRlT3JnYW5pc2F0aW9uKHByb3BzKTtcbiAgICB0aGlzLnNldHVwT3JnYW5pc2F0aW9uRmVhdHVyZXMoe1xuICAgICAgLi4ucHJvcHMsXG4gICAgICBpZGVudGl0eUNlbnRlcjogcHJvcHMuaWRlbnRpdHlDZW50ZXIgPz8gdHJ1ZVxuICAgIH0pO1xuICAgIHRoaXMudXBkYXRlRW52aXJvbm1lbnRDb25maWcocHJvcHMpO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVPcmdhbmlzYXRpb24ocHJvcHM6IE1hbmFnZWRPcmdhbmlzYXRpb25Qcm9wcykge1xuICAgIHRoaXMub3JnYW5pc2F0aW9uID0gbmV3IE9yZ2FuaXNhdGlvbih0aGlzLCBcIk1hbmFnZWRPcmdhbmlzYXRpb25cIiwge1xuICAgICAgb3JnYW5pc2F0aW9uTmFtZTogcHJvcHMub3JnYW5pc2F0aW9uTmFtZSxcbiAgICAgIGFjY291bnRzOiBwcm9wcy5hY2NvdW50cyxcbiAgICAgIG9yZ0VtYWlsOiBwcm9wcy5vcmdFbWFpbCxcbiAgICAgIGVudjogcHJvcHMuZW52LFxuICAgICAgZXhpc3RpbmdBY2NvdW50czogcHJvcHMuZXhpc3RpbmdBY2NvdW50c1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXR1cE9yZ2FuaXNhdGlvbkZlYXR1cmVzKHByb3BzOiBNYW5hZ2VkT3JnYW5pc2F0aW9uUHJvcHMpIHtcbiAgICBjb25zdCBvcmdBY2NvdW50cyA9IHRoaXMub3JnYW5pc2F0aW9uLmdldEFjY291bnRzKCk7XG4gICAgY29uc3QgcGxhdGZvcm1BY2NvdW50SWQgPSB0aGlzLmdldFBsYXRmb3JtQWNjb3VudElkKG9yZ0FjY291bnRzLCBwcm9wcyk7XG5cbiAgICB0aGlzLnNldHVwSXBhbURlbGVnYXRpb24ocGxhdGZvcm1BY2NvdW50SWQpO1xuICAgIHRoaXMuZW5hYmxlUmFtU2hhcmluZygpO1xuICAgIHRoaXMuZW5hYmxlVHJ1c3RlZEFjY2Vzcyhwcm9wcyk7XG4gICAgdGhpcy5lbmFibGVDb3N0QWxsb2NhdGlvblRhZ3MocHJvcHMpO1xuICAgIHRoaXMuc2V0dXBJZGVudGl0eUNlbnRlcihvcmdBY2NvdW50cywgcHJvcHMpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRQbGF0Zm9ybUFjY291bnRJZChcbiAgICBvcmdBY2NvdW50czogUmVjb3JkPHN0cmluZywgc3RyaW5nPixcbiAgICBwcm9wczogTWFuYWdlZE9yZ2FuaXNhdGlvblByb3BzXG4gICkge1xuICAgIGNvbnN0IHBsYXRmb3JtRW50cnkgPSBPYmplY3QuZW50cmllcyhwcm9wcy5hY2NvdW50cykuZmluZChcbiAgICAgIChba2V5XSkgPT4ga2V5LnRvTG93ZXJDYXNlKCkgPT09IFwicGxhdGZvcm1cIlxuICAgICk7XG5cbiAgICBpZiAoIXBsYXRmb3JtRW50cnkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ05vIHBsYXRmb3JtIGFjY291bnQgZm91bmQuIFBsZWFzZSBpbmNsdWRlIGEgXCJwbGF0Zm9ybVwiIGtleSBpbiB5b3VyIGFjY291bnRzIGNvbmZpZ3VyYXRpb24uJ1xuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCBhY2NvdW50ID0gcGxhdGZvcm1FbnRyeVsxXTtcbiAgICBjb25zdCBwbGF0Zm9ybUFjY291bnQgPSBBcnJheS5pc0FycmF5KGFjY291bnQpID8gYWNjb3VudFswXSA6IGFjY291bnQ7XG5cbiAgICBjb25zdCBwbGF0Zm9ybUFjY291bnRJZCA9IG9yZ0FjY291bnRzW3BsYXRmb3JtQWNjb3VudF07XG5cbiAgICBpZiAoIXBsYXRmb3JtQWNjb3VudElkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBQbGF0Zm9ybSBhY2NvdW50IElEIG5vdCBmb3VuZCBmb3IgYWNjb3VudCBuYW1lOiAke3BsYXRmb3JtQWNjb3VudH1gXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiBwbGF0Zm9ybUFjY291bnRJZDtcbiAgfVxuXG4gIHByaXZhdGUgc2V0dXBJcGFtRGVsZWdhdGlvbihwbGF0Zm9ybUFjY291bnRJZDogc3RyaW5nKSB7XG4gICAgbmV3IElwYW1EZWxlZ2F0ZUFkbWluKHRoaXMsIFwiSXBhbURlbGVnYXRlQWRtaW5cIiwge1xuICAgICAgYWNjb3VudElkOiBwbGF0Zm9ybUFjY291bnRJZFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBlbmFibGVSYW1TaGFyaW5nKCkge1xuICAgIG5ldyBSYW1TaGFyaW5nKHRoaXMsIFwiUmFtU2hhcmluZ1wiKTtcbiAgfVxuXG4gIHByaXZhdGUgZW5hYmxlVHJ1c3RlZEFjY2Vzcyhwcm9wczogTWFuYWdlZE9yZ2FuaXNhdGlvblByb3BzKSB7XG4gICAgbmV3IEFjdGl2YXRlT3JnYW5pc2F0aW9uc0FjY2Vzcyh0aGlzLCBcIkFjdGl2YXRlT3JnYW5pc2F0aW9uc0FjY2Vzc1wiLCB7XG4gICAgICBhY2NvdW50OiBwcm9wcy5lbnYuYWNjb3VudCxcbiAgICAgIHJlZ2lvbjogcHJvcHMuZW52LnJlZ2lvblxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBlbmFibGVDb3N0QWxsb2NhdGlvblRhZ3MocHJvcHM6IE1hbmFnZWRPcmdhbmlzYXRpb25Qcm9wcykge1xuICAgIGlmIChwcm9wcy5jb3N0QWxsb2NhdGlvblRhZ3MubGVuZ3RoID4gMCkge1xuICAgICAgbmV3IENvc3RBbGxvY2F0aW9uVGFncyh0aGlzLCBcIkNvc3RBbGxvY2F0aW9uVGFnc1wiLCB7XG4gICAgICAgIGNvc3RBbGxvY2F0aW9uVGFnczogcHJvcHMuY29zdEFsbG9jYXRpb25UYWdzXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNldHVwSWRlbnRpdHlDZW50ZXIoXG4gICAgb3JnQWNjb3VudHM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4sXG4gICAgcHJvcHM6IE1hbmFnZWRPcmdhbmlzYXRpb25Qcm9wc1xuICApIHtcbiAgICBpZiAocHJvcHMuaWRlbnRpdHlDZW50ZXIpIHtcbiAgICAgIG5ldyBJZGVudGl0eUNlbnRlcih0aGlzLCBcIklkZW50aXR5Q2VudGVyXCIsIHtcbiAgICAgICAgYWNjb3VudHM6IG9yZ0FjY291bnRzXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZUVudmlyb25tZW50Q29uZmlnKHByb3BzOiBNYW5hZ2VkT3JnYW5pc2F0aW9uUHJvcHMpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgY29uZmlnID0gQ29uZmlnLmxvYWRDb25maWcoKTtcbiAgICAgIC8vIENvbnZlcnQgYWNjb3VudHMgdG8gYWNjb3VudFR5cGVzIGZvcm1hdFxuICAgICAgY29uc3QgYWNjb3VudFR5cGVzOiBSZWNvcmQ8c3RyaW5nLCByZWFkb25seSBzdHJpbmdbXT4gPSB7fTtcbiAgICAgIGZvciAoY29uc3QgW2VudlR5cGUsIGFjY291bnRzXSBvZiBPYmplY3QuZW50cmllcyhwcm9wcy5hY2NvdW50cykpIHtcbiAgICAgICAgYWNjb3VudFR5cGVzW2VudlR5cGVdID0gQXJyYXkuaXNBcnJheShhY2NvdW50cykgPyBhY2NvdW50cyA6IFthY2NvdW50c107XG4gICAgICB9XG4gICAgICBjb25maWcudXBkYXRlUHJvdmlkZXJBY2NvdW50RW52aXJvbm1lbnRzKGFjY291bnRUeXBlcyk7XG4gICAgICBjb25maWcuc2F2ZUNvbmZpZygpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgIFwiRmFpbGVkIHRvIHVwZGF0ZSBmamFsbC1jb25maWcuanNvbiB3aXRoIGVudmlyb25tZW50IG1hcHBpbmdzOlwiLFxuICAgICAgICBlcnJvclxuICAgICAgKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { Construct } from "constructs";
|
|
2
2
|
import { ManagedAccount, ManagedAccountProps } from "./managedAccount";
|
|
3
|
+
type AccountsConfig = {
|
|
4
|
+
readonly [key: string]: readonly string[] | string;
|
|
5
|
+
};
|
|
3
6
|
interface ManagedPlatformProps extends ManagedAccountProps {
|
|
4
|
-
|
|
7
|
+
accounts: AccountsConfig;
|
|
5
8
|
}
|
|
6
|
-
/**
|
|
7
|
-
* A stack for creating multi environment organisations with a production, staging and development account.
|
|
8
|
-
*/
|
|
9
9
|
export declare class ManagedPlatform extends ManagedAccount {
|
|
10
10
|
constructor(scope: Construct, id: string, props: ManagedPlatformProps);
|
|
11
11
|
}
|
|
@@ -4,19 +4,18 @@ exports.ManagedPlatform = void 0;
|
|
|
4
4
|
const ipam_1 = require("../../config/aws/ipam");
|
|
5
5
|
const ipamPool_1 = require("../../resources/aws/networking/ipamPool");
|
|
6
6
|
const managedAccount_1 = require("./managedAccount");
|
|
7
|
-
/**
|
|
8
|
-
* A stack for creating multi environment organisations with a production, staging and development account.
|
|
9
|
-
*/
|
|
10
7
|
class ManagedPlatform extends managedAccount_1.ManagedAccount {
|
|
11
8
|
constructor(scope, id, props) {
|
|
12
9
|
super(scope, id, props);
|
|
13
10
|
const ipam = new ipam_1.Ipam(this, "Ipam");
|
|
11
|
+
// Convert accounts to flat array for IpamPool
|
|
12
|
+
const orgAccounts = Object.values(props.accounts).flatMap((account) => Array.isArray(account) ? account : [account]);
|
|
14
13
|
new ipamPool_1.IpamPool(this, "IpamPool", {
|
|
15
|
-
orgAccounts
|
|
14
|
+
orgAccounts,
|
|
16
15
|
region: props.region,
|
|
17
16
|
ipamScope: ipam.privateDefaultScopeId
|
|
18
17
|
});
|
|
19
18
|
}
|
|
20
19
|
}
|
|
21
20
|
exports.ManagedPlatform = ManagedPlatform;
|
|
22
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
21
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFuYWdlZFBsYXRmb3JtLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vbGliL3BhdHRlcm5zL2F3cy9tYW5hZ2VkUGxhdGZvcm0udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsZ0RBQTZDO0FBQzdDLHNFQUFtRTtBQUVuRSxxREFBdUU7QUFVdkUsTUFBYSxlQUFnQixTQUFRLCtCQUFjO0lBQ2pELFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBMkI7UUFDbkUsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFFeEIsTUFBTSxJQUFJLEdBQUcsSUFBSSxXQUFJLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBRXBDLDhDQUE4QztRQUM5QyxNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUNwRSxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQzdDLENBQUM7UUFFRixJQUFJLG1CQUFRLENBQUMsSUFBSSxFQUFFLFVBQVUsRUFBRTtZQUM3QixXQUFXO1lBQ1gsTUFBTSxFQUFFLEtBQUssQ0FBQyxNQUFNO1lBQ3BCLFNBQVMsRUFBRSxJQUFJLENBQUMscUJBQXFCO1NBQ3RDLENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRjtBQWpCRCwwQ0FpQkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJcGFtIH0gZnJvbSBcIi4uLy4uL2NvbmZpZy9hd3MvaXBhbVwiO1xuaW1wb3J0IHsgSXBhbVBvb2wgfSBmcm9tIFwiLi4vLi4vcmVzb3VyY2VzL2F3cy9uZXR3b3JraW5nL2lwYW1Qb29sXCI7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuaW1wb3J0IHsgTWFuYWdlZEFjY291bnQsIE1hbmFnZWRBY2NvdW50UHJvcHMgfSBmcm9tIFwiLi9tYW5hZ2VkQWNjb3VudFwiO1xuXG50eXBlIEFjY291bnRzQ29uZmlnID0ge1xuICByZWFkb25seSBba2V5OiBzdHJpbmddOiByZWFkb25seSBzdHJpbmdbXSB8IHN0cmluZztcbn07XG5cbmludGVyZmFjZSBNYW5hZ2VkUGxhdGZvcm1Qcm9wcyBleHRlbmRzIE1hbmFnZWRBY2NvdW50UHJvcHMge1xuICBhY2NvdW50czogQWNjb3VudHNDb25maWc7XG59XG5cbmV4cG9ydCBjbGFzcyBNYW5hZ2VkUGxhdGZvcm0gZXh0ZW5kcyBNYW5hZ2VkQWNjb3VudCB7XG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBNYW5hZ2VkUGxhdGZvcm1Qcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwgcHJvcHMpO1xuXG4gICAgY29uc3QgaXBhbSA9IG5ldyBJcGFtKHRoaXMsIFwiSXBhbVwiKTtcblxuICAgIC8vIENvbnZlcnQgYWNjb3VudHMgdG8gZmxhdCBhcnJheSBmb3IgSXBhbVBvb2xcbiAgICBjb25zdCBvcmdBY2NvdW50cyA9IE9iamVjdC52YWx1ZXMocHJvcHMuYWNjb3VudHMpLmZsYXRNYXAoKGFjY291bnQpID0+XG4gICAgICBBcnJheS5pc0FycmF5KGFjY291bnQpID8gYWNjb3VudCA6IFthY2NvdW50XVxuICAgICk7XG5cbiAgICBuZXcgSXBhbVBvb2wodGhpcywgXCJJcGFtUG9vbFwiLCB7XG4gICAgICBvcmdBY2NvdW50cyxcbiAgICAgIHJlZ2lvbjogcHJvcHMucmVnaW9uLFxuICAgICAgaXBhbVNjb3BlOiBpcGFtLnByaXZhdGVEZWZhdWx0U2NvcGVJZFxuICAgIH0pO1xuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { Stack, StackProps } from "aws-cdk-lib";
|
|
2
|
+
import { Construct } from "constructs";
|
|
3
|
+
export interface ManagedPlatformStackSetProps extends StackProps {
|
|
4
|
+
}
|
|
5
|
+
/**
|
|
6
|
+
* A StackSet-compatible version of ManagedPlatform that uses CloudFormation parameters
|
|
7
|
+
* for accountId and region.
|
|
8
|
+
*
|
|
9
|
+
* Note: This creates IPAM infrastructure but not the individual account pools,
|
|
10
|
+
* as those require concrete account names at synthesis time. The pools should
|
|
11
|
+
* be created separately after the organization accounts are known.
|
|
12
|
+
*
|
|
13
|
+
* This is designed to be deployed ONLY to the platform account.
|
|
14
|
+
*/
|
|
15
|
+
export declare class ManagedPlatformStackSet extends Stack {
|
|
16
|
+
constructor(scope: Construct, id: string, props?: ManagedPlatformStackSetProps);
|
|
17
|
+
}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ManagedPlatformStackSet = void 0;
|
|
4
|
+
const aws_cdk_lib_1 = require("aws-cdk-lib");
|
|
5
|
+
const managedAccount_1 = require("./managedAccount");
|
|
6
|
+
const ipam_1 = require("../../config/aws/ipam");
|
|
7
|
+
/**
|
|
8
|
+
* A StackSet-compatible version of ManagedPlatform that uses CloudFormation parameters
|
|
9
|
+
* for accountId and region.
|
|
10
|
+
*
|
|
11
|
+
* Note: This creates IPAM infrastructure but not the individual account pools,
|
|
12
|
+
* as those require concrete account names at synthesis time. The pools should
|
|
13
|
+
* be created separately after the organization accounts are known.
|
|
14
|
+
*
|
|
15
|
+
* This is designed to be deployed ONLY to the platform account.
|
|
16
|
+
*/
|
|
17
|
+
class ManagedPlatformStackSet extends aws_cdk_lib_1.Stack {
|
|
18
|
+
constructor(scope, id, props) {
|
|
19
|
+
super(scope, id, props);
|
|
20
|
+
// Create parameters that will be populated by StackSet
|
|
21
|
+
const accountIdParam = new aws_cdk_lib_1.CfnParameter(this, "AccountId", {
|
|
22
|
+
type: "String",
|
|
23
|
+
description: "The AWS Account ID where this stack is being deployed",
|
|
24
|
+
default: this.account
|
|
25
|
+
});
|
|
26
|
+
const regionParam = new aws_cdk_lib_1.CfnParameter(this, "Region", {
|
|
27
|
+
type: "String",
|
|
28
|
+
description: "The AWS Region where this stack is being deployed",
|
|
29
|
+
default: this.region
|
|
30
|
+
});
|
|
31
|
+
// First, deploy the base ManagedAccount resources
|
|
32
|
+
const managedAccount = new managedAccount_1.ManagedAccount(this, "ManagedAccountResources", {
|
|
33
|
+
accountId: accountIdParam.valueAsString,
|
|
34
|
+
region: regionParam.valueAsString,
|
|
35
|
+
env: {
|
|
36
|
+
account: accountIdParam.valueAsString,
|
|
37
|
+
region: regionParam.valueAsString
|
|
38
|
+
}
|
|
39
|
+
});
|
|
40
|
+
// Create IPAM infrastructure (without pools)
|
|
41
|
+
const ipam = new ipam_1.Ipam(this, "Ipam");
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
exports.ManagedPlatformStackSet = ManagedPlatformStackSet;
|
|
45
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFuYWdlZFBsYXRmb3JtU3RhY2tTZXQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWIvcGF0dGVybnMvYXdzL21hbmFnZWRQbGF0Zm9ybVN0YWNrU2V0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDZDQUE4RDtBQUU5RCxxREFBa0Q7QUFDbEQsZ0RBQTZDO0FBTTdDOzs7Ozs7Ozs7R0FTRztBQUNILE1BQWEsdUJBQXdCLFNBQVEsbUJBQUs7SUFDaEQsWUFDRSxLQUFnQixFQUNoQixFQUFVLEVBQ1YsS0FBb0M7UUFFcEMsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFFeEIsdURBQXVEO1FBQ3ZELE1BQU0sY0FBYyxHQUFHLElBQUksMEJBQVksQ0FBQyxJQUFJLEVBQUUsV0FBVyxFQUFFO1lBQ3pELElBQUksRUFBRSxRQUFRO1lBQ2QsV0FBVyxFQUFFLHVEQUF1RDtZQUNwRSxPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU87U0FDdEIsQ0FBQyxDQUFDO1FBRUgsTUFBTSxXQUFXLEdBQUcsSUFBSSwwQkFBWSxDQUFDLElBQUksRUFBRSxRQUFRLEVBQUU7WUFDbkQsSUFBSSxFQUFFLFFBQVE7WUFDZCxXQUFXLEVBQUUsbURBQW1EO1lBQ2hFLE9BQU8sRUFBRSxJQUFJLENBQUMsTUFBTTtTQUNyQixDQUFDLENBQUM7UUFFSCxrREFBa0Q7UUFDbEQsTUFBTSxjQUFjLEdBQUcsSUFBSSwrQkFBYyxDQUFDLElBQUksRUFBRSx5QkFBeUIsRUFBRTtZQUN6RSxTQUFTLEVBQUUsY0FBYyxDQUFDLGFBQWE7WUFDdkMsTUFBTSxFQUFFLFdBQVcsQ0FBQyxhQUFhO1lBQ2pDLEdBQUcsRUFBRTtnQkFDSCxPQUFPLEVBQUUsY0FBYyxDQUFDLGFBQWE7Z0JBQ3JDLE1BQU0sRUFBRSxXQUFXLENBQUMsYUFBYTthQUNsQztTQUNGLENBQUMsQ0FBQztRQUVILDZDQUE2QztRQUM3QyxNQUFNLElBQUksR0FBRyxJQUFJLFdBQUksQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDdEMsQ0FBQztDQUNGO0FBbENELDBEQWtDQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENmblBhcmFtZXRlciwgU3RhY2ssIFN0YWNrUHJvcHMgfSBmcm9tIFwiYXdzLWNkay1saWJcIjtcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5pbXBvcnQgeyBNYW5hZ2VkQWNjb3VudCB9IGZyb20gXCIuL21hbmFnZWRBY2NvdW50XCI7XG5pbXBvcnQgeyBJcGFtIH0gZnJvbSBcIi4uLy4uL2NvbmZpZy9hd3MvaXBhbVwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIE1hbmFnZWRQbGF0Zm9ybVN0YWNrU2V0UHJvcHMgZXh0ZW5kcyBTdGFja1Byb3BzIHtcbiAgLy8gQWRkaXRpb25hbCBwcm9wcyBpZiBuZWVkZWRcbn1cblxuLyoqXG4gKiBBIFN0YWNrU2V0LWNvbXBhdGlibGUgdmVyc2lvbiBvZiBNYW5hZ2VkUGxhdGZvcm0gdGhhdCB1c2VzIENsb3VkRm9ybWF0aW9uIHBhcmFtZXRlcnNcbiAqIGZvciBhY2NvdW50SWQgYW5kIHJlZ2lvbi5cbiAqXG4gKiBOb3RlOiBUaGlzIGNyZWF0ZXMgSVBBTSBpbmZyYXN0cnVjdHVyZSBidXQgbm90IHRoZSBpbmRpdmlkdWFsIGFjY291bnQgcG9vbHMsXG4gKiBhcyB0aG9zZSByZXF1aXJlIGNvbmNyZXRlIGFjY291bnQgbmFtZXMgYXQgc3ludGhlc2lzIHRpbWUuIFRoZSBwb29scyBzaG91bGRcbiAqIGJlIGNyZWF0ZWQgc2VwYXJhdGVseSBhZnRlciB0aGUgb3JnYW5pemF0aW9uIGFjY291bnRzIGFyZSBrbm93bi5cbiAqXG4gKiBUaGlzIGlzIGRlc2lnbmVkIHRvIGJlIGRlcGxveWVkIE9OTFkgdG8gdGhlIHBsYXRmb3JtIGFjY291bnQuXG4gKi9cbmV4cG9ydCBjbGFzcyBNYW5hZ2VkUGxhdGZvcm1TdGFja1NldCBleHRlbmRzIFN0YWNrIHtcbiAgY29uc3RydWN0b3IoXG4gICAgc2NvcGU6IENvbnN0cnVjdCxcbiAgICBpZDogc3RyaW5nLFxuICAgIHByb3BzPzogTWFuYWdlZFBsYXRmb3JtU3RhY2tTZXRQcm9wc1xuICApIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIHByb3BzKTtcblxuICAgIC8vIENyZWF0ZSBwYXJhbWV0ZXJzIHRoYXQgd2lsbCBiZSBwb3B1bGF0ZWQgYnkgU3RhY2tTZXRcbiAgICBjb25zdCBhY2NvdW50SWRQYXJhbSA9IG5ldyBDZm5QYXJhbWV0ZXIodGhpcywgXCJBY2NvdW50SWRcIiwge1xuICAgICAgdHlwZTogXCJTdHJpbmdcIixcbiAgICAgIGRlc2NyaXB0aW9uOiBcIlRoZSBBV1MgQWNjb3VudCBJRCB3aGVyZSB0aGlzIHN0YWNrIGlzIGJlaW5nIGRlcGxveWVkXCIsXG4gICAgICBkZWZhdWx0OiB0aGlzLmFjY291bnRcbiAgICB9KTtcblxuICAgIGNvbnN0IHJlZ2lvblBhcmFtID0gbmV3IENmblBhcmFtZXRlcih0aGlzLCBcIlJlZ2lvblwiLCB7XG4gICAgICB0eXBlOiBcIlN0cmluZ1wiLFxuICAgICAgZGVzY3JpcHRpb246IFwiVGhlIEFXUyBSZWdpb24gd2hlcmUgdGhpcyBzdGFjayBpcyBiZWluZyBkZXBsb3llZFwiLFxuICAgICAgZGVmYXVsdDogdGhpcy5yZWdpb25cbiAgICB9KTtcblxuICAgIC8vIEZpcnN0LCBkZXBsb3kgdGhlIGJhc2UgTWFuYWdlZEFjY291bnQgcmVzb3VyY2VzXG4gICAgY29uc3QgbWFuYWdlZEFjY291bnQgPSBuZXcgTWFuYWdlZEFjY291bnQodGhpcywgXCJNYW5hZ2VkQWNjb3VudFJlc291cmNlc1wiLCB7XG4gICAgICBhY2NvdW50SWQ6IGFjY291bnRJZFBhcmFtLnZhbHVlQXNTdHJpbmcsXG4gICAgICByZWdpb246IHJlZ2lvblBhcmFtLnZhbHVlQXNTdHJpbmcsXG4gICAgICBlbnY6IHtcbiAgICAgICAgYWNjb3VudDogYWNjb3VudElkUGFyYW0udmFsdWVBc1N0cmluZyxcbiAgICAgICAgcmVnaW9uOiByZWdpb25QYXJhbS52YWx1ZUFzU3RyaW5nXG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyBDcmVhdGUgSVBBTSBpbmZyYXN0cnVjdHVyZSAod2l0aG91dCBwb29scylcbiAgICBjb25zdCBpcGFtID0gbmV3IElwYW0odGhpcywgXCJJcGFtXCIpO1xuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { Construct } from "constructs";
|
|
2
|
+
export declare class AssignmentNew extends Construct {
|
|
3
|
+
constructor(scope: Construct, id: string, props: {
|
|
4
|
+
instanceArn: string;
|
|
5
|
+
permissionSetArn: string;
|
|
6
|
+
principalType: string;
|
|
7
|
+
principalId: string;
|
|
8
|
+
targetType: string;
|
|
9
|
+
targetId: string;
|
|
10
|
+
});
|
|
11
|
+
}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.AssignmentNew = 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_lambda_1 = require("aws-cdk-lib/aws-lambda");
|
|
7
|
+
const aws_logs_1 = require("aws-cdk-lib/aws-logs");
|
|
8
|
+
const custom_resources_1 = require("aws-cdk-lib/custom-resources");
|
|
9
|
+
const constructs_1 = require("constructs");
|
|
10
|
+
const path_1 = require("path");
|
|
11
|
+
const aws_cdk_lib_2 = require("aws-cdk-lib");
|
|
12
|
+
class AssignmentNew extends constructs_1.Construct {
|
|
13
|
+
constructor(scope, id, props) {
|
|
14
|
+
super(scope, id);
|
|
15
|
+
// 1. Create a dedicated IAM role with the necessary permissions
|
|
16
|
+
const lambdaRole = new aws_iam_1.Role(this, `${id}LambdaRole`, {
|
|
17
|
+
assumedBy: new aws_iam_1.ServicePrincipal("lambda.amazonaws.com"),
|
|
18
|
+
description: `Role for AWS Identity Center Assignment for ${id}`,
|
|
19
|
+
inlinePolicies: {
|
|
20
|
+
// CloudWatch Logs permissions
|
|
21
|
+
"logs-policy": new aws_iam_1.PolicyDocument({
|
|
22
|
+
statements: [
|
|
23
|
+
new aws_iam_1.PolicyStatement({
|
|
24
|
+
effect: aws_iam_1.Effect.ALLOW,
|
|
25
|
+
actions: [
|
|
26
|
+
"logs:CreateLogGroup",
|
|
27
|
+
"logs:CreateLogStream",
|
|
28
|
+
"logs:PutLogEvents"
|
|
29
|
+
],
|
|
30
|
+
resources: ["*"]
|
|
31
|
+
})
|
|
32
|
+
]
|
|
33
|
+
}),
|
|
34
|
+
// SSO Admin permissions - comprehensive permissions for both sso: and sso-admin: namespaces
|
|
35
|
+
"sso-admin-policy": new aws_iam_1.PolicyDocument({
|
|
36
|
+
statements: [
|
|
37
|
+
new aws_iam_1.PolicyStatement({
|
|
38
|
+
effect: aws_iam_1.Effect.ALLOW,
|
|
39
|
+
actions: [
|
|
40
|
+
// SSO Admin permissions (using both prefixes to ensure compatibility)
|
|
41
|
+
"sso:*",
|
|
42
|
+
"sso-admin:CreateAccountAssignment",
|
|
43
|
+
"sso-admin:DeleteAccountAssignment",
|
|
44
|
+
"sso-admin:ListAccountAssignments",
|
|
45
|
+
"sso-admin:DescribeAccountAssignmentCreationStatus",
|
|
46
|
+
"sso-admin:DescribeAccountAssignmentDeletionStatus",
|
|
47
|
+
// Original SSO permissions (may still be needed)
|
|
48
|
+
"sso:CreateAccountAssignment",
|
|
49
|
+
"sso:UpdateAccountAssignment",
|
|
50
|
+
"sso:DeleteAccountAssignment",
|
|
51
|
+
"sso:ListAccountAssignments",
|
|
52
|
+
"sso:DescribeAccountAssignmentCreationStatus",
|
|
53
|
+
"sso:DescribeAccountAssignmentDeletionStatus",
|
|
54
|
+
// Identity Store permissions
|
|
55
|
+
"identitystore:DescribeGroup",
|
|
56
|
+
"identitystore:ListGroupMemberships",
|
|
57
|
+
"identitystore:ListUsers",
|
|
58
|
+
"identitystore:ListGroups",
|
|
59
|
+
// Organizations permissions that may be needed for cross-account operations
|
|
60
|
+
"organizations:DescribeAccount",
|
|
61
|
+
"organizations:ListAccounts"
|
|
62
|
+
],
|
|
63
|
+
resources: ["*"]
|
|
64
|
+
})
|
|
65
|
+
]
|
|
66
|
+
})
|
|
67
|
+
}
|
|
68
|
+
});
|
|
69
|
+
// 2. Create the Lambda function with the dedicated role
|
|
70
|
+
const lambda = new aws_lambda_1.Function(this, `${id}Lambda`, {
|
|
71
|
+
runtime: aws_lambda_1.Runtime.NODEJS_18_X,
|
|
72
|
+
code: aws_lambda_1.Code.fromAsset((0, path_1.join)(__dirname, "lambda")),
|
|
73
|
+
handler: "assignmentHandler.handler",
|
|
74
|
+
role: lambdaRole,
|
|
75
|
+
timeout: aws_cdk_lib_1.Duration.minutes(5),
|
|
76
|
+
description: `AWS Identity Center Assignment Handler for ${id}`,
|
|
77
|
+
logRetention: aws_logs_1.RetentionDays.ONE_WEEK,
|
|
78
|
+
memorySize: 256 // Increase memory for better performance
|
|
79
|
+
});
|
|
80
|
+
// 3. Create a custom resource provider
|
|
81
|
+
const provider = new custom_resources_1.Provider(this, `${id}Provider`, {
|
|
82
|
+
onEventHandler: lambda,
|
|
83
|
+
logRetention: aws_logs_1.RetentionDays.ONE_WEEK
|
|
84
|
+
});
|
|
85
|
+
// 4. Create the custom resource
|
|
86
|
+
new aws_cdk_lib_2.CustomResource(this, `${id}Resource`, {
|
|
87
|
+
serviceToken: provider.serviceToken,
|
|
88
|
+
properties: {
|
|
89
|
+
InstanceArn: props.instanceArn,
|
|
90
|
+
PermissionSetArn: props.permissionSetArn,
|
|
91
|
+
PrincipalType: props.principalType,
|
|
92
|
+
PrincipalId: props.principalId,
|
|
93
|
+
TargetType: props.targetType,
|
|
94
|
+
TargetId: props.targetId,
|
|
95
|
+
// Add a timestamp to ensure updates are processed
|
|
96
|
+
Timestamp: new Date().toISOString()
|
|
97
|
+
}
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
exports.AssignmentNew = AssignmentNew;
|
|
102
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzaWdubWVudE5ldy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYi9yZXNvdXJjZXMvYXdzL2lhbS9pZGVudGl0eUNlbnRlci9hc3NpZ25tZW50TmV3LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDZDQUF1QztBQUN2QyxpREFNNkI7QUFDN0IsdURBQWlFO0FBQ2pFLG1EQUFxRDtBQUNyRCxtRUFBd0Q7QUFDeEQsMkNBQXVDO0FBQ3ZDLCtCQUE0QjtBQUM1Qiw2Q0FBNkM7QUFFN0MsTUFBYSxhQUFjLFNBQVEsc0JBQVM7SUFDMUMsWUFDRSxLQUFnQixFQUNoQixFQUFVLEVBQ1YsS0FPQztRQUVELEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFakIsZ0VBQWdFO1FBQ2hFLE1BQU0sVUFBVSxHQUFHLElBQUksY0FBSSxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsWUFBWSxFQUFFO1lBQ25ELFNBQVMsRUFBRSxJQUFJLDBCQUFnQixDQUFDLHNCQUFzQixDQUFDO1lBQ3ZELFdBQVcsRUFBRSwrQ0FBK0MsRUFBRSxFQUFFO1lBQ2hFLGNBQWMsRUFBRTtnQkFDZCw4QkFBOEI7Z0JBQzlCLGFBQWEsRUFBRSxJQUFJLHdCQUFjLENBQUM7b0JBQ2hDLFVBQVUsRUFBRTt3QkFDVixJQUFJLHlCQUFlLENBQUM7NEJBQ2xCLE1BQU0sRUFBRSxnQkFBTSxDQUFDLEtBQUs7NEJBQ3BCLE9BQU8sRUFBRTtnQ0FDUCxxQkFBcUI7Z0NBQ3JCLHNCQUFzQjtnQ0FDdEIsbUJBQW1COzZCQUNwQjs0QkFDRCxTQUFTLEVBQUUsQ0FBQyxHQUFHLENBQUM7eUJBQ2pCLENBQUM7cUJBQ0g7aUJBQ0YsQ0FBQztnQkFDRiw0RkFBNEY7Z0JBQzVGLGtCQUFrQixFQUFFLElBQUksd0JBQWMsQ0FBQztvQkFDckMsVUFBVSxFQUFFO3dCQUNWLElBQUkseUJBQWUsQ0FBQzs0QkFDbEIsTUFBTSxFQUFFLGdCQUFNLENBQUMsS0FBSzs0QkFDcEIsT0FBTyxFQUFFO2dDQUNQLHNFQUFzRTtnQ0FDdEUsT0FBTztnQ0FDUCxtQ0FBbUM7Z0NBQ25DLG1DQUFtQztnQ0FDbkMsa0NBQWtDO2dDQUNsQyxtREFBbUQ7Z0NBQ25ELG1EQUFtRDtnQ0FFbkQsaURBQWlEO2dDQUNqRCw2QkFBNkI7Z0NBQzdCLDZCQUE2QjtnQ0FDN0IsNkJBQTZCO2dDQUM3Qiw0QkFBNEI7Z0NBQzVCLDZDQUE2QztnQ0FDN0MsNkNBQTZDO2dDQUU3Qyw2QkFBNkI7Z0NBQzdCLDZCQUE2QjtnQ0FDN0Isb0NBQW9DO2dDQUNwQyx5QkFBeUI7Z0NBQ3pCLDBCQUEwQjtnQ0FFMUIsNEVBQTRFO2dDQUM1RSwrQkFBK0I7Z0NBQy9CLDRCQUE0Qjs2QkFDN0I7NEJBQ0QsU0FBUyxFQUFFLENBQUMsR0FBRyxDQUFDO3lCQUNqQixDQUFDO3FCQUNIO2lCQUNGLENBQUM7YUFDSDtTQUNGLENBQUMsQ0FBQztRQUVILHdEQUF3RDtRQUN4RCxNQUFNLE1BQU0sR0FBRyxJQUFJLHFCQUFRLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUU7WUFDL0MsT0FBTyxFQUFFLG9CQUFPLENBQUMsV0FBVztZQUM1QixJQUFJLEVBQUUsaUJBQUksQ0FBQyxTQUFTLENBQUMsSUFBQSxXQUFJLEVBQUMsU0FBUyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1lBQy9DLE9BQU8sRUFBRSwyQkFBMkI7WUFDcEMsSUFBSSxFQUFFLFVBQVU7WUFDaEIsT0FBTyxFQUFFLHNCQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztZQUM1QixXQUFXLEVBQUUsOENBQThDLEVBQUUsRUFBRTtZQUMvRCxZQUFZLEVBQUUsd0JBQWEsQ0FBQyxRQUFRO1lBQ3BDLFVBQVUsRUFBRSxHQUFHLENBQUMseUNBQXlDO1NBQzFELENBQUMsQ0FBQztRQUVILHVDQUF1QztRQUN2QyxNQUFNLFFBQVEsR0FBRyxJQUFJLDJCQUFRLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxVQUFVLEVBQUU7WUFDbkQsY0FBYyxFQUFFLE1BQU07WUFDdEIsWUFBWSxFQUFFLHdCQUFhLENBQUMsUUFBUTtTQUNyQyxDQUFDLENBQUM7UUFFSCxnQ0FBZ0M7UUFDaEMsSUFBSSw0QkFBYyxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsVUFBVSxFQUFFO1lBQ3hDLFlBQVksRUFBRSxRQUFRLENBQUMsWUFBWTtZQUNuQyxVQUFVLEVBQUU7Z0JBQ1YsV0FBVyxFQUFFLEtBQUssQ0FBQyxXQUFXO2dCQUM5QixnQkFBZ0IsRUFBRSxLQUFLLENBQUMsZ0JBQWdCO2dCQUN4QyxhQUFhLEVBQUUsS0FBSyxDQUFDLGFBQWE7Z0JBQ2xDLFdBQVcsRUFBRSxLQUFLLENBQUMsV0FBVztnQkFDOUIsVUFBVSxFQUFFLEtBQUssQ0FBQyxVQUFVO2dCQUM1QixRQUFRLEVBQUUsS0FBSyxDQUFDLFFBQVE7Z0JBQ3hCLGtEQUFrRDtnQkFDbEQsU0FBUyxFQUFFLElBQUksSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFO2FBQ3BDO1NBQ0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUNGO0FBMUdELHNDQTBHQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IER1cmF0aW9uIH0gZnJvbSBcImF3cy1jZGstbGliXCI7XG5pbXBvcnQge1xuICBQb2xpY3lEb2N1bWVudCxcbiAgUG9saWN5U3RhdGVtZW50LFxuICBFZmZlY3QsXG4gIFJvbGUsXG4gIFNlcnZpY2VQcmluY2lwYWxcbn0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1pYW1cIjtcbmltcG9ydCB7IENvZGUsIEZ1bmN0aW9uLCBSdW50aW1lIH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1sYW1iZGFcIjtcbmltcG9ydCB7IFJldGVudGlvbkRheXMgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWxvZ3NcIjtcbmltcG9ydCB7IFByb3ZpZGVyIH0gZnJvbSBcImF3cy1jZGstbGliL2N1c3RvbS1yZXNvdXJjZXNcIjtcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5pbXBvcnQgeyBqb2luIH0gZnJvbSBcInBhdGhcIjtcbmltcG9ydCB7IEN1c3RvbVJlc291cmNlIH0gZnJvbSBcImF3cy1jZGstbGliXCI7XG5cbmV4cG9ydCBjbGFzcyBBc3NpZ25tZW50TmV3IGV4dGVuZHMgQ29uc3RydWN0IHtcbiAgY29uc3RydWN0b3IoXG4gICAgc2NvcGU6IENvbnN0cnVjdCxcbiAgICBpZDogc3RyaW5nLFxuICAgIHByb3BzOiB7XG4gICAgICBpbnN0YW5jZUFybjogc3RyaW5nO1xuICAgICAgcGVybWlzc2lvblNldEFybjogc3RyaW5nO1xuICAgICAgcHJpbmNpcGFsVHlwZTogc3RyaW5nO1xuICAgICAgcHJpbmNpcGFsSWQ6IHN0cmluZztcbiAgICAgIHRhcmdldFR5cGU6IHN0cmluZztcbiAgICAgIHRhcmdldElkOiBzdHJpbmc7XG4gICAgfVxuICApIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgLy8gMS4gQ3JlYXRlIGEgZGVkaWNhdGVkIElBTSByb2xlIHdpdGggdGhlIG5lY2Vzc2FyeSBwZXJtaXNzaW9uc1xuICAgIGNvbnN0IGxhbWJkYVJvbGUgPSBuZXcgUm9sZSh0aGlzLCBgJHtpZH1MYW1iZGFSb2xlYCwge1xuICAgICAgYXNzdW1lZEJ5OiBuZXcgU2VydmljZVByaW5jaXBhbChcImxhbWJkYS5hbWF6b25hd3MuY29tXCIpLFxuICAgICAgZGVzY3JpcHRpb246IGBSb2xlIGZvciBBV1MgSWRlbnRpdHkgQ2VudGVyIEFzc2lnbm1lbnQgZm9yICR7aWR9YCxcbiAgICAgIGlubGluZVBvbGljaWVzOiB7XG4gICAgICAgIC8vIENsb3VkV2F0Y2ggTG9ncyBwZXJtaXNzaW9uc1xuICAgICAgICBcImxvZ3MtcG9saWN5XCI6IG5ldyBQb2xpY3lEb2N1bWVudCh7XG4gICAgICAgICAgc3RhdGVtZW50czogW1xuICAgICAgICAgICAgbmV3IFBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgICAgICAgIGVmZmVjdDogRWZmZWN0LkFMTE9XLFxuICAgICAgICAgICAgICBhY3Rpb25zOiBbXG4gICAgICAgICAgICAgICAgXCJsb2dzOkNyZWF0ZUxvZ0dyb3VwXCIsXG4gICAgICAgICAgICAgICAgXCJsb2dzOkNyZWF0ZUxvZ1N0cmVhbVwiLFxuICAgICAgICAgICAgICAgIFwibG9nczpQdXRMb2dFdmVudHNcIlxuICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICByZXNvdXJjZXM6IFtcIipcIl1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgXVxuICAgICAgICB9KSxcbiAgICAgICAgLy8gU1NPIEFkbWluIHBlcm1pc3Npb25zIC0gY29tcHJlaGVuc2l2ZSBwZXJtaXNzaW9ucyBmb3IgYm90aCBzc286IGFuZCBzc28tYWRtaW46IG5hbWVzcGFjZXNcbiAgICAgICAgXCJzc28tYWRtaW4tcG9saWN5XCI6IG5ldyBQb2xpY3lEb2N1bWVudCh7XG4gICAgICAgICAgc3RhdGVtZW50czogW1xuICAgICAgICAgICAgbmV3IFBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgICAgICAgIGVmZmVjdDogRWZmZWN0LkFMTE9XLFxuICAgICAgICAgICAgICBhY3Rpb25zOiBbXG4gICAgICAgICAgICAgICAgLy8gU1NPIEFkbWluIHBlcm1pc3Npb25zICh1c2luZyBib3RoIHByZWZpeGVzIHRvIGVuc3VyZSBjb21wYXRpYmlsaXR5KVxuICAgICAgICAgICAgICAgIFwic3NvOipcIixcbiAgICAgICAgICAgICAgICBcInNzby1hZG1pbjpDcmVhdGVBY2NvdW50QXNzaWdubWVudFwiLFxuICAgICAgICAgICAgICAgIFwic3NvLWFkbWluOkRlbGV0ZUFjY291bnRBc3NpZ25tZW50XCIsXG4gICAgICAgICAgICAgICAgXCJzc28tYWRtaW46TGlzdEFjY291bnRBc3NpZ25tZW50c1wiLFxuICAgICAgICAgICAgICAgIFwic3NvLWFkbWluOkRlc2NyaWJlQWNjb3VudEFzc2lnbm1lbnRDcmVhdGlvblN0YXR1c1wiLFxuICAgICAgICAgICAgICAgIFwic3NvLWFkbWluOkRlc2NyaWJlQWNjb3VudEFzc2lnbm1lbnREZWxldGlvblN0YXR1c1wiLFxuXG4gICAgICAgICAgICAgICAgLy8gT3JpZ2luYWwgU1NPIHBlcm1pc3Npb25zIChtYXkgc3RpbGwgYmUgbmVlZGVkKVxuICAgICAgICAgICAgICAgIFwic3NvOkNyZWF0ZUFjY291bnRBc3NpZ25tZW50XCIsXG4gICAgICAgICAgICAgICAgXCJzc286VXBkYXRlQWNjb3VudEFzc2lnbm1lbnRcIixcbiAgICAgICAgICAgICAgICBcInNzbzpEZWxldGVBY2NvdW50QXNzaWdubWVudFwiLFxuICAgICAgICAgICAgICAgIFwic3NvOkxpc3RBY2NvdW50QXNzaWdubWVudHNcIixcbiAgICAgICAgICAgICAgICBcInNzbzpEZXNjcmliZUFjY291bnRBc3NpZ25tZW50Q3JlYXRpb25TdGF0dXNcIixcbiAgICAgICAgICAgICAgICBcInNzbzpEZXNjcmliZUFjY291bnRBc3NpZ25tZW50RGVsZXRpb25TdGF0dXNcIixcblxuICAgICAgICAgICAgICAgIC8vIElkZW50aXR5IFN0b3JlIHBlcm1pc3Npb25zXG4gICAgICAgICAgICAgICAgXCJpZGVudGl0eXN0b3JlOkRlc2NyaWJlR3JvdXBcIixcbiAgICAgICAgICAgICAgICBcImlkZW50aXR5c3RvcmU6TGlzdEdyb3VwTWVtYmVyc2hpcHNcIixcbiAgICAgICAgICAgICAgICBcImlkZW50aXR5c3RvcmU6TGlzdFVzZXJzXCIsXG4gICAgICAgICAgICAgICAgXCJpZGVudGl0eXN0b3JlOkxpc3RHcm91cHNcIixcblxuICAgICAgICAgICAgICAgIC8vIE9yZ2FuaXphdGlvbnMgcGVybWlzc2lvbnMgdGhhdCBtYXkgYmUgbmVlZGVkIGZvciBjcm9zcy1hY2NvdW50IG9wZXJhdGlvbnNcbiAgICAgICAgICAgICAgICBcIm9yZ2FuaXphdGlvbnM6RGVzY3JpYmVBY2NvdW50XCIsXG4gICAgICAgICAgICAgICAgXCJvcmdhbml6YXRpb25zOkxpc3RBY2NvdW50c1wiXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgIHJlc291cmNlczogW1wiKlwiXVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICBdXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyAyLiBDcmVhdGUgdGhlIExhbWJkYSBmdW5jdGlvbiB3aXRoIHRoZSBkZWRpY2F0ZWQgcm9sZVxuICAgIGNvbnN0IGxhbWJkYSA9IG5ldyBGdW5jdGlvbih0aGlzLCBgJHtpZH1MYW1iZGFgLCB7XG4gICAgICBydW50aW1lOiBSdW50aW1lLk5PREVKU18xOF9YLFxuICAgICAgY29kZTogQ29kZS5mcm9tQXNzZXQoam9pbihfX2Rpcm5hbWUsIFwibGFtYmRhXCIpKSxcbiAgICAgIGhhbmRsZXI6IFwiYXNzaWdubWVudEhhbmRsZXIuaGFuZGxlclwiLFxuICAgICAgcm9sZTogbGFtYmRhUm9sZSxcbiAgICAgIHRpbWVvdXQ6IER1cmF0aW9uLm1pbnV0ZXMoNSksXG4gICAgICBkZXNjcmlwdGlvbjogYEFXUyBJZGVudGl0eSBDZW50ZXIgQXNzaWdubWVudCBIYW5kbGVyIGZvciAke2lkfWAsXG4gICAgICBsb2dSZXRlbnRpb246IFJldGVudGlvbkRheXMuT05FX1dFRUssXG4gICAgICBtZW1vcnlTaXplOiAyNTYgLy8gSW5jcmVhc2UgbWVtb3J5IGZvciBiZXR0ZXIgcGVyZm9ybWFuY2VcbiAgICB9KTtcblxuICAgIC8vIDMuIENyZWF0ZSBhIGN1c3RvbSByZXNvdXJjZSBwcm92aWRlclxuICAgIGNvbnN0IHByb3ZpZGVyID0gbmV3IFByb3ZpZGVyKHRoaXMsIGAke2lkfVByb3ZpZGVyYCwge1xuICAgICAgb25FdmVudEhhbmRsZXI6IGxhbWJkYSxcbiAgICAgIGxvZ1JldGVudGlvbjogUmV0ZW50aW9uRGF5cy5PTkVfV0VFS1xuICAgIH0pO1xuXG4gICAgLy8gNC4gQ3JlYXRlIHRoZSBjdXN0b20gcmVzb3VyY2VcbiAgICBuZXcgQ3VzdG9tUmVzb3VyY2UodGhpcywgYCR7aWR9UmVzb3VyY2VgLCB7XG4gICAgICBzZXJ2aWNlVG9rZW46IHByb3ZpZGVyLnNlcnZpY2VUb2tlbixcbiAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgSW5zdGFuY2VBcm46IHByb3BzLmluc3RhbmNlQXJuLFxuICAgICAgICBQZXJtaXNzaW9uU2V0QXJuOiBwcm9wcy5wZXJtaXNzaW9uU2V0QXJuLFxuICAgICAgICBQcmluY2lwYWxUeXBlOiBwcm9wcy5wcmluY2lwYWxUeXBlLFxuICAgICAgICBQcmluY2lwYWxJZDogcHJvcHMucHJpbmNpcGFsSWQsXG4gICAgICAgIFRhcmdldFR5cGU6IHByb3BzLnRhcmdldFR5cGUsXG4gICAgICAgIFRhcmdldElkOiBwcm9wcy50YXJnZXRJZCxcbiAgICAgICAgLy8gQWRkIGEgdGltZXN0YW1wIHRvIGVuc3VyZSB1cGRhdGVzIGFyZSBwcm9jZXNzZWRcbiAgICAgICAgVGltZXN0YW1wOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKClcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
interface CloudFormationEvent {
|
|
2
|
+
RequestType: "Create" | "Update" | "Delete";
|
|
3
|
+
ResponseURL: string;
|
|
4
|
+
StackId: string;
|
|
5
|
+
RequestId: string;
|
|
6
|
+
ResourceType: string;
|
|
7
|
+
LogicalResourceId: string;
|
|
8
|
+
PhysicalResourceId?: string;
|
|
9
|
+
ResourceProperties: {
|
|
10
|
+
ServiceToken: string;
|
|
11
|
+
InstanceArn: string;
|
|
12
|
+
PermissionSetArn: string;
|
|
13
|
+
PrincipalType: string;
|
|
14
|
+
PrincipalId: string;
|
|
15
|
+
TargetType: string;
|
|
16
|
+
TargetId: string;
|
|
17
|
+
[key: string]: any;
|
|
18
|
+
};
|
|
19
|
+
OldResourceProperties?: {
|
|
20
|
+
[key: string]: any;
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
export declare const handler: (event: CloudFormationEvent) => Promise<any>;
|
|
24
|
+
export {};
|