@fjall/components-infrastructure 2.30.3 → 2.32.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.
Files changed (118) hide show
  1. package/dist/lib/app.d.ts +27 -1
  2. package/dist/lib/app.js +35 -4
  3. package/dist/lib/config/aws/identityCenterMembership.d.ts +11 -0
  4. package/dist/lib/config/aws/identityCenterMembership.js +61 -0
  5. package/dist/lib/config/aws/oidcConnector.js +11 -3
  6. package/dist/lib/lambda-assets/cert-generator/asset/index.js +12 -3
  7. package/dist/lib/patterns/aws/compute.d.ts +2 -2
  8. package/dist/lib/patterns/aws/compute.js +18 -9
  9. package/dist/lib/patterns/aws/computeLambda.d.ts +15 -1
  10. package/dist/lib/patterns/aws/computeLambda.js +18 -2
  11. package/dist/lib/patterns/aws/computePropApplicability.d.ts +20 -0
  12. package/dist/lib/patterns/aws/computePropApplicability.js +87 -0
  13. package/dist/lib/patterns/aws/database.d.ts +19 -1
  14. package/dist/lib/patterns/aws/database.js +22 -3
  15. package/dist/lib/patterns/aws/devSubstrate.d.ts +85 -0
  16. package/dist/lib/patterns/aws/devSubstrate.js +390 -0
  17. package/dist/lib/patterns/aws/devSubstrate.waker.source.cjs +13 -0
  18. package/dist/lib/resources/aws/compute/applicationLoadBalancer.d.ts +17 -0
  19. package/dist/lib/resources/aws/compute/applicationLoadBalancer.js +23 -0
  20. package/dist/lib/resources/aws/compute/ecsImages.js +7 -2
  21. package/dist/lib/resources/aws/compute/ecsNetworking.d.ts +4 -10
  22. package/dist/lib/resources/aws/compute/ecsNetworking.js +13 -48
  23. package/dist/lib/resources/aws/compute/ecsRoles.d.ts +25 -0
  24. package/dist/lib/resources/aws/compute/ecsRoles.js +39 -20
  25. package/dist/lib/resources/aws/compute/hostHeaderListenerRule.d.ts +23 -0
  26. package/dist/lib/resources/aws/compute/hostHeaderListenerRule.js +59 -0
  27. package/dist/lib/resources/aws/compute/imageTagParameter.d.ts +18 -1
  28. package/dist/lib/resources/aws/compute/imageTagParameter.js +32 -2
  29. package/dist/lib/resources/aws/compute/lambda.d.ts +1 -1
  30. package/dist/lib/resources/aws/compute/lambda.js +6 -4
  31. package/dist/lib/resources/aws/compute/lambdaAlbTarget.d.ts +17 -0
  32. package/dist/lib/resources/aws/compute/lambdaAlbTarget.js +18 -0
  33. package/dist/lib/resources/aws/compute/listenerRouting.d.ts +21 -0
  34. package/dist/lib/resources/aws/compute/listenerRouting.js +20 -0
  35. package/dist/lib/resources/aws/database/rdsAurora.d.ts +16 -0
  36. package/dist/lib/resources/aws/database/rdsAurora.js +57 -3
  37. package/dist/lib/resources/aws/database/rdsDefaults.d.ts +28 -0
  38. package/dist/lib/resources/aws/database/rdsDefaults.js +28 -0
  39. package/dist/lib/resources/aws/iam/identityCenter/user.js +5 -1
  40. package/dist/lib/resources/aws/logging/index.d.ts +1 -0
  41. package/dist/lib/resources/aws/logging/index.js +1 -0
  42. package/dist/lib/resources/aws/logging/logGroup.d.ts +7 -0
  43. package/dist/lib/resources/aws/logging/logGroup.js +7 -0
  44. package/dist/lib/resources/aws/logging/singletonLogGroup.d.ts +15 -0
  45. package/dist/lib/resources/aws/logging/singletonLogGroup.js +24 -0
  46. package/dist/lib/resources/aws/networking/vpcPeeringConnection.js +2 -1
  47. package/dist/lib/resources/aws/storage/bucketDeployment.d.ts +5 -6
  48. package/dist/lib/resources/aws/storage/bucketDeployment.js +14 -7
  49. package/dist/lib/resources/aws/utilities/awsCustomResource.js +5 -0
  50. package/dist/lib/resources/aws/utilities/customResource.js +5 -1
  51. package/dist/lib/utils/addSuffixToEmail.js +1 -5
  52. package/dist/lib/utils/devSubstrateTags.d.ts +22 -0
  53. package/dist/lib/utils/devSubstrateTags.js +22 -0
  54. package/dist/lib/utils/validationLogger.d.ts +2 -2
  55. package/dist/lib/utils/validationLogger.js +4 -4
  56. package/package.json +5 -5
  57. package/dist/lib/__tests__/setup.d.ts +0 -48
  58. package/dist/lib/__tests__/setup.js +0 -1
  59. package/dist/lib/config/aws/accountId.d.ts +0 -6
  60. package/dist/lib/config/aws/accountId.js +0 -33
  61. package/dist/lib/config/aws/backupGlobalSettings.d.ts +0 -29
  62. package/dist/lib/config/aws/backupGlobalSettings.js +0 -51
  63. package/dist/lib/config/aws/costAllocationTags.d.ts +0 -12
  64. package/dist/lib/config/aws/costAllocationTags.js +0 -48
  65. package/dist/lib/config/aws/eventBus.d.ts +0 -7
  66. package/dist/lib/config/aws/eventBus.js +0 -24
  67. package/dist/lib/config/aws/identityCenterGroupMembership.d.ts +0 -10
  68. package/dist/lib/config/aws/identityCenterGroupMembership.js +0 -115
  69. package/dist/lib/config/aws/ipamDelegateAdmin.d.ts +0 -8
  70. package/dist/lib/config/aws/ipamDelegateAdmin.js +0 -58
  71. package/dist/lib/config/aws/ipamPoolId.d.ts +0 -10
  72. package/dist/lib/config/aws/ipamPoolId.js +0 -39
  73. package/dist/lib/config/aws/organisation.d.ts +0 -30
  74. package/dist/lib/config/aws/organisation.js +0 -95
  75. package/dist/lib/config/aws/organisationId.d.ts +0 -7
  76. package/dist/lib/config/aws/organisationId.js +0 -46
  77. package/dist/lib/config/aws/organisationsAccess.d.ts +0 -10
  78. package/dist/lib/config/aws/organisationsAccess.js +0 -50
  79. package/dist/lib/config/aws/ramSharing.d.ts +0 -4
  80. package/dist/lib/config/aws/ramSharing.js +0 -35
  81. package/dist/lib/config/monitoring.d.ts +0 -18
  82. package/dist/lib/config/monitoring.js +0 -22
  83. package/dist/lib/patterns/aws/cicdRole.d.ts +0 -67
  84. package/dist/lib/patterns/aws/cicdRole.js +0 -68
  85. package/dist/lib/patterns/aws/hostedZone.d.ts +0 -28
  86. package/dist/lib/patterns/aws/hostedZone.js +0 -150
  87. package/dist/lib/patterns/aws/managedAccount.d.ts +0 -9
  88. package/dist/lib/patterns/aws/managedAccount.js +0 -55
  89. package/dist/lib/patterns/aws/managedIdentityCenter.d.ts +0 -4
  90. package/dist/lib/patterns/aws/managedIdentityCenter.js +0 -24
  91. package/dist/lib/patterns/aws/managedOrganisation.d.ts +0 -36
  92. package/dist/lib/patterns/aws/managedOrganisation.js +0 -97
  93. package/dist/lib/patterns/aws/managedPlatform.d.ts +0 -12
  94. package/dist/lib/patterns/aws/managedPlatform.js +0 -29
  95. package/dist/lib/patterns/aws/subdomainHostedZone.d.ts +0 -9
  96. package/dist/lib/patterns/aws/subdomainHostedZone.js +0 -39
  97. package/dist/lib/resources/aws/cicd/cicdRole.d.ts +0 -65
  98. package/dist/lib/resources/aws/cicd/cicdRole.js +0 -191
  99. package/dist/lib/resources/aws/compute/ecsFreeTier.d.ts +0 -75
  100. package/dist/lib/resources/aws/compute/ecsFreeTier.js +0 -1
  101. package/dist/lib/resources/aws/compute/ecsSpot.d.ts +0 -75
  102. package/dist/lib/resources/aws/compute/ecsSpot.js +0 -1
  103. package/dist/lib/resources/aws/compute/utilities/capacityProviderDrainWaiter.d.ts +0 -20
  104. package/dist/lib/resources/aws/compute/utilities/capacityProviderDrainWaiter.js +0 -1
  105. package/dist/lib/resources/aws/database/database.d.ts +0 -14
  106. package/dist/lib/resources/aws/database/database.js +0 -28
  107. package/dist/lib/resources/aws/database/databaseInstance.d.ts +0 -15
  108. package/dist/lib/resources/aws/database/databaseInstance.js +0 -30
  109. package/dist/lib/resources/aws/iam/identityCenter/attachManagedPolicy.d.ts +0 -13
  110. package/dist/lib/resources/aws/iam/identityCenter/attachManagedPolicy.js +0 -52
  111. package/dist/lib/resources/aws/iam/securityGroup.d.ts +0 -5
  112. package/dist/lib/resources/aws/iam/securityGroup.js +0 -14
  113. package/dist/lib/resources/aws/monitoring/monitoringRole.d.ts +0 -28
  114. package/dist/lib/resources/aws/monitoring/monitoringRole.js +0 -125
  115. package/dist/lib/resources/aws/utilities/cfnOutput.d.ts +0 -5
  116. package/dist/lib/resources/aws/utilities/cfnOutput.js +0 -1
  117. package/dist/lib/utils/capitalizeString.d.ts +0 -1
  118. package/dist/lib/utils/capitalizeString.js +0 -7
@@ -1,150 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.HostedZone = exports.HostedZoneFactory = void 0;
4
- const constructs_1 = require("constructs");
5
- const aws_cdk_lib_1 = require("aws-cdk-lib");
6
- const iam_1 = require("../../resources/aws/iam");
7
- const aws_iam_1 = require("aws-cdk-lib/aws-iam");
8
- const aws_route53_1 = require("aws-cdk-lib/aws-route53");
9
- function getSafeZoneName(zoneName) {
10
- return zoneName.split(".").join("");
11
- }
12
- class HostedZoneFactory {
13
- static import(stack, hostedZoneId, zoneName) {
14
- const safeZoneName = getSafeZoneName(zoneName);
15
- return new HostedZone(stack.getStack(), `${safeZoneName}HostedZone`, {
16
- hostedZoneId: hostedZoneId,
17
- zoneName: zoneName
18
- });
19
- }
20
- }
21
- exports.HostedZoneFactory = HostedZoneFactory;
22
- class HostedZone extends constructs_1.Construct {
23
- constructor(scope, id, props) {
24
- super(scope, id);
25
- this.scope = scope;
26
- this.zoneName = props.zoneName;
27
- // If a hostedZoneId is provided import it, unless create a new hosted zone
28
- if (!props.hostedZoneId) {
29
- this.addHostedZone(props.zoneName);
30
- this.hostedZoneId = this.hostedZone.hostedZoneId;
31
- this.delegateHostedZone();
32
- }
33
- else {
34
- this.hostedZoneId = props.hostedZoneId;
35
- this.importHostedZone(props.zoneName);
36
- }
37
- }
38
- getInternalHostedZone() {
39
- return this.hostedZone || this.importedHostedZone;
40
- }
41
- safeZoneName() {
42
- return getSafeZoneName(this.zoneName);
43
- }
44
- addHostedZone(zoneName) {
45
- this.hostedZone = new aws_route53_1.HostedZone(this, `${this.safeZoneName}HostedZone`, {
46
- zoneName: zoneName,
47
- comment: `Hosted Zone for ${zoneName}`
48
- });
49
- }
50
- importHostedZone(zoneName) {
51
- this.importedHostedZone = aws_route53_1.HostedZone.fromHostedZoneAttributes(
52
- // HostedZone.fromHostedZoneAttributes explicitly must be passed a stack as parent scope
53
- this.scope,
54
- // Use safeZoneName in the id so we can theoretically
55
- // import multiple hosted zones in a single app
56
- `${this.safeZoneName()}ImportedHostedZone`, {
57
- hostedZoneId: this.hostedZoneId,
58
- zoneName: zoneName
59
- });
60
- aws_cdk_lib_1.Tags.of(this.importedHostedZone).add("fjall:costAllocation:environment", "management");
61
- aws_cdk_lib_1.Tags.of(this.importedHostedZone).add("fjall:costAllocation:service", "hostedZone");
62
- aws_cdk_lib_1.Tags.of(this.importedHostedZone).add("fjall:costAllocation:domain", zoneName);
63
- // Make export name unique by including the stack name to avoid conflicts
64
- // when multiple stacks import the same hosted zone
65
- const stack = aws_cdk_lib_1.Stack.of(this);
66
- const stackName = stack.stackName;
67
- const exportName = `${stackName}${this.safeZoneName()}HostedZoneId`;
68
- new aws_cdk_lib_1.CfnOutput(this, `${this.safeZoneName()}HostedZoneId`, {
69
- key: `${this.safeZoneName()}HostedZoneId`,
70
- value: this.hostedZoneId,
71
- exportName: exportName
72
- });
73
- }
74
- delegateHostedZone() {
75
- const domainName = this.hostedZone.zoneName.split(".", 1);
76
- const role = new iam_1.Role(this, `${domainName}DelegateHostedZoneRole`, {
77
- assumedBy: new aws_iam_1.OrganizationPrincipal(aws_cdk_lib_1.Fn.importValue("OrganisationId")),
78
- roleName: `${domainName}DelegateHostedZoneRole`,
79
- inlinePolicies: {
80
- ["listHostedZones"]: new aws_iam_1.PolicyDocument({
81
- statements: [
82
- new aws_iam_1.PolicyStatement({
83
- actions: ["route53:ListHostedZonesByName"],
84
- resources: ["*"]
85
- })
86
- ]
87
- }),
88
- ["changeResourceRecordSets"]: new aws_iam_1.PolicyDocument({
89
- statements: [
90
- new aws_iam_1.PolicyStatement({
91
- actions: ["route53:ChangeResourceRecordSets"],
92
- resources: [
93
- `arn:aws:route53:::hostedzone/${this.hostedZone.hostedZoneId}`
94
- ]
95
- })
96
- ]
97
- })
98
- }
99
- });
100
- this.hostedZone.grantDelegation(role);
101
- new aws_cdk_lib_1.CfnOutput(this, "DelegateHostedZoneRoleArn", {
102
- key: `${domainName}DelegateHostedZoneRoleArn`,
103
- value: role.roleArn,
104
- exportName: `${domainName}DelegateHostedZoneRoleArn`
105
- });
106
- }
107
- addARecord(props) {
108
- new aws_route53_1.ARecord(this, "ARecord", {
109
- zone: this.importedHostedZone,
110
- recordName: props.recordName,
111
- comment: props.comment || `A Record for ${this.importedHostedZone.zoneName}`,
112
- target: props.target,
113
- ttl: props.ttl
114
- });
115
- }
116
- addCname(props) {
117
- new aws_route53_1.CnameRecord(this, ``, {
118
- domainName: props.domainName,
119
- zone: this.importedHostedZone,
120
- comment: props.comment || `CNAME Record for ${this.importedHostedZone.zoneName}`,
121
- ttl: props.ttl
122
- });
123
- }
124
- addMx(props) {
125
- new aws_route53_1.MxRecord(this, ``, {
126
- zone: this.importedHostedZone,
127
- comment: props.comment || `MX Record for ${this.importedHostedZone.zoneName}`,
128
- values: props.values,
129
- ttl: props.ttl
130
- });
131
- }
132
- addNS(props) {
133
- new aws_route53_1.NsRecord(this, ``, {
134
- zone: this.importedHostedZone,
135
- comment: props.comment || `NS Record for ${this.importedHostedZone.zoneName}`,
136
- values: props.values,
137
- ttl: props.ttl
138
- });
139
- }
140
- addTxt(props) {
141
- new aws_route53_1.TxtRecord(this, ``, {
142
- zone: this.importedHostedZone,
143
- comment: props.comment || `TXT Record for ${this.importedHostedZone.zoneName}`,
144
- values: props.values,
145
- ttl: props.ttl
146
- });
147
- }
148
- }
149
- exports.HostedZone = HostedZone;
150
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG9zdGVkWm9uZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9wYXR0ZXJucy9hd3MvaG9zdGVkWm9uZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSwyQ0FBdUM7QUFDdkMsNkNBQXlEO0FBQ3pELGlEQUErQztBQUMvQyxpREFJNkI7QUFDN0IseURBYWlDO0FBSWpDLFNBQVMsZUFBZSxDQUFDLFFBQWdCO0lBQ3ZDLE9BQU8sUUFBUSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDdEMsQ0FBQztBQU9ELE1BQWEsaUJBQWlCO0lBQzVCLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBZSxFQUFFLFlBQW9CLEVBQUUsUUFBZ0I7UUFDbkUsTUFBTSxZQUFZLEdBQUcsZUFBZSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBRS9DLE9BQU8sSUFBSSxVQUFVLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxFQUFFLEdBQUcsWUFBWSxZQUFZLEVBQUU7WUFDbkUsWUFBWSxFQUFFLFlBQVk7WUFDMUIsUUFBUSxFQUFFLFFBQVE7U0FDbkIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUNGO0FBVEQsOENBU0M7QUFFRCxNQUFhLFVBQVcsU0FBUSxzQkFBUztJQVF2QyxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQXNCO1FBQzlELEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFakIsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFDbkIsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDO1FBRS9CLDJFQUEyRTtRQUMzRSxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3hCLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ25DLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFB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QUNwQixHQUFHLEVBQUUsS0FBSyxDQUFDLEdBQUc7U0FDZixDQUFDLENBQUM7SUFDTCxDQUFDO0NBQ0Y7QUExS0QsZ0NBMEtDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcbmltcG9ydCB7IENmbk91dHB1dCwgRm4sIFN0YWNrLCBUYWdzIH0gZnJvbSBcImF3cy1jZGstbGliXCI7XG5pbXBvcnQgeyBSb2xlIH0gZnJvbSBcIi4uLy4uL3Jlc291cmNlcy9hd3MvaWFtXCI7XG5pbXBvcnQge1xuICBPcmdhbml6YXRpb25QcmluY2lwYWwsXG4gIFBvbGljeURvY3VtZW50LFxuICBQb2xpY3lTdGF0ZW1lbnRcbn0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1pYW1cIjtcbmltcG9ydCB7XG4gIEFSZWNvcmQsXG4gIHR5cGUgQVJlY29yZFByb3BzLFxuICBDbmFtZVJlY29yZCxcbiAgdHlwZSBDbmFtZVJlY29yZFByb3BzLFxuICBIb3N0ZWRab25lIGFzIEFXU0hvc3RlZFpvbmUsXG4gIHR5cGUgSUhvc3RlZFpvbmUsXG4gIE14UmVjb3JkLFxuICB0eXBlIE14UmVjb3JkUHJvcHMsXG4gIE5zUmVjb3JkLFxuICB0eXBlIE5zUmVjb3JkUHJvcHMsXG4gIFR4dFJlY29yZCxcbiAgdHlwZSBUeHRSZWNvcmRQcm9wc1xufSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLXJvdXRlNTNcIjtcblxuaW1wb3J0IHsgdHlwZSBBd3NTdGFjayB9IGZyb20gXCIuLi8uLi9yZXNvdXJjZXNcIjtcblxuZnVuY3Rpb24gZ2V0U2FmZVpvbmVOYW1lKHpvbmVOYW1lOiBzdHJpbmcpIHtcbiAgcmV0dXJuIHpvbmVOYW1lLnNwbGl0KFwiLlwiKS5qb2luKFwiXCIpO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEhvc3RlZFpvbmVQcm9wcyB7XG4gIHpvbmVOYW1lOiBzdHJpbmc7XG4gIGhvc3RlZFpvbmVJZD86IHN0cmluZztcbn1cblxuZXhwb3J0IGNsYXNzIEhvc3RlZFpvbmVGYWN0b3J5IHtcbiAgc3RhdGljIGltcG9ydChzdGFjazogQXdzU3RhY2ssIGhvc3RlZFpvbmVJZDogc3RyaW5nLCB6b25lTmFtZTogc3RyaW5nKSB7XG4gICAgY29uc3Qgc2FmZVpvbmVOYW1lID0gZ2V0U2FmZVpvbmVOYW1lKHpvbmVOYW1lKTtcblxuICAgIHJldHVybiBuZXcgSG9zdGVkWm9uZShzdGFjay5nZXRTdGFjaygpLCBgJHtzYWZlWm9uZU5hbWV9SG9zdGVkWm9uZWAsIHtcbiAgICAgIGhvc3RlZFpvbmVJZDogaG9zdGVkWm9uZUlkLFxuICAgICAgem9uZU5hbWU6IHpvbmVOYW1lXG4gICAgfSk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEhvc3RlZFpvbmUgZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuICBwcml2YXRlIGhvc3RlZFpvbmU6IEFXU0hvc3RlZFpvbmU7XG4gIHByaXZhdGUgaG9zdGVkWm9uZUlkOiBzdHJpbmc7XG4gIHByaXZhdGUgaW1wb3J0ZWRIb3N0ZWRab25lOiBJSG9zdGVkWm9uZTtcbiAgcHJpdmF0ZSB6b25lTmFtZTogc3RyaW5nO1xuXG4gIHByaXZhdGUgc2NvcGU6IENvbnN0cnVjdDtcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogSG9zdGVkWm9uZVByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIHRoaXMuc2NvcGUgPSBzY29wZTtcbiAgICB0aGlzLnpvbmVOYW1lID0gcHJvcHMuem9uZU5hbWU7XG5cbiAgICAvLyBJZiBhIGhvc3RlZFpvbmVJZCBpcyBwcm92aWRlZCBpbXBvcnQgaXQsIHVubGVzcyBjcmVhdGUgYSBuZXcgaG9zdGVkIHpvbmVcbiAgICBpZiAoIXByb3BzLmhvc3RlZFpvbmVJZCkge1xuICAgICAgdGhpcy5hZGRIb3N0ZWRab25lKHByb3BzLnpvbmVOYW1lKTtcbiAgICAgIHRoaXMuaG9zdGVkWm9uZUlkID0gdGhpcy5ob3N0ZWRab25lLmhvc3RlZFpvbmVJZDtcbiAgICAgIHRoaXMuZGVsZWdhdGVIb3N0ZWRab25lKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaG9zdGVkWm9uZUlkID0gcHJvcHMuaG9zdGVkWm9uZUlkO1xuICAgICAgdGhpcy5pbXBvcnRIb3N0ZWRab25lKHByb3BzLnpvbmVOYW1lKTtcbiAgICB9XG4gIH1cblxuICBnZXRJbnRlcm5hbEhvc3RlZFpvbmUoKSB7XG4gICAgcmV0dXJuIHRoaXMuaG9zdGVkWm9uZSB8fCB0aGlzLmltcG9ydGVkSG9zdGVkWm9uZTtcbiAgfVxuXG4gIHNhZmVab25lTmFtZSgpIHtcbiAgICByZXR1cm4gZ2V0U2FmZVpvbmVOYW1lKHRoaXMuem9uZU5hbWUpO1xuICB9XG5cbiAgYWRkSG9zdGVkWm9uZSh6b25lTmFtZTogc3RyaW5nKSB7XG4gICAgdGhpcy5ob3N0ZWRab25lID0gbmV3IEFXU0hvc3RlZFpvbmUoXG4gICAgICB0aGlzLFxuICAgICAgYCR7dGhpcy5zYWZlWm9uZU5hbWV9SG9zdGVkWm9uZWAsXG4gICAgICB7XG4gICAgICAgIHpvbmVOYW1lOiB6b25lTmFtZSxcbiAgICAgICAgY29tbWVudDogYEhvc3RlZCBab25lIGZvciAke3pvbmVOYW1lfWBcbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgaW1wb3J0SG9zdGVkWm9uZSh6b25lTmFtZTogc3RyaW5nKSB7XG4gICAgdGhpcy5pbXBvcnRlZEhvc3RlZFpvbmUgPSBBV1NIb3N0ZWRab25lLmZyb21Ib3N0ZWRab25lQXR0cmlidXRlcyhcbiAgICAgIC8vIEhvc3RlZFpvbmUuZnJvbUhvc3RlZFpvbmVBdHRyaWJ1dGVzIGV4cGxpY2l0bHkgbXVzdCBiZSBwYXNzZWQgYSBzdGFjayBhcyBwYXJlbnQgc2NvcGVcbiAgICAgIHRoaXMuc2NvcGUsXG5cbiAgICAgIC8vIFVzZSBzYWZlWm9uZU5hbWUgaW4gdGhlIGlkIHNvIHdlIGNhbiB0aGVvcmV0aWNhbGx5XG4gICAgICAvLyAgaW1wb3J0IG11bHRpcGxlIGhvc3RlZCB6b25lcyBpbiBhIHNpbmdsZSBhcHBcbiAgICAgIGAke3RoaXMuc2FmZVpvbmVOYW1lKCl9SW1wb3J0ZWRIb3N0ZWRab25lYCxcbiAgICAgIHtcbiAgICAgICAgaG9zdGVkWm9uZUlkOiB0aGlzLmhvc3RlZFpvbmVJZCxcbiAgICAgICAgem9uZU5hbWU6IHpvbmVOYW1lXG4gICAgICB9XG4gICAgKTtcblxuICAgIFRhZ3Mub2YodGhpcy5pbXBvcnRlZEhvc3RlZFpvbmUpLmFkZChcbiAgICAgIFwiZmphbGw6Y29zdEFsbG9jYXRpb246ZW52aXJvbm1lbnRcIixcbiAgICAgIFwibWFuYWdlbWVudFwiXG4gICAgKTtcbiAgICBUYWdzLm9mKHRoaXMuaW1wb3J0ZWRIb3N0ZWRab25lKS5hZGQoXG4gICAgICBcImZqYWxsOmNvc3RBbGxvY2F0aW9uOnNlcnZpY2VcIixcbiAgICAgIFwiaG9zdGVkWm9uZVwiXG4gICAgKTtcbiAgICBUYWdzLm9mKHRoaXMuaW1wb3J0ZWRIb3N0ZWRab25lKS5hZGQoXG4gICAgICBcImZqYWxsOmNvc3RBbGxvY2F0aW9uOmRvbWFpblwiLFxuICAgICAgem9uZU5hbWVcbiAgICApO1xuXG4gICAgLy8gTWFrZSBleHBvcnQgbmFtZSB1bmlxdWUgYnkgaW5jbHVkaW5nIHRoZSBzdGFjayBuYW1lIHRvIGF2b2lkIGNvbmZsaWN0c1xuICAgIC8vIHdoZW4gbXVsdGlwbGUgc3RhY2tzIGltcG9ydCB0aGUgc2FtZSBob3N0ZWQgem9uZVxuICAgIGNvbnN0IHN0YWNrID0gU3RhY2sub2YodGhpcyk7XG4gICAgY29uc3Qgc3RhY2tOYW1lID0gc3RhY2suc3RhY2tOYW1lO1xuICAgIGNvbnN0IGV4cG9ydE5hbWUgPSBgJHtzdGFja05hbWV9JHt0aGlzLnNhZmVab25lTmFtZSgpfUhvc3RlZFpvbmVJZGA7XG5cbiAgICBuZXcgQ2ZuT3V0cHV0KHRoaXMsIGAke3RoaXMuc2FmZVpvbmVOYW1lKCl9SG9zdGVkWm9uZUlkYCwge1xuICAgICAga2V5OiBgJHt0aGlzLnNhZmVab25lTmFtZSgpfUhvc3RlZFpvbmVJZGAsXG4gICAgICB2YWx1ZTogdGhpcy5ob3N0ZWRab25lSWQsXG4gICAgICBleHBvcnROYW1lOiBleHBvcnROYW1lXG4gICAgfSk7XG4gIH1cblxuICBkZWxlZ2F0ZUhvc3RlZFpvbmUoKSB7XG4gICAgY29uc3QgZG9tYWluTmFtZSA9IHRoaXMuaG9zdGVkWm9uZS56b25lTmFtZS5zcGxpdChcIi5cIiwgMSk7XG4gICAgY29uc3Qgcm9sZSA9IG5ldyBSb2xlKHRoaXMsIGAke2RvbWFpbk5hbWV9RGVsZWdhdGVIb3N0ZWRab25lUm9sZWAsIHtcbiAgICAgIGFzc3VtZWRCeTogbmV3IE9yZ2FuaXphdGlvblByaW5jaXBhbChGbi5pbXBvcnRWYWx1ZShcIk9yZ2FuaXNhdGlvbklkXCIpKSxcbiAgICAgIHJvbGVOYW1lOiBgJHtkb21haW5OYW1lfURlbGVnYXRlSG9zdGVkWm9uZVJvbGVgLFxuICAgICAgaW5saW5lUG9saWNpZXM6IHtcbiAgICAgICAgW1wibGlzdEhvc3RlZFpvbmVzXCJdOiBuZXcgUG9saWN5RG9jdW1lbnQoe1xuICAgICAgICAgIHN0YXRlbWVudHM6IFtcbiAgICAgICAgICAgIG5ldyBQb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICAgICAgICBhY3Rpb25zOiBbXCJyb3V0ZTUzOkxpc3RIb3N0ZWRab25lc0J5TmFtZVwiXSxcbiAgICAgICAgICAgICAgcmVzb3VyY2VzOiBbXCIqXCJdXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIF1cbiAgICAgICAgfSksXG4gICAgICAgIFtcImNoYW5nZVJlc291cmNlUmVjb3JkU2V0c1wiXTogbmV3IFBvbGljeURvY3VtZW50KHtcbiAgICAgICAgICBzdGF0ZW1lbnRzOiBbXG4gICAgICAgICAgICBuZXcgUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgICAgICAgYWN0aW9uczogW1wicm91dGU1MzpDaGFuZ2VSZXNvdXJjZVJlY29yZFNldHNcIl0sXG4gICAgICAgICAgICAgIHJlc291cmNlczogW1xuICAgICAgICAgICAgICAgIGBhcm46YXdzOnJvdXRlNTM6Ojpob3N0ZWR6b25lLyR7dGhpcy5ob3N0ZWRab25lLmhvc3RlZFpvbmVJZH1gXG4gICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgXVxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdGhpcy5ob3N0ZWRab25lLmdyYW50RGVsZWdhdGlvbihyb2xlKTtcblxuICAgIG5ldyBDZm5PdXRwdXQodGhpcywgXCJEZWxlZ2F0ZUhvc3RlZFpvbmVSb2xlQXJuXCIsIHtcbiAgICAgIGtleTogYCR7ZG9tYWluTmFtZX1EZWxlZ2F0ZUhvc3RlZFpvbmVSb2xlQXJuYCxcbiAgICAgIHZhbHVlOiByb2xlLnJvbGVBcm4sXG4gICAgICBleHBvcnROYW1lOiBgJHtkb21haW5OYW1lfURlbGVnYXRlSG9zdGVkWm9uZVJvbGVBcm5gXG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgYWRkQVJlY29yZChwcm9wczogT21pdDxBUmVjb3JkUHJvcHMsIFwiem9uZVwiPikge1xuICAgIG5ldyBBUmVjb3JkKHRoaXMsIFwiQVJlY29yZFwiLCB7XG4gICAgICB6b25lOiB0aGlzLmltcG9ydGVkSG9zdGVkWm9uZSxcbiAgICAgIHJlY29yZE5hbWU6IHByb3BzLnJlY29yZE5hbWUsXG4gICAgICBjb21tZW50OlxuICAgICAgICBwcm9wcy5jb21tZW50IHx8IGBBIFJlY29yZCBmb3IgJHt0aGlzLmltcG9ydGVkSG9zdGVkWm9uZS56b25lTmFtZX1gLFxuICAgICAgdGFyZ2V0OiBwcm9wcy50YXJnZXQsXG4gICAgICB0dGw6IHByb3BzLnR0bFxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGFkZENuYW1lKHByb3BzOiBPbWl0PENuYW1lUmVjb3JkUHJvcHMsIFwiem9uZVwiPikge1xuICAgIG5ldyBDbmFtZVJlY29yZCh0aGlzLCBgYCwge1xuICAgICAgZG9tYWluTmFtZTogcHJvcHMuZG9tYWluTmFtZSxcbiAgICAgIHpvbmU6IHRoaXMuaW1wb3J0ZWRIb3N0ZWRab25lLFxuICAgICAgY29tbWVudDpcbiAgICAgICAgcHJvcHMuY29tbWVudCB8fCBgQ05BTUUgUmVjb3JkIGZvciAke3RoaXMuaW1wb3J0ZWRIb3N0ZWRab25lLnpvbmVOYW1lfWAsXG4gICAgICB0dGw6IHByb3BzLnR0bFxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGFkZE14KHByb3BzOiBPbWl0PE14UmVjb3JkUHJvcHMsIFwiem9uZVwiPikge1xuICAgIG5ldyBNeFJlY29yZCh0aGlzLCBgYCwge1xuICAgICAgem9uZTogdGhpcy5pbXBvcnRlZEhvc3RlZFpvbmUsXG4gICAgICBjb21tZW50OlxuICAgICAgICBwcm9wcy5jb21tZW50IHx8IGBNWCBSZWNvcmQgZm9yICR7dGhpcy5pbXBvcnRlZEhvc3RlZFpvbmUuem9uZU5hbWV9YCxcbiAgICAgIHZhbHVlczogcHJvcHMudmFsdWVzLFxuICAgICAgdHRsOiBwcm9wcy50dGxcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBhZGROUyhwcm9wczogT21pdDxOc1JlY29yZFByb3BzLCBcInpvbmVcIj4pIHtcbiAgICBuZXcgTnNSZWNvcmQodGhpcywgYGAsIHtcbiAgICAgIHpvbmU6IHRoaXMuaW1wb3J0ZWRIb3N0ZWRab25lLFxuICAgICAgY29tbWVudDpcbiAgICAgICAgcHJvcHMuY29tbWVudCB8fCBgTlMgUmVjb3JkIGZvciAke3RoaXMuaW1wb3J0ZWRIb3N0ZWRab25lLnpvbmVOYW1lfWAsXG4gICAgICB2YWx1ZXM6IHByb3BzLnZhbHVlcyxcbiAgICAgIHR0bDogcHJvcHMudHRsXG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgYWRkVHh0KHByb3BzOiBPbWl0PFR4dFJlY29yZFByb3BzLCBcInpvbmVcIj4pIHtcbiAgICBuZXcgVHh0UmVjb3JkKHRoaXMsIGBgLCB7XG4gICAgICB6b25lOiB0aGlzLmltcG9ydGVkSG9zdGVkWm9uZSxcbiAgICAgIGNvbW1lbnQ6XG4gICAgICAgIHByb3BzLmNvbW1lbnQgfHwgYFRYVCBSZWNvcmQgZm9yICR7dGhpcy5pbXBvcnRlZEhvc3RlZFpvbmUuem9uZU5hbWV9YCxcbiAgICAgIHZhbHVlczogcHJvcHMudmFsdWVzLFxuICAgICAgdHRsOiBwcm9wcy50dGxcbiAgICB9KTtcbiAgfVxufVxuIl19
@@ -1,9 +0,0 @@
1
- import { Stack, type StackProps } from "aws-cdk-lib";
2
- import { type Construct } from "constructs";
3
- export interface ManagedAccountProps extends StackProps {
4
- accountId: string;
5
- region: string;
6
- }
7
- export declare class ManagedAccount extends Stack {
8
- constructor(scope: Construct, id: string, props: ManagedAccountProps);
9
- }
@@ -1,55 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ManagedAccount = void 0;
4
- const aws_cdk_lib_1 = require("aws-cdk-lib");
5
- const aws_1 = require("../../config/aws");
6
- const cloudTrail_1 = require("../../config/aws/cloudTrail");
7
- const getConfig_1 = require("../../utils/getConfig");
8
- const disasterRecovery_1 = require("../../config/aws/disasterRecovery");
9
- const util_1 = require("@fjall/util");
10
- class ManagedAccount extends aws_cdk_lib_1.Stack {
11
- constructor(scope, id, props) {
12
- super(scope, id, props);
13
- const organisation = new aws_1.OrganisationId(this, "OrganisationId");
14
- const account = new aws_1.AccountId(this, "AccountId");
15
- const eventBus = new aws_1.DefaultEventBus(this, "EventBus");
16
- if (id === "ManagedAccount") {
17
- new aws_1.IpamPoolId(this, "IpamPoolId", {
18
- accountId: props.accountId,
19
- region: props.region,
20
- ownerId: organisation.organisationAccountArn.value.split(":")[4]
21
- });
22
- }
23
- new cloudTrail_1.ManagementEventsTrail(this, "CloudTrail", {
24
- accountId: account.accountId.value,
25
- region: props.region
26
- });
27
- new aws_1.EcrDefaultImage(this, "EcrDefaultImage", {
28
- region: props.region,
29
- accountId: account.accountId.value,
30
- eventBusArn: eventBus.defaultEventBusArn.value
31
- });
32
- const config = (0, getConfig_1.getConfig)();
33
- const environment = config.environment || "unknown";
34
- const _fjallConfig = util_1.Config.loadConfig();
35
- const isComplianceAccount = environment === "compliance";
36
- const isReplicationRegion = config.disasterRecoveryRegion &&
37
- props.region === config.disasterRecoveryRegion;
38
- if (environment === "production" ||
39
- isComplianceAccount ||
40
- isReplicationRegion) {
41
- new disasterRecovery_1.DisasterRecovery(this, "DisasterRecovery", {
42
- region: props.region,
43
- accountId: props.accountId
44
- });
45
- }
46
- new aws_cdk_lib_1.CfnOutput(this, "Environment", {
47
- key: "Environment",
48
- value: environment,
49
- exportName: "Environment",
50
- description: "Environment type for this account (e.g., production, staging, development)"
51
- });
52
- }
53
- }
54
- exports.ManagedAccount = ManagedAccount;
55
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFuYWdlZEFjY291bnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWIvcGF0dGVybnMvYXdzL21hbmFnZWRBY2NvdW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDZDQUFnRTtBQUNoRSwwQ0FNMEI7QUFFMUIsNERBQW9FO0FBQ3BFLHFEQUFrRDtBQUNsRCx3RUFBcUU7QUFDckUsc0NBQW9EO0FBT3BELE1BQWEsY0FBZSxTQUFRLG1CQUFLO0lBQ3ZDLFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBMEI7UUFDbEUsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFFeEIsTUFBTSxZQUFZLEdBQUcsSUFBSSxvQkFBYyxDQUFDLElBQUksRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO1FBRWhFLE1BQU0sT0FBTyxHQUFHLElBQUksZUFBUyxDQUFDLElBQUksRUFBRSxXQUFXLENBQUMsQ0FBQztRQUVqRCxNQUFNLFFBQVEsR0FBRyxJQUFJLHFCQUFlLENBQUMsSUFBSSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBRXZELElBQUksRUFBRSxLQUFLLGdCQUFnQixFQUFFLENBQUM7WUFDNUIsSUFBSSxnQkFBVSxDQUFDLElBQUksRUFBRSxZQUFZLEVBQUU7Z0JBQ2pDLFNBQVMsRUFBRSxLQUFLLENBQUMsU0FBUztnQkFDMUIsTUFBTSxFQUFFLEtBQUssQ0FBQyxNQUFNO2dCQUNwQixPQUFPLEVBQUUsWUFBWSxDQUFDLHNCQUFzQixDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ2pFLENBQUMsQ0FBQztRQUNMLENBQUM7UUFFRCxJQUFJLGtDQUFxQixDQUFDLElBQUksRUFBRSxZQUFZLEVBQUU7WUFDNUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxTQUFTLENBQUMsS0FBSztZQUNsQyxNQUFNLEVBQUUsS0FBSyxDQUFDLE1BQU07U0FDckIsQ0FBQyxDQUFDO1FBRUgsSUFBSSxxQkFBZSxDQUFDLElBQUksRUFBRSxpQkFBaUIsRUFBRTtZQUMzQyxNQUFNLEVBQUUsS0FBSyxDQUFDLE1BQU07WUFDcEIsU0FBUyxFQUFFLE9BQU8sQ0FBQyxTQUFTLENBQUMsS0FBSztZQUNsQyxXQUFXLEVBQUUsUUFBUSxDQUFDLGtCQUFrQixDQUFDLEtBQUs7U0FDL0MsQ0FBQyxDQUFDO1FBRUgsTUFBTSxNQUFNLEdBQUcsSUFBQSxxQkFBUyxHQUFFLENBQUM7UUFDM0IsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLFdBQVcsSUFBSSxTQUFTLENBQUM7UUFDcEQsTUFBTSxZQUFZLEdBQUcsYUFBVyxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBRTlDLE1BQU0sbUJBQW1CLEdBQUcsV0FBVyxLQUFLLFlBQVksQ0FBQztRQUN6RCxNQUFNLG1CQUFtQixHQUN2QixNQUFNLENBQUMsc0JBQXNCO1lBQzdCLEtBQUssQ0FBQyxNQUFNLEtBQUssTUFBTSxDQUFDLHNCQUFzQixDQUFDO1FBRWpELElBQ0UsV0FBVyxLQUFLLFlBQVk7WUFDNUIsbUJBQW1CO1lBQ25CLG1CQUFtQixFQUNuQixDQUFDO1lBQ0QsSUFBSSxtQ0FBZ0IsQ0FBQyxJQUFJLEVBQUUsa0JBQWtCLEVBQUU7Z0JBQzdDLE1BQU0sRUFBRSxLQUFLLENBQUMsTUFBTTtnQkFDcEIsU0FBUyxFQUFFLEtBQUssQ0FBQyxTQUFTO2FBQzNCLENBQUMsQ0FBQztRQUNMLENBQUM7UUFFRCxJQUFJLHVCQUFTLENBQUMsSUFBSSxFQUFFLGFBQWEsRUFBRTtZQUNqQyxHQUFHLEVBQUUsYUFBYTtZQUNsQixLQUFLLEVBQUUsV0FBVztZQUNsQixVQUFVLEVBQUUsYUFBYTtZQUN6QixXQUFXLEVBQ1QsNEVBQTRFO1NBQy9FLENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRjtBQXpERCx3Q0F5REMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDZm5PdXRwdXQsIFN0YWNrLCB0eXBlIFN0YWNrUHJvcHMgfSBmcm9tIFwiYXdzLWNkay1saWJcIjtcbmltcG9ydCB7XG4gIE9yZ2FuaXNhdGlvbklkLFxuICBBY2NvdW50SWQsXG4gIElwYW1Qb29sSWQsXG4gIEVjckRlZmF1bHRJbWFnZSxcbiAgRGVmYXVsdEV2ZW50QnVzXG59IGZyb20gXCIuLi8uLi9jb25maWcvYXdzXCI7XG5pbXBvcnQgeyB0eXBlIENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5pbXBvcnQgeyBNYW5hZ2VtZW50RXZlbnRzVHJhaWwgfSBmcm9tIFwiLi4vLi4vY29uZmlnL2F3cy9jbG91ZFRyYWlsXCI7XG5pbXBvcnQgeyBnZXRDb25maWcgfSBmcm9tIFwiLi4vLi4vdXRpbHMvZ2V0Q29uZmlnXCI7XG5pbXBvcnQgeyBEaXNhc3RlclJlY292ZXJ5IH0gZnJvbSBcIi4uLy4uL2NvbmZpZy9hd3MvZGlzYXN0ZXJSZWNvdmVyeVwiO1xuaW1wb3J0IHsgQ29uZmlnIGFzIEZqYWxsQ29uZmlnIH0gZnJvbSBcIkBmamFsbC91dGlsXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTWFuYWdlZEFjY291bnRQcm9wcyBleHRlbmRzIFN0YWNrUHJvcHMge1xuICBhY2NvdW50SWQ6IHN0cmluZztcbiAgcmVnaW9uOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBjbGFzcyBNYW5hZ2VkQWNjb3VudCBleHRlbmRzIFN0YWNrIHtcbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IE1hbmFnZWRBY2NvdW50UHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIHByb3BzKTtcblxuICAgIGNvbnN0IG9yZ2FuaXNhdGlvbiA9IG5ldyBPcmdhbmlzYXRpb25JZCh0aGlzLCBcIk9yZ2FuaXNhdGlvbklkXCIpO1xuXG4gICAgY29uc3QgYWNjb3VudCA9IG5ldyBBY2NvdW50SWQodGhpcywgXCJBY2NvdW50SWRcIik7XG5cbiAgICBjb25zdCBldmVudEJ1cyA9IG5ldyBEZWZhdWx0RXZlbnRCdXModGhpcywgXCJFdmVudEJ1c1wiKTtcblxuICAgIGlmIChpZCA9PT0gXCJNYW5hZ2VkQWNjb3VudFwiKSB7XG4gICAgICBuZXcgSXBhbVBvb2xJZCh0aGlzLCBcIklwYW1Qb29sSWRcIiwge1xuICAgICAgICBhY2NvdW50SWQ6IHByb3BzLmFjY291bnRJZCxcbiAgICAgICAgcmVnaW9uOiBwcm9wcy5yZWdpb24sXG4gICAgICAgIG93bmVySWQ6IG9yZ2FuaXNhdGlvbi5vcmdhbmlzYXRpb25BY2NvdW50QXJuLnZhbHVlLnNwbGl0KFwiOlwiKVs0XVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgbmV3IE1hbmFnZW1lbnRFdmVudHNUcmFpbCh0aGlzLCBcIkNsb3VkVHJhaWxcIiwge1xuICAgICAgYWNjb3VudElkOiBhY2NvdW50LmFjY291bnRJZC52YWx1ZSxcbiAgICAgIHJlZ2lvbjogcHJvcHMucmVnaW9uXG4gICAgfSk7XG5cbiAgICBuZXcgRWNyRGVmYXVsdEltYWdlKHRoaXMsIFwiRWNyRGVmYXVsdEltYWdlXCIsIHtcbiAgICAgIHJlZ2lvbjogcHJvcHMucmVnaW9uLFxuICAgICAgYWNjb3VudElkOiBhY2NvdW50LmFjY291bnRJZC52YWx1ZSxcbiAgICAgIGV2ZW50QnVzQXJuOiBldmVudEJ1cy5kZWZhdWx0RXZlbnRCdXNBcm4udmFsdWVcbiAgICB9KTtcblxuICAgIGNvbnN0IGNvbmZpZyA9IGdldENvbmZpZygpO1xuICAgIGNvbnN0IGVudmlyb25tZW50ID0gY29uZmlnLmVudmlyb25tZW50IHx8IFwidW5rbm93blwiO1xuICAgIGNvbnN0IF9mamFsbENvbmZpZyA9IEZqYWxsQ29uZmlnLmxvYWRDb25maWcoKTtcblxuICAgIGNvbnN0IGlzQ29tcGxpYW5jZUFjY291bnQgPSBlbnZpcm9ubWVudCA9PT0gXCJjb21wbGlhbmNlXCI7XG4gICAgY29uc3QgaXNSZXBsaWNhdGlvblJlZ2lvbiA9XG4gICAgICBjb25maWcuZGlzYXN0ZXJSZWNvdmVyeVJlZ2lvbiAmJlxuICAgICAgcHJvcHMucmVnaW9uID09PSBjb25maWcuZGlzYXN0ZXJSZWNvdmVyeVJlZ2lvbjtcblxuICAgIGlmIChcbiAgICAgIGVudmlyb25tZW50ID09PSBcInByb2R1Y3Rpb25cIiB8fFxuICAgICAgaXNDb21wbGlhbmNlQWNjb3VudCB8fFxuICAgICAgaXNSZXBsaWNhdGlvblJlZ2lvblxuICAgICkge1xuICAgICAgbmV3IERpc2FzdGVyUmVjb3ZlcnkodGhpcywgXCJEaXNhc3RlclJlY292ZXJ5XCIsIHtcbiAgICAgICAgcmVnaW9uOiBwcm9wcy5yZWdpb24sXG4gICAgICAgIGFjY291bnRJZDogcHJvcHMuYWNjb3VudElkXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBuZXcgQ2ZuT3V0cHV0KHRoaXMsIFwiRW52aXJvbm1lbnRcIiwge1xuICAgICAga2V5OiBcIkVudmlyb25tZW50XCIsXG4gICAgICB2YWx1ZTogZW52aXJvbm1lbnQsXG4gICAgICBleHBvcnROYW1lOiBcIkVudmlyb25tZW50XCIsXG4gICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgXCJFbnZpcm9ubWVudCB0eXBlIGZvciB0aGlzIGFjY291bnQgKGUuZy4sIHByb2R1Y3Rpb24sIHN0YWdpbmcsIGRldmVsb3BtZW50KVwiXG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
@@ -1,4 +0,0 @@
1
- import { Stack } from "aws-cdk-lib";
2
- export declare class ManagedIdentityCenter extends Stack {
3
- constructor(id: string);
4
- }
@@ -1,24 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ManagedIdentityCenter = void 0;
4
- const aws_cdk_lib_1 = require("aws-cdk-lib");
5
- const fs = require("fs");
6
- const app_1 = require("../../app");
7
- const identityCenterGroupMembership_1 = require("../../config/aws/identityCenterGroupMembership");
8
- class ManagedIdentityCenter extends aws_cdk_lib_1.Stack {
9
- constructor(id) {
10
- super(app_1.default.getInstance(), id);
11
- const configFile = fs.readFileSync("../identity-center-config.json", {
12
- encoding: "utf8"
13
- });
14
- const identityCenterConfig = JSON.parse(configFile);
15
- identityCenterConfig.forEach((config) => {
16
- new identityCenterGroupMembership_1.IdentityCenterGroupMembership(this, `Managed${config.group}Group`, {
17
- groupName: config.group,
18
- groupMembers: config.members
19
- });
20
- });
21
- }
22
- }
23
- exports.ManagedIdentityCenter = ManagedIdentityCenter;
24
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFuYWdlZElkZW50aXR5Q2VudGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vbGliL3BhdHRlcm5zL2F3cy9tYW5hZ2VkSWRlbnRpdHlDZW50ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNkNBQW9DO0FBQ3BDLHlCQUF5QjtBQUN6QixtQ0FBNEI7QUFDNUIsa0dBQStGO0FBTy9GLE1BQWEscUJBQXNCLFNBQVEsbUJBQUs7SUFDOUMsWUFBWSxFQUFVO1FBQ3BCLEtBQUssQ0FBQyxhQUFHLENBQUMsV0FBVyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFN0IsTUFBTSxVQUFVLEdBQUcsRUFBRSxDQUFDLFlBQVksQ0FBQyxnQ0FBZ0MsRUFBRTtZQUNuRSxRQUFRLEVBQUUsTUFBTTtTQUNqQixDQUFDLENBQUM7UUFDSCxNQUFNLG9CQUFvQixHQUF5QixJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBRTFFLG9CQUFvQixDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO1lBQ3RDLElBQUksNkRBQTZCLENBQUMsSUFBSSxFQUFFLFVBQVUsTUFBTSxDQUFDLEtBQUssT0FBTyxFQUFFO2dCQUNyRSxTQUFTLEVBQUUsTUFBTSxDQUFDLEtBQUs7Z0JBQ3ZCLFlBQVksRUFBRSxNQUFNLENBQUMsT0FBTzthQUM3QixDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRjtBQWhCRCxzREFnQkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTdGFjayB9IGZyb20gXCJhd3MtY2RrLWxpYlwiO1xuaW1wb3J0ICogYXMgZnMgZnJvbSBcImZzXCI7XG5pbXBvcnQgQXBwIGZyb20gXCIuLi8uLi9hcHBcIjtcbmltcG9ydCB7IElkZW50aXR5Q2VudGVyR3JvdXBNZW1iZXJzaGlwIH0gZnJvbSBcIi4uLy4uL2NvbmZpZy9hd3MvaWRlbnRpdHlDZW50ZXJHcm91cE1lbWJlcnNoaXBcIjtcblxudHlwZSBJZGVudGl0eUNlbnRlckNvbmZpZyA9IEFycmF5PHtcbiAgZ3JvdXA6IHN0cmluZztcbiAgbWVtYmVyczogc3RyaW5nW107XG59PjtcblxuZXhwb3J0IGNsYXNzIE1hbmFnZWRJZGVudGl0eUNlbnRlciBleHRlbmRzIFN0YWNrIHtcbiAgY29uc3RydWN0b3IoaWQ6IHN0cmluZykge1xuICAgIHN1cGVyKEFwcC5nZXRJbnN0YW5jZSgpLCBpZCk7XG5cbiAgICBjb25zdCBjb25maWdGaWxlID0gZnMucmVhZEZpbGVTeW5jKFwiLi4vaWRlbnRpdHktY2VudGVyLWNvbmZpZy5qc29uXCIsIHtcbiAgICAgIGVuY29kaW5nOiBcInV0ZjhcIlxuICAgIH0pO1xuICAgIGNvbnN0IGlkZW50aXR5Q2VudGVyQ29uZmlnOiBJZGVudGl0eUNlbnRlckNvbmZpZyA9IEpTT04ucGFyc2UoY29uZmlnRmlsZSk7XG5cbiAgICBpZGVudGl0eUNlbnRlckNvbmZpZy5mb3JFYWNoKChjb25maWcpID0+IHtcbiAgICAgIG5ldyBJZGVudGl0eUNlbnRlckdyb3VwTWVtYmVyc2hpcCh0aGlzLCBgTWFuYWdlZCR7Y29uZmlnLmdyb3VwfUdyb3VwYCwge1xuICAgICAgICBncm91cE5hbWU6IGNvbmZpZy5ncm91cCxcbiAgICAgICAgZ3JvdXBNZW1iZXJzOiBjb25maWcubWVtYmVyc1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
@@ -1,36 +0,0 @@
1
- import { type Environment, Stack, type StackProps } from "aws-cdk-lib";
2
- import { type ICostAllocationTags } from "../../config/aws/costAllocationTags";
3
- import { type Account } from "@aws-sdk/client-organizations";
4
- type ExtendedStackProps = Omit<StackProps, "env"> & {
5
- env: Required<Pick<Environment, "region" | "account">> & Partial<Omit<Environment, "region" | "account">>;
6
- };
7
- type AccountsConfig = {
8
- readonly [key: string]: readonly string[] | string;
9
- };
10
- interface ManagedOrganisationProps extends ExtendedStackProps {
11
- organisationName: string;
12
- accounts: AccountsConfig;
13
- orgEmail: string;
14
- existingAccounts?: Account[];
15
- costAllocationTags: ICostAllocationTags[];
16
- identityCenter?: boolean;
17
- backupSettings?: {
18
- enableCrossAccountBackup?: boolean;
19
- enableDelegatedAdministrator?: boolean;
20
- enableMpa?: boolean;
21
- };
22
- }
23
- export declare class ManagedOrganisation extends Stack {
24
- private organisation;
25
- constructor(id: string, props: ManagedOrganisationProps);
26
- private createOrganisation;
27
- private setupOrganisationFeatures;
28
- private getPlatformAccountId;
29
- private setupIpamDelegation;
30
- private enableRamSharing;
31
- private enableTrustedAccess;
32
- private enableCostAllocationTags;
33
- private setupIdentityCenter;
34
- private setupBackupGlobalSettings;
35
- }
36
- export {};
@@ -1,97 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ManagedOrganisation = void 0;
4
- const aws_cdk_lib_1 = require("aws-cdk-lib");
5
- const app_1 = require("../../app");
6
- const backupGlobalSettings_1 = require("../../config/aws/backupGlobalSettings");
7
- const identityCenter_1 = require("../../config/aws/identityCenter");
8
- const ipamDelegateAdmin_1 = require("../../config/aws/ipamDelegateAdmin");
9
- const ramSharing_1 = require("../../config/aws/ramSharing");
10
- const costAllocationTags_1 = require("../../config/aws/costAllocationTags");
11
- const organisation_1 = require("../../config/aws/organisation");
12
- const organisationsAccess_1 = require("../../config/aws/organisationsAccess");
13
- class ManagedOrganisation extends aws_cdk_lib_1.Stack {
14
- constructor(id, props) {
15
- super(app_1.default.getInstance(), id, props);
16
- this.createOrganisation(props);
17
- this.setupOrganisationFeatures({
18
- ...props,
19
- identityCenter: props.identityCenter ?? true
20
- });
21
- }
22
- createOrganisation(props) {
23
- this.organisation = new organisation_1.default(this, "ManagedOrganisation", {
24
- organisationName: props.organisationName,
25
- accounts: props.accounts,
26
- orgEmail: props.orgEmail,
27
- env: props.env,
28
- existingAccounts: props.existingAccounts
29
- });
30
- }
31
- setupOrganisationFeatures(props) {
32
- const orgAccounts = this.organisation.getAccounts();
33
- const platformAccountId = this.getPlatformAccountId(orgAccounts, props);
34
- this.setupIpamDelegation(platformAccountId);
35
- this.enableRamSharing();
36
- this.enableTrustedAccess(props);
37
- this.enableCostAllocationTags(props);
38
- this.setupIdentityCenter(orgAccounts, props);
39
- this.setupBackupGlobalSettings(props);
40
- }
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) {
55
- new ipamDelegateAdmin_1.IpamDelegateAdmin(this, "IpamDelegateAdmin", {
56
- accountId: platformAccountId
57
- });
58
- }
59
- enableRamSharing() {
60
- new ramSharing_1.RamSharing(this, "RamSharing");
61
- }
62
- enableTrustedAccess(props) {
63
- new organisationsAccess_1.ActivateOrganisationsAccess(this, "ActivateOrganisationsAccess", {
64
- account: props.env.account,
65
- region: props.env.region
66
- });
67
- }
68
- enableCostAllocationTags(props) {
69
- if (props.costAllocationTags.length > 0) {
70
- new costAllocationTags_1.CostAllocationTags(this, "CostAllocationTags", {
71
- costAllocationTags: props.costAllocationTags
72
- });
73
- }
74
- }
75
- setupIdentityCenter(orgAccounts, props) {
76
- if (props.identityCenter) {
77
- new identityCenter_1.IdentityCenter(this, "IdentityCenter", {
78
- accounts: orgAccounts
79
- });
80
- }
81
- }
82
- setupBackupGlobalSettings(props) {
83
- const defaultSettings = {
84
- enableCrossAccountBackup: true,
85
- enableDelegatedAdministrator: true,
86
- enableMpa: false
87
- };
88
- const settings = { ...defaultSettings, ...props.backupSettings };
89
- new backupGlobalSettings_1.BackupGlobalSettings(this, "BackupGlobalSettings", {
90
- account: props.env.account,
91
- region: props.env.region,
92
- ...settings
93
- });
94
- }
95
- }
96
- exports.ManagedOrganisation = ManagedOrganisation;
97
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFuYWdlZE9yZ2FuaXNhdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9wYXR0ZXJucy9hd3MvbWFuYWdlZE9yZ2FuaXNhdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSw2Q0FBdUU7QUFFdkUsbUNBQTRCO0FBRTVCLGdGQUE2RTtBQUM3RSxvRUFBaUU7QUFDakUsMEVBQXVFO0FBQ3ZFLDREQUF5RDtBQUN6RCw0RUFHNkM7QUFDN0MsZ0VBQXlEO0FBRXpELDhFQUFtRjtBQXlCbkYsTUFBYSxtQkFBb0IsU0FBUSxtQkFBSztJQUc1QyxZQUFZLEVBQVUsRUFBRSxLQUErQjtRQUNyRCxLQUFLLENBQUMsYUFBRyxDQUFDLFdBQVcsRUFBRSxFQUFFLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUNwQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDL0IsSUFBSSxDQUFDLHlCQUF5QixDQUFDO1lBQzdCLEdBQUcsS0FBSztZQUNSLGNBQWMsRUFBRSxLQUFLLENBQUMsY0FBYyxJQUFJLElBQUk7U0FDN0MsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLGtCQUFrQixDQUFDLEtBQStCO1FBQ3hELElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxzQkFBWSxDQUFDLElBQUksRUFBRSxxQkFBcUIsRUFBRTtZQUNoRSxnQkFBZ0IsRUFBRSxLQUFLLENBQUMsZ0JBQWdCO1lBQ3hDLFFBQVEsRUFBRSxLQUFLLENBQUMsUUFBUTtZQUN4QixRQUFRLEVBQUUsS0FBSyxDQUFDLFFBQVE7WUFDeEIsR0FBRyxFQUFFLEtBQUssQ0FBQyxHQUFHO1lBQ2QsZ0JBQWdCLEVBQUUsS0FBSyxDQUFDLGdCQUFnQjtTQUN6QyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU8seUJBQXlCLENBQUMsS0FBK0I7UUFDL0QsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLEVBQUUsQ0FBQztR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Q0FBQztRQUVGLE1BQU0sUUFBUSxHQUFHLEVBQUUsR0FBRyxlQUFlLEVBQUUsR0FBRyxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7UUFFakUsSUFBSSwyQ0FBb0IsQ0FBQyxJQUFJLEVBQUUsc0JBQXNCLEVBQUU7WUFDckQsT0FBTyxFQUFFLEtBQUssQ0FBQyxHQUFHLENBQUMsT0FBTztZQUMxQixNQUFNLEVBQUUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxNQUFNO1lBQ3hCLEdBQUcsUUFBUTtTQUNaLENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRjtBQWpIRCxrREFpSEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB0eXBlIEVudmlyb25tZW50LCBTdGFjaywgdHlwZSBTdGFja1Byb3BzIH0gZnJvbSBcImF3cy1jZGstbGliXCI7XG5cbmltcG9ydCBBcHAgZnJvbSBcIi4uLy4uL2FwcFwiO1xuXG5pbXBvcnQgeyBCYWNrdXBHbG9iYWxTZXR0aW5ncyB9IGZyb20gXCIuLi8uLi9jb25maWcvYXdzL2JhY2t1cEdsb2JhbFNldHRpbmdzXCI7XG5pbXBvcnQgeyBJZGVudGl0eUNlbnRlciB9IGZyb20gXCIuLi8uLi9jb25maWcvYXdzL2lkZW50aXR5Q2VudGVyXCI7XG5pbXBvcnQgeyBJcGFtRGVsZWdhdGVBZG1pbiB9IGZyb20gXCIuLi8uLi9jb25maWcvYXdzL2lwYW1EZWxlZ2F0ZUFkbWluXCI7XG5pbXBvcnQgeyBSYW1TaGFyaW5nIH0gZnJvbSBcIi4uLy4uL2NvbmZpZy9hd3MvcmFtU2hhcmluZ1wiO1xuaW1wb3J0IHtcbiAgQ29zdEFsbG9jYXRpb25UYWdzLFxuICB0eXBlIElDb3N0QWxsb2NhdGlvblRhZ3Ncbn0gZnJvbSBcIi4uLy4uL2NvbmZpZy9hd3MvY29zdEFsbG9jYXRpb25UYWdzXCI7XG5pbXBvcnQgT3JnYW5pc2F0aW9uIGZyb20gXCIuLi8uLi9jb25maWcvYXdzL29yZ2FuaXNhdGlvblwiO1xuaW1wb3J0IHsgdHlwZSBBY2NvdW50IH0gZnJvbSBcIkBhd3Mtc2RrL2NsaWVudC1vcmdhbml6YXRpb25zXCI7XG5pbXBvcnQgeyBBY3RpdmF0ZU9yZ2FuaXNhdGlvbnNBY2Nlc3MgfSBmcm9tIFwiLi4vLi4vY29uZmlnL2F3cy9vcmdhbmlzYXRpb25zQWNjZXNzXCI7XG5cbnR5cGUgRXh0ZW5kZWRTdGFja1Byb3BzID0gT21pdDxTdGFja1Byb3BzLCBcImVudlwiPiAmIHtcbiAgZW52OiBSZXF1aXJlZDxQaWNrPEVudmlyb25tZW50LCBcInJlZ2lvblwiIHwgXCJhY2NvdW50XCI+PiAmXG4gICAgUGFydGlhbDxPbWl0PEVudmlyb25tZW50LCBcInJlZ2lvblwiIHwgXCJhY2NvdW50XCI+Pjtcbn07XG5cbnR5cGUgQWNjb3VudHNDb25maWcgPSB7XG4gIHJlYWRvbmx5IFtrZXk6IHN0cmluZ106IHJlYWRvbmx5IHN0cmluZ1tdIHwgc3RyaW5nO1xufTtcblxuaW50ZXJmYWNlIE1hbmFnZWRPcmdhbmlzYXRpb25Qcm9wcyBleHRlbmRzIEV4dGVuZGVkU3RhY2tQcm9wcyB7XG4gIG9yZ2FuaXNhdGlvbk5hbWU6IHN0cmluZztcbiAgYWNjb3VudHM6IEFjY291bnRzQ29uZmlnO1xuICBvcmdFbWFpbDogc3RyaW5nO1xuICBleGlzdGluZ0FjY291bnRzPzogQWNjb3VudFtdO1xuICBjb3N0QWxsb2NhdGlvblRhZ3M6IElDb3N0QWxsb2NhdGlvblRhZ3NbXTtcbiAgaWRlbnRpdHlDZW50ZXI/OiBib29sZWFuO1xuICBiYWNrdXBTZXR0aW5ncz86IHtcbiAgICBlbmFibGVDcm9zc0FjY291bnRCYWNrdXA/OiBib29sZWFuO1xuICAgIGVuYWJsZURlbGVnYXRlZEFkbWluaXN0cmF0b3I/OiBib29sZWFuO1xuICAgIGVuYWJsZU1wYT86IGJvb2xlYW47XG4gIH07XG59XG5cbmV4cG9ydCBjbGFzcyBNYW5hZ2VkT3JnYW5pc2F0aW9uIGV4dGVuZHMgU3RhY2sge1xuICBwcml2YXRlIG9yZ2FuaXNhdGlvbjogT3JnYW5pc2F0aW9uO1xuXG4gIGNvbnN0cnVjdG9yKGlkOiBzdHJpbmcsIHByb3BzOiBNYW5hZ2VkT3JnYW5pc2F0aW9uUHJvcHMpIHtcbiAgICBzdXBlcihBcHAuZ2V0SW5zdGFuY2UoKSwgaWQsIHByb3BzKTtcbiAgICB0aGlzLmNyZWF0ZU9yZ2FuaXNhdGlvbihwcm9wcyk7XG4gICAgdGhpcy5zZXR1cE9yZ2FuaXNhdGlvbkZlYXR1cmVzKHtcbiAgICAgIC4uLnByb3BzLFxuICAgICAgaWRlbnRpdHlDZW50ZXI6IHByb3BzLmlkZW50aXR5Q2VudGVyID8/IHRydWVcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlT3JnYW5pc2F0aW9uKHByb3BzOiBNYW5hZ2VkT3JnYW5pc2F0aW9uUHJvcHMpIHtcbiAgICB0aGlzLm9yZ2FuaXNhdGlvbiA9IG5ldyBPcmdhbmlzYXRpb24odGhpcywgXCJNYW5hZ2VkT3JnYW5pc2F0aW9uXCIsIHtcbiAgICAgIG9yZ2FuaXNhdGlvbk5hbWU6IHByb3BzLm9yZ2FuaXNhdGlvbk5hbWUsXG4gICAgICBhY2NvdW50czogcHJvcHMuYWNjb3VudHMsXG4gICAgICBvcmdFbWFpbDogcHJvcHMub3JnRW1haWwsXG4gICAgICBlbnY6IHByb3BzLmVudixcbiAgICAgIGV4aXN0aW5nQWNjb3VudHM6IHByb3BzLmV4aXN0aW5nQWNjb3VudHNcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0dXBPcmdhbmlzYXRpb25GZWF0dXJlcyhwcm9wczogTWFuYWdlZE9yZ2FuaXNhdGlvblByb3BzKSB7XG4gICAgY29uc3Qgb3JnQWNjb3VudHMgPSB0aGlzLm9yZ2FuaXNhdGlvbi5nZXRBY2NvdW50cygpO1xuICAgIGNvbnN0IHBsYXRmb3JtQWNjb3VudElkID0gdGhpcy5nZXRQbGF0Zm9ybUFjY291bnRJZChvcmdBY2NvdW50cywgcHJvcHMpO1xuXG4gICAgdGhpcy5zZXR1cElwYW1EZWxlZ2F0aW9uKHBsYXRmb3JtQWNjb3VudElkKTtcbiAgICB0aGlzLmVuYWJsZVJhbVNoYXJpbmcoKTtcbiAgICB0aGlzLmVuYWJsZVRydXN0ZWRBY2Nlc3MocHJvcHMpO1xuICAgIHRoaXMuZW5hYmxlQ29zdEFsbG9jYXRpb25UYWdzKHByb3BzKTtcbiAgICB0aGlzLnNldHVwSWRlbnRpdHlDZW50ZXIob3JnQWNjb3VudHMsIHByb3BzKTtcbiAgICB0aGlzLnNldHVwQmFja3VwR2xvYmFsU2V0dGluZ3MocHJvcHMpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRQbGF0Zm9ybUFjY291bnRJZChcbiAgICBvcmdBY2NvdW50czogUmVjb3JkPHN0cmluZywgc3RyaW5nPixcbiAgICBwcm9wczogTWFuYWdlZE9yZ2FuaXNhdGlvblByb3BzXG4gICkge1xuICAgIGNvbnN0IHBsYXRmb3JtRW50cnkgPSBPYmplY3QuZW50cmllcyhwcm9wcy5hY2NvdW50cykuZmluZChcbiAgICAgIChba2V5XSkgPT4ga2V5LnRvTG93ZXJDYXNlKCkgPT09IFwicGxhdGZvcm1cIlxuICAgICk7XG5cbiAgICBpZiAoIXBsYXRmb3JtRW50cnkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ05vIHBsYXRmb3JtIGFjY291bnQgZm91bmQuIFBsZWFzZSBpbmNsdWRlIGEgXCJwbGF0Zm9ybVwiIGtleSBpbiB5b3VyIGFjY291bnRzIGNvbmZpZ3VyYXRpb24uJ1xuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCBhY2NvdW50ID0gcGxhdGZvcm1FbnRyeVsxXTtcbiAgICBjb25zdCBwbGF0Zm9ybUFjY291bnQgPSBBcnJheS5pc0FycmF5KGFjY291bnQpID8gYWNjb3VudFswXSA6IGFjY291bnQ7XG5cbiAgICBjb25zdCBwbGF0Zm9ybUFjY291bnRJZCA9IG9yZ0FjY291bnRzW3BsYXRmb3JtQWNjb3VudF07XG5cbiAgICBpZiAoIXBsYXRmb3JtQWNjb3VudElkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBQbGF0Zm9ybSBhY2NvdW50IElEIG5vdCBmb3VuZCBmb3IgYWNjb3VudCBuYW1lOiAke3BsYXRmb3JtQWNjb3VudH1gXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiBwbGF0Zm9ybUFjY291bnRJZDtcbiAgfVxuXG4gIHByaXZhdGUgc2V0dXBJcGFtRGVsZWdhdGlvbihwbGF0Zm9ybUFjY291bnRJZDogc3RyaW5nKSB7XG4gICAgbmV3IElwYW1EZWxlZ2F0ZUFkbWluKHRoaXMsIFwiSXBhbURlbGVnYXRlQWRtaW5cIiwge1xuICAgICAgYWNjb3VudElkOiBwbGF0Zm9ybUFjY291bnRJZFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBlbmFibGVSYW1TaGFyaW5nKCkge1xuICAgIG5ldyBSYW1TaGFyaW5nKHRoaXMsIFwiUmFtU2hhcmluZ1wiKTtcbiAgfVxuXG4gIHByaXZhdGUgZW5hYmxlVHJ1c3RlZEFjY2Vzcyhwcm9wczogTWFuYWdlZE9yZ2FuaXNhdGlvblByb3BzKSB7XG4gICAgbmV3IEFjdGl2YXRlT3JnYW5pc2F0aW9uc0FjY2Vzcyh0aGlzLCBcIkFjdGl2YXRlT3JnYW5pc2F0aW9uc0FjY2Vzc1wiLCB7XG4gICAgICBhY2NvdW50OiBwcm9wcy5lbnYuYWNjb3VudCxcbiAgICAgIHJlZ2lvbjogcHJvcHMuZW52LnJlZ2lvblxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBlbmFibGVDb3N0QWxsb2NhdGlvblRhZ3MocHJvcHM6IE1hbmFnZWRPcmdhbmlzYXRpb25Qcm9wcykge1xuICAgIGlmIChwcm9wcy5jb3N0QWxsb2NhdGlvblRhZ3MubGVuZ3RoID4gMCkge1xuICAgICAgbmV3IENvc3RBbGxvY2F0aW9uVGFncyh0aGlzLCBcIkNvc3RBbGxvY2F0aW9uVGFnc1wiLCB7XG4gICAgICAgIGNvc3RBbGxvY2F0aW9uVGFnczogcHJvcHMuY29zdEFsbG9jYXRpb25UYWdzXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNldHVwSWRlbnRpdHlDZW50ZXIoXG4gICAgb3JnQWNjb3VudHM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4sXG4gICAgcHJvcHM6IE1hbmFnZWRPcmdhbmlzYXRpb25Qcm9wc1xuICApIHtcbiAgICBpZiAocHJvcHMuaWRlbnRpdHlDZW50ZXIpIHtcbiAgICAgIG5ldyBJZGVudGl0eUNlbnRlcih0aGlzLCBcIklkZW50aXR5Q2VudGVyXCIsIHtcbiAgICAgICAgYWNjb3VudHM6IG9yZ0FjY291bnRzXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNldHVwQmFja3VwR2xvYmFsU2V0dGluZ3MocHJvcHM6IE1hbmFnZWRPcmdhbmlzYXRpb25Qcm9wcykge1xuICAgIGNvbnN0IGRlZmF1bHRTZXR0aW5ncyA9IHtcbiAgICAgIGVuYWJsZUNyb3NzQWNjb3VudEJhY2t1cDogdHJ1ZSxcbiAgICAgIGVuYWJsZURlbGVnYXRlZEFkbWluaXN0cmF0b3I6IHRydWUsXG4gICAgICBlbmFibGVNcGE6IGZhbHNlXG4gICAgfTtcblxuICAgIGNvbnN0IHNldHRpbmdzID0geyAuLi5kZWZhdWx0U2V0dGluZ3MsIC4uLnByb3BzLmJhY2t1cFNldHRpbmdzIH07XG5cbiAgICBuZXcgQmFja3VwR2xvYmFsU2V0dGluZ3ModGhpcywgXCJCYWNrdXBHbG9iYWxTZXR0aW5nc1wiLCB7XG4gICAgICBhY2NvdW50OiBwcm9wcy5lbnYuYWNjb3VudCxcbiAgICAgIHJlZ2lvbjogcHJvcHMuZW52LnJlZ2lvbixcbiAgICAgIC4uLnNldHRpbmdzXG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
@@ -1,12 +0,0 @@
1
- import { type Construct } from "constructs";
2
- import { ManagedAccount, type ManagedAccountProps } from "./managedAccount";
3
- type AccountsConfig = {
4
- readonly [key: string]: readonly string[] | string;
5
- };
6
- interface ManagedPlatformProps extends ManagedAccountProps {
7
- accounts: AccountsConfig;
8
- }
9
- export declare class ManagedPlatform extends ManagedAccount {
10
- constructor(scope: Construct, id: string, props: ManagedPlatformProps);
11
- }
12
- export {};
@@ -1,29 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ManagedPlatform = void 0;
4
- const ipam_1 = require("../../config/aws/ipam");
5
- const ipamPool_1 = require("../../resources/aws/networking/ipamPool");
6
- const managedAccount_1 = require("./managedAccount");
7
- const getConfig_1 = require("../../utils/getConfig");
8
- class ManagedPlatform extends managedAccount_1.ManagedAccount {
9
- constructor(scope, id, props) {
10
- super(scope, id, props);
11
- // Get all configured regions
12
- const config = (0, getConfig_1.getConfig)();
13
- const allRegions = config.allRegions.length > 0 ? config.allRegions : [props.region]; // Fallback to at least the deployment region
14
- // Create IPAM with all regions configured
15
- const ipam = new ipam_1.Ipam(this, "Ipam", {
16
- regions: allRegions
17
- });
18
- // Convert accounts to flat array for IpamPool
19
- const orgAccounts = Object.values(props.accounts).flatMap((account) => Array.isArray(account) ? account : [account]);
20
- // Create IPAM pool hierarchy for all regions
21
- new ipamPool_1.IpamPool(this, "IpamPool", {
22
- orgAccounts,
23
- regions: allRegions,
24
- ipamScope: ipam.privateDefaultScopeId
25
- });
26
- }
27
- }
28
- exports.ManagedPlatform = ManagedPlatform;
29
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFuYWdlZFBsYXRmb3JtLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vbGliL3BhdHRlcm5zL2F3cy9tYW5hZ2VkUGxhdGZvcm0udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsZ0RBQTZDO0FBQzdDLHNFQUFtRTtBQUVuRSxxREFBNEU7QUFDNUUscURBQWtEO0FBVWxELE1BQWEsZUFBZ0IsU0FBUSwrQkFBYztJQUNqRCxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQTJCO1FBQ25FLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBRXhCLDZCQUE2QjtRQUM3QixNQUFNLE1BQU0sR0FBRyxJQUFBLHFCQUFTLEdBQUUsQ0FBQztRQUMzQixNQUFNLFVBQVUsR0FDZCxNQUFNLENBQUMsVUFBVSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsNkNBQTZDO1FBRWxILDBDQUEwQztRQUMxQyxNQUFNLElBQUksR0FBRyxJQUFJLFdBQUksQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFO1lBQ2xDLE9BQU8sRUFBRSxVQUFVO1NBQ3BCLENBQUMsQ0FBQztRQUVILDhDQUE4QztRQUM5QyxNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUNwRSxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQzdDLENBQUM7UUFFRiw2Q0FBNkM7UUFDN0MsSUFBSSxtQkFBUSxDQUFDLElBQUksRUFBRSxVQUFVLEVBQUU7WUFDN0IsV0FBVztZQUNYLE9BQU8sRUFBRSxVQUFVO1lBQ25CLFNBQVMsRUFBRSxJQUFJLENBQUMscUJBQXFCO1NBQ3RDLENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRjtBQTFCRCwwQ0EwQkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJcGFtIH0gZnJvbSBcIi4uLy4uL2NvbmZpZy9hd3MvaXBhbVwiO1xuaW1wb3J0IHsgSXBhbVBvb2wgfSBmcm9tIFwiLi4vLi4vcmVzb3VyY2VzL2F3cy9uZXR3b3JraW5nL2lwYW1Qb29sXCI7XG5pbXBvcnQgeyB0eXBlIENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5pbXBvcnQgeyBNYW5hZ2VkQWNjb3VudCwgdHlwZSBNYW5hZ2VkQWNjb3VudFByb3BzIH0gZnJvbSBcIi4vbWFuYWdlZEFjY291bnRcIjtcbmltcG9ydCB7IGdldENvbmZpZyB9IGZyb20gXCIuLi8uLi91dGlscy9nZXRDb25maWdcIjtcblxudHlwZSBBY2NvdW50c0NvbmZpZyA9IHtcbiAgcmVhZG9ubHkgW2tleTogc3RyaW5nXTogcmVhZG9ubHkgc3RyaW5nW10gfCBzdHJpbmc7XG59O1xuXG5pbnRlcmZhY2UgTWFuYWdlZFBsYXRmb3JtUHJvcHMgZXh0ZW5kcyBNYW5hZ2VkQWNjb3VudFByb3BzIHtcbiAgYWNjb3VudHM6IEFjY291bnRzQ29uZmlnO1xufVxuXG5leHBvcnQgY2xhc3MgTWFuYWdlZFBsYXRmb3JtIGV4dGVuZHMgTWFuYWdlZEFjY291bnQge1xuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogTWFuYWdlZFBsYXRmb3JtUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIHByb3BzKTtcblxuICAgIC8vIEdldCBhbGwgY29uZmlndXJlZCByZWdpb25zXG4gICAgY29uc3QgY29uZmlnID0gZ2V0Q29uZmlnKCk7XG4gICAgY29uc3QgYWxsUmVnaW9ucyA9XG4gICAgICBjb25maWcuYWxsUmVnaW9ucy5sZW5ndGggPiAwID8gY29uZmlnLmFsbFJlZ2lvbnMgOiBbcHJvcHMucmVnaW9uXTsgLy8gRmFsbGJhY2sgdG8gYXQgbGVhc3QgdGhlIGRlcGxveW1lbnQgcmVnaW9uXG5cbiAgICAvLyBDcmVhdGUgSVBBTSB3aXRoIGFsbCByZWdpb25zIGNvbmZpZ3VyZWRcbiAgICBjb25zdCBpcGFtID0gbmV3IElwYW0odGhpcywgXCJJcGFtXCIsIHtcbiAgICAgIHJlZ2lvbnM6IGFsbFJlZ2lvbnNcbiAgICB9KTtcblxuICAgIC8vIENvbnZlcnQgYWNjb3VudHMgdG8gZmxhdCBhcnJheSBmb3IgSXBhbVBvb2xcbiAgICBjb25zdCBvcmdBY2NvdW50cyA9IE9iamVjdC52YWx1ZXMocHJvcHMuYWNjb3VudHMpLmZsYXRNYXAoKGFjY291bnQpID0+XG4gICAgICBBcnJheS5pc0FycmF5KGFjY291bnQpID8gYWNjb3VudCA6IFthY2NvdW50XVxuICAgICk7XG5cbiAgICAvLyBDcmVhdGUgSVBBTSBwb29sIGhpZXJhcmNoeSBmb3IgYWxsIHJlZ2lvbnNcbiAgICBuZXcgSXBhbVBvb2wodGhpcywgXCJJcGFtUG9vbFwiLCB7XG4gICAgICBvcmdBY2NvdW50cyxcbiAgICAgIHJlZ2lvbnM6IGFsbFJlZ2lvbnMsXG4gICAgICBpcGFtU2NvcGU6IGlwYW0ucHJpdmF0ZURlZmF1bHRTY29wZUlkXG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
@@ -1,9 +0,0 @@
1
- import { Stack } from "aws-cdk-lib";
2
- export interface subdomainHostedZoneProps {
3
- delegatedZone: string;
4
- parentHostedZoneName: string;
5
- parentAccountName: string;
6
- }
7
- export declare class SubdomainHostedZone extends Stack {
8
- constructor(id: string, props: subdomainHostedZoneProps);
9
- }
@@ -1,39 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.SubdomainHostedZone = void 0;
4
- const route53 = require("aws-cdk-lib/aws-route53");
5
- const aws_cdk_lib_1 = require("aws-cdk-lib");
6
- const iam_1 = require("../../resources/aws/iam");
7
- const getAccountId_1 = require("../../utils/getAccountId");
8
- const app_1 = require("../../app");
9
- class SubdomainHostedZone extends aws_cdk_lib_1.Stack {
10
- constructor(id, props) {
11
- super(app_1.default.getInstance(), id);
12
- // DelegationRoleArn
13
- const delegationRoleArn = aws_cdk_lib_1.Stack.of(this).formatArn({
14
- account: (0, getAccountId_1.default)(props.parentAccountName),
15
- region: "",
16
- resource: "role",
17
- resourceName: `${props.parentHostedZoneName.split(".", 1)}DelegateHostedZoneRole`,
18
- service: "iam"
19
- });
20
- // Delegate Hosted Zone Role
21
- const hostedZoneDelegationRole = iam_1.Role.fromRoleArn(this, "hostedZoneDelegationRole", delegationRoleArn);
22
- // Subdomains
23
- const delegatedHostedZone = new route53.HostedZone(this, `${props.delegatedZone}HostedZone`, {
24
- zoneName: props.delegatedZone
25
- });
26
- new route53.CrossAccountZoneDelegationRecord(this, `${props.delegatedZone}DelegationRole`, {
27
- delegationRole: hostedZoneDelegationRole,
28
- delegatedZone: delegatedHostedZone,
29
- parentHostedZoneName: props.parentHostedZoneName
30
- });
31
- new aws_cdk_lib_1.CfnOutput(this, `${props.delegatedZone.split(".").join("")}HostedZoneId`, {
32
- key: `${props.delegatedZone.split(".").join("")}HostedZoneId`,
33
- value: delegatedHostedZone.hostedZoneId,
34
- exportName: `${props.delegatedZone.split(".").join("")}HostedZoneId`
35
- });
36
- }
37
- }
38
- exports.SubdomainHostedZone = SubdomainHostedZone;
39
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3ViZG9tYWluSG9zdGVkWm9uZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9wYXR0ZXJucy9hd3Mvc3ViZG9tYWluSG9zdGVkWm9uZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxtREFBbUQ7QUFDbkQsNkNBQStDO0FBQy9DLGlEQUErQztBQUMvQywyREFBb0Q7QUFDcEQsbUNBQTRCO0FBUTVCLE1BQWEsbUJBQW9CLFNBQVEsbUJBQUs7SUFDNUMsWUFBWSxFQUFVLEVBQUUsS0FBK0I7UUFDckQsS0FBSyxDQUFDLGFBQUcsQ0FBQyxXQUFXLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUU3QixvQkFBb0I7UUFDcEIsTUFBTSxpQkFBaUIsR0FBRyxtQkFBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxTQUFTLENBQUM7WUFDakQsT0FBTyxFQUFFLElBQUEsc0JBQVksRUFBQyxLQUFLLENBQUMsaUJBQWlCLENBQUM7WUFDOUMsTUFBTSxFQUFFLEVBQUU7WUFDVixRQUFRLEVBQUUsTUFBTTtZQUNoQixZQUFZLEVBQUUsR0FBRyxLQUFLLENBQUMsb0JBQW9CLENBQUMsS0FBSyxDQUMvQyxHQUFHLEVBQ0gsQ0FBQyxDQUNGLHdCQUF3QjtZQUN6QixPQUFPLEVBQUUsS0FBSztTQUNmLENBQUMsQ0FBQztRQUVILDRCQUE0QjtRQUM1QixNQUFNLHdCQUF3QixHQUFHLFVBQUksQ0FBQyxXQUFXLENBQy9DLElBQUksRUFDSiwwQkFBMEIsRUFDMUIsaUJBQWlCLENBQ2xCLENBQUM7UUFFRixhQUFhO1FBQ2IsTUFBTSxtQkFBbUIsR0FBRyxJQUFJLE9BQU8sQ0FBQyxVQUFVLENBQ2hELElBQUksRUFDSixHQUFHLEtBQUssQ0FBQyxhQUFhLFlBQVksRUFDbEM7WUFDRSxRQUFRLEVBQUUsS0FBSyxDQUFDLGFBQWE7U0FDOUIsQ0FDRixDQUFDO1FBRUYsSUFBSSxPQUFPLENBQUMsZ0NBQWdDLENBQzFDLElBQUksRUFDSixHQUFHLEtBQUssQ0FBQyxhQUFhLGdCQUFnQixFQUN0QztZQUNFLGNBQWMsRUFBRSx3QkFBd0I7WUFDeEMsYUFBYSxFQUFFLG1CQUFtQjtZQUNsQyxvQkFBb0IsRUFBRSxLQUFLLENBQUMsb0JBQW9CO1NBQ2pELENBQ0YsQ0FBQztRQUVGLElBQUksdUJBQVMsQ0FDWCxJQUFJLEVBQ0osR0FBRyxLQUFLLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLGNBQWMsRUFDeEQ7WUFDRSxHQUFHLEVBQUUsR0FBRyxLQUFLLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLGNBQWM7WUFDN0QsS0FBSyxFQUFFLG1CQUFtQixDQUFDLFlBQVk7WUFDdkMsVUFBVSxFQUFFLEdBQUcsS0FBSyxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxjQUFjO1NBQ3JFLENBQ0YsQ0FBQztJQUNKLENBQUM7Q0FDRjtBQXBERCxrREFvREMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyByb3V0ZTUzIGZyb20gXCJhd3MtY2RrLWxpYi9hd3Mtcm91dGU1M1wiO1xuaW1wb3J0IHsgQ2ZuT3V0cHV0LCBTdGFjayB9IGZyb20gXCJhd3MtY2RrLWxpYlwiO1xuaW1wb3J0IHsgUm9sZSB9IGZyb20gXCIuLi8uLi9yZXNvdXJjZXMvYXdzL2lhbVwiO1xuaW1wb3J0IGdldEFjY291bnRJZCBmcm9tIFwiLi4vLi4vdXRpbHMvZ2V0QWNjb3VudElkXCI7XG5pbXBvcnQgQXBwIGZyb20gXCIuLi8uLi9hcHBcIjtcblxuZXhwb3J0IGludGVyZmFjZSBzdWJkb21haW5Ib3N0ZWRab25lUHJvcHMge1xuICBkZWxlZ2F0ZWRab25lOiBzdHJpbmc7XG4gIHBhcmVudEhvc3RlZFpvbmVOYW1lOiBzdHJpbmc7XG4gIHBhcmVudEFjY291bnROYW1lOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBjbGFzcyBTdWJkb21haW5Ib3N0ZWRab25lIGV4dGVuZHMgU3RhY2sge1xuICBjb25zdHJ1Y3RvcihpZDogc3RyaW5nLCBwcm9wczogc3ViZG9tYWluSG9zdGVkWm9uZVByb3BzKSB7XG4gICAgc3VwZXIoQXBwLmdldEluc3RhbmNlKCksIGlkKTtcblxuICAgIC8vIERlbGVnYXRpb25Sb2xlQXJuXG4gICAgY29uc3QgZGVsZWdhdGlvblJvbGVBcm4gPSBTdGFjay5vZih0aGlzKS5mb3JtYXRBcm4oe1xuICAgICAgYWNjb3VudDogZ2V0QWNjb3VudElkKHByb3BzLnBhcmVudEFjY291bnROYW1lKSxcbiAgICAgIHJlZ2lvbjogXCJcIixcbiAgICAgIHJlc291cmNlOiBcInJvbGVcIixcbiAgICAgIHJlc291cmNlTmFtZTogYCR7cHJvcHMucGFyZW50SG9zdGVkWm9uZU5hbWUuc3BsaXQoXG4gICAgICAgIFwiLlwiLFxuICAgICAgICAxXG4gICAgICApfURlbGVnYXRlSG9zdGVkWm9uZVJvbGVgLFxuICAgICAgc2VydmljZTogXCJpYW1cIlxuICAgIH0pO1xuXG4gICAgLy8gRGVsZWdhdGUgSG9zdGVkIFpvbmUgUm9sZVxuICAgIGNvbnN0IGhvc3RlZFpvbmVEZWxlZ2F0aW9uUm9sZSA9IFJvbGUuZnJvbVJvbGVBcm4oXG4gICAgICB0aGlzLFxuICAgICAgXCJob3N0ZWRab25lRGVsZWdhdGlvblJvbGVcIixcbiAgICAgIGRlbGVnYXRpb25Sb2xlQXJuXG4gICAgKTtcblxuICAgIC8vIFN1YmRvbWFpbnNcbiAgICBjb25zdCBkZWxlZ2F0ZWRIb3N0ZWRab25lID0gbmV3IHJvdXRlNTMuSG9zdGVkWm9uZShcbiAgICAgIHRoaXMsXG4gICAgICBgJHtwcm9wcy5kZWxlZ2F0ZWRab25lfUhvc3RlZFpvbmVgLFxuICAgICAge1xuICAgICAgICB6b25lTmFtZTogcHJvcHMuZGVsZWdhdGVkWm9uZVxuICAgICAgfVxuICAgICk7XG5cbiAgICBuZXcgcm91dGU1My5Dcm9zc0FjY291bnRab25lRGVsZWdhdGlvblJlY29yZChcbiAgICAgIHRoaXMsXG4gICAgICBgJHtwcm9wcy5kZWxlZ2F0ZWRab25lfURlbGVnYXRpb25Sb2xlYCxcbiAgICAgIHtcbiAgICAgICAgZGVsZWdhdGlvblJvbGU6IGhvc3RlZFpvbmVEZWxlZ2F0aW9uUm9sZSxcbiAgICAgICAgZGVsZWdhdGVkWm9uZTogZGVsZWdhdGVkSG9zdGVkWm9uZSxcbiAgICAgICAgcGFyZW50SG9zdGVkWm9uZU5hbWU6IHByb3BzLnBhcmVudEhvc3RlZFpvbmVOYW1lXG4gICAgICB9XG4gICAgKTtcblxuICAgIG5ldyBDZm5PdXRwdXQoXG4gICAgICB0aGlzLFxuICAgICAgYCR7cHJvcHMuZGVsZWdhdGVkWm9uZS5zcGxpdChcIi5cIikuam9pbihcIlwiKX1Ib3N0ZWRab25lSWRgLFxuICAgICAge1xuICAgICAgICBrZXk6IGAke3Byb3BzLmRlbGVnYXRlZFpvbmUuc3BsaXQoXCIuXCIpLmpvaW4oXCJcIil9SG9zdGVkWm9uZUlkYCxcbiAgICAgICAgdmFsdWU6IGRlbGVnYXRlZEhvc3RlZFpvbmUuaG9zdGVkWm9uZUlkLFxuICAgICAgICBleHBvcnROYW1lOiBgJHtwcm9wcy5kZWxlZ2F0ZWRab25lLnNwbGl0KFwiLlwiKS5qb2luKFwiXCIpfUhvc3RlZFpvbmVJZGBcbiAgICAgIH1cbiAgICApO1xuICB9XG59XG4iXX0=
@@ -1,65 +0,0 @@
1
- import { Role, PolicyStatement } from "aws-cdk-lib/aws-iam";
2
- import { type Construct } from "constructs";
3
- /**
4
- * Supported CI/CD providers
5
- */
6
- export type CICDProvider = "github-actions" | "buildkite" | "gitlab-ci";
7
- /**
8
- * Configuration for creating a CI/CD deploy role
9
- */
10
- export interface CICDRoleConfig {
11
- /**
12
- * The CI/CD provider (github-actions, buildkite, gitlab-ci)
13
- */
14
- provider: CICDProvider;
15
- /**
16
- * The application name to scope the role's permissions to
17
- */
18
- appName: string;
19
- /**
20
- * For GitHub Actions: repository (org/repo)
21
- * For Buildkite: organization slug
22
- * For GitLab CI: project path (group/project)
23
- */
24
- repositoryOrOrg: string;
25
- /**
26
- * Optional role name. Defaults to "FjallDeploy-{provider}-{appName}"
27
- */
28
- roleName?: string;
29
- /**
30
- * Optional IAM path for the role. Defaults to "/"
31
- */
32
- rolePath?: string;
33
- /**
34
- * Optional custom permissions. If not provided, default deployment permissions will be used.
35
- */
36
- customPermissions?: PolicyStatement[];
37
- /**
38
- * Whether to use existing OIDC provider or create a new one
39
- * If true, will look for existing provider by URL
40
- */
41
- useExistingProvider?: boolean;
42
- /**
43
- * Optional ARN of existing OIDC provider (skips creation)
44
- */
45
- existingProviderArn?: string;
46
- }
47
- /**
48
- * Factory to build a CI/CD deploy IAM role with OIDC authentication.
49
- * Creates both the OIDC provider (if needed) and the deploy role with appropriate permissions.
50
- */
51
- export declare class CICDRoleFactory {
52
- /**
53
- * Build a CI/CD deploy role with OIDC authentication
54
- */
55
- static build(id: string, config: CICDRoleConfig): (app: Construct, scope: Construct) => Role;
56
- /**
57
- * Build trust policy conditions based on CI/CD provider
58
- */
59
- private static buildTrustConditions;
60
- /**
61
- * Add default deployment permissions to the role
62
- */
63
- private static addDefaultDeployPermissions;
64
- }
65
- export default CICDRoleFactory;