@fjall/components-infrastructure 0.89.5 → 0.94.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/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 +60 -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 +81 -71
- package/dist/lib/resources/aws/database/dynamodb.js +24 -27
- 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
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { CfnAnalyzer } from "aws-cdk-lib/aws-accessanalyzer";
|
|
2
|
+
import { Construct } from "constructs";
|
|
3
|
+
/**
|
|
4
|
+
* Per-account IAM Access Analyser. Identifies resources shared with
|
|
5
|
+
* external entities (S3 buckets, IAM roles, KMS keys, Lambda functions).
|
|
6
|
+
* Free service -- no additional cost.
|
|
7
|
+
*/
|
|
8
|
+
export class AccountAccessAnalyser extends Construct {
|
|
9
|
+
analyser;
|
|
10
|
+
constructor(scope, id) {
|
|
11
|
+
super(scope, id);
|
|
12
|
+
this.analyser = new CfnAnalyzer(this, "Analyser", {
|
|
13
|
+
analyzerName: "FjallAccountAnalyser",
|
|
14
|
+
type: "ACCOUNT"
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
}
|
|
@@ -1,10 +1,7 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
const aws_iam_1 = require("aws-cdk-lib/aws-iam");
|
|
6
|
-
const constructs_1 = require("constructs");
|
|
7
|
-
const platform_1 = require("./platform");
|
|
1
|
+
import { CfnOutput } from "aws-cdk-lib";
|
|
2
|
+
import { Role, AccountPrincipal, ManagedPolicy } from "aws-cdk-lib/aws-iam";
|
|
3
|
+
import { Construct } from "constructs";
|
|
4
|
+
import { FJALL_PLATFORM_ACCOUNT_ID } from "./platform.js";
|
|
8
5
|
/**
|
|
9
6
|
* Per-account audit role for the Fjall platform.
|
|
10
7
|
*
|
|
@@ -12,21 +9,22 @@ const platform_1 = require("./platform");
|
|
|
12
9
|
* managed policies, trusting the Fjall platform account. Only instantiated when
|
|
13
10
|
* a `fjallOrgId` context value is provided to the Account stack.
|
|
14
11
|
*/
|
|
15
|
-
class AccountAuditRole extends
|
|
12
|
+
export class AccountAuditRole extends Construct {
|
|
13
|
+
role;
|
|
16
14
|
constructor(scope, id, props) {
|
|
17
15
|
super(scope, id);
|
|
18
|
-
this.role = new
|
|
16
|
+
this.role = new Role(this, "Role", {
|
|
19
17
|
roleName: `FjallAudit${props.fjallOrgId}`,
|
|
20
18
|
path: "/",
|
|
21
|
-
assumedBy: new
|
|
19
|
+
assumedBy: new AccountPrincipal(FJALL_PLATFORM_ACCOUNT_ID),
|
|
22
20
|
description: `Cross-account audit role for Fjall organisation ${props.fjallOrgId}. Grants read-only access for asset discovery and compliance auditing.`,
|
|
23
21
|
externalIds: [props.fjallOrgId],
|
|
24
22
|
managedPolicies: [
|
|
25
|
-
|
|
26
|
-
|
|
23
|
+
ManagedPolicy.fromAwsManagedPolicyName("ReadOnlyAccess"),
|
|
24
|
+
ManagedPolicy.fromAwsManagedPolicyName("SecurityAudit")
|
|
27
25
|
]
|
|
28
26
|
});
|
|
29
|
-
new
|
|
27
|
+
new CfnOutput(this, "FjallAuditRoleArn", {
|
|
30
28
|
key: "FjallAuditRoleArn",
|
|
31
29
|
value: this.role.roleArn,
|
|
32
30
|
description: `ARN of the Fjall audit role for organisation ${props.fjallOrgId}`,
|
|
@@ -34,5 +32,3 @@ class AccountAuditRole extends constructs_1.Construct {
|
|
|
34
32
|
});
|
|
35
33
|
}
|
|
36
34
|
}
|
|
37
|
-
exports.AccountAuditRole = AccountAuditRole;
|
|
38
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNjb3VudEF1ZGl0Um9sZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9jb25maWcvYXdzL2FjY291bnRBdWRpdFJvbGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNkNBQXdDO0FBQ3hDLGlEQUE0RTtBQUM1RSwyQ0FBdUM7QUFDdkMseUNBQXVEO0FBVXZEOzs7Ozs7R0FNRztBQUNILE1BQWEsZ0JBQWlCLFNBQVEsc0JBQVM7SUFHN0MsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUE0QjtRQUNwRSxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRWpCLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxjQUFJLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRTtZQUNqQyxRQUFRLEVBQUUsYUFBYSxLQUFLLENBQUMsVUFBVSxFQUFFO1lBQ3pDLElBQUksRUFBRSxHQUFHO1lBQ1QsU0FBUyxFQUFFLElBQUksMEJBQWdCLENBQUMsb0NBQXlCLENBQUM7WUFDMUQsV0FBVyxFQUFFLG1EQUFtRCxLQUFLLENBQUMsVUFBVSx3RUFBd0U7WUFDeEosV0FBVyxFQUFFLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQztZQUMvQixlQUFlLEVBQUU7Z0JBQ2YsdUJBQWEsQ0FBQyx3QkFBd0IsQ0FBQyxnQkFBZ0IsQ0FBQztnQkFDeEQsdUJBQWEsQ0FBQyx3QkFBd0IsQ0FBQyxlQUFlLENBQUM7YUFDeEQ7U0FDRixDQUFDLENBQUM7UUFFSCxJQUFJLHVCQUFTLENBQUMsSUFBSSxFQUFFLG1CQUFtQixFQUFFO1lBQ3ZDLEdBQUcsRUFBRSxtQkFBbUI7WUFDeEIsS0FBSyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTztZQUN4QixXQUFXLEVBQUUsZ0RBQWdELEtBQUssQ0FBQyxVQUFVLEVBQUU7WUFDL0UsVUFBVSxFQUFFLG1CQUFtQjtTQUNoQyxDQUFDLENBQUM7SUFDTCxDQUFDO0NBQ0Y7QUF6QkQsNENBeUJDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2ZuT3V0cHV0IH0gZnJvbSBcImF3cy1jZGstbGliXCI7XG5pbXBvcnQgeyBSb2xlLCBBY2NvdW50UHJpbmNpcGFsLCBNYW5hZ2VkUG9saWN5IH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1pYW1cIjtcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5pbXBvcnQgeyBGSkFMTF9QTEFURk9STV9BQ0NPVU5UX0lEIH0gZnJvbSBcIi4vcGxhdGZvcm1cIjtcblxuZXhwb3J0IGludGVyZmFjZSBBY2NvdW50QXVkaXRSb2xlUHJvcHMge1xuICAvKipcbiAgICogVGhlIEZqYWxsIG9yZ2FuaXNhdGlvbiBJRC4gVXNlZCBhcyBhIHN1ZmZpeCBpbiB0aGUgcm9sZSBuYW1lXG4gICAqIChgRmphbGxBdWRpdHtvcmdJZH1gKSBhbmQgYXMgdGhlIEV4dGVybmFsSWQgY29uZGl0aW9uLlxuICAgKi9cbiAgZmphbGxPcmdJZDogc3RyaW5nO1xufVxuXG4vKipcbiAqIFBlci1hY2NvdW50IGF1ZGl0IHJvbGUgZm9yIHRoZSBGamFsbCBwbGF0Zm9ybS5cbiAqXG4gKiBDcmVhdGVzIGEgYEZqYWxsQXVkaXR7b3JnSWR9YCBJQU0gcm9sZSB3aXRoIFJlYWRPbmx5QWNjZXNzIGFuZCBTZWN1cml0eUF1ZGl0XG4gKiBtYW5hZ2VkIHBvbGljaWVzLCB0cnVzdGluZyB0aGUgRmphbGwgcGxhdGZvcm0gYWNjb3VudC4gT25seSBpbnN0YW50aWF0ZWQgd2hlblxuICogYSBgZmphbGxPcmdJZGAgY29udGV4dCB2YWx1ZSBpcyBwcm92aWRlZCB0byB0aGUgQWNjb3VudCBzdGFjay5cbiAqL1xuZXhwb3J0IGNsYXNzIEFjY291bnRBdWRpdFJvbGUgZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuICBwdWJsaWMgcmVhZG9ubHkgcm9sZTogUm9sZTtcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogQWNjb3VudEF1ZGl0Um9sZVByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIHRoaXMucm9sZSA9IG5ldyBSb2xlKHRoaXMsIFwiUm9sZVwiLCB7XG4gICAgICByb2xlTmFtZTogYEZqYWxsQXVkaXQke3Byb3BzLmZqYWxsT3JnSWR9YCxcbiAgICAgIHBhdGg6IFwiL1wiLFxuICAgICAgYXNzdW1lZEJ5OiBuZXcgQWNjb3VudFByaW5jaXBhbChGSkFMTF9QTEFURk9STV9BQ0NPVU5UX0lEKSxcbiAgICAgIGRlc2NyaXB0aW9uOiBgQ3Jvc3MtYWNjb3VudCBhdWRpdCByb2xlIGZvciBGamFsbCBvcmdhbmlzYXRpb24gJHtwcm9wcy5mamFsbE9yZ0lkfS4gR3JhbnRzIHJlYWQtb25seSBhY2Nlc3MgZm9yIGFzc2V0IGRpc2NvdmVyeSBhbmQgY29tcGxpYW5jZSBhdWRpdGluZy5gLFxuICAgICAgZXh0ZXJuYWxJZHM6IFtwcm9wcy5mamFsbE9yZ0lkXSxcbiAgICAgIG1hbmFnZWRQb2xpY2llczogW1xuICAgICAgICBNYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShcIlJlYWRPbmx5QWNjZXNzXCIpLFxuICAgICAgICBNYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShcIlNlY3VyaXR5QXVkaXRcIilcbiAgICAgIF1cbiAgICB9KTtcblxuICAgIG5ldyBDZm5PdXRwdXQodGhpcywgXCJGamFsbEF1ZGl0Um9sZUFyblwiLCB7XG4gICAgICBrZXk6IFwiRmphbGxBdWRpdFJvbGVBcm5cIixcbiAgICAgIHZhbHVlOiB0aGlzLnJvbGUucm9sZUFybixcbiAgICAgIGRlc2NyaXB0aW9uOiBgQVJOIG9mIHRoZSBGamFsbCBhdWRpdCByb2xlIGZvciBvcmdhbmlzYXRpb24gJHtwcm9wcy5mamFsbE9yZ0lkfWAsXG4gICAgICBleHBvcnROYW1lOiBcIkZqYWxsQXVkaXRSb2xlQXJuXCJcbiAgICB9KTtcbiAgfVxufVxuIl19
|
|
@@ -1,10 +1,7 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
const aws_iam_1 = require("aws-cdk-lib/aws-iam");
|
|
6
|
-
const constructs_1 = require("constructs");
|
|
7
|
-
const platform_1 = require("./platform");
|
|
1
|
+
import { CfnOutput } from "aws-cdk-lib";
|
|
2
|
+
import { Role, AccountPrincipal, PolicyStatement, Effect } from "aws-cdk-lib/aws-iam";
|
|
3
|
+
import { Construct } from "constructs";
|
|
4
|
+
import { FJALL_PLATFORM_ACCOUNT_ID } from "./platform.js";
|
|
8
5
|
/**
|
|
9
6
|
* Per-account monitoring role for the Fjall platform.
|
|
10
7
|
*
|
|
@@ -14,19 +11,20 @@ const platform_1 = require("./platform");
|
|
|
14
11
|
*
|
|
15
12
|
* This replaces the previous per-app `FjallMonitoring-{appName}` roles.
|
|
16
13
|
*/
|
|
17
|
-
class AccountMonitoringRole extends
|
|
14
|
+
export class AccountMonitoringRole extends Construct {
|
|
15
|
+
role;
|
|
18
16
|
constructor(scope, id, props) {
|
|
19
17
|
super(scope, id);
|
|
20
|
-
this.role = new
|
|
18
|
+
this.role = new Role(this, "Role", {
|
|
21
19
|
roleName: "FjallMonitoring",
|
|
22
20
|
path: "/",
|
|
23
|
-
assumedBy: new
|
|
21
|
+
assumedBy: new AccountPrincipal(FJALL_PLATFORM_ACCOUNT_ID),
|
|
24
22
|
description: "Cross-account monitoring role for the Fjall platform. Grants read access to CloudWatch, ECS, RDS, S3, Lambda, ALB, Logs, and Cost Explorer.",
|
|
25
23
|
...(props?.fjallOrgId ? { externalIds: [props.fjallOrgId] } : {})
|
|
26
24
|
});
|
|
27
25
|
// CloudWatch Metrics
|
|
28
|
-
this.role.addToPolicy(new
|
|
29
|
-
effect:
|
|
26
|
+
this.role.addToPolicy(new PolicyStatement({
|
|
27
|
+
effect: Effect.ALLOW,
|
|
30
28
|
actions: [
|
|
31
29
|
"cloudwatch:GetMetricData",
|
|
32
30
|
"cloudwatch:GetMetricStatistics",
|
|
@@ -35,8 +33,8 @@ class AccountMonitoringRole extends constructs_1.Construct {
|
|
|
35
33
|
resources: ["*"]
|
|
36
34
|
}));
|
|
37
35
|
// ECS
|
|
38
|
-
this.role.addToPolicy(new
|
|
39
|
-
effect:
|
|
36
|
+
this.role.addToPolicy(new PolicyStatement({
|
|
37
|
+
effect: Effect.ALLOW,
|
|
40
38
|
actions: [
|
|
41
39
|
"ecs:DescribeServices",
|
|
42
40
|
"ecs:DescribeTasks",
|
|
@@ -47,8 +45,8 @@ class AccountMonitoringRole extends constructs_1.Construct {
|
|
|
47
45
|
resources: ["*"]
|
|
48
46
|
}));
|
|
49
47
|
// RDS
|
|
50
|
-
this.role.addToPolicy(new
|
|
51
|
-
effect:
|
|
48
|
+
this.role.addToPolicy(new PolicyStatement({
|
|
49
|
+
effect: Effect.ALLOW,
|
|
52
50
|
actions: [
|
|
53
51
|
"rds:DescribeDBInstances",
|
|
54
52
|
"rds:DescribeDBClusters",
|
|
@@ -58,8 +56,8 @@ class AccountMonitoringRole extends constructs_1.Construct {
|
|
|
58
56
|
resources: ["*"]
|
|
59
57
|
}));
|
|
60
58
|
// S3
|
|
61
|
-
this.role.addToPolicy(new
|
|
62
|
-
effect:
|
|
59
|
+
this.role.addToPolicy(new PolicyStatement({
|
|
60
|
+
effect: Effect.ALLOW,
|
|
63
61
|
actions: [
|
|
64
62
|
"s3:GetBucketLocation",
|
|
65
63
|
"s3:GetBucketMetricsConfiguration",
|
|
@@ -70,8 +68,8 @@ class AccountMonitoringRole extends constructs_1.Construct {
|
|
|
70
68
|
resources: ["*"]
|
|
71
69
|
}));
|
|
72
70
|
// Lambda
|
|
73
|
-
this.role.addToPolicy(new
|
|
74
|
-
effect:
|
|
71
|
+
this.role.addToPolicy(new PolicyStatement({
|
|
72
|
+
effect: Effect.ALLOW,
|
|
75
73
|
actions: [
|
|
76
74
|
"lambda:GetFunction",
|
|
77
75
|
"lambda:GetFunctionConfiguration",
|
|
@@ -81,8 +79,8 @@ class AccountMonitoringRole extends constructs_1.Construct {
|
|
|
81
79
|
resources: ["*"]
|
|
82
80
|
}));
|
|
83
81
|
// Application Load Balancer
|
|
84
|
-
this.role.addToPolicy(new
|
|
85
|
-
effect:
|
|
82
|
+
this.role.addToPolicy(new PolicyStatement({
|
|
83
|
+
effect: Effect.ALLOW,
|
|
86
84
|
actions: [
|
|
87
85
|
"elasticloadbalancing:DescribeLoadBalancers",
|
|
88
86
|
"elasticloadbalancing:DescribeTargetGroups",
|
|
@@ -92,8 +90,8 @@ class AccountMonitoringRole extends constructs_1.Construct {
|
|
|
92
90
|
resources: ["*"]
|
|
93
91
|
}));
|
|
94
92
|
// CloudWatch Logs
|
|
95
|
-
this.role.addToPolicy(new
|
|
96
|
-
effect:
|
|
93
|
+
this.role.addToPolicy(new PolicyStatement({
|
|
94
|
+
effect: Effect.ALLOW,
|
|
97
95
|
actions: [
|
|
98
96
|
"logs:FilterLogEvents",
|
|
99
97
|
"logs:GetLogEvents",
|
|
@@ -103,8 +101,8 @@ class AccountMonitoringRole extends constructs_1.Construct {
|
|
|
103
101
|
resources: ["*"]
|
|
104
102
|
}));
|
|
105
103
|
// Cost Explorer
|
|
106
|
-
this.role.addToPolicy(new
|
|
107
|
-
effect:
|
|
104
|
+
this.role.addToPolicy(new PolicyStatement({
|
|
105
|
+
effect: Effect.ALLOW,
|
|
108
106
|
actions: [
|
|
109
107
|
"ce:GetCostAndUsage",
|
|
110
108
|
"ce:GetCostAndUsageWithResources",
|
|
@@ -121,7 +119,7 @@ class AccountMonitoringRole extends constructs_1.Construct {
|
|
|
121
119
|
],
|
|
122
120
|
resources: ["*"]
|
|
123
121
|
}));
|
|
124
|
-
new
|
|
122
|
+
new CfnOutput(this, "FjallMonitoringRoleArn", {
|
|
125
123
|
key: "FjallMonitoringRoleArn",
|
|
126
124
|
value: this.role.roleArn,
|
|
127
125
|
description: "ARN of the per-account Fjall monitoring role",
|
|
@@ -129,5 +127,3 @@ class AccountMonitoringRole extends constructs_1.Construct {
|
|
|
129
127
|
});
|
|
130
128
|
}
|
|
131
129
|
}
|
|
132
|
-
exports.AccountMonitoringRole = AccountMonitoringRole;
|
|
133
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNjb3VudE1vbml0b3JpbmdSb2xlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vbGliL2NvbmZpZy9hd3MvYWNjb3VudE1vbml0b3JpbmdSb2xlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDZDQUF3QztBQUN4QyxpREFLNkI7QUFDN0IsMkNBQXVDO0FBQ3ZDLHlDQUF1RDtBQVV2RDs7Ozs7Ozs7R0FRRztBQUNILE1BQWEscUJBQXNCLFNBQVEsc0JBQVM7SUFHbEQsWUFDRSxLQUFnQixFQUNoQixFQUFVLEVBQ1YsS0FBa0M7UUFFbEMsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVqQixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksY0FBSSxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUU7WUFDakMsUUFBUSxFQUFFLGlCQUFpQjtZQUMzQixJQUFJLEVBQUUsR0FBRztZQUNULFNBQVMsRUFBRSxJQUFJLDBCQUFnQixDQUFDLG9DQUF5QixDQUFDO1lBQzFELFdBQVcsRUFDVCw2SUFBNkk7WUFDL0ksR0FBRyxDQUFDLEtBQUssRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUUsV0FBVyxFQUFFLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztTQUNsRSxDQUFDLENBQUM7UUFFSCxxQkFBcUI7UUFDckIsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQ25CLElBQUkseUJBQWUsQ0FBQztZQUNsQixNQUFNLEVBQUUsZ0JBQU0sQ0FBQyxLQUFLO1lBQ3BCLE9BQU8sRUFBRTtnQkFDUCwwQkFBMEI7Z0JBQzFCLGdDQUFnQztnQkFDaEMsd0JBQXdCO2FBQ3pCO1lBQ0QsU0FBUyxFQUFFLENBQUMsR0FBRyxDQUFDO1NBQ2pCLENBQUMsQ0FDSCxDQUFDO1FBRUYsTUFBTTtRQUNOLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUNuQixJQUFJLHlC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ckMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUNGO0FBbkpELHNEQW1KQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENmbk91dHB1dCB9IGZyb20gXCJhd3MtY2RrLWxpYlwiO1xuaW1wb3J0IHtcbiAgUm9sZSxcbiAgQWNjb3VudFByaW5jaXBhbCxcbiAgUG9saWN5U3RhdGVtZW50LFxuICBFZmZlY3Rcbn0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1pYW1cIjtcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5pbXBvcnQgeyBGSkFMTF9QTEFURk9STV9BQ0NPVU5UX0lEIH0gZnJvbSBcIi4vcGxhdGZvcm1cIjtcblxuZXhwb3J0IGludGVyZmFjZSBBY2NvdW50TW9uaXRvcmluZ1JvbGVQcm9wcyB7XG4gIC8qKlxuICAgKiBPcHRpb25hbCBGamFsbCBvcmdhbmlzYXRpb24gSUQuIFdoZW4gcHJvdmlkZWQsIHVzZWQgYXMgdGhlIEV4dGVybmFsSWRcbiAgICogY29uZGl0aW9uIGZvciBhZGRpdGlvbmFsIGFzc3VtZS1yb2xlIHNlY3VyaXR5LlxuICAgKi9cbiAgZmphbGxPcmdJZD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBQZXItYWNjb3VudCBtb25pdG9yaW5nIHJvbGUgZm9yIHRoZSBGamFsbCBwbGF0Zm9ybS5cbiAqXG4gKiBDcmVhdGVzIGEgc2luZ2xlIGBGamFsbE1vbml0b3JpbmdgIElBTSByb2xlIHBlciBBV1MgYWNjb3VudCAoaW4gdGhlIEFjY291bnQgc3RhY2spXG4gKiB0aGF0IGdyYW50cyB0aGUgRmphbGwgcGxhdGZvcm0gcmVhZCBhY2Nlc3MgdG8gQ2xvdWRXYXRjaCBtZXRyaWNzLCBFQ1MsIFJEUywgUzMsXG4gKiBMYW1iZGEsIEFMQiwgQ2xvdWRXYXRjaCBMb2dzLCBhbmQgQ29zdCBFeHBsb3Jlci5cbiAqXG4gKiBUaGlzIHJlcGxhY2VzIHRoZSBwcmV2aW91cyBwZXItYXBwIGBGamFsbE1vbml0b3Jpbmcte2FwcE5hbWV9YCByb2xlcy5cbiAqL1xuZXhwb3J0IGNsYXNzIEFjY291bnRNb25pdG9yaW5nUm9sZSBleHRlbmRzIENvbnN0cnVjdCB7XG4gIHB1YmxpYyByZWFkb25seSByb2xlOiBSb2xlO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHNjb3BlOiBDb25zdHJ1Y3QsXG4gICAgaWQ6IHN0cmluZyxcbiAgICBwcm9wcz86IEFjY291bnRNb25pdG9yaW5nUm9sZVByb3BzXG4gICkge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICB0aGlzLnJvbGUgPSBuZXcgUm9sZSh0aGlzLCBcIlJvbGVcIiwge1xuICAgICAgcm9sZU5hbWU6IFwiRmphbGxNb25pdG9yaW5nXCIsXG4gICAgICBwYXRoOiBcIi9cIixcbiAgICAgIGFzc3VtZWRCeTogbmV3IEFjY291bnRQcmluY2lwYWwoRkpBTExfUExBVEZPUk1fQUNDT1VOVF9JRCksXG4gICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgXCJDcm9zcy1hY2NvdW50IG1vbml0b3Jpbmcgcm9sZSBmb3IgdGhlIEZqYWxsIHBsYXRmb3JtLiBHcmFudHMgcmVhZCBhY2Nlc3MgdG8gQ2xvdWRXYXRjaCwgRUNTLCBSRFMsIFMzLCBMYW1iZGEsIEFMQiwgTG9ncywgYW5kIENvc3QgRXhwbG9yZXIuXCIsXG4gICAgICAuLi4ocHJvcHM/LmZqYWxsT3JnSWQgPyB7IGV4dGVybmFsSWRzOiBbcHJvcHMuZmphbGxPcmdJZF0gfSA6IHt9KVxuICAgIH0pO1xuXG4gICAgLy8gQ2xvdWRXYXRjaCBNZXRyaWNzXG4gICAgdGhpcy5yb2xlLmFkZFRvUG9saWN5KFxuICAgICAgbmV3IFBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgIGVmZmVjdDogRWZmZWN0LkFMTE9XLFxuICAgICAgICBhY3Rpb25zOiBbXG4gICAgICAgICAgXCJjbG91ZHdhdGNoOkdldE1ldHJpY0RhdGFcIixcbiAgICAgICAgICBcImNsb3Vkd2F0Y2g6R2V0TWV0cmljU3RhdGlzdGljc1wiLFxuICAgICAgICAgIFwiY2xvdWR3YXRjaDpMaXN0TWV0cmljc1wiXG4gICAgICAgIF0sXG4gICAgICAgIHJlc291cmNlczogW1wiKlwiXVxuICAgICAgfSlcbiAgICApO1xuXG4gICAgLy8gRUNTXG4gICAgdGhpcy5yb2xlLmFkZFRvUG9saWN5KFxuICAgICAgbmV3IFBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgIGVmZmVjdDogRWZmZWN0LkFMTE9XLFxuICAgICAgICBhY3Rpb25zOiBbXG4gICAgICAgICAgXCJlY3M6RGVzY3JpYmVTZXJ2aWNlc1wiLFxuICAgICAgICAgIFwiZWNzOkRlc2NyaWJlVGFza3NcIixcbiAgICAgICAgICBcImVjczpMaXN0VGFza3NcIixcbiAgICAgICAgICBcImVjczpEZXNjcmliZUNsdXN0ZXJzXCIsXG4gICAgICAgICAgXCJlY3M6TGlzdFNlcnZpY2VzXCJcbiAgICAgICAgXSxcbiAgICAgICAgcmVzb3VyY2VzOiBbXCIqXCJdXG4gICAgICB9KVxuICAgICk7XG5cbiAgICAvLyBSRFNcbiAgICB0aGlzLnJvbGUuYWRkVG9Qb2xpY3koXG4gICAgICBuZXcgUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgZWZmZWN0OiBFZmZlY3QuQUxMT1csXG4gICAgICAgIGFjdGlvbnM6IFtcbiAgICAgICAgICBcInJkczpEZXNjcmliZURCSW5zdGFuY2VzXCIsXG4gICAgICAgICAgXCJyZHM6RGVzY3JpYmVEQkNsdXN0ZXJzXCIsXG4gICAgICAgICAgXCJyZHM6RGVzY3JpYmVEQlByb3hpZXNcIixcbiAgICAgICAgICBcInJkczpMaXN0VGFnc0ZvclJlc291cmNlXCJcbiAgICAgICAgXSxcbiAgICAgICAgcmVzb3VyY2VzOiBbXCIqXCJdXG4gICAgICB9KVxuICAgICk7XG5cbiAgICAvLyBTM1xuICAgIHRoaXMucm9sZS5hZGRUb1BvbGljeShcbiAgICAgIG5ldyBQb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICBlZmZlY3Q6IEVmZmVjdC5BTExPVyxcbiAgICAgICAgYWN0aW9uczogW1xuICAgICAgICAgIFwiczM6R2V0QnVja2V0TG9jYXRpb25cIixcbiAgICAgICAgICBcInMzOkdldEJ1Y2tldE1ldHJpY3NDb25maWd1cmF0aW9uXCIsXG4gICAgICAgICAgXCJzMzpHZXRCdWNrZXRUYWdnaW5nXCIsXG4gICAgICAgICAgXCJzMzpMaXN0QnVja2V0XCIsXG4gICAgICAgICAgXCJzMzpMaXN0QWxsTXlCdWNrZXRzXCJcbiAgICAgICAgXSxcbiAgICAgICAgcmVzb3VyY2VzOiBbXCIqXCJdXG4gICAgICB9KVxuICAgICk7XG5cbiAgICAvLyBMYW1iZGFcbiAgICB0aGlzLnJvbGUuYWRkVG9Qb2xpY3koXG4gICAgICBuZXcgUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgZWZmZWN0OiBFZmZlY3QuQUxMT1csXG4gICAgICAgIGFjdGlvbnM6IFtcbiAgICAgICAgICBcImxhbWJkYTpHZXRGdW5jdGlvblwiLFxuICAgICAgICAgIFwibGFtYmRhOkdldEZ1bmN0aW9uQ29uZmlndXJhdGlvblwiLFxuICAgICAgICAgIFwibGFtYmRhOkxpc3RGdW5jdGlvbnNcIixcbiAgICAgICAgICBcImxhbWJkYTpMaXN0VGFnc1wiXG4gICAgICAgIF0sXG4gICAgICAgIHJlc291cmNlczogW1wiKlwiXVxuICAgICAgfSlcbiAgICApO1xuXG4gICAgLy8gQXBwbGljYXRpb24gTG9hZCBCYWxhbmNlclxuICAgIHRoaXMucm9sZS5hZGRUb1BvbGljeShcbiAgICAgIG5ldyBQb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICBlZmZlY3Q6IEVmZmVjdC5BTExPVyxcbiAgICAgICAgYWN0aW9uczogW1xuICAgICAgICAgIFwiZWxhc3RpY2xvYWRiYWxhbmNpbmc6RGVzY3JpYmVMb2FkQmFsYW5jZXJzXCIsXG4gICAgICAgICAgXCJlbGFzdGljbG9hZGJhbGFuY2luZzpEZXNjcmliZVRhcmdldEdyb3Vwc1wiLFxuICAgICAgICAgIFwiZWxhc3RpY2xvYWRiYWxhbmNpbmc6RGVzY3JpYmVUYXJnZXRIZWFsdGhcIixcbiAgICAgICAgICBcImVsYXN0aWNsb2FkYmFsYW5jaW5nOkRlc2NyaWJlVGFnc1wiXG4gICAgICAgIF0sXG4gICAgICAgIHJlc291cmNlczogW1wiKlwiXVxuICAgICAgfSlcbiAgICApO1xuXG4gICAgLy8gQ2xvdWRXYXRjaCBMb2dzXG4gICAgdGhpcy5yb2xlLmFkZFRvUG9saWN5KFxuICAgICAgbmV3IFBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgIGVmZmVjdDogRWZmZWN0LkFMTE9XLFxuICAgICAgICBhY3Rpb25zOiBbXG4gICAgICAgICAgXCJsb2dzOkZpbHRlckxvZ0V2ZW50c1wiLFxuICAgICAgICAgIFwibG9nczpHZXRMb2dFdmVudHNcIixcbiAgICAgICAgICBcImxvZ3M6RGVzY3JpYmVMb2dHcm91cHNcIixcbiAgICAgICAgICBcImxvZ3M6RGVzY3JpYmVMb2dTdHJlYW1zXCJcbiAgICAgICAgXSxcbiAgICAgICAgcmVzb3VyY2VzOiBbXCIqXCJdXG4gICAgICB9KVxuICAgICk7XG5cbiAgICAvLyBDb3N0IEV4cGxvcmVyXG4gICAgdGhpcy5yb2xlLmFkZFRvUG9saWN5KFxuICAgICAgbmV3IFBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgIGVmZmVjdDogRWZmZWN0LkFMTE9XLFxuICAgICAgICBhY3Rpb25zOiBbXG4gICAgICAgICAgXCJjZTpHZXRDb3N0QW5kVXNhZ2VcIixcbiAgICAgICAgICBcImNlOkdldENvc3RBbmRVc2FnZVdpdGhSZXNvdXJjZXNcIixcbiAgICAgICAgICBcImNlOkdldENvc3RGb3JlY2FzdFwiLFxuICAgICAgICAgIFwiY2U6R2V0Q29zdENhdGVnb3JpZXNcIixcbiAgICAgICAgICBcImNlOkdldFNhdmluZ3NQbGFuc1V0aWxpemF0aW9uXCIsXG4gICAgICAgICAgXCJjZTpHZXRTYXZpbmdzUGxhbnNVdGlsaXphdGlvbkRldGFpbHNcIixcbiAgICAgICAgICBcImNlOkdldFNhdmluZ3NQbGFuc0NvdmVyYWdlXCIsXG4gICAgICAgICAgXCJjZTpHZXRTYXZpbmdzUGxhbnNQdXJjaGFzZVJlY29tbWVuZGF0aW9uXCIsXG4gICAgICAgICAgXCJjZTpHZXRSZXNlcnZhdGlvblV0aWxpemF0aW9uXCIsXG4gICAgICAgICAgXCJjZTpHZXRSZXNlcnZhdGlvbkNvdmVyYWdlXCIsXG4gICAgICAgICAgXCJjZTpHZXRSZXNlcnZhdGlvblB1cmNoYXNlUmVjb21tZW5kYXRpb25cIixcbiAgICAgICAgICBcImNlOkdldFJpZ2h0c2l6aW5nUmVjb21tZW5kYXRpb25cIlxuICAgICAgICBdLFxuICAgICAgICByZXNvdXJjZXM6IFtcIipcIl1cbiAgICAgIH0pXG4gICAgKTtcblxuICAgIG5ldyBDZm5PdXRwdXQodGhpcywgXCJGamFsbE1vbml0b3JpbmdSb2xlQXJuXCIsIHtcbiAgICAgIGtleTogXCJGamFsbE1vbml0b3JpbmdSb2xlQXJuXCIsXG4gICAgICB2YWx1ZTogdGhpcy5yb2xlLnJvbGVBcm4sXG4gICAgICBkZXNjcmlwdGlvbjogXCJBUk4gb2YgdGhlIHBlci1hY2NvdW50IEZqYWxsIG1vbml0b3Jpbmcgcm9sZVwiLFxuICAgICAgZXhwb3J0TmFtZTogXCJGamFsbE1vbml0b3JpbmdSb2xlQXJuXCJcbiAgICB9KTtcbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { CfnOutput } from "aws-cdk-lib";
|
|
2
|
+
import type { ITopic } from "aws-cdk-lib/aws-sns";
|
|
3
|
+
import { Construct } from "constructs";
|
|
4
|
+
export declare class SharedAlarmTopic extends Construct {
|
|
5
|
+
readonly topic: ITopic;
|
|
6
|
+
readonly topicArn: CfnOutput;
|
|
7
|
+
constructor(scope: Construct, id: string);
|
|
8
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { CfnOutput } from "aws-cdk-lib";
|
|
2
|
+
import * as sns from "aws-cdk-lib/aws-sns";
|
|
3
|
+
import { Construct } from "constructs";
|
|
4
|
+
export class SharedAlarmTopic extends Construct {
|
|
5
|
+
topic;
|
|
6
|
+
topicArn;
|
|
7
|
+
constructor(scope, id) {
|
|
8
|
+
super(scope, id);
|
|
9
|
+
const topic = new sns.Topic(this, "AlarmNotifications", {
|
|
10
|
+
displayName: "Fjall CloudWatch Alarm Notifications"
|
|
11
|
+
});
|
|
12
|
+
this.topic = topic;
|
|
13
|
+
this.topicArn = new CfnOutput(this, "SharedAlarmTopicArn", {
|
|
14
|
+
key: "SharedAlarmTopicArn",
|
|
15
|
+
value: topic.topicArn,
|
|
16
|
+
exportName: "SharedAlarmTopicArn"
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
}
|
|
@@ -1,17 +1,12 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
const constructs_1 = require("constructs");
|
|
5
|
-
const cloudTrail_1 = require("../../resources/aws/logging/cloudTrail");
|
|
6
|
-
class ManagementEventsTrail extends constructs_1.Construct {
|
|
1
|
+
import { Construct } from "constructs";
|
|
2
|
+
import { Trail } from "../../resources/aws/logging/cloudTrail.js";
|
|
3
|
+
export class ManagementEventsTrail extends Construct {
|
|
7
4
|
constructor(scope, id, props) {
|
|
8
5
|
super(scope, id);
|
|
9
|
-
new
|
|
6
|
+
new Trail(this, "managementEventsTrail", {
|
|
10
7
|
bucketName: `cloudtrail-management-events-${props.accountId}-${props.region}`,
|
|
11
8
|
trailName: "managementEvents",
|
|
12
9
|
isMultiRegionTrail: true
|
|
13
10
|
});
|
|
14
11
|
}
|
|
15
12
|
}
|
|
16
|
-
exports.ManagementEventsTrail = ManagementEventsTrail;
|
|
17
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xvdWRUcmFpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9jb25maWcvYXdzL2Nsb3VkVHJhaWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsMkNBQXVDO0FBQ3ZDLHVFQUErRDtBQU8vRCxNQUFhLHFCQUFzQixTQUFRLHNCQUFTO0lBQ2xELFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBaUM7UUFDekUsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVqQixJQUFJLGtCQUFLLENBQUMsSUFBSSxFQUFFLHVCQUF1QixFQUFFO1lBQ3ZDLFVBQVUsRUFBRSxnQ0FBZ0MsS0FBSyxDQUFDLFNBQVMsSUFBSSxLQUFLLENBQUMsTUFBTSxFQUFFO1lBQzdFLFNBQVMsRUFBRSxrQkFBa0I7WUFDN0Isa0JBQWtCLEVBQUUsSUFBSTtTQUN6QixDQUFDLENBQUM7SUFDTCxDQUFDO0NBQ0Y7QUFWRCxzREFVQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5pbXBvcnQgeyBUcmFpbCB9IGZyb20gXCIuLi8uLi9yZXNvdXJjZXMvYXdzL2xvZ2dpbmcvY2xvdWRUcmFpbFwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIE1hbmFnZW1lbnRFdmVudHNUcmFpbFByb3BzIHtcbiAgYWNjb3VudElkOiBzdHJpbmc7XG4gIHJlZ2lvbjogc3RyaW5nO1xufVxuXG5leHBvcnQgY2xhc3MgTWFuYWdlbWVudEV2ZW50c1RyYWlsIGV4dGVuZHMgQ29uc3RydWN0IHtcbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IE1hbmFnZW1lbnRFdmVudHNUcmFpbFByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIG5ldyBUcmFpbCh0aGlzLCBcIm1hbmFnZW1lbnRFdmVudHNUcmFpbFwiLCB7XG4gICAgICBidWNrZXROYW1lOiBgY2xvdWR0cmFpbC1tYW5hZ2VtZW50LWV2ZW50cy0ke3Byb3BzLmFjY291bnRJZH0tJHtwcm9wcy5yZWdpb259YCxcbiAgICAgIHRyYWlsTmFtZTogXCJtYW5hZ2VtZW50RXZlbnRzXCIsXG4gICAgICBpc011bHRpUmVnaW9uVHJhaWw6IHRydWVcbiAgICB9KTtcbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { Construct } from "constructs";
|
|
2
|
+
export interface ConfigRecorderProps {
|
|
3
|
+
/** Record all supported resource types. Default: true */
|
|
4
|
+
allResources?: boolean;
|
|
5
|
+
/** Include global resource types (IAM, etc.). Default: true */
|
|
6
|
+
includeGlobalResources?: boolean;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* AWS Config recorder with S3 delivery channel.
|
|
10
|
+
* Records configuration changes to all supported resources.
|
|
11
|
+
* Prerequisite for SecurityHub compliance checks and Config Rules.
|
|
12
|
+
*/
|
|
13
|
+
export declare class ConfigRecorder extends Construct {
|
|
14
|
+
readonly deliveryBucketName: string;
|
|
15
|
+
constructor(scope: Construct, id: string, props?: ConfigRecorderProps);
|
|
16
|
+
}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { Duration, RemovalPolicy } from "aws-cdk-lib";
|
|
2
|
+
import { CfnConfigurationRecorder, CfnDeliveryChannel } from "aws-cdk-lib/aws-config";
|
|
3
|
+
import { Role, ServicePrincipal, ManagedPolicy } from "aws-cdk-lib/aws-iam";
|
|
4
|
+
import { Bucket, BucketEncryption, BlockPublicAccess } from "aws-cdk-lib/aws-s3";
|
|
5
|
+
import { Construct } from "constructs";
|
|
6
|
+
/**
|
|
7
|
+
* AWS Config recorder with S3 delivery channel.
|
|
8
|
+
* Records configuration changes to all supported resources.
|
|
9
|
+
* Prerequisite for SecurityHub compliance checks and Config Rules.
|
|
10
|
+
*/
|
|
11
|
+
export class ConfigRecorder extends Construct {
|
|
12
|
+
deliveryBucketName;
|
|
13
|
+
constructor(scope, id, props) {
|
|
14
|
+
super(scope, id);
|
|
15
|
+
const allResources = props?.allResources !== false;
|
|
16
|
+
const includeGlobalResources = props?.includeGlobalResources !== false;
|
|
17
|
+
// Delivery bucket -- S3-managed encryption, 90-day lifecycle, no public access
|
|
18
|
+
const deliveryBucket = new Bucket(this, "DeliveryBucket", {
|
|
19
|
+
encryption: BucketEncryption.S3_MANAGED,
|
|
20
|
+
blockPublicAccess: BlockPublicAccess.BLOCK_ALL,
|
|
21
|
+
enforceSSL: true,
|
|
22
|
+
removalPolicy: RemovalPolicy.RETAIN,
|
|
23
|
+
lifecycleRules: [{ expiration: Duration.days(90), enabled: true }]
|
|
24
|
+
});
|
|
25
|
+
this.deliveryBucketName = deliveryBucket.bucketName;
|
|
26
|
+
// IAM role for Config service
|
|
27
|
+
const configRole = new Role(this, "ConfigRole", {
|
|
28
|
+
assumedBy: new ServicePrincipal("config.amazonaws.com"),
|
|
29
|
+
managedPolicies: [
|
|
30
|
+
ManagedPolicy.fromAwsManagedPolicyName("service-role/AWS_ConfigRole")
|
|
31
|
+
]
|
|
32
|
+
});
|
|
33
|
+
deliveryBucket.grantReadWrite(configRole);
|
|
34
|
+
// Configuration recorder
|
|
35
|
+
const recorder = new CfnConfigurationRecorder(this, "Recorder", {
|
|
36
|
+
roleArn: configRole.roleArn,
|
|
37
|
+
recordingGroup: {
|
|
38
|
+
allSupported: allResources,
|
|
39
|
+
includeGlobalResourceTypes: includeGlobalResources
|
|
40
|
+
}
|
|
41
|
+
});
|
|
42
|
+
// Delivery channel
|
|
43
|
+
const deliveryChannel = new CfnDeliveryChannel(this, "DeliveryChannel", {
|
|
44
|
+
s3BucketName: deliveryBucket.bucketName,
|
|
45
|
+
configSnapshotDeliveryProperties: {
|
|
46
|
+
deliveryFrequency: "TwentyFour_Hours"
|
|
47
|
+
}
|
|
48
|
+
});
|
|
49
|
+
deliveryChannel.addDependency(recorder);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { Construct } from "constructs";
|
|
2
|
+
export interface ConfigRulePresetProps {
|
|
3
|
+
/** Preset to apply: "essential" (8 rules) or "production" (20 rules). */
|
|
4
|
+
preset: "essential" | "production";
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* Curated AWS Config Rule presets for common compliance checks.
|
|
8
|
+
* Each rule is deployed as a managed rule. Requires an active Config recorder
|
|
9
|
+
* in the same account (enforced at the Account stack level, not within this construct).
|
|
10
|
+
*/
|
|
11
|
+
export declare class ConfigRulePreset extends Construct {
|
|
12
|
+
constructor(scope: Construct, id: string, props: ConfigRulePresetProps);
|
|
13
|
+
}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { ManagedRule } from "aws-cdk-lib/aws-config";
|
|
2
|
+
import { Construct } from "constructs";
|
|
3
|
+
const ESSENTIAL_RULES = [
|
|
4
|
+
{ identifier: "ENCRYPTED_VOLUMES", name: "encrypted-volumes" },
|
|
5
|
+
{ identifier: "INCOMING_SSH_DISABLED", name: "restricted-ssh" },
|
|
6
|
+
{ identifier: "S3_BUCKET_SSL_REQUESTS_ONLY", name: "s3-ssl-only" },
|
|
7
|
+
{ identifier: "RDS_STORAGE_ENCRYPTED", name: "rds-encryption" },
|
|
8
|
+
{ identifier: "ROOT_ACCOUNT_MFA_ENABLED", name: "root-mfa" },
|
|
9
|
+
{ identifier: "IAM_ROOT_ACCESS_KEY_CHECK", name: "root-access-keys" },
|
|
10
|
+
{
|
|
11
|
+
identifier: "RESTRICTED_INCOMING_TRAFFIC",
|
|
12
|
+
name: "restricted-incoming-traffic"
|
|
13
|
+
},
|
|
14
|
+
{ identifier: "EC2_INSTANCE_NO_PUBLIC_IP", name: "ec2-no-public-ip" }
|
|
15
|
+
];
|
|
16
|
+
const PRODUCTION_EXTRA_RULES = [
|
|
17
|
+
{ identifier: "S3_BUCKET_PUBLIC_READ_PROHIBITED", name: "s3-public-read" },
|
|
18
|
+
{ identifier: "S3_BUCKET_PUBLIC_WRITE_PROHIBITED", name: "s3-public-write" },
|
|
19
|
+
{ identifier: "RDS_INSTANCE_PUBLIC_ACCESS_CHECK", name: "rds-not-public" },
|
|
20
|
+
{ identifier: "CLOUD_TRAIL_ENABLED", name: "cloudtrail-enabled" },
|
|
21
|
+
{ identifier: "VPC_FLOW_LOGS_ENABLED", name: "vpc-flow-logs" },
|
|
22
|
+
{ identifier: "IAM_USER_MFA_ENABLED", name: "iam-user-mfa" },
|
|
23
|
+
{
|
|
24
|
+
identifier: "LAMBDA_FUNCTION_PUBLIC_ACCESS_PROHIBITED",
|
|
25
|
+
name: "lambda-not-public"
|
|
26
|
+
},
|
|
27
|
+
{ identifier: "EBS_OPTIMIZED_INSTANCE", name: "ebs-optimised-instance" },
|
|
28
|
+
{
|
|
29
|
+
identifier: "SUBNET_AUTO_ASSIGN_PUBLIC_IP_DISABLED",
|
|
30
|
+
name: "subnet-no-public-ip"
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
identifier: "RDS_SNAPSHOTS_PUBLIC_PROHIBITED",
|
|
34
|
+
name: "rds-snapshots-private"
|
|
35
|
+
},
|
|
36
|
+
{ identifier: "EKS_ENDPOINT_NO_PUBLIC_ACCESS", name: "eks-private-endpoint" },
|
|
37
|
+
{
|
|
38
|
+
identifier: "S3_ACCOUNT_LEVEL_PUBLIC_ACCESS_BLOCKS_PERIODIC",
|
|
39
|
+
name: "s3-account-bpa"
|
|
40
|
+
}
|
|
41
|
+
];
|
|
42
|
+
const PRESET_RULES = {
|
|
43
|
+
essential: ESSENTIAL_RULES,
|
|
44
|
+
production: [...ESSENTIAL_RULES, ...PRODUCTION_EXTRA_RULES]
|
|
45
|
+
};
|
|
46
|
+
/**
|
|
47
|
+
* Curated AWS Config Rule presets for common compliance checks.
|
|
48
|
+
* Each rule is deployed as a managed rule. Requires an active Config recorder
|
|
49
|
+
* in the same account (enforced at the Account stack level, not within this construct).
|
|
50
|
+
*/
|
|
51
|
+
export class ConfigRulePreset extends Construct {
|
|
52
|
+
constructor(scope, id, props) {
|
|
53
|
+
super(scope, id);
|
|
54
|
+
const rules = PRESET_RULES[props.preset];
|
|
55
|
+
for (const rule of rules) {
|
|
56
|
+
new ManagedRule(this, rule.identifier, {
|
|
57
|
+
identifier: rule.identifier,
|
|
58
|
+
configRuleName: `fjall-${rule.name}`
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Construct } from "constructs";
|
|
2
|
-
import { BackupVault, BackupPlan } from "../../resources/aws/backup";
|
|
2
|
+
import { BackupVault, BackupPlan } from "../../resources/aws/backup/index.js";
|
|
3
3
|
import { BackupPlanRule } from "aws-cdk-lib/aws-backup";
|
|
4
4
|
export interface CustomBackupPlanConfig {
|
|
5
5
|
planName: string;
|