@fjall/components-infrastructure 0.89.4 → 0.89.6
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/LICENSE +50 -21
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -18
- package/dist/lib/app.d.ts +12 -12
- package/dist/lib/app.js +61 -56
- package/dist/lib/aspects/index.d.ts +1 -1
- package/dist/lib/aspects/index.js +1 -6
- package/dist/lib/aspects/resourceInventory.js +6 -13
- package/dist/lib/config/audit.js +1 -5
- package/dist/lib/config/aws/accessAnalyser.d.ts +11 -0
- package/dist/lib/config/aws/accessAnalyser.js +17 -0
- package/dist/lib/config/aws/accountAuditRole.js +11 -15
- package/dist/lib/config/aws/accountMonitoringRole.js +25 -29
- package/dist/lib/config/aws/alarmTopic.d.ts +8 -0
- package/dist/lib/config/aws/alarmTopic.js +19 -0
- package/dist/lib/config/aws/cloudTrail.js +4 -9
- package/dist/lib/config/aws/configRecorder.d.ts +16 -0
- package/dist/lib/config/aws/configRecorder.js +51 -0
- package/dist/lib/config/aws/configRulePreset.d.ts +13 -0
- package/dist/lib/config/aws/configRulePreset.js +62 -0
- package/dist/lib/config/aws/disasterRecovery.d.ts +1 -1
- package/dist/lib/config/aws/disasterRecovery.js +56 -73
- package/dist/lib/config/aws/ebsDefaultEncryption.d.ts +8 -0
- package/dist/lib/config/aws/ebsDefaultEncryption.js +41 -0
- package/dist/lib/config/aws/ecrDefaultImage.js +25 -30
- package/dist/lib/config/aws/eventBus.js +8 -11
- package/dist/lib/config/aws/guardDutyDetector.d.ts +16 -0
- package/dist/lib/config/aws/guardDutyDetector.js +26 -0
- package/dist/lib/config/aws/identityCenter.d.ts +1 -1
- package/dist/lib/config/aws/identityCenter.js +23 -25
- package/dist/lib/config/aws/identityCenterGroupMembership.js +18 -22
- package/dist/lib/config/aws/index.d.ts +19 -8
- package/dist/lib/config/aws/index.js +19 -25
- package/dist/lib/config/aws/inspectorEnablement.d.ts +9 -0
- package/dist/lib/config/aws/inspectorEnablement.js +51 -0
- package/dist/lib/config/aws/ipam.js +9 -13
- package/dist/lib/config/aws/oidcConnector.js +8 -12
- package/dist/lib/config/aws/platform.js +1 -5
- package/dist/lib/config/aws/s3BlockPublicAccess.d.ts +9 -0
- package/dist/lib/config/aws/s3BlockPublicAccess.js +55 -0
- package/dist/lib/config/aws/scpPreset.d.ts +21 -0
- package/dist/lib/config/aws/scpPreset.js +311 -0
- package/dist/lib/config/aws/securityBaseline.d.ts +15 -0
- package/dist/lib/config/aws/securityBaseline.js +27 -0
- package/dist/lib/config/aws/securityHubHub.d.ts +15 -0
- package/dist/lib/config/aws/securityHubHub.js +28 -0
- package/dist/lib/config/aws/securityServicesAdmin.d.ts +20 -0
- package/dist/lib/config/aws/securityServicesAdmin.js +115 -0
- package/dist/lib/config/index.d.ts +2 -2
- package/dist/lib/config/index.js +2 -21
- package/dist/lib/index.d.ts +4 -4
- package/dist/lib/index.js +5 -26
- package/dist/lib/patterns/aws/account.d.ts +17 -1
- package/dist/lib/patterns/aws/account.js +61 -33
- package/dist/lib/patterns/aws/apexDomainPattern.d.ts +26 -0
- package/dist/lib/patterns/aws/apexDomainPattern.js +91 -0
- package/dist/lib/patterns/aws/auditRole.js +13 -16
- package/dist/lib/patterns/aws/buildkite.d.ts +1 -1
- package/dist/lib/patterns/aws/buildkite.js +70 -75
- package/dist/lib/patterns/aws/cdn.d.ts +5 -5
- package/dist/lib/patterns/aws/cdn.js +22 -28
- package/dist/lib/patterns/aws/compute.d.ts +1 -1
- package/dist/lib/patterns/aws/compute.js +31 -44
- package/dist/lib/patterns/aws/computeEc2.d.ts +1 -1
- package/dist/lib/patterns/aws/computeEc2.js +11 -14
- package/dist/lib/patterns/aws/computeEcs.d.ts +18 -2
- package/dist/lib/patterns/aws/computeEcs.js +41 -31
- package/dist/lib/patterns/aws/computeLambda.d.ts +2 -2
- package/dist/lib/patterns/aws/computeLambda.js +24 -31
- package/dist/lib/patterns/aws/database.d.ts +16 -7
- package/dist/lib/patterns/aws/database.js +81 -73
- package/dist/lib/patterns/aws/delegatedDomainPattern.d.ts +17 -0
- package/dist/lib/patterns/aws/delegatedDomainPattern.js +54 -0
- package/dist/lib/patterns/aws/dnsRecordComposer.d.ts +25 -0
- package/dist/lib/patterns/aws/dnsRecordComposer.js +225 -0
- package/dist/lib/patterns/aws/domain.d.ts +32 -0
- package/dist/lib/patterns/aws/domain.js +115 -0
- package/dist/lib/patterns/aws/domainDelegation.d.ts +3 -3
- package/dist/lib/patterns/aws/domainDelegation.js +28 -37
- package/dist/lib/patterns/aws/domainFactory.d.ts +20 -5
- package/dist/lib/patterns/aws/domainFactory.js +48 -10
- package/dist/lib/patterns/aws/domainValidation.d.ts +11 -0
- package/dist/lib/patterns/aws/domainValidation.js +145 -0
- package/dist/lib/patterns/aws/externalRecordsPattern.d.ts +18 -0
- package/dist/lib/patterns/aws/externalRecordsPattern.js +141 -0
- package/dist/lib/patterns/aws/fivetranProxy.d.ts +1 -1
- package/dist/lib/patterns/aws/fivetranProxy.js +6 -11
- package/dist/lib/patterns/aws/index.d.ts +21 -19
- package/dist/lib/patterns/aws/index.js +25 -36
- package/dist/lib/patterns/aws/interfaces/cdn.js +1 -5
- package/dist/lib/patterns/aws/interfaces/compute.js +4 -11
- package/dist/lib/patterns/aws/interfaces/connector.js +1 -15
- package/dist/lib/patterns/aws/interfaces/database.d.ts +1 -1
- package/dist/lib/patterns/aws/interfaces/database.js +6 -15
- package/dist/lib/patterns/aws/interfaces/domain.d.ts +80 -2
- package/dist/lib/patterns/aws/interfaces/domain.js +1 -6
- package/dist/lib/patterns/aws/interfaces/index.js +8 -41
- package/dist/lib/patterns/aws/interfaces/messaging.js +4 -11
- package/dist/lib/patterns/aws/interfaces/organisation.d.ts +1 -1
- package/dist/lib/patterns/aws/interfaces/organisation.js +4 -11
- package/dist/lib/patterns/aws/interfaces/pattern.js +2 -7
- package/dist/lib/patterns/aws/interfaces/storage.js +1 -5
- package/dist/lib/patterns/aws/managedIdentityCenter.js +7 -12
- package/dist/lib/patterns/aws/messaging.d.ts +7 -7
- package/dist/lib/patterns/aws/messaging.js +22 -33
- package/dist/lib/patterns/aws/network.d.ts +2 -2
- package/dist/lib/patterns/aws/network.js +9 -14
- package/dist/lib/patterns/aws/organisation.d.ts +6 -2
- package/dist/lib/patterns/aws/organisation.js +34 -35
- package/dist/lib/patterns/aws/organisationFactory.d.ts +3 -3
- package/dist/lib/patterns/aws/organisationFactory.js +7 -12
- package/dist/lib/patterns/aws/pattern.js +6 -12
- package/dist/lib/patterns/aws/payload.js +73 -63
- package/dist/lib/patterns/aws/platform.d.ts +6 -3
- package/dist/lib/patterns/aws/platform.js +15 -15
- package/dist/lib/patterns/aws/storage.d.ts +6 -4
- package/dist/lib/patterns/aws/storage.js +35 -40
- package/dist/lib/patterns/aws/subdomainHostedZone.js +11 -16
- package/dist/lib/patterns/aws/targets/fjallTargets.d.ts +37 -0
- package/dist/lib/patterns/aws/targets/fjallTargets.js +66 -0
- package/dist/lib/patterns/aws/targets/index.d.ts +2 -0
- package/dist/lib/patterns/aws/targets/index.js +2 -0
- package/dist/lib/patterns/aws/targets/targetResolution.d.ts +76 -0
- package/dist/lib/patterns/aws/targets/targetResolution.js +119 -0
- package/dist/lib/patterns/index.d.ts +1 -0
- package/dist/lib/patterns/index.js +1 -0
- package/dist/lib/resources/aws/analytics/clickhouse.d.ts +15 -0
- package/dist/lib/resources/aws/analytics/clickhouse.js +292 -0
- package/dist/lib/resources/aws/analytics/clickhouseConstants.d.ts +73 -0
- package/dist/lib/resources/aws/analytics/clickhouseConstants.js +87 -0
- package/dist/lib/resources/aws/analytics/clickhouseSecurityGroup.d.ts +13 -0
- package/dist/lib/resources/aws/analytics/clickhouseSecurityGroup.js +28 -0
- package/dist/lib/resources/aws/analytics/clickhouseTypes.d.ts +47 -0
- package/dist/lib/resources/aws/analytics/clickhouseTypes.js +1 -0
- package/dist/lib/resources/aws/analytics/clickhouseUserData.d.ts +5 -0
- package/dist/lib/resources/aws/analytics/clickhouseUserData.js +248 -0
- package/dist/lib/resources/aws/analytics/index.d.ts +2 -0
- package/dist/lib/resources/aws/analytics/index.js +1 -0
- package/dist/lib/resources/aws/audit/auditRole.js +10 -15
- package/dist/lib/resources/aws/audit/index.d.ts +1 -1
- package/dist/lib/resources/aws/audit/index.js +1 -6
- package/dist/lib/resources/aws/backup/backupPlan.d.ts +1 -1
- package/dist/lib/resources/aws/backup/backupPlan.js +14 -16
- package/dist/lib/resources/aws/backup/backupVault.d.ts +1 -1
- package/dist/lib/resources/aws/backup/backupVault.js +13 -15
- package/dist/lib/resources/aws/backup/index.d.ts +2 -2
- package/dist/lib/resources/aws/backup/index.js +2 -19
- package/dist/lib/resources/aws/base/awsStack.js +17 -19
- package/dist/lib/resources/aws/base/index.d.ts +1 -1
- package/dist/lib/resources/aws/base/index.js +1 -18
- package/dist/lib/resources/aws/cdn/cloudFront.js +40 -42
- package/dist/lib/resources/aws/cdn/index.d.ts +1 -1
- package/dist/lib/resources/aws/cdn/index.js +1 -18
- package/dist/lib/resources/aws/compute/ec2.js +39 -39
- package/dist/lib/resources/aws/compute/ecs.d.ts +18 -396
- package/dist/lib/resources/aws/compute/ecs.js +105 -976
- package/dist/lib/resources/aws/compute/ecsCapacityProviderAspect.d.ts +22 -0
- package/dist/lib/resources/aws/compute/ecsCapacityProviderAspect.js +35 -0
- package/dist/lib/resources/aws/compute/ecsConstants.d.ts +20 -0
- package/dist/lib/resources/aws/compute/ecsConstants.js +49 -0
- package/dist/lib/resources/aws/compute/ecsContext.d.ts +12 -0
- package/dist/lib/resources/aws/compute/ecsContext.js +1 -0
- package/dist/lib/resources/aws/compute/ecsImages.d.ts +4 -0
- package/dist/lib/resources/aws/compute/ecsImages.js +35 -0
- package/dist/lib/resources/aws/compute/ecsNetworking.d.ts +28 -0
- package/dist/lib/resources/aws/compute/ecsNetworking.js +290 -0
- package/dist/lib/resources/aws/compute/ecsRoles.d.ts +15 -0
- package/dist/lib/resources/aws/compute/ecsRoles.js +110 -0
- package/dist/lib/resources/aws/compute/ecsServiceFactory.d.ts +33 -0
- package/dist/lib/resources/aws/compute/ecsServiceFactory.js +183 -0
- package/dist/lib/resources/aws/compute/ecsTaskDefinition.d.ts +30 -0
- package/dist/lib/resources/aws/compute/ecsTaskDefinition.js +168 -0
- package/dist/lib/resources/aws/compute/ecsTypes.d.ts +337 -0
- package/dist/lib/resources/aws/compute/ecsTypes.js +10 -0
- package/dist/lib/resources/aws/compute/ecsValidation.d.ts +18 -0
- package/dist/lib/resources/aws/compute/ecsValidation.js +72 -0
- package/dist/lib/resources/aws/compute/index.d.ts +3 -3
- package/dist/lib/resources/aws/compute/index.js +3 -20
- package/dist/lib/resources/aws/compute/lambda.d.ts +10 -2
- package/dist/lib/resources/aws/compute/lambda.js +82 -70
- package/dist/lib/resources/aws/database/dynamodb.js +27 -28
- package/dist/lib/resources/aws/database/index.d.ts +7 -7
- package/dist/lib/resources/aws/database/index.js +14 -33
- package/dist/lib/resources/aws/database/rdsAurora.d.ts +10 -2
- package/dist/lib/resources/aws/database/rdsAurora.js +76 -61
- package/dist/lib/resources/aws/database/rdsAuroraGlobal.d.ts +2 -2
- package/dist/lib/resources/aws/database/rdsAuroraGlobal.js +24 -21
- package/dist/lib/resources/aws/database/rdsDefaults.js +3 -7
- package/dist/lib/resources/aws/database/rdsHelpers.d.ts +2 -2
- package/dist/lib/resources/aws/database/rdsHelpers.js +21 -29
- package/dist/lib/resources/aws/database/rdsInstance.d.ts +11 -3
- package/dist/lib/resources/aws/database/rdsInstance.js +101 -83
- package/dist/lib/resources/aws/database/rdsProxyOutput.js +5 -9
- package/dist/lib/resources/aws/iam/delegationRole.d.ts +18 -0
- package/dist/lib/resources/aws/iam/delegationRole.js +60 -0
- package/dist/lib/resources/aws/iam/identityCenter/assignment.js +4 -9
- package/dist/lib/resources/aws/iam/identityCenter/group.js +5 -9
- package/dist/lib/resources/aws/iam/identityCenter/index.d.ts +3 -3
- package/dist/lib/resources/aws/iam/identityCenter/index.js +3 -20
- package/dist/lib/resources/aws/iam/identityCenter/permissionSet.d.ts +1 -1
- package/dist/lib/resources/aws/iam/identityCenter/permissionSet.js +5 -9
- package/dist/lib/resources/aws/iam/index.d.ts +5 -4
- package/dist/lib/resources/aws/iam/index.js +5 -21
- package/dist/lib/resources/aws/iam/instanceProfile.js +2 -7
- package/dist/lib/resources/aws/iam/managedPolicy.js +2 -7
- package/dist/lib/resources/aws/iam/policy.js +2 -7
- package/dist/lib/resources/aws/iam/role.js +2 -7
- package/dist/lib/resources/aws/index.d.ts +7 -7
- package/dist/lib/resources/aws/index.js +7 -24
- package/dist/lib/resources/aws/logging/cloudTrail.d.ts +1 -1
- package/dist/lib/resources/aws/logging/cloudTrail.js +18 -22
- package/dist/lib/resources/aws/logging/index.d.ts +2 -2
- package/dist/lib/resources/aws/logging/index.js +2 -19
- package/dist/lib/resources/aws/logging/logGroup.js +4 -10
- package/dist/lib/resources/aws/messaging/eventbridge.js +11 -14
- package/dist/lib/resources/aws/messaging/index.d.ts +4 -4
- package/dist/lib/resources/aws/messaging/index.js +4 -21
- package/dist/lib/resources/aws/messaging/sns.js +11 -14
- package/dist/lib/resources/aws/messaging/sqs.js +32 -34
- package/dist/lib/resources/aws/messaging/utils.d.ts +1 -1
- package/dist/lib/resources/aws/messaging/utils.js +1 -6
- package/dist/lib/resources/aws/monitoring/alarmDefaults.d.ts +36 -0
- package/dist/lib/resources/aws/monitoring/alarmDefaults.js +34 -0
- package/dist/lib/resources/aws/monitoring/ecsAlarms.d.ts +21 -0
- package/dist/lib/resources/aws/monitoring/ecsAlarms.js +88 -0
- package/dist/lib/resources/aws/monitoring/index.d.ts +4 -0
- package/dist/lib/resources/aws/monitoring/index.js +4 -5
- package/dist/lib/resources/aws/monitoring/lambdaAlarms.d.ts +18 -0
- package/dist/lib/resources/aws/monitoring/lambdaAlarms.js +44 -0
- package/dist/lib/resources/aws/monitoring/rdsAlarms.d.ts +20 -0
- package/dist/lib/resources/aws/monitoring/rdsAlarms.js +52 -0
- package/dist/lib/resources/aws/networking/crossAccountDelegationRecord.d.ts +17 -0
- package/dist/lib/resources/aws/networking/crossAccountDelegationRecord.js +26 -0
- package/dist/lib/resources/aws/networking/dnsRecord/aRecord.d.ts +12 -0
- package/dist/lib/resources/aws/networking/dnsRecord/aRecord.js +21 -0
- package/dist/lib/resources/aws/networking/dnsRecord/aaaaRecord.d.ts +12 -0
- package/dist/lib/resources/aws/networking/dnsRecord/aaaaRecord.js +22 -0
- package/dist/lib/resources/aws/networking/dnsRecord/aliasRecord.d.ts +12 -0
- package/dist/lib/resources/aws/networking/dnsRecord/aliasRecord.js +23 -0
- package/dist/lib/resources/aws/networking/dnsRecord/caaRecord.d.ts +17 -0
- package/dist/lib/resources/aws/networking/dnsRecord/caaRecord.js +21 -0
- package/dist/lib/resources/aws/networking/dnsRecord/cnameRecord.d.ts +12 -0
- package/dist/lib/resources/aws/networking/dnsRecord/cnameRecord.js +22 -0
- package/dist/lib/resources/aws/networking/dnsRecord/dnsRecordBase.d.ts +17 -0
- package/dist/lib/resources/aws/networking/dnsRecord/dnsRecordBase.js +17 -0
- package/dist/lib/resources/aws/networking/dnsRecord/index.d.ts +10 -0
- package/dist/lib/resources/aws/networking/dnsRecord/index.js +10 -0
- package/dist/lib/resources/aws/networking/dnsRecord/mxRecord.d.ts +16 -0
- package/dist/lib/resources/aws/networking/dnsRecord/mxRecord.js +21 -0
- package/dist/lib/resources/aws/networking/dnsRecord/nsRecord.d.ts +12 -0
- package/dist/lib/resources/aws/networking/dnsRecord/nsRecord.js +21 -0
- package/dist/lib/resources/aws/networking/dnsRecord/srvRecord.d.ts +18 -0
- package/dist/lib/resources/aws/networking/dnsRecord/srvRecord.js +21 -0
- package/dist/lib/resources/aws/networking/dnsRecord/txtRecord.d.ts +12 -0
- package/dist/lib/resources/aws/networking/dnsRecord/txtRecord.js +21 -0
- package/dist/lib/resources/aws/networking/domain.d.ts +1 -1
- package/dist/lib/resources/aws/networking/domain.js +32 -34
- package/dist/lib/resources/aws/networking/domainCertificate.d.ts +8 -3
- package/dist/lib/resources/aws/networking/domainCertificate.js +22 -16
- package/dist/lib/resources/aws/networking/hostedZone.d.ts +23 -19
- package/dist/lib/resources/aws/networking/hostedZone.js +70 -134
- package/dist/lib/resources/aws/networking/index.d.ts +8 -7
- package/dist/lib/resources/aws/networking/index.js +8 -24
- package/dist/lib/resources/aws/networking/ipam.js +2 -7
- package/dist/lib/resources/aws/networking/ipamPool.d.ts +1 -1
- package/dist/lib/resources/aws/networking/ipamPool.js +45 -55
- package/dist/lib/resources/aws/networking/securityGroup.js +2 -7
- package/dist/lib/resources/aws/networking/vpc.d.ts +1 -1
- package/dist/lib/resources/aws/networking/vpc.js +17 -21
- package/dist/lib/resources/aws/organisation/costAllocationTagActivator.d.ts +1 -1
- package/dist/lib/resources/aws/organisation/costAllocationTagActivator.js +11 -15
- package/dist/lib/resources/aws/organisation/index.d.ts +5 -5
- package/dist/lib/resources/aws/organisation/index.js +4 -12
- package/dist/lib/resources/aws/organisation/organisation.js +5 -7
- package/dist/lib/resources/aws/organisation/organisationAccount.js +7 -10
- package/dist/lib/resources/aws/organisation/organisationPolicy.js +5 -9
- package/dist/lib/resources/aws/organisation/organisationalUnit.js +1 -3
- package/dist/lib/resources/aws/secrets/alias.js +2 -7
- package/dist/lib/resources/aws/secrets/index.d.ts +4 -4
- package/dist/lib/resources/aws/secrets/index.js +4 -21
- package/dist/lib/resources/aws/secrets/kms.js +15 -18
- package/dist/lib/resources/aws/secrets/parameter.d.ts +3 -3
- package/dist/lib/resources/aws/secrets/parameter.js +19 -22
- package/dist/lib/resources/aws/secrets/secret.d.ts +2 -2
- package/dist/lib/resources/aws/secrets/secret.js +12 -14
- package/dist/lib/resources/aws/storage/ecr.d.ts +2 -2
- package/dist/lib/resources/aws/storage/ecr.js +7 -13
- package/dist/lib/resources/aws/storage/index.d.ts +2 -2
- package/dist/lib/resources/aws/storage/index.js +2 -19
- package/dist/lib/resources/aws/storage/s3.d.ts +1 -1
- package/dist/lib/resources/aws/storage/s3.js +24 -12
- package/dist/lib/resources/aws/utilities/awsCustomResource.js +3 -7
- package/dist/lib/resources/aws/utilities/codeBuild.js +7 -12
- package/dist/lib/resources/aws/utilities/customResource.js +14 -17
- package/dist/lib/resources/aws/utilities/customResourceProvider.js +2 -7
- package/dist/lib/resources/aws/utilities/index.d.ts +5 -5
- package/dist/lib/resources/aws/utilities/index.js +5 -22
- package/dist/lib/resources/aws/utilities/resourceShare.js +2 -7
- package/dist/lib/resources/index.d.ts +1 -1
- package/dist/lib/resources/index.js +1 -18
- package/dist/lib/types.js +1 -3
- package/dist/lib/utils/accountsUtils.d.ts +5 -0
- package/dist/lib/utils/accountsUtils.js +18 -0
- package/dist/lib/utils/addSuffixToEmail.js +1 -5
- package/dist/lib/utils/backupTierMapping.js +2 -6
- package/dist/lib/utils/capitaliseString.js +1 -10
- package/dist/lib/utils/connections.js +9 -13
- package/dist/lib/utils/connector.js +10 -23
- package/dist/lib/utils/constructMap.d.ts +33 -0
- package/dist/lib/utils/constructMap.js +154 -0
- package/dist/lib/utils/databaseTypes.js +4 -10
- package/dist/lib/utils/dnsRecords.d.ts +1 -1
- package/dist/lib/utils/dnsRecords.js +23 -27
- package/dist/lib/utils/domainTypes.d.ts +0 -1
- package/dist/lib/utils/domainTypes.js +2 -10
- package/dist/lib/utils/env.js +14 -26
- package/dist/lib/utils/getAccountId.js +3 -7
- package/dist/lib/utils/getAsync.js +7 -10
- package/dist/lib/utils/getConfig.d.ts +0 -2
- package/dist/lib/utils/getConfig.js +29 -47
- package/dist/lib/utils/getStackOutput.js +4 -8
- package/dist/lib/utils/index.d.ts +12 -12
- package/dist/lib/utils/index.js +12 -29
- package/dist/lib/utils/manifestWriter.d.ts +14 -3
- package/dist/lib/utils/manifestWriter.js +60 -43
- package/dist/lib/utils/orgConfigParser.d.ts +14 -0
- package/dist/lib/utils/orgConfigParser.js +49 -0
- package/dist/lib/utils/removalPolicy.js +5 -9
- package/dist/lib/utils/resourceNaming.js +11 -16
- package/dist/lib/utils/standardTagsAspect.js +9 -16
- package/dist/lib/utils/stripAndCamelCase.js +1 -5
- package/dist/lib/utils/validationLogger.js +12 -18
- package/dist/lib/utils/vpcUtils.js +5 -10
- package/package.json +25 -8
- package/dist/lib/config/aws/accountId.d.ts +0 -6
- package/dist/lib/config/aws/accountId.js +0 -32
- package/dist/lib/config/aws/backupGlobalSettings.d.ts +0 -29
- package/dist/lib/config/aws/backupGlobalSettings.js +0 -49
- package/dist/lib/config/aws/costAllocationTags.d.ts +0 -12
- package/dist/lib/config/aws/costAllocationTags.js +0 -47
- package/dist/lib/config/aws/ipamDelegateAdmin.d.ts +0 -8
- package/dist/lib/config/aws/ipamDelegateAdmin.js +0 -57
- package/dist/lib/config/aws/ipamPoolId.d.ts +0 -16
- package/dist/lib/config/aws/ipamPoolId.js +0 -42
- package/dist/lib/config/aws/organisation.d.ts +0 -30
- package/dist/lib/config/aws/organisation.js +0 -92
- package/dist/lib/config/aws/organisationId.d.ts +0 -7
- package/dist/lib/config/aws/organisationId.js +0 -45
- package/dist/lib/config/aws/organisationsAccess.d.ts +0 -10
- package/dist/lib/config/aws/organisationsAccess.js +0 -49
- package/dist/lib/config/aws/ramSharing.d.ts +0 -4
- package/dist/lib/config/aws/ramSharing.js +0 -34
- package/dist/lib/config/monitoring.d.ts +0 -18
- package/dist/lib/config/monitoring.js +0 -22
- package/dist/lib/patterns/aws/connections.d.ts +0 -46
- package/dist/lib/patterns/aws/connections.js +0 -159
- package/dist/lib/patterns/aws/hostedZone.d.ts +0 -28
- package/dist/lib/patterns/aws/hostedZone.js +0 -150
- package/dist/lib/patterns/aws/managedAccount.d.ts +0 -9
- package/dist/lib/patterns/aws/managedAccount.js +0 -55
- package/dist/lib/patterns/aws/managedOrganisation.d.ts +0 -36
- package/dist/lib/patterns/aws/managedOrganisation.js +0 -97
- package/dist/lib/patterns/aws/managedPlatform.d.ts +0 -12
- package/dist/lib/patterns/aws/managedPlatform.js +0 -29
- package/dist/lib/resources/aws/database/database.d.ts +0 -14
- package/dist/lib/resources/aws/database/database.js +0 -28
- package/dist/lib/resources/aws/database/databaseInstance.d.ts +0 -15
- package/dist/lib/resources/aws/database/databaseInstance.js +0 -30
- package/dist/lib/resources/aws/database/migrationLambda.d.ts +0 -80
- package/dist/lib/resources/aws/database/migrationLambda.js +0 -119
- package/dist/lib/resources/aws/iam/identityCenter/attachManagedPolicy.d.ts +0 -13
- package/dist/lib/resources/aws/iam/identityCenter/attachManagedPolicy.js +0 -51
- package/dist/lib/resources/aws/iam/securityGroup.d.ts +0 -5
- package/dist/lib/resources/aws/iam/securityGroup.js +0 -14
- package/dist/lib/resources/aws/monitoring/monitoringRole.d.ts +0 -29
- package/dist/lib/resources/aws/monitoring/monitoringRole.js +0 -120
- package/dist/lib/utils/capitalizeString.d.ts +0 -12
- package/dist/lib/utils/capitalizeString.js +0 -30
|
@@ -1,13 +1,10 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
const stripAndCamelCase_1 = require("../../utils/stripAndCamelCase");
|
|
9
|
-
const identityCenter_1 = require("../../resources/aws/iam/identityCenter");
|
|
10
|
-
const iam_1 = require("../../resources/aws/iam");
|
|
1
|
+
import * as customResources from "aws-cdk-lib/custom-resources";
|
|
2
|
+
import { PolicyDocument, PolicyStatement, ServicePrincipal } from "aws-cdk-lib/aws-iam";
|
|
3
|
+
import { CfnOutput, NestedStack } from "aws-cdk-lib";
|
|
4
|
+
import { AwsCustomResource } from "../../resources/aws/utilities/awsCustomResource.js";
|
|
5
|
+
import { stripAndCamelCase } from "../../utils/stripAndCamelCase.js";
|
|
6
|
+
import { Group, PermissionSet, Assignment } from "../../resources/aws/iam/identityCenter/index.js";
|
|
7
|
+
import { ManagedPolicy, Role } from "../../resources/aws/iam/index.js";
|
|
11
8
|
const defaultPermissionSets = {
|
|
12
9
|
AdministratorAccess: {
|
|
13
10
|
Policy: "arn:aws:iam::aws:policy/AdministratorAccess",
|
|
@@ -22,7 +19,10 @@ const defaultPermissionSets = {
|
|
|
22
19
|
Description: "Permission set for associated Billing policy"
|
|
23
20
|
}
|
|
24
21
|
};
|
|
25
|
-
class IdentityCenter extends
|
|
22
|
+
export class IdentityCenter extends NestedStack {
|
|
23
|
+
identityStoreId;
|
|
24
|
+
identityCenterArn;
|
|
25
|
+
listInstancesRole;
|
|
26
26
|
constructor(scope, id, props) {
|
|
27
27
|
super(scope, id, props);
|
|
28
28
|
this.createListInstancesRole();
|
|
@@ -30,16 +30,16 @@ class IdentityCenter extends aws_cdk_lib_1.NestedStack {
|
|
|
30
30
|
this.createPermissionSets(props);
|
|
31
31
|
}
|
|
32
32
|
createListInstancesRole() {
|
|
33
|
-
this.listInstancesRole = new
|
|
34
|
-
assumedBy: new
|
|
33
|
+
this.listInstancesRole = new Role(this, "IdentityCenterCustomResourceRole", {
|
|
34
|
+
assumedBy: new ServicePrincipal("lambda.amazonaws.com"),
|
|
35
35
|
description: "Role for Identity Centre ListInstances custom resource",
|
|
36
36
|
managedPolicies: [
|
|
37
|
-
|
|
37
|
+
ManagedPolicy.fromAwsManagedPolicyName("service-role/AWSLambdaBasicExecutionRole")
|
|
38
38
|
],
|
|
39
39
|
inlinePolicies: {
|
|
40
|
-
IdentityCenterListInstancesPolicy: new
|
|
40
|
+
IdentityCenterListInstancesPolicy: new PolicyDocument({
|
|
41
41
|
statements: [
|
|
42
|
-
new
|
|
42
|
+
new PolicyStatement({
|
|
43
43
|
actions: ["sso:ListInstances"],
|
|
44
44
|
resources: ["*"]
|
|
45
45
|
})
|
|
@@ -49,7 +49,7 @@ class IdentityCenter extends aws_cdk_lib_1.NestedStack {
|
|
|
49
49
|
});
|
|
50
50
|
}
|
|
51
51
|
listIdentityCenterInstance() {
|
|
52
|
-
const customResource = new
|
|
52
|
+
const customResource = new AwsCustomResource(this, "ListIdentityCenterInstanceResource", {
|
|
53
53
|
onCreate: {
|
|
54
54
|
service: "sso-admin",
|
|
55
55
|
action: "ListInstancesCommand",
|
|
@@ -63,12 +63,12 @@ class IdentityCenter extends aws_cdk_lib_1.NestedStack {
|
|
|
63
63
|
});
|
|
64
64
|
this.identityCenterArn = customResource.getResponseField("Instances.0.InstanceArn");
|
|
65
65
|
this.identityStoreId = customResource.getResponseField("Instances.0.IdentityStoreId");
|
|
66
|
-
new
|
|
66
|
+
new CfnOutput(this, "IdentityCenterArnOutput", {
|
|
67
67
|
key: "identityCenterArn",
|
|
68
68
|
value: this.identityCenterArn,
|
|
69
69
|
exportName: "identityCenterArn"
|
|
70
70
|
});
|
|
71
|
-
new
|
|
71
|
+
new CfnOutput(this, "IdentityStoreIdOutput", {
|
|
72
72
|
key: "identityStoreID",
|
|
73
73
|
value: this.identityStoreId,
|
|
74
74
|
exportName: "identityStoreId"
|
|
@@ -76,12 +76,12 @@ class IdentityCenter extends aws_cdk_lib_1.NestedStack {
|
|
|
76
76
|
}
|
|
77
77
|
createPermissionSets(props) {
|
|
78
78
|
for (const [name, config] of Object.entries(defaultPermissionSets)) {
|
|
79
|
-
const group = new
|
|
79
|
+
const group = new Group(this, `${name}Group`, {
|
|
80
80
|
displayName: name,
|
|
81
81
|
identityStoreId: this.identityStoreId,
|
|
82
82
|
description: `Group for associated ${name} permission set`
|
|
83
83
|
});
|
|
84
|
-
const permissionSet = new
|
|
84
|
+
const permissionSet = new PermissionSet(this, `PermissionSet${name}`, {
|
|
85
85
|
name: name,
|
|
86
86
|
instanceArn: this.identityCenterArn,
|
|
87
87
|
description: config.Description,
|
|
@@ -89,13 +89,13 @@ class IdentityCenter extends aws_cdk_lib_1.NestedStack {
|
|
|
89
89
|
tags: props.tags
|
|
90
90
|
});
|
|
91
91
|
permissionSet.node.addDependency(group);
|
|
92
|
-
new
|
|
92
|
+
new CfnOutput(this, `${name}GroupId`, {
|
|
93
93
|
key: `${name}GroupId`,
|
|
94
94
|
value: group.getGroupId(),
|
|
95
95
|
exportName: `${name}GroupId`
|
|
96
96
|
});
|
|
97
97
|
for (const [accountName, accountId] of Object.entries(props.accounts)) {
|
|
98
|
-
const assignment = new
|
|
98
|
+
const assignment = new Assignment(this, `${stripAndCamelCase(accountName)}${name}Assignment`, {
|
|
99
99
|
instanceArn: this.identityCenterArn,
|
|
100
100
|
permissionSetArn: permissionSet.getPermissionSetArn(),
|
|
101
101
|
principalType: "GROUP",
|
|
@@ -108,5 +108,3 @@ class IdentityCenter extends aws_cdk_lib_1.NestedStack {
|
|
|
108
108
|
}
|
|
109
109
|
}
|
|
110
110
|
}
|
|
111
|
-
exports.IdentityCenter = IdentityCenter;
|
|
112
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWRlbnRpdHlDZW50ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWIvY29uZmlnL2F3cy9pZGVudGl0eUNlbnRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxnRUFBZ0U7QUFFaEUsaURBSTZCO0FBQzdCLDZDQUE0RTtBQUM1RSx1RkFBb0Y7QUFFcEYscUVBQWtFO0FBQ2xFLDJFQUlnRDtBQUNoRCxpREFBOEQ7QUFZOUQsTUFBTSxxQkFBcUIsR0FBd0M7SUFDakUsbUJBQW1CLEVBQUU7UUFDbkIsTUFBTSxFQUFFLDZDQUE2QztRQUNyRCxXQUFXLEVBQUUsMERBQTBEO0tBQ3hFO0lBQ0QsY0FBYyxFQUFFO1FBQ2QsTUFBTSxFQUFFLHdDQUF3QztRQUNoRCxXQUFXLEVBQUUscURBQXFEO0tBQ25FO0lBQ0QsT0FBTyxFQUFFO1FBQ1AsTUFBTSxFQUFFLGtEQUFrRDtRQUMxRCxXQUFXLEVBQUUsOENBQThDO0tBQzVEO0NBQ0YsQ0FBQztBQUVGLE1BQWEsY0FBZSxTQUFRLHlCQUFXO0lBSzdDLFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBMEI7UUFDbEUsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFFeEIsSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUM7UUFDL0IsSUFBSSxDQUFDLDBCQUEwQixFQUFFLENBQUM7UUFDbEMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFFTyx1QkFBdUI7UUFDN0IsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksVUFBSSxDQUMvQixJQUFJLEVBQ0osa0NBQWtDLEVBQ2xDO1lBQ0UsU0FBUyxFQUFFLElBQUksMEJBQWdCLENBQUMsc0JBQXNCLENBQUM7WUFDdkQsV0FBVyxFQUFFLHdEQUF3RDtZQUNyRSxlQUFlLEVBQUU7Z0JBQ2YsbUJBQWEsQ0FBQyx3QkFBd0IsQ0FDcEMsMENBQTBD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QUFDO2dCQUN0RSxNQUFNLFVBQVUsR0FBRyxJQUFJLDJCQUFVLENBQy9CLElBQUksRUFDSixHQUFHLElBQUEscUNBQWlCLEVBQUMsV0FBVyxDQUFDLEdBQUcsSUFBSSxZQUFZLEVBQ3BEO29CQUNFLFdBQVcsRUFBRSxJQUFJLENBQUMsaUJBQWlCO29CQUNuQyxnQkFBZ0IsRUFBRSxhQUFhLENBQUMsbUJBQW1CLEVBQUU7b0JBQ3JELGFBQWEsRUFBRSxPQUFPO29CQUN0QixXQUFXLEVBQUUsS0FBSyxDQUFDLFVBQVUsRUFBRTtvQkFDL0IsVUFBVSxFQUFFLGFBQWE7b0JBQ3pCLFFBQVEsRUFBRSxTQUFTO2lCQUNwQixDQUNGLENBQUM7Z0JBQ0YsVUFBVSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLENBQUM7WUFDL0MsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0NBQ0Y7QUFySEQsd0NBcUhDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgY3VzdG9tUmVzb3VyY2VzIGZyb20gXCJhd3MtY2RrLWxpYi9jdXN0b20tcmVzb3VyY2VzXCI7XG5pbXBvcnQgeyB0eXBlIENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5pbXBvcnQge1xuICBQb2xpY3lEb2N1bWVudCxcbiAgUG9saWN5U3RhdGVtZW50LFxuICBTZXJ2aWNlUHJpbmNpcGFsXG59IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtaWFtXCI7XG5pbXBvcnQgeyBDZm5PdXRwdXQsIE5lc3RlZFN0YWNrLCB0eXBlIE5lc3RlZFN0YWNrUHJvcHMgfSBmcm9tIFwiYXdzLWNkay1saWJcIjtcbmltcG9ydCB7IEF3c0N1c3RvbVJlc291cmNlIH0gZnJvbSBcIi4uLy4uL3Jlc291cmNlcy9hd3MvdXRpbGl0aWVzL2F3c0N1c3RvbVJlc291cmNlXCI7XG5pbXBvcnQgeyB0eXBlIEtleVZhbHVlIH0gZnJvbSBcIi4uLy4uL3R5cGVzXCI7XG5pbXBvcnQgeyBzdHJpcEFuZENhbWVsQ2FzZSB9IGZyb20gXCIuLi8uLi91dGlscy9zdHJpcEFuZENhbWVsQ2FzZVwiO1xuaW1wb3J0IHtcbiAgR3JvdXAsXG4gIFBlcm1pc3Npb25TZXQsXG4gIEFzc2lnbm1lbnRcbn0gZnJvbSBcIi4uLy4uL3Jlc291cmNlcy9hd3MvaWFtL2lkZW50aXR5Q2VudGVyXCI7XG5pbXBvcnQgeyBNYW5hZ2VkUG9saWN5LCBSb2xlIH0gZnJvbSBcIi4uLy4uL3Jlc291cmNlcy9hd3MvaWFtXCI7XG5cbmludGVyZmFjZSBJZGVudGl0eUNlbnRlclByb3BzIGV4dGVuZHMgTmVzdGVkU3RhY2tQcm9wcyB7XG4gIGFjY291bnRzOiBLZXlWYWx1ZTtcbiAgdGFncz86IEtleVZhbHVlW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGVybWlzc2lvblNldENvbmZpZyB7XG4gIFBvbGljeTogc3RyaW5nO1xuICBEZXNjcmlwdGlvbj86IHN0cmluZztcbn1cblxuY29uc3QgZGVmYXVsdFBlcm1pc3Npb25TZXRzOiBSZWNvcmQ8c3RyaW5nLCBQZXJtaXNzaW9uU2V0Q29uZmlnPiA9IHtcbiAgQWRtaW5pc3RyYXRvckFjY2Vzczoge1xuICAgIFBvbGljeTogXCJhcm46YXdzOmlhbTo6YXdzOnBvbGljeS9BZG1pbmlzdHJhdG9yQWNjZXNzXCIsXG4gICAgRGVzY3JpcHRpb246IFwiUGVybWlzc2lvbiBzZXQgZm9yIGFzc29jaWF0ZWQgQWRtaW5pc3RyYXRvckFjY2VzcyBwb2xpY3lcIlxuICB9LFxuICBSZWFkT25seUFjY2Vzczoge1xuICAgIFBvbGljeTogXCJhcm46YXdzOmlhbTo6YXdzOnBvbGljeS9SZWFkT25seUFjY2Vzc1wiLFxuICAgIERlc2NyaXB0aW9uOiBcIlBlcm1pc3Npb24gc2V0IGZvciBhc3NvY2lhdGVkIFJlYWRPbmx5QWNjZXNzIHBvbGljeVwiXG4gIH0sXG4gIEJpbGxpbmc6IHtcbiAgICBQb2xpY3k6IFwiYXJuOmF3czppYW06OmF3czpwb2xpY3kvQVdTQmlsbGluZ1JlYWRPbmx5QWNjZXNzXCIsXG4gICAgRGVzY3JpcHRpb246IFwiUGVybWlzc2lvbiBzZXQgZm9yIGFzc29jaWF0ZWQgQmlsbGluZyBwb2xpY3lcIlxuICB9XG59O1xuXG5leHBvcnQgY2xhc3MgSWRlbnRpdHlDZW50ZXIgZXh0ZW5kcyBOZXN0ZWRTdGFjayB7XG4gIHB1YmxpYyBpZGVudGl0eVN0b3JlSWQhOiBzdHJpbmc7XG4gIHB1YmxpYyBpZGVudGl0eUNlbnRlckFybiE6IHN0cmluZztcbiAgcHJpdmF0ZSBsaXN0SW5zdGFuY2VzUm9sZSE6IFJvbGU7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IElkZW50aXR5Q2VudGVyUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIHByb3BzKTtcblxuICAgIHRoaXMuY3JlYXRlTGlzdEluc3RhbmNlc1JvbGUoKTtcbiAgICB0aGlzLmxpc3RJZGVudGl0eUNlbnRlckluc3RhbmNlKCk7XG4gICAgdGhpcy5jcmVhdGVQZXJtaXNzaW9uU2V0cyhwcm9wcyk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUxpc3RJbnN0YW5jZXNSb2xlKCkge1xuICAgIHRoaXMubGlzdEluc3RhbmNlc1JvbGUgPSBuZXcgUm9sZShcbiAgICAgIHRoaXMsXG4gICAgICBcIklkZW50aXR5Q2VudGVyQ3VzdG9tUmVzb3VyY2VSb2xlXCIsXG4gICAgICB7XG4gICAgICAgIGFzc3VtZWRCeTogbmV3IFNlcnZpY2VQcmluY2lwYWwoXCJsYW1iZGEuYW1hem9uYXdzLmNvbVwiKSxcbiAgICAgICAgZGVzY3JpcHRpb246IFwiUm9sZSBmb3IgSWRlbnRpdHkgQ2VudHJlIExpc3RJbnN0YW5jZXMgY3VzdG9tIHJlc291cmNlXCIsXG4gICAgICAgIG1hbmFnZWRQb2xpY2llczogW1xuICAgICAgICAgIE1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKFxuICAgICAgICAgICAgXCJzZXJ2aWNlLXJvbGUvQVdTTGFtYmRhQmFzaWNFeGVjdXRpb25Sb2xlXCJcbiAgICAgICAgICApXG4gICAgICAgIF0sXG4gICAgICAgIGlubGluZVBvbGljaWVzOiB7XG4gICAgICAgICAgSWRlbnRpdHlDZW50ZXJMaXN0SW5zdGFuY2VzUG9saWN5OiBuZXcgUG9saWN5RG9jdW1lbnQoe1xuICAgICAgICAgICAgc3RhdGVtZW50czogW1xuICAgICAgICAgICAgICBuZXcgUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgICAgICAgICBhY3Rpb25zOiBbXCJzc286TGlzdEluc3RhbmNlc1wiXSxcbiAgICAgICAgICAgICAgICByZXNvdXJjZXM6IFtcIipcIl1cbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgbGlzdElkZW50aXR5Q2VudGVySW5zdGFuY2UoKSB7XG4gICAgY29uc3QgY3VzdG9tUmVzb3VyY2UgPSBuZXcgQXdzQ3VzdG9tUmVzb3VyY2UoXG4gICAgICB0aGlzLFxuICAgICAgXCJMaXN0SWRlbnRpdHlDZW50ZXJJbnN0YW5jZVJlc291cmNlXCIsXG4gICAgICB7XG4gICAgICAgIG9uQ3JlYXRlOiB7XG4gICAgICAgICAgc2VydmljZTogXCJzc28tYWRtaW5cIixcbiAgICAgICAgICBhY3Rpb246IFwiTGlzdEluc3RhbmNlc0NvbW1hbmRcIixcbiAgICAgICAgICBwYXJhbWV0ZXJzOiB7XG4gICAgICAgICAgICBNYXhSZXN1bHRzOiAxXG4gICAgICAgICAgfSxcbiAgICAgICAgICBwaHlzaWNhbFJlc291cmNlSWQ6IGN1c3RvbVJlc291cmNlcy5QaHlzaWNhbFJlc291cmNlSWQub2YoXG4gICAgICAgICAgICBcImxpc3RJZGVudGl0eUNlbnRlckluc3RhbmNlXCJcbiAgICAgICAgICApXG4gICAgICAgIH0sXG4gICAgICAgIHJvbGU6IHRoaXMubGlzdEluc3RhbmNlc1JvbGUsXG4gICAgICAgIHJlc291cmNlVHlwZTogXCJDdXN0b206OklhbUlkZW50aXR5Q2VudGVyXCJcbiAgICAgIH1cbiAgICApO1xuXG4gICAgdGhpcy5pZGVudGl0eUNlbnRlckFybiA9IGN1c3RvbVJlc291cmNlLmdldFJlc3BvbnNlRmllbGQoXG4gICAgICBcIkluc3RhbmNlcy4wLkluc3RhbmNlQXJuXCJcbiAgICApO1xuICAgIHRoaXMuaWRlbnRpdHlTdG9yZUlkID0gY3VzdG9tUmVzb3VyY2UuZ2V0UmVzcG9uc2VGaWVsZChcbiAgICAgIFwiSW5zdGFuY2VzLjAuSWRlbnRpdHlTdG9yZUlkXCJcbiAgICApO1xuICAgIG5ldyBDZm5PdXRwdXQodGhpcywgXCJJZGVudGl0eUNlbnRlckFybk91dHB1dFwiLCB7XG4gICAgICBrZXk6IFwiaWRlbnRpdHlDZW50ZXJBcm5cIixcbiAgICAgIHZhbHVlOiB0aGlzLmlkZW50aXR5Q2VudGVyQXJuLFxuICAgICAgZXhwb3J0TmFtZTogXCJpZGVudGl0eUNlbnRlckFyblwiXG4gICAgfSk7XG4gICAgbmV3IENmbk91dHB1dCh0aGlzLCBcIklkZW50aXR5U3RvcmVJZE91dHB1dFwiLCB7XG4gICAgICBrZXk6IFwiaWRlbnRpdHlTdG9yZUlEXCIsXG4gICAgICB2YWx1ZTogdGhpcy5pZGVudGl0eVN0b3JlSWQsXG4gICAgICBleHBvcnROYW1lOiBcImlkZW50aXR5U3RvcmVJZFwiXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZVBlcm1pc3Npb25TZXRzKHByb3BzOiBJZGVudGl0eUNlbnRlclByb3BzKSB7XG4gICAgZm9yIChjb25zdCBbbmFtZSwgY29uZmlnXSBvZiBPYmplY3QuZW50cmllcyhkZWZhdWx0UGVybWlzc2lvblNldHMpKSB7XG4gICAgICBjb25zdCBncm91cCA9IG5ldyBHcm91cCh0aGlzLCBgJHtuYW1lfUdyb3VwYCwge1xuICAgICAgICBkaXNwbGF5TmFtZTogbmFtZSxcbiAgICAgICAgaWRlbnRpdHlTdG9yZUlkOiB0aGlzLmlkZW50aXR5U3RvcmVJZCxcbiAgICAgICAgZGVzY3JpcHRpb246IGBHcm91cCBmb3IgYXNzb2NpYXRlZCAke25hbWV9IHBlcm1pc3Npb24gc2V0YFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHBlcm1pc3Npb25TZXQgPSBuZXcgUGVybWlzc2lvblNldCh0aGlzLCBgUGVybWlzc2lvblNldCR7bmFtZX1gLCB7XG4gICAgICAgIG5hbWU6IG5hbWUsXG4gICAgICAgIGluc3RhbmNlQXJuOiB0aGlzLmlkZW50aXR5Q2VudGVyQXJuLFxuICAgICAgICBkZXNjcmlwdGlvbjogY29uZmlnLkRlc2NyaXB0aW9uLFxuICAgICAgICBtYW5hZ2VkUG9saWNpZXM6IFtjb25maWcuUG9saWN5XSxcbiAgICAgICAgdGFnczogcHJvcHMudGFnc1xuICAgICAgfSk7XG4gICAgICBwZXJtaXNzaW9uU2V0Lm5vZGUuYWRkRGVwZW5kZW5jeShncm91cCk7XG5cbiAgICAgIG5ldyBDZm5PdXRwdXQodGhpcywgYCR7bmFtZX1Hcm91cElkYCwge1xuICAgICAgICBrZXk6IGAke25hbWV9R3JvdXBJZGAsXG4gICAgICAgIHZhbHVlOiBncm91cC5nZXRHcm91cElkKCksXG4gICAgICAgIGV4cG9ydE5hbWU6IGAke25hbWV9R3JvdXBJZGBcbiAgICAgIH0pO1xuXG4gICAgICBmb3IgKGNvbnN0IFthY2NvdW50TmFtZSwgYWNjb3VudElkXSBvZiBPYmplY3QuZW50cmllcyhwcm9wcy5hY2NvdW50cykpIHtcbiAgICAgICAgY29uc3QgYXNzaWdubWVudCA9IG5ldyBBc3NpZ25tZW50KFxuICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgYCR7c3RyaXBBbmRDYW1lbENhc2UoYWNjb3VudE5hbWUpfSR7bmFtZX1Bc3NpZ25tZW50YCxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpbnN0YW5jZUFybjogdGhpcy5pZGVudGl0eUNlbnRlckFybixcbiAgICAgICAgICAgIHBlcm1pc3Npb25TZXRBcm46IHBlcm1pc3Npb25TZXQuZ2V0UGVybWlzc2lvblNldEFybigpLFxuICAgICAgICAgICAgcHJpbmNpcGFsVHlwZTogXCJHUk9VUFwiLFxuICAgICAgICAgICAgcHJpbmNpcGFsSWQ6IGdyb3VwLmdldEdyb3VwSWQoKSxcbiAgICAgICAgICAgIHRhcmdldFR5cGU6IFwiQVdTX0FDQ09VTlRcIixcbiAgICAgICAgICAgIHRhcmdldElkOiBhY2NvdW50SWRcbiAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgICAgIGFzc2lnbm1lbnQubm9kZS5hZGREZXBlbmRlbmN5KHBlcm1pc3Npb25TZXQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIl19
|
|
@@ -1,21 +1,18 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
const aws_cdk_lib_1 = require("aws-cdk-lib");
|
|
5
|
-
const customResources = require("aws-cdk-lib/custom-resources");
|
|
6
|
-
const awsCustomResource_1 = require("../../resources/aws/utilities/awsCustomResource");
|
|
1
|
+
import { Fn, NestedStack } from "aws-cdk-lib";
|
|
2
|
+
import * as customResources from "aws-cdk-lib/custom-resources";
|
|
3
|
+
import { AwsCustomResource } from "../../resources/aws/utilities/awsCustomResource.js";
|
|
7
4
|
const IDENTITY_STORE_SERVICE = "identityStore";
|
|
8
5
|
const IDENTITY_CENTER_USERS_RESOURCE_TYPE = "Custom::IdentityCenterUsers";
|
|
9
6
|
// TODO: This requires a deletion and recreation to update
|
|
10
|
-
class IdentityCenterGroupMembership extends
|
|
7
|
+
export class IdentityCenterGroupMembership extends NestedStack {
|
|
11
8
|
constructor(scope, id, props) {
|
|
12
9
|
super(scope, id);
|
|
13
|
-
const identityStoreId =
|
|
14
|
-
const groupId =
|
|
10
|
+
const identityStoreId = Fn.importValue("identityStoreId");
|
|
11
|
+
const groupId = Fn.importValue(`${props.groupName}GroupId`);
|
|
15
12
|
for (const member of props.groupMembers) {
|
|
16
|
-
const
|
|
17
|
-
.split("@")[0]
|
|
13
|
+
const memberSuffix = (member.split("@")[0] ?? member)
|
|
18
14
|
.split(/[^a-zA-Z0-9]/)
|
|
15
|
+
.filter((part) => part.length > 0)
|
|
19
16
|
.map((part) => part.charAt(0).toUpperCase() + part.slice(1))
|
|
20
17
|
.join("") +
|
|
21
18
|
props.groupName.charAt(0).toUpperCase() +
|
|
@@ -32,14 +29,14 @@ class IdentityCenterGroupMembership extends aws_cdk_lib_1.NestedStack {
|
|
|
32
29
|
}
|
|
33
30
|
]
|
|
34
31
|
},
|
|
35
|
-
physicalResourceId: customResources.PhysicalResourceId.of(`listUsers${
|
|
32
|
+
physicalResourceId: customResources.PhysicalResourceId.of(`listUsers${memberSuffix}`)
|
|
36
33
|
};
|
|
37
|
-
const listUser = new
|
|
34
|
+
const listUser = new AwsCustomResource(this, `ListUsersResource${memberSuffix}`, {
|
|
38
35
|
onCreate: listUsersCall,
|
|
39
36
|
onUpdate: listUsersCall
|
|
40
37
|
});
|
|
41
38
|
const userId = listUser.getResponseField("Users.0.UserId");
|
|
42
|
-
const groupMembershipId = new
|
|
39
|
+
const groupMembershipId = new AwsCustomResource(this, `CreateGroupMembershipResource${memberSuffix}`, {
|
|
43
40
|
onCreate: {
|
|
44
41
|
service: IDENTITY_STORE_SERVICE,
|
|
45
42
|
action: "createGroupMembership",
|
|
@@ -50,11 +47,11 @@ class IdentityCenterGroupMembership extends aws_cdk_lib_1.NestedStack {
|
|
|
50
47
|
UserId: userId
|
|
51
48
|
}
|
|
52
49
|
},
|
|
53
|
-
physicalResourceId: customResources.PhysicalResourceId.of(`createGroupMembership${
|
|
50
|
+
physicalResourceId: customResources.PhysicalResourceId.of(`createGroupMembership${memberSuffix}`)
|
|
54
51
|
},
|
|
55
52
|
resourceType: IDENTITY_CENTER_USERS_RESOURCE_TYPE
|
|
56
53
|
});
|
|
57
|
-
const refreshMembership = new
|
|
54
|
+
const refreshMembership = new AwsCustomResource(this, `RefreshMembershipResource${memberSuffix}`, {
|
|
58
55
|
onUpdate: {
|
|
59
56
|
service: IDENTITY_STORE_SERVICE,
|
|
60
57
|
action: "deleteGroupMembership",
|
|
@@ -62,11 +59,11 @@ class IdentityCenterGroupMembership extends aws_cdk_lib_1.NestedStack {
|
|
|
62
59
|
IdentityStoreId: identityStoreId,
|
|
63
60
|
MembershipId: groupMembershipId.getResponseField("MembershipId")
|
|
64
61
|
},
|
|
65
|
-
physicalResourceId: customResources.PhysicalResourceId.of(`refreshGroupMembership${
|
|
62
|
+
physicalResourceId: customResources.PhysicalResourceId.of(`refreshGroupMembership${memberSuffix}`)
|
|
66
63
|
},
|
|
67
64
|
resourceType: IDENTITY_CENTER_USERS_RESOURCE_TYPE
|
|
68
65
|
});
|
|
69
|
-
const recreateMembership = new
|
|
66
|
+
const recreateMembership = new AwsCustomResource(this, `RecreateGroupMembershipResource${memberSuffix}`, {
|
|
70
67
|
onUpdate: {
|
|
71
68
|
service: IDENTITY_STORE_SERVICE,
|
|
72
69
|
action: "createGroupMembership",
|
|
@@ -77,12 +74,12 @@ class IdentityCenterGroupMembership extends aws_cdk_lib_1.NestedStack {
|
|
|
77
74
|
UserId: userId
|
|
78
75
|
}
|
|
79
76
|
},
|
|
80
|
-
physicalResourceId: customResources.PhysicalResourceId.of(`recreateGroupMembership${
|
|
77
|
+
physicalResourceId: customResources.PhysicalResourceId.of(`recreateGroupMembership${memberSuffix}`)
|
|
81
78
|
},
|
|
82
79
|
resourceType: IDENTITY_CENTER_USERS_RESOURCE_TYPE
|
|
83
80
|
});
|
|
84
81
|
refreshMembership.node.addDependency(recreateMembership);
|
|
85
|
-
new
|
|
82
|
+
const deleteMembership = new AwsCustomResource(this, `DeleteGroupMembershipResource${memberSuffix}`, {
|
|
86
83
|
onDelete: {
|
|
87
84
|
service: IDENTITY_STORE_SERVICE,
|
|
88
85
|
action: "deleteGroupMembership",
|
|
@@ -93,8 +90,7 @@ class IdentityCenterGroupMembership extends aws_cdk_lib_1.NestedStack {
|
|
|
93
90
|
},
|
|
94
91
|
resourceType: IDENTITY_CENTER_USERS_RESOURCE_TYPE
|
|
95
92
|
});
|
|
93
|
+
deleteMembership.node.addDependency(groupMembershipId);
|
|
96
94
|
}
|
|
97
95
|
}
|
|
98
96
|
}
|
|
99
|
-
exports.IdentityCenterGroupMembership = IdentityCenterGroupMembership;
|
|
100
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWRlbnRpdHlDZW50ZXJHcm91cE1lbWJlcnNoaXAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWIvY29uZmlnL2F3cy9pZGVudGl0eUNlbnRlckdyb3VwTWVtYmVyc2hpcC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSw2Q0FBK0Q7QUFDL0QsZ0VBQWdFO0FBQ2hFLHVGQUFvRjtBQVFwRixNQUFNLHNCQUFzQixHQUFHLGVBQWUsQ0FBQztBQUMvQyxNQUFNLG1DQUFtQyxHQUFHLDZCQUE2QixDQUFDO0FBRTFFLDBEQUEwRDtBQUMxRCxNQUFhLDZCQUE4QixTQUFRLHlCQUFXO0lBQzVELFlBQ0UsS0FBZ0IsRUFDaEIsRUFBVSxFQUNWLEtBQXlDO1FBRXpDLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFakIsTUFBTSxlQUFlLEdBQUcsZ0JBQUUsQ0FBQyxXQUFXLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUMxRCxNQUFNLE9BQU8sR0FBRyxnQkFBRSxDQUFDLFdBQVcsQ0FBQyxHQUFHLEtBQUssQ0FBQyxTQUFTLFNBQVMsQ0FBQyxDQUFDO1FBRTVELEtBQUssTUFBTSxNQUFNLElBQUksS0FBSyxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3hDLE1BQU0sV0FBVyxHQUNmLE1BQU07aUJBQ0gsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztpQkFDYixLQUFLLENBQUMsY0FBYyxDQUFDO2lCQUNyQixHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztpQkFDM0QsSUFBSSxDQUFDLEVBQUUsQ0FBQztnQkFDWCxLQUFLLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUU7Z0JBQ3ZD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O3dCQUNoQyxZQUFZLEVBQUUsaUJBQWlCLENBQUMsZ0JBQWdCLENBQUMsY0FBYyxDQUFDO3FCQUNqRTtpQkFDRjtnQkFDRCxZQUFZLEVBQUUsbUNBQW1DO2FBQ2xELENBQ0YsQ0FBQztRQUNKLENBQUM7SUFDSCxDQUFDO0NBQ0Y7QUFuSUQsc0VBbUlDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRm4sIE5lc3RlZFN0YWNrLCB0eXBlIFN0YWNrUHJvcHMgfSBmcm9tIFwiYXdzLWNkay1saWJcIjtcbmltcG9ydCAqIGFzIGN1c3RvbVJlc291cmNlcyBmcm9tIFwiYXdzLWNkay1saWIvY3VzdG9tLXJlc291cmNlc1wiO1xuaW1wb3J0IHsgQXdzQ3VzdG9tUmVzb3VyY2UgfSBmcm9tIFwiLi4vLi4vcmVzb3VyY2VzL2F3cy91dGlsaXRpZXMvYXdzQ3VzdG9tUmVzb3VyY2VcIjtcbmltcG9ydCB7IHR5cGUgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcblxuaW50ZXJmYWNlIElkZW50aXR5Q2VudGVyR3JvdXBNZW1iZXJzaGlwUHJvcHMgZXh0ZW5kcyBTdGFja1Byb3BzIHtcbiAgZ3JvdXBOYW1lOiBzdHJpbmc7XG4gIGdyb3VwTWVtYmVyczogc3RyaW5nW107XG59XG5cbmNvbnN0IElERU5USVRZX1NUT1JFX1NFUlZJQ0UgPSBcImlkZW50aXR5U3RvcmVcIjtcbmNvbnN0IElERU5USVRZX0NFTlRFUl9VU0VSU19SRVNPVVJDRV9UWVBFID0gXCJDdXN0b206OklkZW50aXR5Q2VudGVyVXNlcnNcIjtcblxuLy8gVE9ETzogVGhpcyByZXF1aXJlcyBhIGRlbGV0aW9uIGFuZCByZWNyZWF0aW9uIHRvIHVwZGF0ZVxuZXhwb3J0IGNsYXNzIElkZW50aXR5Q2VudGVyR3JvdXBNZW1iZXJzaGlwIGV4dGVuZHMgTmVzdGVkU3RhY2sge1xuICBjb25zdHJ1Y3RvcihcbiAgICBzY29wZTogQ29uc3RydWN0LFxuICAgIGlkOiBzdHJpbmcsXG4gICAgcHJvcHM6IElkZW50aXR5Q2VudGVyR3JvdXBNZW1iZXJzaGlwUHJvcHNcbiAgKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIGNvbnN0IGlkZW50aXR5U3RvcmVJZCA9IEZuLmltcG9ydFZhbHVlKFwiaWRlbnRpdHlTdG9yZUlkXCIpO1xuICAgIGNvbnN0IGdyb3VwSWQgPSBGbi5pbXBvcnRWYWx1ZShgJHtwcm9wcy5ncm91cE5hbWV9R3JvdXBJZGApO1xuXG4gICAgZm9yIChjb25zdCBtZW1iZXIgb2YgcHJvcHMuZ3JvdXBNZW1iZXJzKSB7XG4gICAgICBjb25zdCBtZW1iZXJHcm91cCA9XG4gICAgICAgIG1lbWJlclxuICAgICAgICAgIC5zcGxpdChcIkBcIilbMF1cbiAgICAgICAgICAuc3BsaXQoL1teYS16QS1aMC05XS8pXG4gICAgICAgICAgLm1hcCgocGFydCkgPT4gcGFydC5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHBhcnQuc2xpY2UoMSkpXG4gICAgICAgICAgLmpvaW4oXCJcIikgK1xuICAgICAgICBwcm9wcy5ncm91cE5hbWUuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgK1xuICAgICAgICBwcm9wcy5ncm91cE5hbWUuc2xpY2UoMSk7XG5cbiAgICAgIGNvbnN0IGxpc3RVc2Vyc0NhbGwgPSB7XG4gICAgICAgIHNlcnZpY2U6IElERU5USVRZX1NUT1JFX1NFUlZJQ0UsXG4gICAgICAgIGFjdGlvbjogXCJsaXN0VXNlcnNcIixcbiAgICAgICAgcGFyYW1ldGVyczoge1xuICAgICAgICAgIElkZW50aXR5U3RvcmVJZDogaWRlbnRpdHlTdG9yZUlkLFxuICAgICAgICAgIEZpbHRlcnM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgQXR0cmlidXRlUGF0aDogXCJVc2VyTmFtZVwiLFxuICAgICAgICAgICAgICBBdHRyaWJ1dGVWYWx1ZTogbWVtYmVyXG4gICAgICAgICAgICB9XG4gICAgICAgICAgXVxuICAgICAgICB9LFxuICAgICAgICBwaHlzaWNhbFJlc291cmNlSWQ6IGN1c3RvbVJlc291cmNlcy5QaHlzaWNhbFJlc291cmNlSWQub2YoXG4gICAgICAgICAgYGxpc3RVc2VycyR7bWVtYmVyR3JvdXB9YFxuICAgICAgICApXG4gICAgICB9O1xuXG4gICAgICBjb25zdCBsaXN0VXNlciA9IG5ldyBBd3NDdXN0b21SZXNvdXJjZShcbiAgICAgICAgdGhpcyxcbiAgICAgICAgYExpc3RVc2Vyc1Jlc291cmNlJHttZW1iZXJHcm91cH1gLFxuICAgICAgICB7XG4gICAgICAgICAgb25DcmVhdGU6IGxpc3RVc2Vyc0NhbGwsXG4gICAgICAgICAgb25VcGRhdGU6IGxpc3RVc2Vyc0NhbGxcbiAgICAgICAgfVxuICAgICAgKTtcblxuICAgICAgY29uc3QgdXNlcklkID0gbGlzdFVzZXIuZ2V0UmVzcG9uc2VGaWVsZChcIlVzZXJzLjAuVXNlcklkXCIpO1xuXG4gICAgICBjb25zdCBncm91cE1lbWJlcnNoaXBJZCA9IG5ldyBBd3NDdXN0b21SZXNvdXJjZShcbiAgICAgICAgdGhpcyxcbiAgICAgICAgYENyZWF0ZUdyb3VwTWVtYmVyc2hpcFJlc291cmNlJHttZW1iZXJHcm91cH1gLFxuICAgICAgICB7XG4gICAgICAgICAgb25DcmVhdGU6IHtcbiAgICAgICAgICAgIHNlcnZpY2U6IElERU5USVRZX1NUT1JFX1NFUlZJQ0UsXG4gICAgICAgICAgICBhY3Rpb246IFwiY3JlYXRlR3JvdXBNZW1iZXJzaGlwXCIsXG4gICAgICAgICAgICBwYXJhbWV0ZXJzOiB7XG4gICAgICAgICAgICAgIEdyb3VwSWQ6IGdyb3VwSWQsXG4gICAgICAgICAgICAgIElkZW50aXR5U3RvcmVJZDogaWRlbnRpdHlTdG9yZUlkLFxuICAgICAgICAgICAgICBNZW1iZXJJZDoge1xuICAgICAgICAgICAgICAgIFVzZXJJZDogdXNlcklkXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBwaHlzaWNhbFJlc291cmNlSWQ6IGN1c3RvbVJlc291cmNlcy5QaHlzaWNhbFJlc291cmNlSWQub2YoXG4gICAgICAgICAgICAgIGBjcmVhdGVHcm91cE1lbWJlcnNoaXAke21lbWJlckdyb3VwfWBcbiAgICAgICAgICAgIClcbiAgICAgICAgICB9LFxuICAgICAgICAgIHJlc291cmNlVHlwZTogSURFTlRJVFlfQ0VOVEVSX1VTRVJTX1JFU09VUkNFX1RZUEVcbiAgICAgICAgfVxuICAgICAgKTtcblxuICAgICAgY29uc3QgcmVmcmVzaE1lbWJlcnNoaXAgPSBuZXcgQXdzQ3VzdG9tUmVzb3VyY2UoXG4gICAgICAgIHRoaXMsXG4gICAgICAgIGBSZWZyZXNoTWVtYmVyc2hpcFJlc291cmNlJHttZW1iZXJHcm91cH1gLFxuICAgICAgICB7XG4gICAgICAgICAgb25VcGRhdGU6IHtcbiAgICAgICAgICAgIHNlcnZpY2U6IElERU5USVRZX1NUT1JFX1NFUlZJQ0UsXG4gICAgICAgICAgICBhY3Rpb246IFwiZGVsZXRlR3JvdXBNZW1iZXJzaGlwXCIsXG4gICAgICAgICAgICBwYXJhbWV0ZXJzOiB7XG4gICAgICAgICAgICAgIElkZW50aXR5U3RvcmVJZDogaWRlbnRpdHlTdG9yZUlkLFxuICAgICAgICAgICAgICBNZW1iZXJzaGlwSWQ6IGdyb3VwTWVtYmVyc2hpcElkLmdldFJlc3BvbnNlRmllbGQoXCJNZW1iZXJzaGlwSWRcIilcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBwaHlzaWNhbFJlc291cmNlSWQ6IGN1c3RvbVJlc291cmNlcy5QaHlzaWNhbFJlc291cmNlSWQub2YoXG4gICAgICAgICAgICAgIGByZWZyZXNoR3JvdXBNZW1iZXJzaGlwJHttZW1iZXJHcm91cH1gXG4gICAgICAgICAgICApXG4gICAgICAgICAgfSxcbiAgICAgICAgICByZXNvdXJjZVR5cGU6IElERU5USVRZX0NFTlRFUl9VU0VSU19SRVNPVVJDRV9UWVBFXG4gICAgICAgIH1cbiAgICAgICk7XG5cbiAgICAgIGNvbnN0IHJlY3JlYXRlTWVtYmVyc2hpcCA9IG5ldyBBd3NDdXN0b21SZXNvdXJjZShcbiAgICAgICAgdGhpcyxcbiAgICAgICAgYFJlY3JlYXRlR3JvdXBNZW1iZXJzaGlwUmVzb3VyY2Uke21lbWJlckdyb3VwfWAsXG4gICAgICAgIHtcbiAgICAgICAgICBvblVwZGF0ZToge1xuICAgICAgICAgICAgc2VydmljZTogSURFTlRJVFlfU1RPUkVfU0VSVklDRSxcbiAgICAgICAgICAgIGFjdGlvbjogXCJjcmVhdGVHcm91cE1lbWJlcnNoaXBcIixcbiAgICAgICAgICAgIHBhcmFtZXRlcnM6IHtcbiAgICAgICAgICAgICAgR3JvdXBJZDogZ3JvdXBJZCxcbiAgICAgICAgICAgICAgSWRlbnRpdHlTdG9yZUlkOiBpZGVudGl0eVN0b3JlSWQsXG4gICAgICAgICAgICAgIE1lbWJlcklkOiB7XG4gICAgICAgICAgICAgICAgVXNlcklkOiB1c2VySWRcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHBoeXNpY2FsUmVzb3VyY2VJZDogY3VzdG9tUmVzb3VyY2VzLlBoeXNpY2FsUmVzb3VyY2VJZC5vZihcbiAgICAgICAgICAgICAgYHJlY3JlYXRlR3JvdXBNZW1iZXJzaGlwJHttZW1iZXJHcm91cH1gXG4gICAgICAgICAgICApXG4gICAgICAgICAgfSxcbiAgICAgICAgICByZXNvdXJjZVR5cGU6IElERU5USVRZX0NFTlRFUl9VU0VSU19SRVNPVVJDRV9UWVBFXG4gICAgICAgIH1cbiAgICAgICk7XG5cbiAgICAgIHJlZnJlc2hNZW1iZXJzaGlwLm5vZGUuYWRkRGVwZW5kZW5jeShyZWNyZWF0ZU1lbWJlcnNoaXApO1xuXG4gICAgICBuZXcgQXdzQ3VzdG9tUmVzb3VyY2UoXG4gICAgICAgIHRoaXMsXG4gICAgICAgIGBEZWxldGVHcm91cE1lbWJlcnNoaXBSZXNvdXJjZSR7bWVtYmVyR3JvdXB9YCxcbiAgICAgICAge1xuICAgICAgICAgIG9uRGVsZXRlOiB7XG4gICAgICAgICAgICBzZXJ2aWNlOiBJREVOVElUWV9TVE9SRV9TRVJWSUNFLFxuICAgICAgICAgICAgYWN0aW9uOiBcImRlbGV0ZUdyb3VwTWVtYmVyc2hpcFwiLFxuICAgICAgICAgICAgcGFyYW1ldGVyczoge1xuICAgICAgICAgICAgICBJZGVudGl0eVN0b3JlSWQ6IGlkZW50aXR5U3RvcmVJZCxcbiAgICAgICAgICAgICAgTWVtYmVyc2hpcElkOiBncm91cE1lbWJlcnNoaXBJZC5nZXRSZXNwb25zZUZpZWxkKFwiTWVtYmVyc2hpcElkXCIpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICByZXNvdXJjZVR5cGU6IElERU5USVRZX0NFTlRFUl9VU0VSU19SRVNPVVJDRV9UWVBFXG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgfVxuICB9XG59XG4iXX0=
|
|
@@ -1,8 +1,19 @@
|
|
|
1
|
-
export * from "./identityCenter";
|
|
2
|
-
export * from "./ipam";
|
|
3
|
-
export * from "./ecrDefaultImage";
|
|
4
|
-
export * from "./eventBus";
|
|
5
|
-
export * from "./oidcConnector";
|
|
6
|
-
export * from "./platform";
|
|
7
|
-
export * from "./accountMonitoringRole";
|
|
8
|
-
export * from "./accountAuditRole";
|
|
1
|
+
export * from "./identityCenter.js";
|
|
2
|
+
export * from "./ipam.js";
|
|
3
|
+
export * from "./ecrDefaultImage.js";
|
|
4
|
+
export * from "./eventBus.js";
|
|
5
|
+
export * from "./oidcConnector.js";
|
|
6
|
+
export * from "./platform.js";
|
|
7
|
+
export * from "./accountMonitoringRole.js";
|
|
8
|
+
export * from "./accountAuditRole.js";
|
|
9
|
+
export * from "./s3BlockPublicAccess.js";
|
|
10
|
+
export * from "./ebsDefaultEncryption.js";
|
|
11
|
+
export * from "./securityServicesAdmin.js";
|
|
12
|
+
export * from "./configRulePreset.js";
|
|
13
|
+
export * from "./guardDutyDetector.js";
|
|
14
|
+
export * from "./accessAnalyser.js";
|
|
15
|
+
export * from "./securityHubHub.js";
|
|
16
|
+
export * from "./configRecorder.js";
|
|
17
|
+
export * from "./inspectorEnablement.js";
|
|
18
|
+
export * from "./scpPreset.js";
|
|
19
|
+
export * from "./alarmTopic.js";
|
|
@@ -1,25 +1,19 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
__exportStar(require("./eventBus"), exports);
|
|
21
|
-
__exportStar(require("./oidcConnector"), exports);
|
|
22
|
-
__exportStar(require("./platform"), exports);
|
|
23
|
-
__exportStar(require("./accountMonitoringRole"), exports);
|
|
24
|
-
__exportStar(require("./accountAuditRole"), exports);
|
|
25
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWIvY29uZmlnL2F3cy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsbURBQWlDO0FBQ2pDLHlDQUF1QjtBQUN2QixvREFBa0M7QUFDbEMsNkNBQTJCO0FBQzNCLGtEQUFnQztBQUNoQyw2Q0FBMkI7QUFDM0IsMERBQXdDO0FBQ3hDLHFEQUFtQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gXCIuL2lkZW50aXR5Q2VudGVyXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9pcGFtXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9lY3JEZWZhdWx0SW1hZ2VcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2V2ZW50QnVzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9vaWRjQ29ubmVjdG9yXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9wbGF0Zm9ybVwiO1xuZXhwb3J0ICogZnJvbSBcIi4vYWNjb3VudE1vbml0b3JpbmdSb2xlXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9hY2NvdW50QXVkaXRSb2xlXCI7XG4iXX0=
|
|
1
|
+
export * from "./identityCenter.js";
|
|
2
|
+
export * from "./ipam.js";
|
|
3
|
+
export * from "./ecrDefaultImage.js";
|
|
4
|
+
export * from "./eventBus.js";
|
|
5
|
+
export * from "./oidcConnector.js";
|
|
6
|
+
export * from "./platform.js";
|
|
7
|
+
export * from "./accountMonitoringRole.js";
|
|
8
|
+
export * from "./accountAuditRole.js";
|
|
9
|
+
export * from "./s3BlockPublicAccess.js";
|
|
10
|
+
export * from "./ebsDefaultEncryption.js";
|
|
11
|
+
export * from "./securityServicesAdmin.js";
|
|
12
|
+
export * from "./configRulePreset.js";
|
|
13
|
+
export * from "./guardDutyDetector.js";
|
|
14
|
+
export * from "./accessAnalyser.js";
|
|
15
|
+
export * from "./securityHubHub.js";
|
|
16
|
+
export * from "./configRecorder.js";
|
|
17
|
+
export * from "./inspectorEnablement.js";
|
|
18
|
+
export * from "./scpPreset.js";
|
|
19
|
+
export * from "./alarmTopic.js";
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { Construct } from "constructs";
|
|
2
|
+
/**
|
|
3
|
+
* Enables Inspector v2 for the account via Custom Resource.
|
|
4
|
+
* Scans EC2 instances, ECR images, Lambda functions, and Lambda code.
|
|
5
|
+
* Inspector lacks native CloudFormation support for enablement.
|
|
6
|
+
*/
|
|
7
|
+
export declare class InspectorEnablement extends Construct {
|
|
8
|
+
constructor(scope: Construct, id: string);
|
|
9
|
+
}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { Duration } from "aws-cdk-lib";
|
|
2
|
+
import { PolicyStatement, Effect } from "aws-cdk-lib/aws-iam";
|
|
3
|
+
import { Runtime } from "aws-cdk-lib/aws-lambda";
|
|
4
|
+
import { Construct } from "constructs";
|
|
5
|
+
import { CustomResource } from "../../resources/aws/utilities/customResource.js";
|
|
6
|
+
/**
|
|
7
|
+
* Enables Inspector v2 for the account via Custom Resource.
|
|
8
|
+
* Scans EC2 instances, ECR images, Lambda functions, and Lambda code.
|
|
9
|
+
* Inspector lacks native CloudFormation support for enablement.
|
|
10
|
+
*/
|
|
11
|
+
export class InspectorEnablement extends Construct {
|
|
12
|
+
constructor(scope, id) {
|
|
13
|
+
super(scope, id);
|
|
14
|
+
new CustomResource(this, "InspectorEnable", {
|
|
15
|
+
runtime: Runtime.NODEJS_22_X,
|
|
16
|
+
timeout: Duration.minutes(5),
|
|
17
|
+
lambdaDescription: "Enables/disables Inspector v2 for the account",
|
|
18
|
+
inlinePolicy: [
|
|
19
|
+
new PolicyStatement({
|
|
20
|
+
effect: Effect.ALLOW,
|
|
21
|
+
actions: [
|
|
22
|
+
"inspector2:Enable",
|
|
23
|
+
"inspector2:Disable",
|
|
24
|
+
"inspector2:GetStatus"
|
|
25
|
+
],
|
|
26
|
+
resources: ["*"]
|
|
27
|
+
})
|
|
28
|
+
],
|
|
29
|
+
inlineCode: `
|
|
30
|
+
const { Inspector2Client, EnableCommand, DisableCommand } = require('@aws-sdk/client-inspector2');
|
|
31
|
+
|
|
32
|
+
exports.handler = async (event) => {
|
|
33
|
+
const physicalResourceId = event.PhysicalResourceId || event.LogicalResourceId || 'inspector-enablement';
|
|
34
|
+
const client = new Inspector2Client({});
|
|
35
|
+
const resourceTypes = ['EC2', 'ECR', 'LAMBDA', 'LAMBDA_CODE'];
|
|
36
|
+
|
|
37
|
+
if (event.RequestType === 'Delete') {
|
|
38
|
+
try {
|
|
39
|
+
await client.send(new DisableCommand({ resourceTypes }));
|
|
40
|
+
} catch (err) {
|
|
41
|
+
if (err.name !== 'ResourceNotFoundException') throw err;
|
|
42
|
+
}
|
|
43
|
+
return { PhysicalResourceId: physicalResourceId };
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
await client.send(new EnableCommand({ resourceTypes }));
|
|
47
|
+
return { PhysicalResourceId: physicalResourceId };
|
|
48
|
+
};`
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
}
|
|
@@ -1,10 +1,7 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
const constructs_1 = require("constructs");
|
|
6
|
-
const ipam_1 = require("../../resources/aws/networking/ipam");
|
|
7
|
-
const getConfig_1 = require("../../utils/getConfig");
|
|
1
|
+
import { CfnOutput } from "aws-cdk-lib";
|
|
2
|
+
import { Construct } from "constructs";
|
|
3
|
+
import { Ipam as IpamClass } from "../../resources/aws/networking/ipam.js";
|
|
4
|
+
import { getConfig } from "../../utils/getConfig.js";
|
|
8
5
|
function operatingRegions(regions) {
|
|
9
6
|
const operationRegionArray = [];
|
|
10
7
|
for (const region of regions) {
|
|
@@ -12,15 +9,16 @@ function operatingRegions(regions) {
|
|
|
12
9
|
}
|
|
13
10
|
return operationRegionArray;
|
|
14
11
|
}
|
|
15
|
-
class Ipam extends
|
|
12
|
+
export class Ipam extends Construct {
|
|
13
|
+
privateDefaultScopeId;
|
|
16
14
|
constructor(scope, id, props) {
|
|
17
15
|
super(scope, id);
|
|
18
16
|
// Get regions from config or use provided override
|
|
19
|
-
const config =
|
|
17
|
+
const config = getConfig();
|
|
20
18
|
const regions = props?.regions || config.allRegions;
|
|
21
19
|
// Fallback to at least the current region if no regions configured
|
|
22
20
|
const operationalRegions = regions.length > 0 ? regions : [config.region];
|
|
23
|
-
const ipam = new
|
|
21
|
+
const ipam = new IpamClass(this, "ipam", {
|
|
24
22
|
operatingRegions: operatingRegions(operationalRegions),
|
|
25
23
|
tags: [
|
|
26
24
|
{
|
|
@@ -30,12 +28,10 @@ class Ipam extends constructs_1.Construct {
|
|
|
30
28
|
]
|
|
31
29
|
});
|
|
32
30
|
this.privateDefaultScopeId = ipam.attrPrivateDefaultScopeId;
|
|
33
|
-
new
|
|
31
|
+
new CfnOutput(this, "privateDefaultScopeId", {
|
|
34
32
|
key: "privateDefaultScopeId",
|
|
35
33
|
value: ipam.attrPrivateDefaultScopeId,
|
|
36
34
|
exportName: "IpamPrivateDefaultScopeId"
|
|
37
35
|
});
|
|
38
36
|
}
|
|
39
37
|
}
|
|
40
|
-
exports.Ipam = Ipam;
|
|
41
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXBhbS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9jb25maWcvYXdzL2lwYW0udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNkNBQXdDO0FBQ3hDLDJDQUF1QztBQUV2Qyw4REFBd0U7QUFDeEUscURBQWtEO0FBRWxELFNBQVMsZ0JBQWdCLENBQUMsT0FBaUI7SUFDekMsTUFBTSxvQkFBb0IsR0FBRyxFQUFFLENBQUM7SUFDaEMsS0FBSyxNQUFNLE1BQU0sSUFBSSxPQUFPLEVBQUUsQ0FBQztRQUM3QixvQkFBb0IsQ0FBQyxJQUFJLENBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztJQUNwRCxDQUFDO0lBQ0QsT0FBTyxvQkFBb0IsQ0FBQztBQUM5QixDQUFDO0FBTUQsTUFBYSxJQUFLLFNBQVEsc0JBQVM7SUFHakMsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUFpQjtRQUN6RCxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRWpCLG1EQUFtRDtRQUNuRCxNQUFNLE1BQU0sR0FBRyxJQUFBLHFCQUFTLEdBQUUsQ0FBQztRQUMzQixNQUFNLE9BQU8sR0FBRyxLQUFLLEVBQUUsT0FBTyxJQUFJLE1BQU0sQ0FBQyxVQUFVLENBQUM7UUFFcEQsbUVBQW1FO1FBQ25FLE1BQU0sa0JBQWtCLEdBQUcsT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFMUUsTUFBTSxJQUFJLEdBQUcsSUFBSSxXQUFTLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRTtZQUN2QyxnQkFBZ0IsRUFBRSxnQkFBZ0IsQ0FBQyxrQkFBa0IsQ0FBQztZQUN0RCxJQUFJLEVBQUU7Z0JBQ0o7b0JBQ0UsR0FBRyxFQUFFLGtDQUFrQztvQkFDdkMsS0FBSyxFQUFFLFlBQVk7aUJBQ3BCO2FBQ0Y7U0FDRixDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMscUJBQXFCLEdBQUcsSUFBSSxDQUFDLHlCQUF5QixDQUFDO1FBRTVELElBQUksdUJBQVMsQ0FBQyxJQUFJLEVBQUUsdUJBQXVCLEVBQUU7WUFDM0MsR0FBRyxFQUFFLHVCQUF1QjtZQUM1QixLQUFLLEVBQUUsSUFBSSxDQUFDLHlCQUF5QjtZQUNyQyxVQUFVLEVBQUUsMkJBQTJCO1NBQ3hDLENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRjtBQTlCRCxvQkE4QkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDZm5PdXRwdXQgfSBmcm9tIFwiYXdzLWNkay1saWJcIjtcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5cbmltcG9ydCB7IElwYW0gYXMgSXBhbUNsYXNzIH0gZnJvbSBcIi4uLy4uL3Jlc291cmNlcy9hd3MvbmV0d29ya2luZy9pcGFtXCI7XG5pbXBvcnQgeyBnZXRDb25maWcgfSBmcm9tIFwiLi4vLi4vdXRpbHMvZ2V0Q29uZmlnXCI7XG5cbmZ1bmN0aW9uIG9wZXJhdGluZ1JlZ2lvbnMocmVnaW9uczogc3RyaW5nW10pOiBBcnJheTx7IHJlZ2lvbk5hbWU6IHN0cmluZyB9PiB7XG4gIGNvbnN0IG9wZXJhdGlvblJlZ2lvbkFycmF5ID0gW107XG4gIGZvciAoY29uc3QgcmVnaW9uIG9mIHJlZ2lvbnMpIHtcbiAgICBvcGVyYXRpb25SZWdpb25BcnJheS5wdXNoKHsgcmVnaW9uTmFtZTogcmVnaW9uIH0pO1xuICB9XG4gIHJldHVybiBvcGVyYXRpb25SZWdpb25BcnJheTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJcGFtUHJvcHMge1xuICByZWdpb25zPzogc3RyaW5nW107XG59XG5cbmV4cG9ydCBjbGFzcyBJcGFtIGV4dGVuZHMgQ29uc3RydWN0IHtcbiAgcHVibGljIHJlYWRvbmx5IHByaXZhdGVEZWZhdWx0U2NvcGVJZDogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzPzogSXBhbVByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIC8vIEdldCByZWdpb25zIGZyb20gY29uZmlnIG9yIHVzZSBwcm92aWRlZCBvdmVycmlkZVxuICAgIGNvbnN0IGNvbmZpZyA9IGdldENvbmZpZygpO1xuICAgIGNvbnN0IHJlZ2lvbnMgPSBwcm9wcz8ucmVnaW9ucyB8fCBjb25maWcuYWxsUmVnaW9ucztcblxuICAgIC8vIEZhbGxiYWNrIHRvIGF0IGxlYXN0IHRoZSBjdXJyZW50IHJlZ2lvbiBpZiBubyByZWdpb25zIGNvbmZpZ3VyZWRcbiAgICBjb25zdCBvcGVyYXRpb25hbFJlZ2lvbnMgPSByZWdpb25zLmxlbmd0aCA+IDAgPyByZWdpb25zIDogW2NvbmZpZy5yZWdpb25dO1xuXG4gICAgY29uc3QgaXBhbSA9IG5ldyBJcGFtQ2xhc3ModGhpcywgXCJpcGFtXCIsIHtcbiAgICAgIG9wZXJhdGluZ1JlZ2lvbnM6IG9wZXJhdGluZ1JlZ2lvbnMob3BlcmF0aW9uYWxSZWdpb25zKSxcbiAgICAgIHRhZ3M6IFtcbiAgICAgICAge1xuICAgICAgICAgIGtleTogXCJmamFsbDpjb3N0QWxsb2NhdGlvbjplbnZpcm9ubWVudFwiLFxuICAgICAgICAgIHZhbHVlOiBcIm1hbmFnZW1lbnRcIlxuICAgICAgICB9XG4gICAgICBdXG4gICAgfSk7XG4gICAgdGhpcy5wcml2YXRlRGVmYXVsdFNjb3BlSWQgPSBpcGFtLmF0dHJQcml2YXRlRGVmYXVsdFNjb3BlSWQ7XG5cbiAgICBuZXcgQ2ZuT3V0cHV0KHRoaXMsIFwicHJpdmF0ZURlZmF1bHRTY29wZUlkXCIsIHtcbiAgICAgIGtleTogXCJwcml2YXRlRGVmYXVsdFNjb3BlSWRcIixcbiAgICAgIHZhbHVlOiBpcGFtLmF0dHJQcml2YXRlRGVmYXVsdFNjb3BlSWQsXG4gICAgICBleHBvcnROYW1lOiBcIklwYW1Qcml2YXRlRGVmYXVsdFNjb3BlSWRcIlxuICAgIH0pO1xuICB9XG59XG4iXX0=
|
|
@@ -1,10 +1,8 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
const constructs_1 = require("constructs");
|
|
7
|
-
class OidcConnector extends constructs_1.Construct {
|
|
1
|
+
import { CfnOutput, Duration } from "aws-cdk-lib";
|
|
2
|
+
import * as iam from "aws-cdk-lib/aws-iam";
|
|
3
|
+
import { Construct } from "constructs";
|
|
4
|
+
export class OidcConnector extends Construct {
|
|
5
|
+
deployRoleArn;
|
|
8
6
|
constructor(scope, id, props) {
|
|
9
7
|
super(scope, id);
|
|
10
8
|
const issuerDomain = "fjall.io";
|
|
@@ -16,7 +14,7 @@ class OidcConnector extends constructs_1.Construct {
|
|
|
16
14
|
});
|
|
17
15
|
const deployRole = new iam.Role(this, "DeployRole", {
|
|
18
16
|
roleName: `FjallDeploy${props.fjallOrgId}`,
|
|
19
|
-
maxSessionDuration:
|
|
17
|
+
maxSessionDuration: Duration.hours(1),
|
|
20
18
|
assumedBy: new iam.FederatedPrincipal(provider.openIdConnectProviderArn, {
|
|
21
19
|
StringEquals: { [`${issuerDomain}:aud`]: "sts.amazonaws.com" },
|
|
22
20
|
StringLike: {
|
|
@@ -28,13 +26,13 @@ class OidcConnector extends constructs_1.Construct {
|
|
|
28
26
|
]
|
|
29
27
|
});
|
|
30
28
|
this.deployRoleArn = deployRole.roleArn;
|
|
31
|
-
new
|
|
29
|
+
new CfnOutput(this, "OidcDeployRoleArn", {
|
|
32
30
|
key: "OidcDeployRoleArn",
|
|
33
31
|
value: deployRole.roleArn,
|
|
34
32
|
exportName: "OidcDeployRoleArn",
|
|
35
33
|
description: "ARN of the Fjall OIDC deploy role"
|
|
36
34
|
});
|
|
37
|
-
new
|
|
35
|
+
new CfnOutput(this, "OidcProviderArn", {
|
|
38
36
|
key: "OidcProviderArn",
|
|
39
37
|
value: provider.openIdConnectProviderArn,
|
|
40
38
|
exportName: "OidcProviderArn",
|
|
@@ -42,5 +40,3 @@ class OidcConnector extends constructs_1.Construct {
|
|
|
42
40
|
});
|
|
43
41
|
}
|
|
44
42
|
}
|
|
45
|
-
exports.OidcConnector = OidcConnector;
|
|
46
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2lkY0Nvbm5lY3Rvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9jb25maWcvYXdzL29pZGNDb25uZWN0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNkNBQWtEO0FBQ2xELDJDQUEyQztBQUMzQywyQ0FBdUM7QUFNdkMsTUFBYSxhQUFjLFNBQVEsc0JBQVM7SUFHMUMsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUF5QjtRQUNqRSxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRWpCLE1BQU0sWUFBWSxHQUFHLFVBQVUsQ0FBQztRQUNoQyxNQUFNLFNBQVMsR0FBRyxXQUFXLFlBQVksRUFBRSxDQUFDO1FBRTVDLE1BQU0sUUFBUSxHQUFHLElBQUksR0FBRyxDQUFDLHFCQUFxQixDQUFDLElBQUksRUFBRSxjQUFjLEVBQUU7WUFDbkUsR0FBRyxFQUFFLFNBQVM7WUFDZCxTQUFTLEVBQUUsQ0FBQyxtQkFBbUIsQ0FBQztZQUNoQyxXQUFXLEVBQUUsQ0FBQywwQ0FBMEMsQ0FBQztTQUMxRCxDQUFDLENBQUM7UUFFSCxNQUFNLFVBQVUsR0FBRyxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLFlBQVksRUFBRTtZQUNsRCxRQUFRLEVBQUUsY0FBYyxLQUFLLENBQUMsVUFBVSxFQUFFO1lBQzFDLGtCQUFrQixFQUFFLHNCQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztZQUNyQyxTQUFTLEVBQUUsSUFBSSxHQUFHLENBQUMsa0JBQWtCLENBQ25DLFFBQVEsQ0FBQyx3QkFBd0IsRUFDakM7Z0JBQ0UsWUFBWSxFQUFFLEVBQUUsQ0FBQyxHQUFHLFlBQVksTUFBTSxDQUFDLEVBQUUsbUJBQW1CLEVBQUU7Z0JBQzlELFVBQVUsRUFBRTtvQkFDVixDQUFDLEdBQUcsWUFBWSxNQUFNLENBQUMsRUFBRSxPQUFPLEtBQUssQ0FBQyxVQUFVLElBQUk7aUJBQ3JEO2FBQ0YsRUFDRCwrQkFBK0IsQ0FDaEM7WUFDRCxlQUFlLEVBQUU7Z0JBQ2YsR0FBRyxDQUFDLGFBQWEsQ0FBQyx3QkFBd0IsQ0FBQyxxQkFBcUIsQ0FBQzthQUNsRTtTQUNGLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxhQUFhLEdBQUcsVUFBVSxDQUFDLE9BQU8sQ0FBQztRQUV4QyxJQUFJLHVCQUFTLENBQUMsSUFBSSxFQUFFLG1CQUFtQixFQUFFO1lBQ3ZDLEdBQUcsRUFBRSxtQkFBbUI7WUFDeEIsS0FBSyxFQUFFLFVBQVUsQ0FBQyxPQUFPO1lBQ3pCLFVBQVUsRUFBRSxtQkFBbUI7WUFDL0IsV0FBVyxFQUFFLG1DQUFtQztTQUNqRCxDQUFDLENBQUM7UUFFSCxJQUFJLHVCQUFTLENBQUMsSUFBSSxFQUFFLGlCQUFpQixFQUFFO1lBQ3JDLEdBQUcsRUFBRSxpQkFBaUI7WUFDdEIsS0FBSyxFQUFFLFFBQVEsQ0FBQyx3QkFBd0I7WUFDeEMsVUFBVSxFQUFFLGlCQUFpQjtZQUM3QixXQUFXLEVBQUUsZ0NBQWdDO1NBQzlDLENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRjtBQWpERCxzQ0FpREMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDZm5PdXRwdXQsIER1cmF0aW9uIH0gZnJvbSBcImF3cy1jZGstbGliXCI7XG5pbXBvcnQgKiBhcyBpYW0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1pYW1cIjtcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgT2lkY0Nvbm5lY3RvclByb3BzIHtcbiAgZmphbGxPcmdJZDogc3RyaW5nO1xufVxuXG5leHBvcnQgY2xhc3MgT2lkY0Nvbm5lY3RvciBleHRlbmRzIENvbnN0cnVjdCB7XG4gIHB1YmxpYyByZWFkb25seSBkZXBsb3lSb2xlQXJuOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IE9pZGNDb25uZWN0b3JQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICBjb25zdCBpc3N1ZXJEb21haW4gPSBcImZqYWxsLmlvXCI7XG4gICAgY29uc3QgaXNzdWVyVXJsID0gYGh0dHBzOi8vJHtpc3N1ZXJEb21haW59YDtcblxuICAgIGNvbnN0IHByb3ZpZGVyID0gbmV3IGlhbS5PcGVuSWRDb25uZWN0UHJvdmlkZXIodGhpcywgXCJPaWRjUHJvdmlkZXJcIiwge1xuICAgICAgdXJsOiBpc3N1ZXJVcmwsXG4gICAgICBjbGllbnRJZHM6IFtcInN0cy5hbWF6b25hd3MuY29tXCJdLFxuICAgICAgdGh1bWJwcmludHM6IFtcIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBcIl1cbiAgICB9KTtcblxuICAgIGNvbnN0IGRlcGxveVJvbGUgPSBuZXcgaWFtLlJvbGUodGhpcywgXCJEZXBsb3lSb2xlXCIsIHtcbiAgICAgIHJvbGVOYW1lOiBgRmphbGxEZXBsb3kke3Byb3BzLmZqYWxsT3JnSWR9YCxcbiAgICAgIG1heFNlc3Npb25EdXJhdGlvbjogRHVyYXRpb24uaG91cnMoMSksXG4gICAgICBhc3N1bWVkQnk6IG5ldyBpYW0uRmVkZXJhdGVkUHJpbmNpcGFsKFxuICAgICAgICBwcm92aWRlci5vcGVuSWRDb25uZWN0UHJvdmlkZXJBcm4sXG4gICAgICAgIHtcbiAgICAgICAgICBTdHJpbmdFcXVhbHM6IHsgW2Ake2lzc3VlckRvbWFpbn06YXVkYF06IFwic3RzLmFtYXpvbmF3cy5jb21cIiB9LFxuICAgICAgICAgIFN0cmluZ0xpa2U6IHtcbiAgICAgICAgICAgIFtgJHtpc3N1ZXJEb21haW59OnN1YmBdOiBgb3JnOiR7cHJvcHMuZmphbGxPcmdJZH06KmBcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwic3RzOkFzc3VtZVJvbGVXaXRoV2ViSWRlbnRpdHlcIlxuICAgICAgKSxcbiAgICAgIG1hbmFnZWRQb2xpY2llczogW1xuICAgICAgICBpYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoXCJBZG1pbmlzdHJhdG9yQWNjZXNzXCIpXG4gICAgICBdXG4gICAgfSk7XG5cbiAgICB0aGlzLmRlcGxveVJvbGVBcm4gPSBkZXBsb3lSb2xlLnJvbGVBcm47XG5cbiAgICBuZXcgQ2ZuT3V0cHV0KHRoaXMsIFwiT2lkY0RlcGxveVJvbGVBcm5cIiwge1xuICAgICAga2V5OiBcIk9pZGNEZXBsb3lSb2xlQXJuXCIsXG4gICAgICB2YWx1ZTogZGVwbG95Um9sZS5yb2xlQXJuLFxuICAgICAgZXhwb3J0TmFtZTogXCJPaWRjRGVwbG95Um9sZUFyblwiLFxuICAgICAgZGVzY3JpcHRpb246IFwiQVJOIG9mIHRoZSBGamFsbCBPSURDIGRlcGxveSByb2xlXCJcbiAgICB9KTtcblxuICAgIG5ldyBDZm5PdXRwdXQodGhpcywgXCJPaWRjUHJvdmlkZXJBcm5cIiwge1xuICAgICAga2V5OiBcIk9pZGNQcm92aWRlckFyblwiLFxuICAgICAgdmFsdWU6IHByb3ZpZGVyLm9wZW5JZENvbm5lY3RQcm92aWRlckFybixcbiAgICAgIGV4cG9ydE5hbWU6IFwiT2lkY1Byb3ZpZGVyQXJuXCIsXG4gICAgICBkZXNjcmlwdGlvbjogXCJBUk4gb2YgdGhlIEZqYWxsIE9JREMgcHJvdmlkZXJcIlxuICAgIH0pO1xuICB9XG59XG4iXX0=
|
|
@@ -1,6 +1,2 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.FJALL_PLATFORM_ACCOUNT_ID = void 0;
|
|
4
1
|
/** AWS account ID of the Fjall platform (where the webapp runs). */
|
|
5
|
-
|
|
6
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGxhdGZvcm0uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWIvY29uZmlnL2F3cy9wbGF0Zm9ybS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxvRUFBb0U7QUFDdkQsUUFBQSx5QkFBeUIsR0FBRyxjQUFjLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiogQVdTIGFjY291bnQgSUQgb2YgdGhlIEZqYWxsIHBsYXRmb3JtICh3aGVyZSB0aGUgd2ViYXBwIHJ1bnMpLiAqL1xuZXhwb3J0IGNvbnN0IEZKQUxMX1BMQVRGT1JNX0FDQ09VTlRfSUQgPSBcIjk4NTUzOTc5ODMwOFwiO1xuIl19
|
|
2
|
+
export const FJALL_PLATFORM_ACCOUNT_ID = "985539798308";
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { Construct } from "constructs";
|
|
2
|
+
/**
|
|
3
|
+
* Enables S3 Block Public Access at the account level via a Custom Resource.
|
|
4
|
+
* All four public access flags are set to true (block all public access).
|
|
5
|
+
* Stack deletion does NOT revert this setting — security features are preserved.
|
|
6
|
+
*/
|
|
7
|
+
export declare class S3BlockPublicAccess extends Construct {
|
|
8
|
+
constructor(scope: Construct, id: string);
|
|
9
|
+
}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { Duration } from "aws-cdk-lib";
|
|
2
|
+
import { Effect, PolicyStatement } from "aws-cdk-lib/aws-iam";
|
|
3
|
+
import { Runtime } from "aws-cdk-lib/aws-lambda";
|
|
4
|
+
import { Stack } from "aws-cdk-lib";
|
|
5
|
+
import { Construct } from "constructs";
|
|
6
|
+
import { CustomResource } from "../../resources/aws/utilities/customResource.js";
|
|
7
|
+
/**
|
|
8
|
+
* Enables S3 Block Public Access at the account level via a Custom Resource.
|
|
9
|
+
* All four public access flags are set to true (block all public access).
|
|
10
|
+
* Stack deletion does NOT revert this setting — security features are preserved.
|
|
11
|
+
*/
|
|
12
|
+
export class S3BlockPublicAccess extends Construct {
|
|
13
|
+
constructor(scope, id) {
|
|
14
|
+
super(scope, id);
|
|
15
|
+
new CustomResource(this, "S3BlockPublicAccess", {
|
|
16
|
+
runtime: Runtime.NODEJS_22_X,
|
|
17
|
+
timeout: Duration.minutes(5),
|
|
18
|
+
lambdaDescription: "Enables S3 Block Public Access at account level",
|
|
19
|
+
properties: {
|
|
20
|
+
AccountId: Stack.of(this).account
|
|
21
|
+
},
|
|
22
|
+
inlinePolicy: [
|
|
23
|
+
new PolicyStatement({
|
|
24
|
+
effect: Effect.ALLOW,
|
|
25
|
+
actions: [
|
|
26
|
+
"s3:PutAccountPublicAccessBlock",
|
|
27
|
+
"s3:GetAccountPublicAccessBlock"
|
|
28
|
+
],
|
|
29
|
+
resources: ["*"]
|
|
30
|
+
})
|
|
31
|
+
],
|
|
32
|
+
inlineCode: `
|
|
33
|
+
const { S3ControlClient, PutPublicAccessBlockCommand } = require('@aws-sdk/client-s3-control');
|
|
34
|
+
|
|
35
|
+
exports.handler = async (event) => {
|
|
36
|
+
const physicalResourceId = event.PhysicalResourceId || event.LogicalResourceId || 's3-block-public-access';
|
|
37
|
+
if (event.RequestType === 'Delete') {
|
|
38
|
+
return { PhysicalResourceId: physicalResourceId };
|
|
39
|
+
}
|
|
40
|
+
const accountId = event.ResourceProperties.AccountId;
|
|
41
|
+
const client = new S3ControlClient({});
|
|
42
|
+
await client.send(new PutPublicAccessBlockCommand({
|
|
43
|
+
AccountId: accountId,
|
|
44
|
+
PublicAccessBlockConfiguration: {
|
|
45
|
+
BlockPublicAcls: true,
|
|
46
|
+
IgnorePublicAcls: true,
|
|
47
|
+
BlockPublicPolicy: true,
|
|
48
|
+
RestrictPublicBuckets: true
|
|
49
|
+
}
|
|
50
|
+
}));
|
|
51
|
+
return { PhysicalResourceId: physicalResourceId };
|
|
52
|
+
};`
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { Construct } from "constructs";
|
|
2
|
+
export type ScpPresetLevel = "standard" | "hardened";
|
|
3
|
+
export interface ScpPresetProps {
|
|
4
|
+
preset: ScpPresetLevel;
|
|
5
|
+
rootId: string;
|
|
6
|
+
allowedRegions: string[];
|
|
7
|
+
organisationalUnitIds?: Record<string, string>;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Creates a set of Service Control Policies (SCPs) based on a preset level.
|
|
11
|
+
*
|
|
12
|
+
* Standard preset: 3 root-level SCPs (FoundationGuardrails, SecurityProtection, EncryptionAndAccess).
|
|
13
|
+
* Hardened preset: 3 root + per-OU cost controls for development environments.
|
|
14
|
+
*
|
|
15
|
+
* All deny statements (except DenyRootUser) exempt automation roles to prevent deployment lockout.
|
|
16
|
+
*/
|
|
17
|
+
export declare class ScpPreset extends Construct {
|
|
18
|
+
constructor(scope: Construct, id: string, props: ScpPresetProps);
|
|
19
|
+
private createRootScps;
|
|
20
|
+
private createHardenedScps;
|
|
21
|
+
}
|