diff --git a/docker-compose.yml b/docker-compose.yml index 2c6dc85270..096449a2be 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -71,6 +71,15 @@ services: - GRAPL_LOG_LEVEL=${GRAPL_LOG_LEVEL:-ERROR} - "SOURCE_QUEUE_URL=http://sqs.us-east-1.amazonaws.com:9324/queue/grapl-node-identifier-queue" - "GRAPH_MERGER_QUEUE_URL=http://sqs.us-east-1.amazonaws.com:9324/queue/grapl-graph-merger-queue" + - STATIC_MAPPING_TABLE=local-grapl-static_mapping_table + - DYNAMIC_SESSION_TABLE=local-grapl-dynamic_session_table + - PROCESS_HISTORY_TABLE=local-grapl-process_history_table + - FILE_HISTORY_TABLE=local-grapl-file_history_table + - INBOUND_CONNECTION_HISTORY_TABLE=local-grapl-inbound_connection_history_table + - OUTBOUND_CONNECTION_HISTORY_TABLE=local-grapl-outbound_connection_history_table + - NETWORK_CONNECTION_HISTORY_TABLE=local-grapl-network_connection_history_table + - IP_CONNECTION_HISTORY_TABLE=local-grapl-ip_connection_history_table + - ASSET_ID_MAPPINGS=local-grapl-asset_id_mappings - RUST_LOG=${RUST_LOG:-ERROR} tty: false links: @@ -237,6 +246,7 @@ services: - "8124:8124" environment: - "IS_LOCAL=True" + - MG_ALPHAS=master_graph:9080 - GRAPL_LOG_LEVEL=${GRAPL_LOG_LEVEL:-ERROR} - GRAPL_DGRAPH_TTL_S=${GRAPL_DGRAPH_TTL_S:-600} - GRAPL_TTL_DELETE_BATCH_SIZE=${GRAPL_TTL_DELETE_BATCH_SIZE:-10} diff --git a/etc/local_grapl/local_dynamodb/provision_local_identity_table.py b/etc/local_grapl/local_dynamodb/provision_local_identity_table.py index 0d6cc5ec33..bf585e2537 100755 --- a/etc/local_grapl/local_dynamodb/provision_local_identity_table.py +++ b/etc/local_grapl/local_dynamodb/provision_local_identity_table.py @@ -3,20 +3,19 @@ import boto3 table_names = [ - "process_history_table", - "file_history_table", - "node_id_retry_table", - "outbound_connection_history_table", - "inbound_connection_history_table", - "network_connection_history_table", - "ip_connection_history_table", - "asset_id_mappings", - "dynamic_session_table", - "static_mapping_table", + "local-grapl-process_history_table", + "local-grapl-file_history_table", + "local-grapl-outbound_connection_history_table", + "local-grapl-inbound_connection_history_table", + "local-grapl-network_connection_history_table", + "local-grapl-ip_connection_history_table", + "local-grapl-asset_id_mappings", + "local-grapl-dynamic_session_table", + "local-grapl-static_mapping_table", ] table_defs = { - "network_connection_history_table": { + "local-grapl-network_connection_history_table": { "key_schema": [ {"KeyType": "HASH", "AttributeName": "pseudo_key"}, {"KeyType": "RANGE", "AttributeName": "create_time"}, @@ -26,7 +25,7 @@ {"AttributeName": "pseudo_key", "AttributeType": "S"}, ], }, - "inbound_connection_history_table": { + "local-grapl-inbound_connection_history_table": { "key_schema": [ {"KeyType": "HASH", "AttributeName": "pseudo_key"}, {"KeyType": "RANGE", "AttributeName": "create_time"}, @@ -36,19 +35,13 @@ {"AttributeName": "pseudo_key", "AttributeType": "S"}, ], }, - "node_id_retry_table": { + "local-grapl-static_mapping_table": { "key_schema": [{"KeyType": "HASH", "AttributeName": "pseudo_key"}], "attribute_definitions": [ {"AttributeName": "pseudo_key", "AttributeType": "S"} ], }, - "static_mapping_table": { - "key_schema": [{"KeyType": "HASH", "AttributeName": "pseudo_key"}], - "attribute_definitions": [ - {"AttributeName": "pseudo_key", "AttributeType": "S"} - ], - }, - "dynamic_session_table": { + "local-grapl-dynamic_session_table": { "key_schema": [ {"KeyType": "HASH", "AttributeName": "pseudo_key"}, {"KeyType": "RANGE", "AttributeName": "create_time"}, @@ -58,7 +51,7 @@ {"AttributeName": "pseudo_key", "AttributeType": "S"}, ], }, - "process_history_table": { + "local-grapl-process_history_table": { "key_schema": [ {"KeyType": "HASH", "AttributeName": "pseudo_key"}, {"KeyType": "RANGE", "AttributeName": "create_time"}, @@ -68,7 +61,7 @@ {"AttributeName": "pseudo_key", "AttributeType": "S"}, ], }, - "file_history_table": { + "local-grapl-file_history_table": { "key_schema": [ {"KeyType": "HASH", "AttributeName": "pseudo_key"}, {"KeyType": "RANGE", "AttributeName": "create_time"}, @@ -78,7 +71,7 @@ {"AttributeName": "pseudo_key", "AttributeType": "S"}, ], }, - "outbound_connection_history_table": { + "local-grapl-outbound_connection_history_table": { "key_schema": [ {"KeyType": "HASH", "AttributeName": "pseudo_key"}, {"KeyType": "RANGE", "AttributeName": "create_time"}, @@ -88,7 +81,7 @@ {"AttributeName": "pseudo_key", "AttributeType": "S"}, ], }, - "asset_id_mappings": { + "local-grapl-asset_id_mappings": { "key_schema": [ {"KeyType": "HASH", "AttributeName": "pseudo_key"}, {"KeyType": "RANGE", "AttributeName": "c_timestamp"}, @@ -98,7 +91,7 @@ {"AttributeName": "pseudo_key", "AttributeType": "S"}, ], }, - "ip_connection_history_table": { + "local-grapl-ip_connection_history_table": { "key_schema": [ {"KeyType": "HASH", "AttributeName": "pseudo_key"}, {"KeyType": "RANGE", "AttributeName": "create_time"}, diff --git a/src/js/grapl-cdk/.gitignore b/src/js/grapl-cdk/.gitignore index 620a397424..96eba04a81 100644 --- a/src/js/grapl-cdk/.gitignore +++ b/src/js/grapl-cdk/.gitignore @@ -2,7 +2,6 @@ !jest.config.js *.d.ts node_modules -.env # CDK asset staging directory .cdk.staging diff --git a/src/js/grapl-cdk/bin/grapl-cdk.ts b/src/js/grapl-cdk/bin/grapl-cdk.ts index 25d15d1ba6..6681e45c6e 100644 --- a/src/js/grapl-cdk/bin/grapl-cdk.ts +++ b/src/js/grapl-cdk/bin/grapl-cdk.ts @@ -3,32 +3,23 @@ import 'source-map-support/register'; import * as cdk from '@aws-cdk/core'; import { GraplCdkStack } from '../lib/grapl-cdk-stack'; -import { EngagementUx, EngagementEdge } from '../lib/engagement'; -import { GraphQLEndpoint } from '../lib/graphql'; +import { EngagementUx } from '../lib/engagement'; -const env = require('node-env-file'); - -env(__dirname + '/../.env'); +const deployName = 'Grapl-MYDEPLOYMENT'; const app = new cdk.App(); -const grapl = new GraplCdkStack(app, 'Grapl'); - -const engagement_edge = new EngagementEdge( - app, - 'EngagementEdge', - grapl.grapl_env -); - -const graphql_endpoint = new GraphQLEndpoint( - app, - 'GraphqlEndpoint', - grapl.grapl_env -); +const grapl = new GraplCdkStack(app, 'Grapl', { + version: 'latest', + stackName: deployName, + tags: {'grapl deployment': deployName}, +}); -const ux = new EngagementUx( +new EngagementUx( app, - 'EngagementUX', - grapl.grapl_env.prefix, - engagement_edge, - graphql_endpoint + 'EngagementUX', { + prefix: grapl.prefix, + engagement_edge: grapl.engagement_edge, + graphql_endpoint: grapl.graphql_endpoint, + stackName: deployName + '-EngagementUX', + } ); diff --git a/src/js/grapl-cdk/cdk.json b/src/js/grapl-cdk/cdk.json index 22fb7a4f14..e9dfc8b509 100644 --- a/src/js/grapl-cdk/cdk.json +++ b/src/js/grapl-cdk/cdk.json @@ -1,3 +1,6 @@ { - "app": "npx ts-node bin/grapl-cdk.ts" + "app": "npx ts-node bin/grapl-cdk.ts", + "context": { + "@aws-cdk/core:newStyleStackSynthesis": true + } } diff --git a/src/js/grapl-cdk/deploy_all.sh b/src/js/grapl-cdk/deploy_all.sh index eb02e326c8..fb5c4cb240 100755 --- a/src/js/grapl-cdk/deploy_all.sh +++ b/src/js/grapl-cdk/deploy_all.sh @@ -1,6 +1,6 @@ #!/usr/bin/env bash npm run build && -cdk deploy --require-approval=never Grapl EngagementEdge GraphqlEndpoint && \ +cdk deploy --require-approval=never Grapl && \ rm -rf ./edge_ux_package && \ cdk synth && \ cdk deploy --require-approval=never EngagementUX && \ diff --git a/src/js/grapl-cdk/lib/dgraph.ts b/src/js/grapl-cdk/lib/dgraph.ts index 2113e68548..62c68a0390 100644 --- a/src/js/grapl-cdk/lib/dgraph.ts +++ b/src/js/grapl-cdk/lib/dgraph.ts @@ -115,39 +115,44 @@ class Alpha extends cdk.Construct { } } +export interface DGraphEcsProps { + prefix: string, + vpc: ec2.Vpc, + alphaCount: number, + alphaPort: number + zeroCount: number, +} + export class DGraphEcs extends cdk.Construct { readonly alphas: [string, number][]; constructor( scope: cdk.Construct, id: string, - vpc: ec2.Vpc, - zeroCount: number, - alphaCount: number, - alphaPort: number + props: DGraphEcsProps, ) { super(scope, id); const cluster = new ecs.Cluster(this, 'EcsCluster', { - clusterName: `Grapl-${id}-EcsCluster`, - vpc: vpc + clusterName: `${props.prefix}-${id}-EcsCluster`, + vpc: props.vpc }); cluster.connections.allowInternally(ec2.Port.allTcp()); - const namespace = cluster.addDefaultCloudMapNamespace( + cluster.addDefaultCloudMapNamespace( { name: id + '.grapl', type: servicediscovery.NamespaceType.DNS_PRIVATE, - vpc + vpc: props.vpc, } ); cluster.addCapacity('ZeroGroupCapacity', { instanceType: new ec2.InstanceType("t3a.small"), - minCapacity: zeroCount, - maxCapacity: zeroCount, + minCapacity: props.zeroCount, + maxCapacity: props.zeroCount, } ); @@ -160,7 +165,7 @@ export class DGraphEcs extends cdk.Construct { 1 ); - for (let i = 1; i < zeroCount; i++) { + for (let i = 1; i < props.zeroCount; i++) { new Zero( this, id, @@ -176,12 +181,12 @@ export class DGraphEcs extends cdk.Construct { cluster.addCapacity('AlphaGroupCapacity', { instanceType: new ec2.InstanceType("t3a.2xlarge"), - minCapacity: alphaCount, - maxCapacity: alphaCount, + minCapacity: props.alphaCount, + maxCapacity: props.alphaCount, } ); - for (let i = 0; i < alphaCount; i++) { + for (let i = 0; i < props.alphaCount; i++) { const alpha = new Alpha( this, @@ -191,7 +196,7 @@ export class DGraphEcs extends cdk.Construct { "zero0" ); - this.alphas.push([alpha.name, alphaPort]); + this.alphas.push([alpha.name, props.alphaPort]); } }; diff --git a/src/js/grapl-cdk/lib/engagement.ts b/src/js/grapl-cdk/lib/engagement.ts index 8a887f4a44..9de2b8f725 100644 --- a/src/js/grapl-cdk/lib/engagement.ts +++ b/src/js/grapl-cdk/lib/engagement.ts @@ -9,10 +9,9 @@ import * as s3deploy from "@aws-cdk/aws-s3-deployment"; import * as aws from "aws-sdk"; -import { UserAuthDb } from "./userauthdb"; +import { GraplServiceProps } from './grapl-cdk-stack'; import { RemovalPolicy } from "@aws-cdk/core"; -import { GraphQLEndpoint } from '../lib/graphql'; -import { GraplEnvironementProps } from '../lib/grapl-cdk-stack'; +import { GraphQLEndpoint } from './graphql'; import * as fs from 'fs'; import * as path from 'path'; @@ -47,7 +46,6 @@ function getEdgeGatewayId( if (edgeId && graphId) { break } - } if (edgeId && graphId) { @@ -87,7 +85,7 @@ function replaceInFile( }); }; -export class EngagementEdge extends cdk.Stack { +export class EngagementEdge extends cdk.NestedStack { event_handler: lambda.Function; integration: apigateway.LambdaRestApi; name: string; @@ -96,38 +94,37 @@ export class EngagementEdge extends cdk.Stack { constructor( scope: cdk.Construct, id: string, - props: GraplEnvironementProps, + props: GraplServiceProps, ) { - super(scope, id, { stackName: 'Grapl-EngagementEdge' }); + super(scope, id); + const serviceName = props.prefix + '-EngagementEdge'; this.name = id + props.prefix; this.integrationName = id + props.prefix + 'Integration'; - const grapl_version = process.env.GRAPL_VERSION || "latest"; - this.event_handler = new lambda.Function( this, 'Handler', { runtime: lambda.Runtime.PYTHON_3_7, handler: `engagement_edge.app`, - functionName: 'Grapl-EngagementEdge-Handler', - code: lambda.Code.fromAsset(`./zips/engagement-edge-${grapl_version}.zip`), + functionName: serviceName + '-Handler', + code: lambda.Code.fromAsset(`./zips/engagement-edge-${props.version}.zip`), vpc: props.vpc, environment: { - "MG_ALPHAS": props.master_graph.alphaHostPorts().join(","), - "JWT_SECRET_ID": props.jwt_secret.secretArn, - "USER_AUTH_TABLE": props.user_auth_table.user_auth_table.tableName, + "MG_ALPHAS": props.masterGraph.alphaHostPorts().join(","), + "JWT_SECRET_ID": props.jwtSecret.secretArn, + "USER_AUTH_TABLE": props.userAuthTable.user_auth_table.tableName, "BUCKET_PREFIX": props.prefix, }, timeout: cdk.Duration.seconds(25), memorySize: 256, - description: grapl_version, + description: props.version, }); this.event_handler.currentVersion.addAlias('live'); if (this.event_handler.role) { - props.jwt_secret.grantRead(this.event_handler.role); + props.jwtSecret.grantRead(this.event_handler.role); } - props.user_auth_table.allowReadFromRole(this.event_handler); + props.userAuthTable.allowReadFromRole(this.event_handler); this.integration = new apigateway.LambdaRestApi( this, @@ -135,7 +132,7 @@ export class EngagementEdge extends cdk.Stack { { handler: this.event_handler, restApiName: this.integrationName, - endpointExportName: "EngagementEndpointApi", + endpointExportName: serviceName + '-EndpointApi', }, ); @@ -153,75 +150,67 @@ export class EngagementEdge extends cdk.Stack { } export class EngagementNotebook extends cdk.NestedStack { - securityGroup: ec2.SecurityGroup; - connections: ec2.Connections; constructor( scope: cdk.Construct, id: string, - prefix: string, - user_auth_db: UserAuthDb, - vpc: ec2.Vpc, + props: GraplServiceProps, ) { super(scope, id); - this.securityGroup = new ec2.SecurityGroup( - this, - 'SecurityGroup', - { vpc: vpc }); + const securityGroup = new ec2.SecurityGroup(this, 'SecurityGroup', { + vpc: props.vpc + }); - this.connections = new ec2.Connections({ - securityGroups: [this.securityGroup], + new ec2.Connections({ + securityGroups: [securityGroup], defaultPort: ec2.Port.allTcp() }); - const role = new iam.Role( - this, - 'Role', - { - assumedBy: new iam.ServicePrincipal('sagemaker.amazonaws.com') - } - ); + const role = new iam.Role(this, 'Role',{ + assumedBy: new iam.ServicePrincipal('sagemaker.amazonaws.com') + }); - user_auth_db.allowReadWriteFromRole(role); + props.userAuthTable.allowReadWriteFromRole(role); - const _notebook = new sagemaker.CfnNotebookInstance( + new sagemaker.CfnNotebookInstance( this, 'SageMakerEndpoint', { - notebookInstanceName: 'Grapl-Notebook', + notebookInstanceName: props.prefix + '-Notebook', instanceType: 'ml.t2.medium', - securityGroupIds: [this.securityGroup.securityGroupId], - subnetId: vpc.privateSubnets[0].subnetId, + securityGroupIds: [securityGroup.securityGroupId], + subnetId: props.vpc.privateSubnets[0].subnetId, directInternetAccess: 'Enabled', roleArn: role.roleArn } ); - } } +interface EngagementUxProps extends cdk.StackProps { + prefix: string, + engagement_edge: EngagementEdge, + graphql_endpoint: GraphQLEndpoint, +} + export class EngagementUx extends cdk.Stack { constructor( scope: cdk.Construct, id: string, - prefix: string, - edge: EngagementEdge, - graphql_endpoint: GraphQLEndpoint, + props: EngagementUxProps ) { - super(scope, id, { stackName: 'Grapl-EngagementUX' }); - - const bucketName = `${prefix}-engagement-ux-bucket`; + super(scope, id, props); const edgeBucket = new s3.Bucket(this, 'EdgeBucket', { - bucketName, + bucketName: props.prefix.toLowerCase() + '-engagement-ux-bucket', publicReadAccess: true, websiteIndexDocument: 'index.html', removalPolicy: RemovalPolicy.DESTROY }); getEdgeGatewayId( - [edge.integrationName, graphql_endpoint.integrationName], + [props.engagement_edge.integrationName, props.graphql_endpoint.integrationName], (loginGatewayId: string, graphQLGatewayId: string) => { const srcDir = path.join(__dirname, "../edge_ux/"); const packageDir = path.join(__dirname, "../edge_ux_package/"); diff --git a/src/js/grapl-cdk/lib/event_emitters.ts b/src/js/grapl-cdk/lib/event_emitters.ts index e3f2686962..14d89a34eb 100644 --- a/src/js/grapl-cdk/lib/event_emitters.ts +++ b/src/js/grapl-cdk/lib/event_emitters.ts @@ -2,14 +2,18 @@ import * as cdk from "@aws-cdk/core"; import * as s3 from "@aws-cdk/aws-s3"; import * as sns from "@aws-cdk/aws-sns"; import * as s3n from "@aws-cdk/aws-s3-notifications"; + import { RemovalPolicy } from "@aws-cdk/core"; -import {BlockPublicAccess, BucketEncryption} from "@aws-cdk/aws-s3"; +import { BlockPublicAccess, BucketEncryption } from "@aws-cdk/aws-s3"; export class EventEmitter { readonly bucket: s3.Bucket; readonly topic: sns.Topic; - constructor(scope: cdk.Construct, eventName: string) { + constructor( + scope: cdk.Construct, + eventName: string + ) { this.bucket = new s3.Bucket(scope, eventName + '-bucket', { diff --git a/src/js/grapl-cdk/lib/graphql.ts b/src/js/grapl-cdk/lib/graphql.ts index 9f2e40ad69..fa61892fb3 100644 --- a/src/js/grapl-cdk/lib/graphql.ts +++ b/src/js/grapl-cdk/lib/graphql.ts @@ -1,59 +1,56 @@ import * as cdk from "@aws-cdk/core"; import * as lambda from "@aws-cdk/aws-lambda"; import * as apigateway from "@aws-cdk/aws-apigateway"; -import { GraplEnvironementProps } from '../lib/grapl-cdk-stack'; -export class GraphQLEndpoint extends cdk.Stack { - event_handler: lambda.Function; - integration: apigateway.LambdaRestApi; - name: string; +import { GraplServiceProps } from './grapl-cdk-stack'; + +export class GraphQLEndpoint extends cdk.Construct { integrationName: string; constructor( parent: cdk.Construct, - name: string, - props: GraplEnvironementProps, + id: string, + props: GraplServiceProps, ) { - super(parent, name, { stackName: 'Grapl-GraphQLEndpoint' }); - - this.name = name + props.prefix - this.integrationName = name + props.prefix + 'GraphQLIntegration'; + super(parent, id); - const grapl_version = process.env.GRAPL_VERSION || "latest"; + const serviceName = props.prefix + '-GraphQL'; + this.integrationName = serviceName + '-Integration'; - this.event_handler = new lambda.Function( + const event_handler = new lambda.Function( this, 'Handler', { runtime: lambda.Runtime.NODEJS_12_X, handler: `server.handler`, - code: lambda.Code.fromAsset(`./zips/graphql-endpoint-${grapl_version}.zip`), + functionName: serviceName + '-Handler', + code: lambda.Code.fromAsset(`./zips/graphql-endpoint-${props.version}.zip`), vpc: props.vpc, environment: { - "MG_ALPHAS": props.master_graph.alphaHostPorts().join(","), - "JWT_SECRET_ID": props.jwt_secret.secretArn, + "MG_ALPHAS": props.masterGraph.alphaHostPorts().join(","), + "JWT_SECRET_ID": props.jwtSecret.secretArn, "BUCKET_PREFIX": props.prefix, }, timeout: cdk.Duration.seconds(25), memorySize: 128, - description: grapl_version, + description: props.version, } ); - this.event_handler.currentVersion.addAlias('live'); + event_handler.currentVersion.addAlias('live'); - if (this.event_handler.role) { - props.jwt_secret.grantRead(this.event_handler.role); + if (event_handler.role) { + props.jwtSecret.grantRead(event_handler.role); } - this.integration = new apigateway.LambdaRestApi( + const integration = new apigateway.LambdaRestApi( this, 'Integration', { - handler: this.event_handler, + handler: event_handler, restApiName: this.integrationName, - endpointExportName: "GraphQLEndpointApi", + endpointExportName: serviceName + '-EndpointApi', }, ); - this.integration.addUsagePlan('graphQLApiUsagePlan', { + integration.addUsagePlan('graphQLApiUsagePlan', { quota: { limit: 1_000_000, period: apigateway.Period.DAY, diff --git a/src/js/grapl-cdk/lib/grapl-cdk-stack.ts b/src/js/grapl-cdk/lib/grapl-cdk-stack.ts index 4fd077e3d7..96df6a947c 100644 --- a/src/js/grapl-cdk/lib/grapl-cdk-stack.ts +++ b/src/js/grapl-cdk/lib/grapl-cdk-stack.ts @@ -18,37 +18,41 @@ import {HistoryDb} from "./historydb"; import {EventEmitter} from "./event_emitters"; import {RedisCluster} from "./redis"; import {EngagementNotebook} from "./engagement"; +import { EngagementEdge } from './engagement'; +import { GraphQLEndpoint } from './graphql'; -class SysmonSubgraphGenerator extends cdk.NestedStack { +interface SysmonGraphGeneratorProps extends GraplServiceProps { + writesTo: s3.IBucket, +} + +class SysmonGraphGenerator extends cdk.Construct { constructor( scope: cdk.Construct, id: string, - prefix: string, - vpc: ec2.IVpc, - writes_to: s3.IBucket, + props: SysmonGraphGeneratorProps, ) { super(scope, id); - const sysmon_log = new EventEmitter(this, prefix + '-sysmon-log'); + const bucket_prefix = props.prefix.toLowerCase(); + const sysmon_log = new EventEmitter(this, bucket_prefix + '-sysmon-log'); - const event_cache = new RedisCluster(this, 'SysmonEventCache', vpc); + const event_cache = new RedisCluster(this, 'SysmonEventCache', props); event_cache.connections.allowFromAnyIpv4(ec2.Port.allTcp()); - const service = new Service( - this, - id, - { - environment: { - "BUCKET_PREFIX": prefix, - "EVENT_CACHE_ADDR": event_cache.cluster.attrRedisEndpointAddress, - "EVENT_CACHE_PORT": event_cache.cluster.attrRedisEndpointPort, - }, - vpc: vpc, - reads_from: sysmon_log.bucket, - subscribes_to: sysmon_log.topic, - writes_to: writes_to, - }); + const service = new Service(this, id, { + prefix: props.prefix, + environment: { + "BUCKET_PREFIX": bucket_prefix, + "EVENT_CACHE_ADDR": event_cache.cluster.attrRedisEndpointAddress, + "EVENT_CACHE_PORT": event_cache.cluster.attrRedisEndpointPort, + }, + vpc: props.vpc, + reads_from: sysmon_log.bucket, + subscribes_to: sysmon_log.topic, + writes_to: props.writesTo, + version: props.version, + }); service.event_handler.connections.allowToAnyIpv4( ec2.Port.tcp( @@ -59,10 +63,13 @@ class SysmonSubgraphGenerator extends cdk.NestedStack { ec2.Port.tcp( parseInt(event_cache.cluster.attrRedisEndpointPort) )); - } } +export interface NodeIdentifierProps extends GraplServiceProps { + writesTo: s3.IBucket, +} + class NodeIdentifier extends cdk.Construct { readonly bucket: s3.Bucket; readonly topic: sns.Topic; @@ -70,36 +77,43 @@ class NodeIdentifier extends cdk.Construct { constructor( scope: cdk.Construct, id: string, - prefix: string, - vpc: ec2.IVpc, - writes_to: s3.IBucket, + props: NodeIdentifierProps, ) { super(scope, id); - const history_db = new HistoryDb(this, 'graplhistorydb'); + const history_db = new HistoryDb(this, 'HistoryDB', props); - const unid_subgraphs = new EventEmitter(this, prefix + '-unid-subgraphs-generated'); + const bucket_prefix = props.prefix.toLowerCase(); + const unid_subgraphs = new EventEmitter(this, bucket_prefix + '-unid-subgraphs-generated'); this.bucket = unid_subgraphs.bucket; this.topic = unid_subgraphs.topic; - const retry_identity_cache = new RedisCluster(this, 'NodeIdentifierRetryCache', vpc); + const retry_identity_cache = new RedisCluster(this, 'NodeIdentifierRetryCache', props); retry_identity_cache.connections.allowFromAnyIpv4(ec2.Port.allTcp()); - const service = new Service( - this, - id, - { - environment: { - "BUCKET_PREFIX": prefix, - "RETRY_IDENTITY_CACHE_ADDR": retry_identity_cache.cluster.attrRedisEndpointAddress, - "RETRY_IDENTITY_CACHE_PORT": retry_identity_cache.cluster.attrRedisEndpointPort, - }, - vpc: vpc, - reads_from: unid_subgraphs.bucket, - subscribes_to: unid_subgraphs.topic, - writes_to: writes_to, - retry_code_name: 'node-identifier-retry-handler', - }); + const service = new Service(this, id, { + prefix: props.prefix, + environment: { + "BUCKET_PREFIX": bucket_prefix, + "RETRY_IDENTITY_CACHE_ADDR": retry_identity_cache.cluster.attrRedisEndpointAddress, + "RETRY_IDENTITY_CACHE_PORT": retry_identity_cache.cluster.attrRedisEndpointPort, + "STATIC_MAPPING_TABLE": history_db.static_mapping_table.tableName, + "DYNAMIC_SESSION_TABLE": history_db.dynamic_session_table.tableName, + "PROCESS_HISTORY_TABLE": history_db.proc_history.tableName, + "FILE_HISTORY_TABLE": history_db.file_history.tableName, + "INBOUND_CONNECTION_HISTORY_TABLE": history_db.inbound_connection_history.tableName, + "OUTBOUND_CONNECTION_HISTORY_TABLE": history_db.outbound_connection_history.tableName, + "NETWORK_CONNECTION_HISTORY_TABLE": history_db.network_connection_history.tableName, + "IP_CONNECTION_HISTORY_TABLE": history_db.ip_connection_history.tableName, + "ASSET_ID_MAPPINGS": history_db.asset_history.tableName, + }, + vpc: props.vpc, + reads_from: unid_subgraphs.bucket, + subscribes_to: unid_subgraphs.topic, + writes_to: props.writesTo, + retry_code_name: 'node-identifier-retry-handler', + version: props.version, + }); history_db.allowReadWrite(service); @@ -120,44 +134,50 @@ class NodeIdentifier extends cdk.Construct { } } +export interface GraphMergerProps extends GraplServiceProps { + writesTo: s3.IBucket, +} + class GraphMerger extends cdk.NestedStack { readonly bucket: s3.Bucket; constructor( scope: cdk.Construct, id: string, - prefix: string, - vpc: ec2.IVpc, - writes_to: s3.IBucket, - master_graph: DGraphEcs, + props: GraphMergerProps, ) { super(scope, id); - const subgraphs_generated = new EventEmitter(this, prefix + '-subgraphs-generated'); + const bucket_prefix = props.prefix.toLowerCase(); + const subgraphs_generated = new EventEmitter(this, bucket_prefix + '-subgraphs-generated'); this.bucket = subgraphs_generated.bucket; - const graph_merge_cache = new RedisCluster(this, 'GraphMergerMergedCache', vpc); + const graph_merge_cache = new RedisCluster(this, 'GraphMergerMergedCache', props); graph_merge_cache.connections.allowFromAnyIpv4(ec2.Port.allTcp()); - const service = new Service( - this, - id, - { - environment: { - "BUCKET_PREFIX": prefix, - "SUBGRAPH_MERGED_BUCKET": writes_to.bucketName, - "MG_ALPHAS": master_graph.alphaHostPorts().join(","), - "MERGED_CACHE_ADDR": graph_merge_cache.cluster.attrRedisEndpointAddress, - "MERGED_CACHE_PORT": graph_merge_cache.cluster.attrRedisEndpointPort, - }, - vpc: vpc, - reads_from: subgraphs_generated.bucket, - subscribes_to: subgraphs_generated.topic, - writes_to: writes_to, - }); + new Service(this, id, { + prefix: props.prefix, + environment: { + "BUCKET_PREFIX": bucket_prefix, + "SUBGRAPH_MERGED_BUCKET": props.writesTo.bucketName, + "MG_ALPHAS": props.masterGraph.alphaHostPorts().join(","), + "MERGED_CACHE_ADDR": graph_merge_cache.cluster.attrRedisEndpointAddress, + "MERGED_CACHE_PORT": graph_merge_cache.cluster.attrRedisEndpointPort, + }, + vpc: props.vpc, + reads_from: subgraphs_generated.bucket, + subscribes_to: subgraphs_generated.topic, + writes_to: props.writesTo, + version: props.version, + }); } } +export interface AnalyzerDispatchProps extends GraplServiceProps { + writesTo: s3.IBucket, + readsFrom: s3.IBucket, +} + class AnalyzerDispatch extends cdk.NestedStack { readonly bucket: s3.Bucket; readonly topic: sns.Topic; @@ -165,106 +185,99 @@ class AnalyzerDispatch extends cdk.NestedStack { constructor( scope: cdk.Construct, id: string, - prefix: string, - vpc: ec2.IVpc, - writes_to: s3.IBucket, - analyzer_bucket: s3.IBucket, + props: AnalyzerDispatchProps, ) { super(scope, id); - const subgraphs_merged = new EventEmitter(this, prefix + '-subgraphs-merged'); + const bucket_prefix = props.prefix.toLowerCase(); + const subgraphs_merged = new EventEmitter(this, bucket_prefix + '-subgraphs-merged'); this.bucket = subgraphs_merged.bucket; this.topic = subgraphs_merged.topic; - const dispatch_event_cache = new RedisCluster(this, 'DispatchedEventCache', vpc); + const dispatch_event_cache = new RedisCluster(this, 'DispatchedEventCache', props); dispatch_event_cache.connections.allowFromAnyIpv4(ec2.Port.allTcp()); - const service = new Service( - this, - id, - { - environment: { - "BUCKET_PREFIX": prefix, - "EVENT_CACHE_ADDR": dispatch_event_cache.cluster.attrRedisEndpointAddress, - "EVENT_CACHE_PORT": dispatch_event_cache.cluster.attrRedisEndpointPort, - "DISPATCHED_ANALYZER_BUCKET": writes_to.bucketName, - "SUBGRAPH_MERGED_BUCKET": subgraphs_merged.bucket.bucketName, - }, - vpc: vpc, - reads_from: subgraphs_merged.bucket, - subscribes_to: subgraphs_merged.topic, - writes_to: writes_to, - }); + const service = new Service(this, id, { + prefix: props.prefix, + environment: { + "BUCKET_PREFIX": bucket_prefix, + "EVENT_CACHE_ADDR": dispatch_event_cache.cluster.attrRedisEndpointAddress, + "EVENT_CACHE_PORT": dispatch_event_cache.cluster.attrRedisEndpointPort, + "DISPATCHED_ANALYZER_BUCKET": props.writesTo.bucketName, + "SUBGRAPH_MERGED_BUCKET": subgraphs_merged.bucket.bucketName, + }, + vpc: props.vpc, + reads_from: subgraphs_merged.bucket, + subscribes_to: subgraphs_merged.topic, + writes_to: props.writesTo, + version: props.version, + }); - service.readsFrom(analyzer_bucket, true); + service.readsFrom(props.readsFrom, true); service.event_handler.connections.allowToAnyIpv4(ec2.Port.allTcp(), 'Allow outbound to S3'); service.event_retry_handler.connections.allowToAnyIpv4(ec2.Port.allTcp(), 'Allow outbound to S3'); } } +export interface AnalyzerExecutorProps extends GraplServiceProps { + writesTo: s3.IBucket, + readsAnalyzersFrom: s3.IBucket, + modelPluginsBucket: s3.IBucket, +} + class AnalyzerExecutor extends cdk.NestedStack { - readonly count_cache: RedisCluster; - readonly message_cache: RedisCluster; - readonly hit_cache: RedisCluster; readonly bucket: s3.IBucket; - readonly topic: sns.ITopic; constructor( scope: cdk.Construct, id: string, - prefix: string, - vpc: ec2.IVpc, - reads_analyzers_from: s3.IBucket, - writes_events_to: s3.IBucket, - model_plugins_bucket: s3.IBucket, - master_graph: DGraphEcs, + props: AnalyzerExecutorProps, ) { super(scope, id); - const dispatched_analyzer = new EventEmitter(this, prefix + '-dispatched-analyzer'); + const bucket_prefix = props.prefix.toLowerCase(); + const dispatched_analyzer = new EventEmitter(this, bucket_prefix + '-dispatched-analyzer'); this.bucket = dispatched_analyzer.bucket; - this.topic = dispatched_analyzer.topic; - this.count_cache = new RedisCluster(this, 'ExecutorCountCache', vpc); - this.hit_cache = new RedisCluster(this, 'ExecutorHitCache', vpc); - this.message_cache = new RedisCluster(this, 'ExecutorMsgCache', vpc); - - const service = new Service( - this, - id, - { - environment: { - "ANALYZER_MATCH_BUCKET": writes_events_to.bucketName, - "BUCKET_PREFIX": prefix, - "MG_ALPHAS": master_graph.alphaHostPorts().join(","), - "COUNTCACHE_ADDR": this.count_cache.cluster.attrRedisEndpointAddress, - "COUNTCACHE_PORT": this.count_cache.cluster.attrRedisEndpointPort, - "MESSAGECACHE_ADDR": this.message_cache.cluster.attrRedisEndpointAddress, - "MESSAGECACHE_PORT": this.message_cache.cluster.attrRedisEndpointPort, - "HITCACHE_ADDR": this.hit_cache.cluster.attrRedisEndpointAddress, - "HITCACHE_PORT": this.hit_cache.cluster.attrRedisEndpointPort, - "GRPC_ENABLE_FORK_SUPPORT": "1", - }, - vpc: vpc, - reads_from: dispatched_analyzer.bucket, - writes_to: writes_events_to, - subscribes_to: dispatched_analyzer.topic, - opt: { - runtime: lambda.Runtime.PYTHON_3_7 - } - }); + const count_cache = new RedisCluster(this, 'ExecutorCountCache', props); + const hit_cache = new RedisCluster(this, 'ExecutorHitCache', props); + const message_cache = new RedisCluster(this, 'ExecutorMsgCache', props); + + const service = new Service(this, id, { + prefix: props.prefix, + environment: { + "ANALYZER_MATCH_BUCKET": props.writesTo.bucketName, + "BUCKET_PREFIX": bucket_prefix, + "MG_ALPHAS": props.masterGraph.alphaHostPorts().join(","), + "COUNTCACHE_ADDR": count_cache.cluster.attrRedisEndpointAddress, + "COUNTCACHE_PORT": count_cache.cluster.attrRedisEndpointPort, + "MESSAGECACHE_ADDR": message_cache.cluster.attrRedisEndpointAddress, + "MESSAGECACHE_PORT": message_cache.cluster.attrRedisEndpointPort, + "HITCACHE_ADDR": hit_cache.cluster.attrRedisEndpointAddress, + "HITCACHE_PORT": hit_cache.cluster.attrRedisEndpointPort, + "GRPC_ENABLE_FORK_SUPPORT": "1", + }, + vpc: props.vpc, + reads_from: dispatched_analyzer.bucket, + writes_to: props.writesTo, + subscribes_to: dispatched_analyzer.topic, + opt: { + runtime: lambda.Runtime.PYTHON_3_7 + }, + version: props.version, + }); // We need the List capability to find each of the analyzers - service.readsFrom(reads_analyzers_from, true); - service.readsFrom(model_plugins_bucket, true); + service.readsFrom(props.readsAnalyzersFrom, true); + service.readsFrom(props.modelPluginsBucket, true); // Need to be able to GetObject in order to HEAD, can be replaced with // a cache later, but safe so long as there is no LIST let policy = new iam.PolicyStatement(); policy.addActions('s3:GetObject'); - policy.addResources(writes_events_to.bucketArn); + policy.addResources(props.writesTo.bucketArn); service.event_handler.addToRolePolicy(policy); service.event_retry_handler.addToRolePolicy(policy); @@ -274,38 +287,39 @@ class AnalyzerExecutor extends cdk.NestedStack { } } +export interface EngagementCreatorProps extends GraplServiceProps { + publishesTo: sns.ITopic, +} + class EngagementCreator extends cdk.NestedStack { readonly bucket: s3.Bucket; constructor( scope: cdk.Construct, id: string, - prefix: string, - vpc: ec2.IVpc, - publishes_to: sns.ITopic, - master_graph: DGraphEcs, + props: EngagementCreatorProps, ) { super(scope, id); - const analyzer_matched_sugraphs = new EventEmitter(this, prefix + '-analyzer-matched-subgraphs'); + const bucket_prefix = props.prefix.toLowerCase(); + const analyzer_matched_sugraphs = new EventEmitter(this, bucket_prefix + '-analyzer-matched-subgraphs'); this.bucket = analyzer_matched_sugraphs.bucket; - const service = new Service( - this, - id, - { - environment: { - "MG_ALPHAS": master_graph.alphaHostPorts().join(","), - }, - vpc: vpc, - reads_from: analyzer_matched_sugraphs.bucket, - subscribes_to: analyzer_matched_sugraphs.topic, - opt: { - runtime: lambda.Runtime.PYTHON_3_7 - } - }); + const service = new Service(this, id, { + prefix: props.prefix, + environment: { + "MG_ALPHAS": props.masterGraph.alphaHostPorts().join(","), + }, + vpc: props.vpc, + reads_from: analyzer_matched_sugraphs.bucket, + subscribes_to: analyzer_matched_sugraphs.topic, + opt: { + runtime: lambda.Runtime.PYTHON_3_7 + }, + version: props.version, + }); - service.publishesToTopic(publishes_to); + service.publishesToTopic(props.publishesTo); service.event_handler.connections.allowToAnyIpv4(ec2.Port.allTcp(), 'Allow outbound to S3'); service.event_retry_handler.connections.allowToAnyIpv4(ec2.Port.allTcp(), 'Allow outbound to S3'); @@ -317,37 +331,37 @@ class DGraphTtl extends cdk.Construct { constructor( scope: cdk.Construct, - name: string, - vpc: ec2.IVpc, - master_graph: DGraphEcs + id: string, + props: GraplServiceProps, ) { - super(scope, name + "-stack"); + super(scope, id); - const grapl_version = process.env.GRAPL_VERSION || "latest"; + const serviceName = props.prefix + '-DGraphTtl'; - let event_handler = new lambda.Function( + const event_handler = new lambda.Function( this, "Handler", { runtime: Runtime.PYTHON_3_7, handler: "app.prune_expired_subgraphs", - functionName: "Grapl-DGraphTtl-Handler", - code: lambda.Code.fromAsset(`./zips/dgraph-ttl-${grapl_version}.zip`), - vpc: vpc, + functionName: serviceName + "-Handler", + code: lambda.Code.fromAsset(`./zips/dgraph-ttl-${props.version}.zip`), + vpc: props.vpc, environment: { - "MG_ALPHAS": master_graph.alphaHostPorts().join(","), + "MG_ALPHAS": props.masterGraph.alphaHostPorts().join(","), "GRAPL_DGRAPH_TTL_S": "2678400", // 60 * 60 * 24 * 31 == 1 month "GRAPL_LOG_LEVEL": "INFO", "GRAPL_TTL_DELETE_BATCH_SIZE": "1000" }, timeout: cdk.Duration.seconds(600), memorySize: 128, - description: grapl_version + description: props.version, } ); + event_handler.currentVersion.addAlias('live'); - let target = new targets.LambdaFunction(event_handler); + const target = new targets.LambdaFunction(event_handler); - let rule = new events.Rule( - scope, name + "-rule", { + const rule = new events.Rule( + scope, 'Rule', { schedule: events.Schedule.expression("rate(1 hour)") } ); @@ -355,66 +369,59 @@ class DGraphTtl extends cdk.Construct { } } +export interface ModelPluginDeployerProps extends GraplServiceProps { + modelPluginBucket: s3.IBucket, +} + class ModelPluginDeployer extends cdk.NestedStack { - event_handler: lambda.Function; - integration: apigateway.LambdaRestApi; - name: string; - integrationName: string; constructor( parent: cdk.Construct, - name: string, - prefix: string, - jwt_secret: secretsmanager.Secret, - master_graph: DGraphEcs, - model_plugin_bucket: s3.IBucket, - user_auth_table: UserAuthDb, - vpc: ec2.Vpc, + id: string, + props: ModelPluginDeployerProps, ) { - super(parent, name + '-stack'); + super(parent, id); - this.name = name + prefix; - this.integrationName = name + prefix + 'Integration'; + const serviceName = props.prefix + '-ModelPluginDeployer'; - const grapl_version = process.env.GRAPL_VERSION || "latest"; - - this.event_handler = new lambda.Function( + const event_handler = new lambda.Function( this, 'Handler', { runtime: Runtime.PYTHON_3_7, handler: `grapl_model_plugin_deployer.app`, - functionName: 'Grapl-ModelPluginDeployer-Handler', - code: lambda.Code.fromAsset(`./zips/model-plugin-deployer-${grapl_version}.zip`), - vpc: vpc, + functionName: serviceName + '-Handler', + code: lambda.Code.fromAsset(`./zips/model-plugin-deployer-${props.version}.zip`), + vpc: props.vpc, environment: { - "MG_ALPHAS": master_graph.alphaHostPorts().join(","), - "JWT_SECRET_ID": jwt_secret.secretArn, - "USER_AUTH_TABLE": user_auth_table.user_auth_table.tableName, - "BUCKET_PREFIX": prefix + "MG_ALPHAS": props.masterGraph.alphaHostPorts().join(","), + "JWT_SECRET_ID": props.jwtSecret.secretArn, + "USER_AUTH_TABLE": props.userAuthTable.user_auth_table.tableName, + "BUCKET_PREFIX": props.prefix, }, timeout: cdk.Duration.seconds(25), memorySize: 256, - description: grapl_version, + description: props.version, } ); - this.event_handler.currentVersion.addAlias('live'); + event_handler.currentVersion.addAlias('live'); - if (this.event_handler.role) { - jwt_secret.grantRead(this.event_handler.role); - user_auth_table.allowReadFromRole(this.event_handler.role); + if (event_handler.role) { + props.jwtSecret.grantRead(event_handler.role); + props.userAuthTable.allowReadFromRole(event_handler.role); - model_plugin_bucket.grantReadWrite(this.event_handler.role); - model_plugin_bucket.grantDelete(this.event_handler.role); + props.modelPluginBucket.grantReadWrite(event_handler.role); + props.modelPluginBucket.grantDelete(event_handler.role); } - this.integration = new apigateway.LambdaRestApi( + const integration = new apigateway.LambdaRestApi( this, - this.integrationName, + 'Integration', { - handler: this.event_handler, + restApiName: serviceName + '-Integration', + handler: event_handler, }, ); - this.integration.addUsagePlan('integrationApiUsagePlan', { + integration.addUsagePlan('integrationApiUsagePlan', { quota: { limit: 1000, period: apigateway.Period.DAY, @@ -427,154 +434,167 @@ class ModelPluginDeployer extends cdk.NestedStack { } } - -export interface GraplEnvironementProps { +export interface GraplServiceProps { prefix: string, - jwt_secret: secretsmanager.Secret, + version: string, + jwtSecret: secretsmanager.Secret, vpc: ec2.IVpc, - master_graph: DGraphEcs, - user_auth_table: UserAuthDb, + masterGraph: DGraphEcs, + userAuthTable: UserAuthDb, +} + +export interface GraplStackProps extends cdk.StackProps { + stackName: string, + version?: string, + graphAlphaCount?: number, + graphAlphaPort?: number, + graphZeroCount?: number, } export class GraplCdkStack extends cdk.Stack { - grapl_env: GraplEnvironementProps; + prefix: string; + engagement_edge: EngagementEdge; + graphql_endpoint: GraphQLEndpoint; - constructor(scope: cdk.Construct, id: string, props?: cdk.StackProps) { + constructor(scope: cdk.Construct, id: string, props: GraplStackProps) { super(scope, id, props); - const prefix = process.env.BUCKET_PREFIX || "my"; - - const mgZeroCount = Number(process.env.MG_ZEROS_COUNT) || 1; - const mgAlphaCount = Number(process.env.MG_ALPHAS_COUNT) || 1; - const mgAlphaPort = Number(process.env.MG_ALPHAS_PORT) || 9080; + this.prefix = props.stackName; + const bucket_prefix = this.prefix.toLowerCase(); - const grapl_vpc = new ec2.Vpc(this, 'VPC', { + const grapl_vpc = new ec2.Vpc(this, this.prefix + '-VPC', { natGateways: 1, enableDnsHostnames: true, enableDnsSupport: true, }); - const jwtSecret = new secretsmanager.Secret(this, 'EdgeJwtSecret', { description: 'The JWT secret that Grapl uses to authenticate its API', - secretName: 'EdgeJwtSecret', + secretName: this.prefix + '-EdgeJwtSecret', }); - const user_auth_table = new UserAuthDb(this, 'UserAuthTable'); + const user_auth_table = new UserAuthDb(this, 'UserAuthTable', { + table_name: this.prefix.toLowerCase() + '-user_auth_table' + }); + + const master_graph = new DGraphEcs( + this, + 'master-graph', { + prefix: this.prefix, + vpc: grapl_vpc, + alphaCount: props.graphZeroCount || 1, + alphaPort: props.graphAlphaPort || 9080, + zeroCount: props.graphAlphaCount || 1, + } + ); + + const graplProps = { + prefix: this.prefix, + version: props.version || 'latest', + jwtSecret: jwtSecret, + vpc: grapl_vpc, + masterGraph: master_graph, + userAuthTable: user_auth_table, + } - const analyzers_bucket = new s3.Bucket(this, prefix + '-analyzers-bucket', { - bucketName: prefix + '-analyzers-bucket', + const analyzers_bucket = new s3.Bucket(this, 'AnalyzersBucket', { + bucketName: bucket_prefix + '-analyzers-bucket', removalPolicy: cdk.RemovalPolicy.DESTROY, encryption: BucketEncryption.KMS_MANAGED, blockPublicAccess: BlockPublicAccess.BLOCK_ALL }); const engagements_created_topic = - new sns.Topic(this, id + '-engagements-created-topic', { - topicName: 'engagements-created-topic' + new sns.Topic(this, 'EngagementsCreatedTopic', { + topicName: this.prefix + '-engagements-created-topic' }); - const master_graph = new DGraphEcs( - this, - 'master-graph', - grapl_vpc, - mgZeroCount, - mgAlphaCount, - mgAlphaPort - ); - const engagement_creator = new EngagementCreator( this, - 'engagement-creator', - prefix, - grapl_vpc, - engagements_created_topic, - master_graph, + 'engagement-creator', { + publishesTo: engagements_created_topic, + ...graplProps, + }, ); new DGraphTtl( this, - "dgraph-ttl", - grapl_vpc, - master_graph + 'dgraph-ttl', + graplProps, ); - const model_plugins_bucket = new s3.Bucket(this, prefix + '-model-plugins-bucket', { - bucketName: prefix + '-model-plugins-bucket', + const model_plugins_bucket = new s3.Bucket(this, 'ModelPluginsBucket', { + bucketName: bucket_prefix + '-model-plugins-bucket', removalPolicy: cdk.RemovalPolicy.DESTROY, }); new ModelPluginDeployer( this, - 'model-plugin-deployer', - prefix, - jwtSecret, - master_graph, - model_plugins_bucket, - user_auth_table, - grapl_vpc, + 'model-plugin-deployer', { + modelPluginBucket: model_plugins_bucket, + ...graplProps + }, ); - const analyzer_executor = new AnalyzerExecutor( this, - 'analyzer-executor', - prefix, - grapl_vpc, - analyzers_bucket, - engagement_creator.bucket, - model_plugins_bucket, - master_graph, + 'analyzer-executor', { + writesTo: engagement_creator.bucket, + readsAnalyzersFrom: analyzers_bucket, + modelPluginsBucket: model_plugins_bucket, + ...graplProps + }, ); const analyzer_dispatch = new AnalyzerDispatch( this, - 'analyzer-dispatcher', - prefix, - grapl_vpc, - analyzer_executor.bucket, - analyzers_bucket, + 'analyzer-dispatcher', { + writesTo: analyzer_executor.bucket, + readsFrom: analyzers_bucket, + ...graplProps + }, ); const graph_merger = new GraphMerger( this, - 'graph-merger', - prefix, - grapl_vpc, - analyzer_dispatch.bucket, - master_graph, + 'graph-merger', { + writesTo: analyzer_dispatch.bucket, + ...graplProps, + }, ); const node_identifier = new NodeIdentifier( this, - 'node-identifier', - prefix, - grapl_vpc, - graph_merger.bucket, + 'node-identifier', { + writesTo: graph_merger.bucket, + ...graplProps, + } ); - new SysmonSubgraphGenerator( + new SysmonGraphGenerator( this, - 'sysmon-subgraph-generator', - prefix, - grapl_vpc, - node_identifier.bucket, + 'sysmon-subgraph-generator', { + writesTo: node_identifier.bucket, + ...graplProps + }, ); new EngagementNotebook( this, 'engagements', - prefix, - user_auth_table, - grapl_vpc, + graplProps, ); - this.grapl_env = { - prefix, - jwt_secret: jwtSecret, - vpc: grapl_vpc, - master_graph, - user_auth_table, - } + this.engagement_edge = new EngagementEdge( + this, + 'EngagementEdge', + graplProps + ); + + this.graphql_endpoint = new GraphQLEndpoint( + this, + 'GraphqlEndpoint', + graplProps, + ); } } diff --git a/src/js/grapl-cdk/lib/historydb.ts b/src/js/grapl-cdk/lib/historydb.ts index f66b7ca1e7..c02904311d 100644 --- a/src/js/grapl-cdk/lib/historydb.ts +++ b/src/js/grapl-cdk/lib/historydb.ts @@ -1,6 +1,7 @@ import * as cdk from "@aws-cdk/core"; import * as dynamodb from "@aws-cdk/aws-dynamodb"; +import { GraplServiceProps } from './grapl-cdk-stack'; import { Service } from "./service"; import { RemovalPolicy } from "@aws-cdk/core"; @@ -32,23 +33,26 @@ export class HistoryDb extends cdk.Construct { readonly network_connection_history: dynamodb.Table; readonly ip_connection_history: dynamodb.Table; readonly asset_history: dynamodb.Table; - readonly node_id_retry_table: dynamodb.Table; readonly dynamic_session_table: dynamodb.Table; readonly static_mapping_table: dynamodb.Table; - constructor(scope: cdk.Construct, id: string) { + constructor( + scope: cdk.Construct, + id: string, + props: GraplServiceProps, + ) { super(scope, id); - this.proc_history = create_table(this, 'process_history_table'); - this.file_history = create_table(this, 'file_history_table'); - this.outbound_connection_history = create_table(this, 'outbound_connection_history_table'); - this.inbound_connection_history = create_table(this, 'inbound_connection_history_table'); - this.network_connection_history = create_table(this, 'network_connection_history_table'); - this.ip_connection_history = create_table(this, 'ip_connection_history_table'); - this.dynamic_session_table = create_table(this, 'dynamic_session_table'); + this.proc_history = create_table(this, props.prefix + '-process_history_table'); + this.file_history = create_table(this, props.prefix + '-file_history_table'); + this.outbound_connection_history = create_table(this, props.prefix + '-outbound_connection_history_table'); + this.inbound_connection_history = create_table(this, props.prefix + '-inbound_connection_history_table'); + this.network_connection_history = create_table(this, props.prefix + '-network_connection_history_table'); + this.ip_connection_history = create_table(this, props.prefix + '-ip_connection_history_table'); + this.dynamic_session_table = create_table(this, props.prefix + '-dynamic_session_table'); - this.asset_history = new dynamodb.Table(this, 'asset_id_mappings', { - tableName: "asset_id_mappings", + this.asset_history = new dynamodb.Table(this, 'AssetIdMappings', { + tableName: props.prefix + '-asset_id_mappings', partitionKey: { name: 'pseudo_key', type: dynamodb.AttributeType.STRING @@ -61,8 +65,8 @@ export class HistoryDb extends cdk.Construct { removalPolicy: RemovalPolicy.DESTROY, }); - this.static_mapping_table = new dynamodb.Table(this, 'static_mapping_table', { - tableName: "static_mapping_table", + this.static_mapping_table = new dynamodb.Table(this, 'StaticMappingTable', { + tableName: props.prefix + '-static_mapping_table', partitionKey: { name: 'pseudo_key', type: dynamodb.AttributeType.STRING @@ -70,17 +74,6 @@ export class HistoryDb extends cdk.Construct { billingMode: dynamodb.BillingMode.PAY_PER_REQUEST, removalPolicy: RemovalPolicy.DESTROY, }); - - this.node_id_retry_table = new dynamodb.Table(this, 'node_id_retry_table', { - tableName: "node_id_retry_table", - partitionKey: { - name: 'pseudo_key', - type: dynamodb.AttributeType.STRING - }, - billingMode: dynamodb.BillingMode.PAY_PER_REQUEST, - timeToLiveAttribute: "ttl_ts", - removalPolicy: RemovalPolicy.DESTROY, - }); } allowReadWrite(service: Service) { @@ -91,7 +84,6 @@ export class HistoryDb extends cdk.Construct { this.network_connection_history.grantReadWriteData(service.event_handler); this.ip_connection_history.grantReadWriteData(service.event_handler); this.asset_history.grantReadWriteData(service.event_handler); - this.node_id_retry_table.grantReadWriteData(service.event_handler); this.static_mapping_table.grantReadWriteData(service.event_handler); this.dynamic_session_table.grantReadWriteData(service.event_handler); @@ -102,7 +94,6 @@ export class HistoryDb extends cdk.Construct { this.network_connection_history.grantReadWriteData(service.event_retry_handler); this.ip_connection_history.grantReadWriteData(service.event_retry_handler); this.asset_history.grantReadWriteData(service.event_retry_handler); - this.node_id_retry_table.grantReadWriteData(service.event_retry_handler); this.static_mapping_table.grantReadWriteData(service.event_retry_handler); this.dynamic_session_table.grantReadWriteData(service.event_retry_handler); } diff --git a/src/js/grapl-cdk/lib/redis.ts b/src/js/grapl-cdk/lib/redis.ts index d744b66472..a29b85638e 100644 --- a/src/js/grapl-cdk/lib/redis.ts +++ b/src/js/grapl-cdk/lib/redis.ts @@ -2,23 +2,31 @@ import * as cdk from "@aws-cdk/core"; import * as ec2 from "@aws-cdk/aws-ec2"; import * as elasticache from "@aws-cdk/aws-elasticache"; +import { GraplServiceProps } from './grapl-cdk-stack'; + export class RedisCluster extends cdk.Construct { readonly securityGroup: ec2.SecurityGroup; readonly connections: ec2.Connections; readonly cluster: elasticache.CfnCacheCluster; - constructor(scope: cdk.Construct, id: string, vpc: ec2.IVpc) { + constructor( + scope: cdk.Construct, + id: string, + props: GraplServiceProps, + ) { super(scope, id); // Define a group for telling Elasticache which subnets to put cache nodes in. const subnetGroup = new elasticache.CfnSubnetGroup(this, 'ElasticacheSubnetGroup', { - description: `List of subnets used for redis cache ${id}`, - subnetIds: vpc.privateSubnets.map(subnet => subnet.subnetId), - cacheSubnetGroupName: id + '-cache-subnet-group', + description: `List of subnets used for redis cache ${props.prefix}-${id}`, + subnetIds: props.vpc.privateSubnets.map(subnet => subnet.subnetId), + cacheSubnetGroupName: `${props.prefix}-${id}-cache-subnet-group`, }); // The security group that defines network level access to the cluster - this.securityGroup = new ec2.SecurityGroup(this, 'Ec2SubnetGroup', { vpc: vpc }); + this.securityGroup = new ec2.SecurityGroup(this, 'Ec2SubnetGroup', { + vpc: props.vpc + }); this.connections = new ec2.Connections({ securityGroups: [this.securityGroup], diff --git a/src/js/grapl-cdk/lib/service.ts b/src/js/grapl-cdk/lib/service.ts index a93d815830..0ecd6ebfc3 100644 --- a/src/js/grapl-cdk/lib/service.ts +++ b/src/js/grapl-cdk/lib/service.ts @@ -34,6 +34,8 @@ class Queues { } export interface ServiceProps { + version: string, + prefix: string, environment?: any, vpc?: ec2.IVpc, reads_from?: s3.IBucket, @@ -53,13 +55,12 @@ export class Service { name: string, props: ServiceProps ) { + const serviceName = `${props.prefix}-${name}` const environment = props.environment; let retry_code_name = props.retry_code_name; const opt = props.opt; - const grapl_version = process.env.GRAPL_VERSION || "latest"; - const runtime = (opt && opt.runtime) ? opt.runtime : { @@ -71,7 +72,7 @@ export class Service { `${name}.lambda_handler` : name; - const queues = new Queues(scope, 'grapl-' + name); + const queues = new Queues(scope, serviceName.toLowerCase()); if (environment) { environment.SOURCE_QUEUE_URL = queues.queue.queueUrl; @@ -83,8 +84,8 @@ export class Service { { runtime: runtime, handler: handler, - functionName: `Grapl-${name}-Handler`, - code: lambda.Code.asset(`./zips/${name}-${grapl_version}.zip`), + functionName: serviceName + '-Handler', + code: lambda.Code.asset(`./zips/${name}-${props.version}.zip`), vpc: props.vpc, environment: { IS_RETRY: "False", @@ -92,7 +93,7 @@ export class Service { }, timeout: cdk.Duration.seconds(180), memorySize: 256, - description: grapl_version, + description: props.version, }); event_handler.currentVersion.addAlias('live'); @@ -110,8 +111,8 @@ export class Service { { runtime: runtime, handler: handler, - functionName: `Grapl-${name}-RetryHandler`, - code: lambda.Code.asset(`./zips/${retry_code_name}-${grapl_version}.zip`), + functionName: serviceName + '-RetryHandler', + code: lambda.Code.asset(`./zips/${retry_code_name}-${props.version}.zip`), vpc: props.vpc, environment: { IS_RETRY: "True", @@ -119,7 +120,7 @@ export class Service { }, timeout: cdk.Duration.seconds(360), memorySize: 512, - description: grapl_version, + description: props.version, }); event_retry_handler.currentVersion.addAlias('live'); diff --git a/src/js/grapl-cdk/lib/userauthdb.ts b/src/js/grapl-cdk/lib/userauthdb.ts index 883750a795..097f1baab4 100644 --- a/src/js/grapl-cdk/lib/userauthdb.ts +++ b/src/js/grapl-cdk/lib/userauthdb.ts @@ -5,18 +5,22 @@ import * as iam from "@aws-cdk/aws-iam"; import { Service } from "./service" import { RemovalPolicy } from "@aws-cdk/core"; +export interface UserAuthDbProps { + table_name: string, +} + export class UserAuthDb extends cdk.Construct { readonly user_auth_table: dynamodb.Table; constructor( scope: cdk.Construct, id: string, - + props: UserAuthDbProps, ) { super(scope, id); - this.user_auth_table = new dynamodb.Table(this, 'user_auth_table', { - tableName: 'user_auth_table', + this.user_auth_table = new dynamodb.Table(this, 'UserAuthTable', { + tableName: props.table_name, partitionKey: { name: 'username', type: dynamodb.AttributeType.STRING diff --git a/src/js/grapl-cdk/package-lock.json b/src/js/grapl-cdk/package-lock.json index 9ba7e3add1..b1233fbc45 100644 --- a/src/js/grapl-cdk/package-lock.json +++ b/src/js/grapl-cdk/package-lock.json @@ -5,277 +5,277 @@ "requires": true, "dependencies": { "@aws-cdk/assert": { - "version": "1.41.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/assert/-/assert-1.41.0.tgz", - "integrity": "sha512-UhOkDRYnV9efAv8Js8g+j+YPEY1N2UPDv9FHZC4owV98ymY2uLott+XGXW7Q6qTytXNCmAQBwRQzrQUaqYsbQg==", + "version": "1.46.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/assert/-/assert-1.46.0.tgz", + "integrity": "sha512-AfOy8P1RBj2eV8cHPYMa2gS0Esnk35eddTnOrhmNkgHLTAo+sgg4+CAdAsdeZ1VzLcwGH+Vb0tJ/6TSAweTRzg==", "dev": true, "requires": { - "@aws-cdk/cloud-assembly-schema": "1.41.0", - "@aws-cdk/cloudformation-diff": "1.41.0", - "@aws-cdk/core": "1.41.0", - "@aws-cdk/cx-api": "1.41.0", + "@aws-cdk/cloud-assembly-schema": "1.46.0", + "@aws-cdk/cloudformation-diff": "1.46.0", + "@aws-cdk/core": "1.46.0", + "@aws-cdk/cx-api": "1.46.0", "constructs": "^3.0.2" } }, "@aws-cdk/assets": { - "version": "1.41.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/assets/-/assets-1.41.0.tgz", - "integrity": "sha512-2Nz7MzO0k/HJwmeLCNMqs1feIFVCiII0AbXTgfTuHZ/IO2fZ0hRrYPr5lr/SCBLjPj6U5OtwMmKo4xt2U5qY0Q==", + "version": "1.46.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/assets/-/assets-1.46.0.tgz", + "integrity": "sha512-VMsPhDv3VceObgqiERKIsJL/B9R0R067KhsZZVdESxbox/lgehkDSkXJdjZI3eRoBKFv84kI4btz309m9xOFCw==", "requires": { - "@aws-cdk/core": "1.41.0", - "@aws-cdk/cx-api": "1.41.0", + "@aws-cdk/core": "1.46.0", + "@aws-cdk/cx-api": "1.46.0", "constructs": "^3.0.2" } }, "@aws-cdk/aws-apigateway": { - "version": "1.41.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-apigateway/-/aws-apigateway-1.41.0.tgz", - "integrity": "sha512-Y369xj+bai9/gGxExhhS4inSFPKWOxX5gaHD3GG4SkBm8HMTX0mA0V+8KhQG1um6uE6lDnah1/jWMY5PfLWkvQ==", - "requires": { - "@aws-cdk/assets": "1.41.0", - "@aws-cdk/aws-certificatemanager": "1.41.0", - "@aws-cdk/aws-ec2": "1.41.0", - "@aws-cdk/aws-elasticloadbalancingv2": "1.41.0", - "@aws-cdk/aws-iam": "1.41.0", - "@aws-cdk/aws-lambda": "1.41.0", - "@aws-cdk/aws-logs": "1.41.0", - "@aws-cdk/aws-s3": "1.41.0", - "@aws-cdk/aws-s3-assets": "1.41.0", - "@aws-cdk/core": "1.41.0", - "@aws-cdk/cx-api": "1.41.0", + "version": "1.46.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-apigateway/-/aws-apigateway-1.46.0.tgz", + "integrity": "sha512-ih2DnNJKRdHb5D+s+XHF1fCjEoMTrasT1Ki+nmH9EXkF957iwIjQo8skPgzlEm8+Ljo7Cj9d1hx7gMTk+3Kt1w==", + "requires": { + "@aws-cdk/assets": "1.46.0", + "@aws-cdk/aws-certificatemanager": "1.46.0", + "@aws-cdk/aws-ec2": "1.46.0", + "@aws-cdk/aws-elasticloadbalancingv2": "1.46.0", + "@aws-cdk/aws-iam": "1.46.0", + "@aws-cdk/aws-lambda": "1.46.0", + "@aws-cdk/aws-logs": "1.46.0", + "@aws-cdk/aws-s3": "1.46.0", + "@aws-cdk/aws-s3-assets": "1.46.0", + "@aws-cdk/core": "1.46.0", + "@aws-cdk/cx-api": "1.46.0", "constructs": "^3.0.2" } }, "@aws-cdk/aws-applicationautoscaling": { - "version": "1.41.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-applicationautoscaling/-/aws-applicationautoscaling-1.41.0.tgz", - "integrity": "sha512-K0nmvEVlCLSO0K/8Np0Do8biMpetpBxbQqS6i9I6B4U/r8m5QAgU8UhEo0zYygDbiyWsTEne7zPI679hvQhxhQ==", - "requires": { - "@aws-cdk/aws-autoscaling-common": "1.41.0", - "@aws-cdk/aws-cloudwatch": "1.41.0", - "@aws-cdk/aws-iam": "1.41.0", - "@aws-cdk/core": "1.41.0", + "version": "1.46.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-applicationautoscaling/-/aws-applicationautoscaling-1.46.0.tgz", + "integrity": "sha512-VyHs8+gxrTkM3yj9XhA4PeXesucEvPEgY40sgRlq0fzxVEbfkqHfXDIyTvmR2loc3cbnioVvdds0CbrazJ1u8A==", + "requires": { + "@aws-cdk/aws-autoscaling-common": "1.46.0", + "@aws-cdk/aws-cloudwatch": "1.46.0", + "@aws-cdk/aws-iam": "1.46.0", + "@aws-cdk/core": "1.46.0", "constructs": "^3.0.2" } }, "@aws-cdk/aws-autoscaling": { - "version": "1.41.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-autoscaling/-/aws-autoscaling-1.41.0.tgz", - "integrity": "sha512-EWZaCCvn5PIiFZmEnh6IdXaXUMUkBZqXTelbuuacBss2BDZl05aEnlXXDKQv85txXD+a3FbnUeU6QbXLM8vafQ==", - "requires": { - "@aws-cdk/aws-autoscaling-common": "1.41.0", - "@aws-cdk/aws-cloudwatch": "1.41.0", - "@aws-cdk/aws-ec2": "1.41.0", - "@aws-cdk/aws-elasticloadbalancing": "1.41.0", - "@aws-cdk/aws-elasticloadbalancingv2": "1.41.0", - "@aws-cdk/aws-iam": "1.41.0", - "@aws-cdk/aws-sns": "1.41.0", - "@aws-cdk/core": "1.41.0", + "version": "1.46.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-autoscaling/-/aws-autoscaling-1.46.0.tgz", + "integrity": "sha512-NqpgfbqBYVZnBFTBSvIxxUjfoKzYh19tL1G34S2tilUM2dntS9jL8uRWYK9Rqb0gPVXAZhpYHCHLgZnIb4GXDA==", + "requires": { + "@aws-cdk/aws-autoscaling-common": "1.46.0", + "@aws-cdk/aws-cloudwatch": "1.46.0", + "@aws-cdk/aws-ec2": "1.46.0", + "@aws-cdk/aws-elasticloadbalancing": "1.46.0", + "@aws-cdk/aws-elasticloadbalancingv2": "1.46.0", + "@aws-cdk/aws-iam": "1.46.0", + "@aws-cdk/aws-sns": "1.46.0", + "@aws-cdk/core": "1.46.0", "constructs": "^3.0.2" } }, "@aws-cdk/aws-autoscaling-common": { - "version": "1.41.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-autoscaling-common/-/aws-autoscaling-common-1.41.0.tgz", - "integrity": "sha512-fMlAz7cJUv+thVnUssG+/zL8th/vJob0NlkY/E4dXn9i9OkYtvF7SN5ek2Eki/t/iSfemYEKqX/LWWolfUfozw==", + "version": "1.46.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-autoscaling-common/-/aws-autoscaling-common-1.46.0.tgz", + "integrity": "sha512-XQwDvmt/f2KEBblaIGQ/TZH+o5Sg09pYaSz5iouiQf3LEut2Vk9A+VlQeFACNcVWYbHkeIjm2YjdUQkxNYsokQ==", "requires": { - "@aws-cdk/aws-iam": "1.41.0", - "@aws-cdk/core": "1.41.0", + "@aws-cdk/aws-iam": "1.46.0", + "@aws-cdk/core": "1.46.0", "constructs": "^3.0.2" } }, "@aws-cdk/aws-autoscaling-hooktargets": { - "version": "1.41.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-autoscaling-hooktargets/-/aws-autoscaling-hooktargets-1.41.0.tgz", - "integrity": "sha512-AQHKia+V7byoncKOzuhiLDlcLFHtE7b/qnoj9JRpIZmUgejiLmTuvCeRM/XnQGx2G78fCSE2s5nbxZ+c4qybnQ==", - "requires": { - "@aws-cdk/aws-autoscaling": "1.41.0", - "@aws-cdk/aws-iam": "1.41.0", - "@aws-cdk/aws-lambda": "1.41.0", - "@aws-cdk/aws-sns": "1.41.0", - "@aws-cdk/aws-sns-subscriptions": "1.41.0", - "@aws-cdk/aws-sqs": "1.41.0", - "@aws-cdk/core": "1.41.0", + "version": "1.46.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-autoscaling-hooktargets/-/aws-autoscaling-hooktargets-1.46.0.tgz", + "integrity": "sha512-yFCJAQtT3Subd618XFVuN2kneEVc8QbrpYluMj5GqBVkvR9Fz76xisi+5eoIkfgGRwF9xFTHnz6Iqou4D+fG7w==", + "requires": { + "@aws-cdk/aws-autoscaling": "1.46.0", + "@aws-cdk/aws-iam": "1.46.0", + "@aws-cdk/aws-lambda": "1.46.0", + "@aws-cdk/aws-sns": "1.46.0", + "@aws-cdk/aws-sns-subscriptions": "1.46.0", + "@aws-cdk/aws-sqs": "1.46.0", + "@aws-cdk/core": "1.46.0", "constructs": "^3.0.2" } }, "@aws-cdk/aws-batch": { - "version": "1.41.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-batch/-/aws-batch-1.41.0.tgz", - "integrity": "sha512-vYH8k8iqeZS0ycBMVSRPBkbo97OeJvmWhc9dmfkkDqmhxt3ooTKlYztaQRQD+TV8rzXEeSyCO/ZBVqq347D1wA==", - "requires": { - "@aws-cdk/aws-ec2": "1.41.0", - "@aws-cdk/aws-ecr": "1.41.0", - "@aws-cdk/aws-ecs": "1.41.0", - "@aws-cdk/aws-iam": "1.41.0", - "@aws-cdk/core": "1.41.0", + "version": "1.46.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-batch/-/aws-batch-1.46.0.tgz", + "integrity": "sha512-xWnOarZBcN8uYX5Ad0h3Nq1P2pcyfqssMiNA4O59ma7c2nnjSasVCJlqudpHrB3FKNNn4tMy78LXFziLVdixsQ==", + "requires": { + "@aws-cdk/aws-ec2": "1.46.0", + "@aws-cdk/aws-ecr": "1.46.0", + "@aws-cdk/aws-ecs": "1.46.0", + "@aws-cdk/aws-iam": "1.46.0", + "@aws-cdk/core": "1.46.0", "constructs": "^3.0.2" } }, "@aws-cdk/aws-certificatemanager": { - "version": "1.41.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-certificatemanager/-/aws-certificatemanager-1.41.0.tgz", - "integrity": "sha512-h2RnymJugNHkc3NAjARrUoR4AKMxqa+zVNbWX47vqoTCTGdlwScQu21h5+O0apFUU1hbtHlcDq7GAkaGLN6yGw==", - "requires": { - "@aws-cdk/aws-iam": "1.41.0", - "@aws-cdk/aws-lambda": "1.41.0", - "@aws-cdk/aws-route53": "1.41.0", - "@aws-cdk/core": "1.41.0", + "version": "1.46.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-certificatemanager/-/aws-certificatemanager-1.46.0.tgz", + "integrity": "sha512-hPPX439EXE0tIThMFArNtgUoEbh0tIg6NMmyw+zm6IKQTKj14EQU3bt0BtDFiNsNmNdoDRmu0knk4dZiDKm2gQ==", + "requires": { + "@aws-cdk/aws-iam": "1.46.0", + "@aws-cdk/aws-lambda": "1.46.0", + "@aws-cdk/aws-route53": "1.46.0", + "@aws-cdk/core": "1.46.0", "constructs": "^3.0.2" } }, "@aws-cdk/aws-cloudformation": { - "version": "1.41.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-cloudformation/-/aws-cloudformation-1.41.0.tgz", - "integrity": "sha512-kg2bXC3MPdM46NgaVYZLsvTRg7dZ4ZoDR//vMXQUrCzncM3cCJUayWc4VkmqIfV8x6L3n1nzokmNX+i8FA3WKw==", - "requires": { - "@aws-cdk/aws-iam": "1.41.0", - "@aws-cdk/aws-lambda": "1.41.0", - "@aws-cdk/aws-s3": "1.41.0", - "@aws-cdk/aws-sns": "1.41.0", - "@aws-cdk/core": "1.41.0", - "@aws-cdk/cx-api": "1.41.0", + "version": "1.46.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-cloudformation/-/aws-cloudformation-1.46.0.tgz", + "integrity": "sha512-1tZiUUdRUiZck8oGJQfgqzNBA2pkLhscnltExtOgM+AQP79FuDDe8V6Iy8inyVwXWxSenKM9GR0FF87RJNjiAQ==", + "requires": { + "@aws-cdk/aws-iam": "1.46.0", + "@aws-cdk/aws-lambda": "1.46.0", + "@aws-cdk/aws-s3": "1.46.0", + "@aws-cdk/aws-sns": "1.46.0", + "@aws-cdk/core": "1.46.0", + "@aws-cdk/cx-api": "1.46.0", "constructs": "^3.0.2" } }, "@aws-cdk/aws-cloudfront": { - "version": "1.41.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-cloudfront/-/aws-cloudfront-1.41.0.tgz", - "integrity": "sha512-T+26stl2M4EjDyE6AqqjdM+0FWrofZlhklgYOjt+TOEgFDAE/OYbCJAR+MFZaC2OFEikq28MW4Qma+JpKelKsw==", - "requires": { - "@aws-cdk/aws-certificatemanager": "1.41.0", - "@aws-cdk/aws-iam": "1.41.0", - "@aws-cdk/aws-kms": "1.41.0", - "@aws-cdk/aws-lambda": "1.41.0", - "@aws-cdk/aws-s3": "1.41.0", - "@aws-cdk/core": "1.41.0", + "version": "1.46.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-cloudfront/-/aws-cloudfront-1.46.0.tgz", + "integrity": "sha512-AzPq2WPQ81vDCko5+1fgkQF0spk+KZtvVLKERG6zvBSOJ78VymCyLC0O+S4hEA8OdWTZTjkzYBRn0u0BhwMDow==", + "requires": { + "@aws-cdk/aws-certificatemanager": "1.46.0", + "@aws-cdk/aws-iam": "1.46.0", + "@aws-cdk/aws-kms": "1.46.0", + "@aws-cdk/aws-lambda": "1.46.0", + "@aws-cdk/aws-s3": "1.46.0", + "@aws-cdk/core": "1.46.0", "constructs": "^3.0.2" } }, "@aws-cdk/aws-cloudwatch": { - "version": "1.41.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-cloudwatch/-/aws-cloudwatch-1.41.0.tgz", - "integrity": "sha512-fIEzfzkCDZRHH63pMKuc5+CaAKS2pskscLIETEGz1OOCjAS6Wfy955n6UFtbQa+vpr0koGPTx6AmVn5n28N7Uw==", + "version": "1.46.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-cloudwatch/-/aws-cloudwatch-1.46.0.tgz", + "integrity": "sha512-rIv2NZhkGEmrqzWegBqedaHN/07s9XUaOuRvqG6VoK3Dv1VeL+MpAL7zArWb3KueyAQuPQmdeGXSUENwZ/q9SA==", "requires": { - "@aws-cdk/aws-iam": "1.41.0", - "@aws-cdk/core": "1.41.0", + "@aws-cdk/aws-iam": "1.46.0", + "@aws-cdk/core": "1.46.0", "constructs": "^3.0.2" } }, "@aws-cdk/aws-codebuild": { - "version": "1.41.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-codebuild/-/aws-codebuild-1.41.0.tgz", - "integrity": "sha512-gwHyP4eT4lG66rKn5sLKQut+Ps5pOIn09e5c7bJIjpQkDYAjWooALJITB5uScvSDLzxmrUq+bQxkLEJsAmHuYA==", - "requires": { - "@aws-cdk/assets": "1.41.0", - "@aws-cdk/aws-cloudwatch": "1.41.0", - "@aws-cdk/aws-codecommit": "1.41.0", - "@aws-cdk/aws-ec2": "1.41.0", - "@aws-cdk/aws-ecr": "1.41.0", - "@aws-cdk/aws-ecr-assets": "1.41.0", - "@aws-cdk/aws-events": "1.41.0", - "@aws-cdk/aws-iam": "1.41.0", - "@aws-cdk/aws-kms": "1.41.0", - "@aws-cdk/aws-s3": "1.41.0", - "@aws-cdk/aws-s3-assets": "1.41.0", - "@aws-cdk/aws-secretsmanager": "1.41.0", - "@aws-cdk/core": "1.41.0", + "version": "1.46.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-codebuild/-/aws-codebuild-1.46.0.tgz", + "integrity": "sha512-dojmCjK0a4f4XUKfXmmGJeXQfBfHjocupj0JFDwyY93+r0dTN1gvN6IgCIbGn0q3TuX0Kvf/BHThazNlClej4A==", + "requires": { + "@aws-cdk/assets": "1.46.0", + "@aws-cdk/aws-cloudwatch": "1.46.0", + "@aws-cdk/aws-codecommit": "1.46.0", + "@aws-cdk/aws-ec2": "1.46.0", + "@aws-cdk/aws-ecr": "1.46.0", + "@aws-cdk/aws-ecr-assets": "1.46.0", + "@aws-cdk/aws-events": "1.46.0", + "@aws-cdk/aws-iam": "1.46.0", + "@aws-cdk/aws-kms": "1.46.0", + "@aws-cdk/aws-s3": "1.46.0", + "@aws-cdk/aws-s3-assets": "1.46.0", + "@aws-cdk/aws-secretsmanager": "1.46.0", + "@aws-cdk/core": "1.46.0", "constructs": "^3.0.2" } }, "@aws-cdk/aws-codecommit": { - "version": "1.41.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-codecommit/-/aws-codecommit-1.41.0.tgz", - "integrity": "sha512-+Nxma+81ZVnvXq+ZiTLDvwWayNwXf8oROMGNdQxnj/iPJY2LD9SoE6xDtcCCUPZS92JCq3uzGut4LZ/bUVPMBA==", + "version": "1.46.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-codecommit/-/aws-codecommit-1.46.0.tgz", + "integrity": "sha512-fiOSby8L9xxtyjysDtl/wU9eQgcheP9gCL1F+lIjOdqEzBzyrrWskfhXL10abX7WxK4i27ljHw4Xzog2qroBLA==", "requires": { - "@aws-cdk/aws-events": "1.41.0", - "@aws-cdk/aws-iam": "1.41.0", - "@aws-cdk/core": "1.41.0", + "@aws-cdk/aws-events": "1.46.0", + "@aws-cdk/aws-iam": "1.46.0", + "@aws-cdk/core": "1.46.0", "constructs": "^3.0.2" } }, "@aws-cdk/aws-codepipeline": { - "version": "1.41.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-codepipeline/-/aws-codepipeline-1.41.0.tgz", - "integrity": "sha512-sX3d1zCm3/4N60LUVmltrOTrKYsBk6LhfC9JWd9tfpyZNzxPRnVPygqD9W6+ZL+hHPOIvluMfSESVFRAPuYT3g==", - "requires": { - "@aws-cdk/aws-events": "1.41.0", - "@aws-cdk/aws-iam": "1.41.0", - "@aws-cdk/aws-kms": "1.41.0", - "@aws-cdk/aws-s3": "1.41.0", - "@aws-cdk/core": "1.41.0", + "version": "1.46.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-codepipeline/-/aws-codepipeline-1.46.0.tgz", + "integrity": "sha512-zqs8RMaSplQXxqnM2j1ydwxAO2OQ075N8Irxx9v/6K4b+ri7ALA3n+uWiuY1lvJrSM7e/m3+csZ49F/C4yBZhg==", + "requires": { + "@aws-cdk/aws-events": "1.46.0", + "@aws-cdk/aws-iam": "1.46.0", + "@aws-cdk/aws-kms": "1.46.0", + "@aws-cdk/aws-s3": "1.46.0", + "@aws-cdk/core": "1.46.0", "constructs": "^3.0.2" } }, "@aws-cdk/aws-cognito": { - "version": "1.41.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-cognito/-/aws-cognito-1.41.0.tgz", - "integrity": "sha512-EIHtMw8mD2sAVdnq8i4ckTHz2g0RHVPiTO7S0Fe+ThDv1MqgGy0JOnZfVgwA+GF4IcsjNDj4qf4+tGZS+40E/Q==", - "requires": { - "@aws-cdk/aws-certificatemanager": "1.41.0", - "@aws-cdk/aws-iam": "1.41.0", - "@aws-cdk/aws-lambda": "1.41.0", - "@aws-cdk/core": "1.41.0", - "@aws-cdk/custom-resources": "1.41.0", + "version": "1.46.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-cognito/-/aws-cognito-1.46.0.tgz", + "integrity": "sha512-O+tJKXuCyOPm2eIqHLb+/vaj+XBFv7JrisAMazkJAf8wsDCbLySUhEg3hlUn3xgs36y1uJqZnVktClkhtJWMdQ==", + "requires": { + "@aws-cdk/aws-certificatemanager": "1.46.0", + "@aws-cdk/aws-iam": "1.46.0", + "@aws-cdk/aws-lambda": "1.46.0", + "@aws-cdk/core": "1.46.0", + "@aws-cdk/custom-resources": "1.46.0", "constructs": "^3.0.2" } }, "@aws-cdk/aws-dynamodb": { - "version": "1.41.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-dynamodb/-/aws-dynamodb-1.41.0.tgz", - "integrity": "sha512-40DfoXn2MjUvib0le3E6k2YX6+JsGPGR6CFPIl/p95F4E/0uPHOmDDBAeYf/Y0W1SkWAkrTFBbRq2FBzFCrRLQ==", - "requires": { - "@aws-cdk/aws-applicationautoscaling": "1.41.0", - "@aws-cdk/aws-cloudwatch": "1.41.0", - "@aws-cdk/aws-iam": "1.41.0", - "@aws-cdk/aws-kms": "1.41.0", - "@aws-cdk/aws-lambda": "1.41.0", - "@aws-cdk/core": "1.41.0", - "@aws-cdk/custom-resources": "1.41.0", + "version": "1.46.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-dynamodb/-/aws-dynamodb-1.46.0.tgz", + "integrity": "sha512-jFGANrAHrMMKqYn63DEX4acAz7194yYgiCKkBG8YtXUkvzo/ioSC1wMTRs5W9jEj1vrLz09o6U0hs1a1Snm9Rw==", + "requires": { + "@aws-cdk/aws-applicationautoscaling": "1.46.0", + "@aws-cdk/aws-cloudwatch": "1.46.0", + "@aws-cdk/aws-iam": "1.46.0", + "@aws-cdk/aws-kms": "1.46.0", + "@aws-cdk/aws-lambda": "1.46.0", + "@aws-cdk/core": "1.46.0", + "@aws-cdk/custom-resources": "1.46.0", "constructs": "^3.0.2" } }, "@aws-cdk/aws-ec2": { - "version": "1.41.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-ec2/-/aws-ec2-1.41.0.tgz", - "integrity": "sha512-DWxmAlSDjZngYn4XENicvOv24wRBEfCVOwQLeo9gVkhj7r8KhdMB2CNSRN+kAzYVZYpBFcDRE52gsd0CMRy/1g==", - "requires": { - "@aws-cdk/aws-cloudwatch": "1.41.0", - "@aws-cdk/aws-iam": "1.41.0", - "@aws-cdk/aws-logs": "1.41.0", - "@aws-cdk/aws-s3": "1.41.0", - "@aws-cdk/aws-ssm": "1.41.0", - "@aws-cdk/cloud-assembly-schema": "1.41.0", - "@aws-cdk/core": "1.41.0", - "@aws-cdk/cx-api": "1.41.0", - "@aws-cdk/region-info": "1.41.0", + "version": "1.46.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-ec2/-/aws-ec2-1.46.0.tgz", + "integrity": "sha512-P44KtG/0b5CfC4aDIQMCq356wnuVaLxZ4DR2a1jrQdDaErL7oLslysL3gzQcsfxgpMNM7IzH5pDOp95N9X66dA==", + "requires": { + "@aws-cdk/aws-cloudwatch": "1.46.0", + "@aws-cdk/aws-iam": "1.46.0", + "@aws-cdk/aws-logs": "1.46.0", + "@aws-cdk/aws-s3": "1.46.0", + "@aws-cdk/aws-ssm": "1.46.0", + "@aws-cdk/cloud-assembly-schema": "1.46.0", + "@aws-cdk/core": "1.46.0", + "@aws-cdk/cx-api": "1.46.0", + "@aws-cdk/region-info": "1.46.0", "constructs": "^3.0.2" } }, "@aws-cdk/aws-ecr": { - "version": "1.41.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-ecr/-/aws-ecr-1.41.0.tgz", - "integrity": "sha512-W9Oa1tqcEJ3vWVB6OQ+YeiZvJYAx/p7qekmvAofuoYjGTIjlkEABYXg9SdwgnKIbFdcALRsQIcxMelcTnQ5WFA==", - "requires": { - "@aws-cdk/aws-events": "1.41.0", - "@aws-cdk/aws-iam": "1.41.0", - "@aws-cdk/core": "1.41.0", - "@aws-cdk/custom-resources": "1.41.0", + "version": "1.46.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-ecr/-/aws-ecr-1.46.0.tgz", + "integrity": "sha512-n8IFJkQ5OOReYJMTGIT6QbJ/Mv/+8wFItiIdyI95/UXVy5yN1ZlRdRhyhv4XFjICc0jW8cq9cD7azUv70riClg==", + "requires": { + "@aws-cdk/aws-events": "1.46.0", + "@aws-cdk/aws-iam": "1.46.0", + "@aws-cdk/core": "1.46.0", + "@aws-cdk/custom-resources": "1.46.0", "constructs": "^3.0.2" } }, "@aws-cdk/aws-ecr-assets": { - "version": "1.41.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-ecr-assets/-/aws-ecr-assets-1.41.0.tgz", - "integrity": "sha512-X4+H/bBENM/8rNJJlLIYLUCNPh3dSS0ekj8YdpAk8heQwwPZ2E6yoeN26wCjePhGgfBugjBut1tws8UdW3Dtew==", - "requires": { - "@aws-cdk/assets": "1.41.0", - "@aws-cdk/aws-ecr": "1.41.0", - "@aws-cdk/aws-iam": "1.41.0", - "@aws-cdk/aws-lambda": "1.41.0", - "@aws-cdk/aws-s3": "1.41.0", - "@aws-cdk/core": "1.41.0", - "@aws-cdk/cx-api": "1.41.0", + "version": "1.46.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-ecr-assets/-/aws-ecr-assets-1.46.0.tgz", + "integrity": "sha512-mbYmigGf/JlnAoaYex5SuQjWSZcq8lB00H6983g6526TMFxJ0x+H6EpCgVgk/Ym46yGxg16DrJft8n+ByMU2ag==", + "requires": { + "@aws-cdk/assets": "1.46.0", + "@aws-cdk/aws-ecr": "1.46.0", + "@aws-cdk/aws-iam": "1.46.0", + "@aws-cdk/aws-lambda": "1.46.0", + "@aws-cdk/aws-s3": "1.46.0", + "@aws-cdk/core": "1.46.0", + "@aws-cdk/cx-api": "1.46.0", "constructs": "^3.0.2", "minimatch": "^3.0.4" }, @@ -306,377 +306,379 @@ } }, "@aws-cdk/aws-ecs": { - "version": "1.41.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-ecs/-/aws-ecs-1.41.0.tgz", - "integrity": "sha512-55tL/r7elI+vvkPspGbxez/YA8ZhM6pZ+HGhUJjeXzIYsS5i7W/AcpYTXL9saBoHuCtQQkPrfz4l42rbWWwNfw==", - "requires": { - "@aws-cdk/aws-applicationautoscaling": "1.41.0", - "@aws-cdk/aws-autoscaling": "1.41.0", - "@aws-cdk/aws-autoscaling-hooktargets": "1.41.0", - "@aws-cdk/aws-certificatemanager": "1.41.0", - "@aws-cdk/aws-cloudwatch": "1.41.0", - "@aws-cdk/aws-ec2": "1.41.0", - "@aws-cdk/aws-ecr": "1.41.0", - "@aws-cdk/aws-ecr-assets": "1.41.0", - "@aws-cdk/aws-elasticloadbalancing": "1.41.0", - "@aws-cdk/aws-elasticloadbalancingv2": "1.41.0", - "@aws-cdk/aws-iam": "1.41.0", - "@aws-cdk/aws-lambda": "1.41.0", - "@aws-cdk/aws-logs": "1.41.0", - "@aws-cdk/aws-route53": "1.41.0", - "@aws-cdk/aws-route53-targets": "1.41.0", - "@aws-cdk/aws-secretsmanager": "1.41.0", - "@aws-cdk/aws-servicediscovery": "1.41.0", - "@aws-cdk/aws-sns": "1.41.0", - "@aws-cdk/aws-sqs": "1.41.0", - "@aws-cdk/aws-ssm": "1.41.0", - "@aws-cdk/core": "1.41.0", - "@aws-cdk/cx-api": "1.41.0", + "version": "1.46.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-ecs/-/aws-ecs-1.46.0.tgz", + "integrity": "sha512-8wOFRDPWIyFVzznrRLs1t2N2xRVIcFUND16x9+HJn07DPtLcxfqV2USwRezTY6gDLJd0ciy3lubmxRJp/KUTkg==", + "requires": { + "@aws-cdk/aws-applicationautoscaling": "1.46.0", + "@aws-cdk/aws-autoscaling": "1.46.0", + "@aws-cdk/aws-autoscaling-hooktargets": "1.46.0", + "@aws-cdk/aws-certificatemanager": "1.46.0", + "@aws-cdk/aws-cloudwatch": "1.46.0", + "@aws-cdk/aws-ec2": "1.46.0", + "@aws-cdk/aws-ecr": "1.46.0", + "@aws-cdk/aws-ecr-assets": "1.46.0", + "@aws-cdk/aws-elasticloadbalancing": "1.46.0", + "@aws-cdk/aws-elasticloadbalancingv2": "1.46.0", + "@aws-cdk/aws-iam": "1.46.0", + "@aws-cdk/aws-lambda": "1.46.0", + "@aws-cdk/aws-logs": "1.46.0", + "@aws-cdk/aws-route53": "1.46.0", + "@aws-cdk/aws-route53-targets": "1.46.0", + "@aws-cdk/aws-secretsmanager": "1.46.0", + "@aws-cdk/aws-servicediscovery": "1.46.0", + "@aws-cdk/aws-sns": "1.46.0", + "@aws-cdk/aws-sqs": "1.46.0", + "@aws-cdk/aws-ssm": "1.46.0", + "@aws-cdk/core": "1.46.0", + "@aws-cdk/cx-api": "1.46.0", "constructs": "^3.0.2" } }, "@aws-cdk/aws-elasticache": { - "version": "1.41.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-elasticache/-/aws-elasticache-1.41.0.tgz", - "integrity": "sha512-YV0Qg/87SNakXDHCnOhQbR81v71H+ERlPoUqDN0pjEGdVhC+EWeqgT9g+lOtdvTTeb/8FdTrbp9dflYsS+p5mg==", + "version": "1.46.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-elasticache/-/aws-elasticache-1.46.0.tgz", + "integrity": "sha512-Km0nTDw3QLeqjXYVPTRDvdZzHPI0qmD/EymrCpvGOhVoidE8gTYcdhVTJ1XgbXdKc44ijfgcLNPaQba78jzhkQ==", "requires": { - "@aws-cdk/core": "1.41.0", + "@aws-cdk/core": "1.46.0", "constructs": "^3.0.2" } }, "@aws-cdk/aws-elasticloadbalancing": { - "version": "1.41.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-elasticloadbalancing/-/aws-elasticloadbalancing-1.41.0.tgz", - "integrity": "sha512-vqiX3ZkXcTAvvGJJcsLiZ6FxtRJjoxwRp7+67tin5y4z3EBALi28yau1FZkOallUR+6eb2me+0glHBPGGzoBpQ==", + "version": "1.46.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-elasticloadbalancing/-/aws-elasticloadbalancing-1.46.0.tgz", + "integrity": "sha512-kGhfkNJT2O3OBE3J1sF96z7lfvoMRl/3DPDnp/pZyhXbOwoS3p6hVHa12kxWhVpaqnfJQ16NShuZ7cHdsZ51rQ==", "requires": { - "@aws-cdk/aws-ec2": "1.41.0", - "@aws-cdk/core": "1.41.0", + "@aws-cdk/aws-ec2": "1.46.0", + "@aws-cdk/core": "1.46.0", "constructs": "^3.0.2" } }, "@aws-cdk/aws-elasticloadbalancingv2": { - "version": "1.41.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-elasticloadbalancingv2/-/aws-elasticloadbalancingv2-1.41.0.tgz", - "integrity": "sha512-ptT1y8R4HsdatuKFAeqlDHDgxzoYyGUxxs5sSwYOUwVoXU3TfjflR+K7WNwet2vqm8zwjS1hcNyKNFqoCU/DQg==", - "requires": { - "@aws-cdk/aws-certificatemanager": "1.41.0", - "@aws-cdk/aws-cloudwatch": "1.41.0", - "@aws-cdk/aws-ec2": "1.41.0", - "@aws-cdk/aws-iam": "1.41.0", - "@aws-cdk/aws-lambda": "1.41.0", - "@aws-cdk/aws-s3": "1.41.0", - "@aws-cdk/core": "1.41.0", + "version": "1.46.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-elasticloadbalancingv2/-/aws-elasticloadbalancingv2-1.46.0.tgz", + "integrity": "sha512-bHS1h12E5NFf1cBbKGgKKXLg2OM8M9NZKyYukFeGfWZOuGwtEsVOKmQTWIy20mLI4UDnl0whR7ZEW+gMRI1/dA==", + "requires": { + "@aws-cdk/aws-certificatemanager": "1.46.0", + "@aws-cdk/aws-cloudwatch": "1.46.0", + "@aws-cdk/aws-ec2": "1.46.0", + "@aws-cdk/aws-iam": "1.46.0", + "@aws-cdk/aws-lambda": "1.46.0", + "@aws-cdk/aws-s3": "1.46.0", + "@aws-cdk/core": "1.46.0", "constructs": "^3.0.2" } }, "@aws-cdk/aws-events": { - "version": "1.41.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-events/-/aws-events-1.41.0.tgz", - "integrity": "sha512-1D4ATsE3rnUATlv2VdJod9bXmNxl7x+YJgcWPd2KLU7gXPxyAb7zCG0QeUDcBagKLD2OHjpeXNo/3tpH7ZbEtA==", + "version": "1.46.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-events/-/aws-events-1.46.0.tgz", + "integrity": "sha512-aRwPiTGMT/wiBgYZa9MADull16Xwqt2UkBzDN55qPNwgbA5ZFxFivQJSyAxs4MoA/vD/JSx1sPVPCutpukkGjA==", "requires": { - "@aws-cdk/aws-iam": "1.41.0", - "@aws-cdk/core": "1.41.0", + "@aws-cdk/aws-iam": "1.46.0", + "@aws-cdk/core": "1.46.0", "constructs": "^3.0.2" } }, "@aws-cdk/aws-events-targets": { - "version": "1.41.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-events-targets/-/aws-events-targets-1.41.0.tgz", - "integrity": "sha512-aLRBrpOGOmBHq75tyBRNLRsDUWlNTt+Ax1xUtDTWz054IVdEONey0l7vTVFbh7gZA9MQxCl43Usi8vNrhQDd3g==", - "requires": { - "@aws-cdk/aws-batch": "1.41.0", - "@aws-cdk/aws-codebuild": "1.41.0", - "@aws-cdk/aws-codepipeline": "1.41.0", - "@aws-cdk/aws-ec2": "1.41.0", - "@aws-cdk/aws-ecs": "1.41.0", - "@aws-cdk/aws-events": "1.41.0", - "@aws-cdk/aws-iam": "1.41.0", - "@aws-cdk/aws-lambda": "1.41.0", - "@aws-cdk/aws-sns": "1.41.0", - "@aws-cdk/aws-sns-subscriptions": "1.41.0", - "@aws-cdk/aws-sqs": "1.41.0", - "@aws-cdk/aws-stepfunctions": "1.41.0", - "@aws-cdk/core": "1.41.0", + "version": "1.46.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-events-targets/-/aws-events-targets-1.46.0.tgz", + "integrity": "sha512-zR96LFAfqU8iMp+0ecI0f1kFx0Yf4dUmpAOqZDWL/10umPNlAyqLAH2pNkuK7QN0bwF+ERbRghTfQV56t4ACTg==", + "requires": { + "@aws-cdk/aws-batch": "1.46.0", + "@aws-cdk/aws-codebuild": "1.46.0", + "@aws-cdk/aws-codepipeline": "1.46.0", + "@aws-cdk/aws-ec2": "1.46.0", + "@aws-cdk/aws-ecs": "1.46.0", + "@aws-cdk/aws-events": "1.46.0", + "@aws-cdk/aws-iam": "1.46.0", + "@aws-cdk/aws-kinesis": "1.46.0", + "@aws-cdk/aws-lambda": "1.46.0", + "@aws-cdk/aws-sns": "1.46.0", + "@aws-cdk/aws-sns-subscriptions": "1.46.0", + "@aws-cdk/aws-sqs": "1.46.0", + "@aws-cdk/aws-stepfunctions": "1.46.0", + "@aws-cdk/core": "1.46.0", "constructs": "^3.0.2" } }, "@aws-cdk/aws-iam": { - "version": "1.41.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-iam/-/aws-iam-1.41.0.tgz", - "integrity": "sha512-1pblFd9JPOqChNyMMlTFf5VdYfXeysuokJhDJE+udZGlxgb8yqQiAmukuB0BdueJsaHVQdyQOz5QenPN5bUvUw==", + "version": "1.46.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-iam/-/aws-iam-1.46.0.tgz", + "integrity": "sha512-D400DpnQ8u+Iz2SauL/16P13g4GT1A38rPtbs4S7I5Y9ZVlHkCf0fbwBwKrZt+Tn/GtHj4oqkchWBd9fd9TAPA==", "requires": { - "@aws-cdk/core": "1.41.0", - "@aws-cdk/region-info": "1.41.0", + "@aws-cdk/core": "1.46.0", + "@aws-cdk/region-info": "1.46.0", "constructs": "^3.0.2" } }, "@aws-cdk/aws-kinesis": { - "version": "1.41.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-kinesis/-/aws-kinesis-1.41.0.tgz", - "integrity": "sha512-5n+jnPJQHD0AAXg1Nlb+3PqD9kFF9+QaDd+RwMsrU7OZvYjfujau7rKHLTcdn8wwrzeMJzQvthPmHvG73daI7Q==", - "requires": { - "@aws-cdk/aws-iam": "1.41.0", - "@aws-cdk/aws-kms": "1.41.0", - "@aws-cdk/aws-logs": "1.41.0", - "@aws-cdk/core": "1.41.0", + "version": "1.46.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-kinesis/-/aws-kinesis-1.46.0.tgz", + "integrity": "sha512-IkQ3IEh7kPpoaku96j7tfKFfR/q0LYWBbVnwkxYY96C3LjidKYexCBwRqM+5uvIsXr7tyx3wsQMfly1H/4ArMA==", + "requires": { + "@aws-cdk/aws-iam": "1.46.0", + "@aws-cdk/aws-kms": "1.46.0", + "@aws-cdk/aws-logs": "1.46.0", + "@aws-cdk/core": "1.46.0", "constructs": "^3.0.2" } }, "@aws-cdk/aws-kms": { - "version": "1.41.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-kms/-/aws-kms-1.41.0.tgz", - "integrity": "sha512-YZZ7ACKMTeCd7NLLPmaZ8eMba4La9HvShQbSvqzU9fixVh5DfLFFGyj/BhWZ1Mx7lLFWG4PCJHMyR8TFELcU5w==", + "version": "1.46.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-kms/-/aws-kms-1.46.0.tgz", + "integrity": "sha512-+lTJ7YsFh4gy6xLb/WvG07gIERPJP1FEODkqHl0NaZ5fxTNFgCV7Y883jsmaof+Hpj4jJRfFv1D9HHwvs9DZIQ==", "requires": { - "@aws-cdk/aws-iam": "1.41.0", - "@aws-cdk/core": "1.41.0", + "@aws-cdk/aws-iam": "1.46.0", + "@aws-cdk/core": "1.46.0", "constructs": "^3.0.2" } }, "@aws-cdk/aws-lambda": { - "version": "1.41.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-lambda/-/aws-lambda-1.41.0.tgz", - "integrity": "sha512-uQyaWcyjTvnnjBeJ0qzc8qRujYt68kv3TVtOKqlRbrIA97wy6pt4QhKinHuF8me96OfsdkIxNyfelr0QN0tHTg==", - "requires": { - "@aws-cdk/aws-cloudwatch": "1.41.0", - "@aws-cdk/aws-ec2": "1.41.0", - "@aws-cdk/aws-events": "1.41.0", - "@aws-cdk/aws-iam": "1.41.0", - "@aws-cdk/aws-logs": "1.41.0", - "@aws-cdk/aws-s3": "1.41.0", - "@aws-cdk/aws-s3-assets": "1.41.0", - "@aws-cdk/aws-sqs": "1.41.0", - "@aws-cdk/core": "1.41.0", - "@aws-cdk/cx-api": "1.41.0", + "version": "1.46.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-lambda/-/aws-lambda-1.46.0.tgz", + "integrity": "sha512-REgRPPbJt/UD7n2fRbpJHK17fMDA0PED+gCvlctEw2chIUsJx601FDHG74vVKtm0R7UEM2svADzNm2Tv5YnVTw==", + "requires": { + "@aws-cdk/aws-cloudwatch": "1.46.0", + "@aws-cdk/aws-ec2": "1.46.0", + "@aws-cdk/aws-events": "1.46.0", + "@aws-cdk/aws-iam": "1.46.0", + "@aws-cdk/aws-logs": "1.46.0", + "@aws-cdk/aws-s3": "1.46.0", + "@aws-cdk/aws-s3-assets": "1.46.0", + "@aws-cdk/aws-sqs": "1.46.0", + "@aws-cdk/core": "1.46.0", + "@aws-cdk/cx-api": "1.46.0", "constructs": "^3.0.2" } }, "@aws-cdk/aws-lambda-event-sources": { - "version": "1.41.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-lambda-event-sources/-/aws-lambda-event-sources-1.41.0.tgz", - "integrity": "sha512-28Xos8yXroN4By2vHAyCYMR+uiNvvk+mp9ApPasGjvAH593RPJjSDIlzbI5UxVANPVrBnK6jnddfCDCFQanTFQ==", - "requires": { - "@aws-cdk/aws-apigateway": "1.41.0", - "@aws-cdk/aws-dynamodb": "1.41.0", - "@aws-cdk/aws-events": "1.41.0", - "@aws-cdk/aws-iam": "1.41.0", - "@aws-cdk/aws-kinesis": "1.41.0", - "@aws-cdk/aws-lambda": "1.41.0", - "@aws-cdk/aws-s3": "1.41.0", - "@aws-cdk/aws-s3-notifications": "1.41.0", - "@aws-cdk/aws-sns": "1.41.0", - "@aws-cdk/aws-sns-subscriptions": "1.41.0", - "@aws-cdk/aws-sqs": "1.41.0", - "@aws-cdk/core": "1.41.0", + "version": "1.46.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-lambda-event-sources/-/aws-lambda-event-sources-1.46.0.tgz", + "integrity": "sha512-YXKzokwQ2nLeLbAyfP/QxuBGxRZKjQDjv0gd9Ep2jO43JrSx1OkKBqkUXEgrgrxvMpbAGkMq06OdlXLsBGuqRg==", + "requires": { + "@aws-cdk/aws-apigateway": "1.46.0", + "@aws-cdk/aws-dynamodb": "1.46.0", + "@aws-cdk/aws-events": "1.46.0", + "@aws-cdk/aws-iam": "1.46.0", + "@aws-cdk/aws-kinesis": "1.46.0", + "@aws-cdk/aws-lambda": "1.46.0", + "@aws-cdk/aws-s3": "1.46.0", + "@aws-cdk/aws-s3-notifications": "1.46.0", + "@aws-cdk/aws-sns": "1.46.0", + "@aws-cdk/aws-sns-subscriptions": "1.46.0", + "@aws-cdk/aws-sqs": "1.46.0", + "@aws-cdk/core": "1.46.0", "constructs": "^3.0.2" } }, "@aws-cdk/aws-logs": { - "version": "1.41.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-logs/-/aws-logs-1.41.0.tgz", - "integrity": "sha512-P8eSzGiXOEMMoc0DGP1bK1t+3F1k2LmqKh0AFPJTvo/ZXUBFvEnY+gWcLs83bx4u3mEjlqXi/o5BRa7EJkkHow==", + "version": "1.46.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-logs/-/aws-logs-1.46.0.tgz", + "integrity": "sha512-JcP7AJXQfC+uoEJhyZ1Y6uh1sIF9swN1q/NG4bNij3jaU7tlbZj7iHgy+k2XwH+1aNA96CeRyKCD6NSgo6w/kQ==", "requires": { - "@aws-cdk/aws-cloudwatch": "1.41.0", - "@aws-cdk/aws-iam": "1.41.0", - "@aws-cdk/core": "1.41.0", + "@aws-cdk/aws-cloudwatch": "1.46.0", + "@aws-cdk/aws-iam": "1.46.0", + "@aws-cdk/core": "1.46.0", "constructs": "^3.0.2" } }, "@aws-cdk/aws-route53": { - "version": "1.41.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-route53/-/aws-route53-1.41.0.tgz", - "integrity": "sha512-llp53PbiqJXNsd1W4xJgWndY122AkqSQWdUhV07KpJEVmRwo6yzvbHcM2/m5kSWqwNtZQZOsNx7t57gRVsjffQ==", - "requires": { - "@aws-cdk/aws-ec2": "1.41.0", - "@aws-cdk/aws-logs": "1.41.0", - "@aws-cdk/cloud-assembly-schema": "1.41.0", - "@aws-cdk/core": "1.41.0", + "version": "1.46.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-route53/-/aws-route53-1.46.0.tgz", + "integrity": "sha512-YYc7sxCCf0V7Ma478dHJk2+0DmOJa9wgURdKku4cMm3G4qQmRZ2GG+z6Hsf8DBLa6wg73fHxarQGTFqBSAmnHg==", + "requires": { + "@aws-cdk/aws-ec2": "1.46.0", + "@aws-cdk/aws-logs": "1.46.0", + "@aws-cdk/cloud-assembly-schema": "1.46.0", + "@aws-cdk/core": "1.46.0", "constructs": "^3.0.2" } }, "@aws-cdk/aws-route53-targets": { - "version": "1.41.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-route53-targets/-/aws-route53-targets-1.41.0.tgz", - "integrity": "sha512-ZEHFAndCHAMCxi8Qm3dNJAFUroRqOWxuXwnbCjjjmAr32lzauCTmBGTrhYTtcLrY1ZfgsSxj5ZYMEVGczwjLdA==", - "requires": { - "@aws-cdk/aws-apigateway": "1.41.0", - "@aws-cdk/aws-cloudfront": "1.41.0", - "@aws-cdk/aws-cognito": "1.41.0", - "@aws-cdk/aws-ec2": "1.41.0", - "@aws-cdk/aws-elasticloadbalancing": "1.41.0", - "@aws-cdk/aws-elasticloadbalancingv2": "1.41.0", - "@aws-cdk/aws-iam": "1.41.0", - "@aws-cdk/aws-route53": "1.41.0", - "@aws-cdk/aws-s3": "1.41.0", - "@aws-cdk/core": "1.41.0", - "@aws-cdk/region-info": "1.41.0", + "version": "1.46.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-route53-targets/-/aws-route53-targets-1.46.0.tgz", + "integrity": "sha512-wqV8TBGqBQCl2YT7D88wbDmse5RTskEUpBvKZAdQ2UD35HTD+lTPapqcEERJd7Q35CyEFS1PR73JjlDOLc4/9g==", + "requires": { + "@aws-cdk/aws-apigateway": "1.46.0", + "@aws-cdk/aws-cloudfront": "1.46.0", + "@aws-cdk/aws-cognito": "1.46.0", + "@aws-cdk/aws-ec2": "1.46.0", + "@aws-cdk/aws-elasticloadbalancing": "1.46.0", + "@aws-cdk/aws-elasticloadbalancingv2": "1.46.0", + "@aws-cdk/aws-iam": "1.46.0", + "@aws-cdk/aws-route53": "1.46.0", + "@aws-cdk/aws-s3": "1.46.0", + "@aws-cdk/core": "1.46.0", + "@aws-cdk/region-info": "1.46.0", "constructs": "^3.0.2" } }, "@aws-cdk/aws-s3": { - "version": "1.41.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-s3/-/aws-s3-1.41.0.tgz", - "integrity": "sha512-B7uhPOLqUx5xkpF7YX0E5mwjYM0wZQLkT5Jh/cGohPKwfMlGELjmNjeudC5naImTqL0a6VflXza7+d+4lVLdFw==", - "requires": { - "@aws-cdk/aws-events": "1.41.0", - "@aws-cdk/aws-iam": "1.41.0", - "@aws-cdk/aws-kms": "1.41.0", - "@aws-cdk/core": "1.41.0", + "version": "1.46.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-s3/-/aws-s3-1.46.0.tgz", + "integrity": "sha512-v9R6AK/SQHqwMwiXvou2Ww5RrqUghlCJyW4cmn2rrbwbgYRMbMLgYGcrYb3OSxenjYP68cPtw+UB+/zjsVjHMg==", + "requires": { + "@aws-cdk/aws-events": "1.46.0", + "@aws-cdk/aws-iam": "1.46.0", + "@aws-cdk/aws-kms": "1.46.0", + "@aws-cdk/core": "1.46.0", "constructs": "^3.0.2" } }, "@aws-cdk/aws-s3-assets": { - "version": "1.41.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-s3-assets/-/aws-s3-assets-1.41.0.tgz", - "integrity": "sha512-hGt+7qEkGz6CMLi47ZSzonKcRThLC2ma/DMrQbbF0ikeupPLK2SsRQ4EIadH69zGr6fz8u0wbWPfMaJGgESolQ==", - "requires": { - "@aws-cdk/assets": "1.41.0", - "@aws-cdk/aws-iam": "1.41.0", - "@aws-cdk/aws-s3": "1.41.0", - "@aws-cdk/core": "1.41.0", - "@aws-cdk/cx-api": "1.41.0", + "version": "1.46.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-s3-assets/-/aws-s3-assets-1.46.0.tgz", + "integrity": "sha512-JdQkwBSgEJNmSQlBphsQ3AgflpbXnTibGcf6xFGXa/0+Qgc12GUA6KX3qdcd29CQhej3tYprK6Bne3Y2jjZT3g==", + "requires": { + "@aws-cdk/assets": "1.46.0", + "@aws-cdk/aws-iam": "1.46.0", + "@aws-cdk/aws-kms": "1.46.0", + "@aws-cdk/aws-s3": "1.46.0", + "@aws-cdk/core": "1.46.0", + "@aws-cdk/cx-api": "1.46.0", "constructs": "^3.0.2" } }, "@aws-cdk/aws-s3-deployment": { - "version": "1.41.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-s3-deployment/-/aws-s3-deployment-1.41.0.tgz", - "integrity": "sha512-YcurMrLMqhwf/fPeyAwCO/kCbetpriN+ny9QvSIEWrzdPVc+eN1q7I7Jf67fVjIy2Calv7eRhsAAAe4s8OYHrw==", - "requires": { - "@aws-cdk/aws-cloudfront": "1.41.0", - "@aws-cdk/aws-iam": "1.41.0", - "@aws-cdk/aws-lambda": "1.41.0", - "@aws-cdk/aws-s3": "1.41.0", - "@aws-cdk/aws-s3-assets": "1.41.0", - "@aws-cdk/core": "1.41.0", + "version": "1.46.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-s3-deployment/-/aws-s3-deployment-1.46.0.tgz", + "integrity": "sha512-WIpDSFheiiuE6fILuGh6YiQSM4OsZxudZhRhxdwNVuHgYnFIHBlmqpm/Lk0+1Q6/17IQgstMsskbRbWvUYRTeg==", + "requires": { + "@aws-cdk/aws-cloudfront": "1.46.0", + "@aws-cdk/aws-iam": "1.46.0", + "@aws-cdk/aws-lambda": "1.46.0", + "@aws-cdk/aws-s3": "1.46.0", + "@aws-cdk/aws-s3-assets": "1.46.0", + "@aws-cdk/core": "1.46.0", "constructs": "^3.0.2" } }, "@aws-cdk/aws-s3-notifications": { - "version": "1.41.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-s3-notifications/-/aws-s3-notifications-1.41.0.tgz", - "integrity": "sha512-VjQwwRkLCTaAS828ul1U+LGTyV3ffuU+8zDZ4eZtuPdI99GcF5REkUqZPkNgTVHYIIstjgcLKQ+ujkzIdY9bsw==", - "requires": { - "@aws-cdk/aws-iam": "1.41.0", - "@aws-cdk/aws-lambda": "1.41.0", - "@aws-cdk/aws-s3": "1.41.0", - "@aws-cdk/aws-sns": "1.41.0", - "@aws-cdk/aws-sqs": "1.41.0", - "@aws-cdk/core": "1.41.0", + "version": "1.46.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-s3-notifications/-/aws-s3-notifications-1.46.0.tgz", + "integrity": "sha512-SgwA1IOEaqMyfz/ijutqUZLPzDo+HggN+xVuRFxO9fgMiZYCJ92HYudVDYoxX7ce2bQuL5fWndCd915j04k4GQ==", + "requires": { + "@aws-cdk/aws-iam": "1.46.0", + "@aws-cdk/aws-lambda": "1.46.0", + "@aws-cdk/aws-s3": "1.46.0", + "@aws-cdk/aws-sns": "1.46.0", + "@aws-cdk/aws-sqs": "1.46.0", + "@aws-cdk/core": "1.46.0", "constructs": "^3.0.2" } }, "@aws-cdk/aws-sagemaker": { - "version": "1.41.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-sagemaker/-/aws-sagemaker-1.41.0.tgz", - "integrity": "sha512-wWx54mfVYZKr/FwJxNAvFCNOnUKR8QkUDIdCxCQudlF1/uIevfyzE9OkC/yOoU0T3XFo3r2q8Bf2HbVV193VAg==", + "version": "1.46.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-sagemaker/-/aws-sagemaker-1.46.0.tgz", + "integrity": "sha512-lwfgKV0lVc+DFvDjWbU9og2gPCUszqSLEh+EQ3HmUKfmsuU+BRi8UMsuQFd96AzLEYuYKaqc/IdaVdppx1FRLA==", "requires": { - "@aws-cdk/core": "1.41.0", + "@aws-cdk/core": "1.46.0", "constructs": "^3.0.2" } }, "@aws-cdk/aws-sam": { - "version": "1.41.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-sam/-/aws-sam-1.41.0.tgz", - "integrity": "sha512-EuN6SznFGaTkXEHbzVIt42bPOLCXJ4T44Pygs9k7zlYtE+41y+aFpP8BzVmZaYNKFDjvDsGomM/beQFTLUUGSw==", + "version": "1.46.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-sam/-/aws-sam-1.46.0.tgz", + "integrity": "sha512-6jU0CPMfJ/6dWEEdg8ulw9davQ0I/0bh29pyWmq4kIoCLmOsnkz+QYohKc1BcREU9Q1DHBeXE6r7+PP6YrQuBw==", "requires": { - "@aws-cdk/core": "1.41.0", + "@aws-cdk/core": "1.46.0", "constructs": "^3.0.2" } }, "@aws-cdk/aws-secretsmanager": { - "version": "1.41.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-secretsmanager/-/aws-secretsmanager-1.41.0.tgz", - "integrity": "sha512-N8avKafLAGGH3LYv0xniexUtcLtPuZ64FxQ2yF/viu2P1J49YyrL1arAi9/6YviOuO2Za60pziny9ISgfEhdfw==", - "requires": { - "@aws-cdk/aws-ec2": "1.41.0", - "@aws-cdk/aws-iam": "1.41.0", - "@aws-cdk/aws-kms": "1.41.0", - "@aws-cdk/aws-lambda": "1.41.0", - "@aws-cdk/aws-sam": "1.41.0", - "@aws-cdk/core": "1.41.0", + "version": "1.46.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-secretsmanager/-/aws-secretsmanager-1.46.0.tgz", + "integrity": "sha512-92DBM96uHIknEGq8S6Fr+WvFY8ZwotvTYNJZMAyZbyyMBD5KsPD8VyAlhljzBqd+Y8GRdE6s5ymYo945GdAUDA==", + "requires": { + "@aws-cdk/aws-ec2": "1.46.0", + "@aws-cdk/aws-iam": "1.46.0", + "@aws-cdk/aws-kms": "1.46.0", + "@aws-cdk/aws-lambda": "1.46.0", + "@aws-cdk/aws-sam": "1.46.0", + "@aws-cdk/core": "1.46.0", "constructs": "^3.0.2" } }, "@aws-cdk/aws-servicediscovery": { - "version": "1.41.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-servicediscovery/-/aws-servicediscovery-1.41.0.tgz", - "integrity": "sha512-/4hDXl29oJbiYMzEWBBqxLQ7fCvSaau9LQNBZ2VnxwukJYrQK96hlYRsSvYPdRfNT8ZzNaw2wvXBTOUgC7aOJg==", - "requires": { - "@aws-cdk/aws-ec2": "1.41.0", - "@aws-cdk/aws-elasticloadbalancingv2": "1.41.0", - "@aws-cdk/aws-route53": "1.41.0", - "@aws-cdk/core": "1.41.0", + "version": "1.46.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-servicediscovery/-/aws-servicediscovery-1.46.0.tgz", + "integrity": "sha512-IBdCrzDqKNgzSZhNFkOufJ/UW8zU+FGdK8sQ1M2E+IpHjj8gdB1gC8id2S/woj6qX6st0bR2m26arOXq00C97Q==", + "requires": { + "@aws-cdk/aws-ec2": "1.46.0", + "@aws-cdk/aws-elasticloadbalancingv2": "1.46.0", + "@aws-cdk/aws-route53": "1.46.0", + "@aws-cdk/core": "1.46.0", "constructs": "^3.0.2" } }, "@aws-cdk/aws-sns": { - "version": "1.41.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-sns/-/aws-sns-1.41.0.tgz", - "integrity": "sha512-+tvtIuYah8tVsEOJ8+8+UqEils/H7VEBqV0FBO5K0yjKO6b4QLiRFB+GviZA6kJ0p8uUBzZl7RYkjMyS2cYN7w==", - "requires": { - "@aws-cdk/aws-cloudwatch": "1.41.0", - "@aws-cdk/aws-events": "1.41.0", - "@aws-cdk/aws-iam": "1.41.0", - "@aws-cdk/aws-kms": "1.41.0", - "@aws-cdk/aws-sqs": "1.41.0", - "@aws-cdk/core": "1.41.0", + "version": "1.46.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-sns/-/aws-sns-1.46.0.tgz", + "integrity": "sha512-9rhuWQFaaMLzVGC9RkpKv6dw1qY+ARNeHyqBZUDCzO9jvo/eO5LzPOhkQPIiZi/vL1T2JEBvo26ySj/u520pbA==", + "requires": { + "@aws-cdk/aws-cloudwatch": "1.46.0", + "@aws-cdk/aws-events": "1.46.0", + "@aws-cdk/aws-iam": "1.46.0", + "@aws-cdk/aws-kms": "1.46.0", + "@aws-cdk/aws-sqs": "1.46.0", + "@aws-cdk/core": "1.46.0", "constructs": "^3.0.2" } }, "@aws-cdk/aws-sns-subscriptions": { - "version": "1.41.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-sns-subscriptions/-/aws-sns-subscriptions-1.41.0.tgz", - "integrity": "sha512-FTFV8NSYGAinITiIsXveAOfL3YvwRXR+ZXK3LMJonFsDz3Z7pgo45G82Ao2h02FgJ5CHub8IeCY5pZqji+u/Fw==", - "requires": { - "@aws-cdk/aws-iam": "1.41.0", - "@aws-cdk/aws-lambda": "1.41.0", - "@aws-cdk/aws-sns": "1.41.0", - "@aws-cdk/aws-sqs": "1.41.0", - "@aws-cdk/core": "1.41.0", + "version": "1.46.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-sns-subscriptions/-/aws-sns-subscriptions-1.46.0.tgz", + "integrity": "sha512-QzkgFYQ82Lpt7XK1iX4CcygRvttRB0xC2phmTrs7LazZ5veb4KmUlngU8x8gEJ1dD1Evi5R6WmTN6UAac9Et1w==", + "requires": { + "@aws-cdk/aws-iam": "1.46.0", + "@aws-cdk/aws-lambda": "1.46.0", + "@aws-cdk/aws-sns": "1.46.0", + "@aws-cdk/aws-sqs": "1.46.0", + "@aws-cdk/core": "1.46.0", "constructs": "^3.0.2" } }, "@aws-cdk/aws-sqs": { - "version": "1.41.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-sqs/-/aws-sqs-1.41.0.tgz", - "integrity": "sha512-03wf4Rort6jlmx/xrNUN2ld/5KmuyEw28jyL7dDFVsfGglXw69bPjuRMtTWkSfbYWPbFlGbKR16IiyKzRFF4oA==", - "requires": { - "@aws-cdk/aws-cloudwatch": "1.41.0", - "@aws-cdk/aws-iam": "1.41.0", - "@aws-cdk/aws-kms": "1.41.0", - "@aws-cdk/core": "1.41.0", + "version": "1.46.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-sqs/-/aws-sqs-1.46.0.tgz", + "integrity": "sha512-HG7rClnwzJJYbNVzpO4JL7F4V/iM/0DTmL+q4QwzsWFIV9CPPMMC3FsoPCz4H4+Lj2/bXeU+7kcI9qJzvqmejg==", + "requires": { + "@aws-cdk/aws-cloudwatch": "1.46.0", + "@aws-cdk/aws-iam": "1.46.0", + "@aws-cdk/aws-kms": "1.46.0", + "@aws-cdk/core": "1.46.0", "constructs": "^3.0.2" } }, "@aws-cdk/aws-ssm": { - "version": "1.41.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-ssm/-/aws-ssm-1.41.0.tgz", - "integrity": "sha512-w43rka1ltQp2myR3u5mM/E7uNwmf7k5tvSgLoHQcU/p5iIPCL+R5ZvrJlOTaGRjRZlzq+CGt4+QKOSZveUtG9A==", - "requires": { - "@aws-cdk/aws-iam": "1.41.0", - "@aws-cdk/aws-kms": "1.41.0", - "@aws-cdk/cloud-assembly-schema": "1.41.0", - "@aws-cdk/core": "1.41.0", + "version": "1.46.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-ssm/-/aws-ssm-1.46.0.tgz", + "integrity": "sha512-Y2pNW7wA6+916kdNXG1kgJvDiBG2nzHKyVZUTort3p8P51GeoKVx+sKmD7Unp3JW64tYQUAfKs+XP0PWV4ZwCA==", + "requires": { + "@aws-cdk/aws-iam": "1.46.0", + "@aws-cdk/aws-kms": "1.46.0", + "@aws-cdk/cloud-assembly-schema": "1.46.0", + "@aws-cdk/core": "1.46.0", "constructs": "^3.0.2" } }, "@aws-cdk/aws-stepfunctions": { - "version": "1.41.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/aws-stepfunctions/-/aws-stepfunctions-1.41.0.tgz", - "integrity": "sha512-58xL2RHdNKutGN3YyPO07Eplu9S1M7wEnjmcMmBlH6hnbye+j+uyAYQ0FSNxObDuShA5qAzYxaHiGX48nWa90A==", - "requires": { - "@aws-cdk/aws-cloudwatch": "1.41.0", - "@aws-cdk/aws-events": "1.41.0", - "@aws-cdk/aws-iam": "1.41.0", - "@aws-cdk/aws-logs": "1.41.0", - "@aws-cdk/core": "1.41.0", + "version": "1.46.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-stepfunctions/-/aws-stepfunctions-1.46.0.tgz", + "integrity": "sha512-VsVHzigyaufaHiyIsep0Gmz3lIHL4+e1SDbBCNyNSqIgXdP/xli/aiZyLfyW0jr+IN5GXTNFPd1Rqc2Nmfvt+g==", + "requires": { + "@aws-cdk/aws-cloudwatch": "1.46.0", + "@aws-cdk/aws-events": "1.46.0", + "@aws-cdk/aws-iam": "1.46.0", + "@aws-cdk/aws-logs": "1.46.0", + "@aws-cdk/core": "1.46.0", "constructs": "^3.0.2" } }, "@aws-cdk/cdk-assets-schema": { - "version": "1.41.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/cdk-assets-schema/-/cdk-assets-schema-1.41.0.tgz", - "integrity": "sha512-lB/YAnoYoTq09Z5DAzg3eLJQZwkyFIopYg2a5Y1GlpDfgRoNAxb0rjgDfp68dVeBbisID2AfczdVv6Mhq/xzFQ==", + "version": "1.46.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/cdk-assets-schema/-/cdk-assets-schema-1.46.0.tgz", + "integrity": "sha512-5YM/WHdfiiXkyN+oqPWIcrU7nQUzEVRmViiN+SGy/NZ6Tj9r30N9YygYMZO8z9sM7r20dOTl+pY9SYrclIeNUQ==", "requires": { "semver": "^7.2.2" }, @@ -688,18 +690,18 @@ } }, "@aws-cdk/cfnspec": { - "version": "1.41.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/cfnspec/-/cfnspec-1.41.0.tgz", - "integrity": "sha512-i7GmO4Q3UMTJgKKKpmRoXmIRhXah58fXPL+WQdG1aTT5hSjKIAp7qTdMIIt/UEmlEtT+TRTsXafq86LpjQ95zw==", + "version": "1.46.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/cfnspec/-/cfnspec-1.46.0.tgz", + "integrity": "sha512-oc+k7viT1wukeeH+WIbMRn/QXmS/iDGW5lkn0SIVaOKAZDmErlXGMbeenxSgdAvUysUw8gy30VYXQ5LI3JgenQ==", "dev": true, "requires": { "md5": "^2.2.1" } }, "@aws-cdk/cloud-assembly-schema": { - "version": "1.41.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/cloud-assembly-schema/-/cloud-assembly-schema-1.41.0.tgz", - "integrity": "sha512-13uULbrkiO07KEhn2E77QgfFjq2qrrR4sevi85hVgwCo0QN5ZWyYJzyWpVphaXRcY2vTHUI+/KgFtgwDMdplqQ==", + "version": "1.46.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/cloud-assembly-schema/-/cloud-assembly-schema-1.46.0.tgz", + "integrity": "sha512-ji92c9RCMoY426vH1RbLstUOiUYqM84qa4Ww9Nsbn6Aw3qIS1Gz603dNgcIl+rK78SOq6WqlgykSyFAFykqVgA==", "requires": { "jsonschema": "^1.2.5", "semver": "^7.2.2" @@ -716,31 +718,36 @@ } }, "@aws-cdk/cloudformation-diff": { - "version": "1.41.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/cloudformation-diff/-/cloudformation-diff-1.41.0.tgz", - "integrity": "sha512-O6JjnSbpgUvRGwXcEE6cixBscbhUamImLjOx1hgEQKO7jzeJnR9Z1UM2lvsq5dSCbz/tlsUF+wmNYsWrKiEl+Q==", + "version": "1.46.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/cloudformation-diff/-/cloudformation-diff-1.46.0.tgz", + "integrity": "sha512-kz8OHZd9B9JwhgtSnivExh1lN9K9TgJaByAUqrzeWY9DZmmkHMQKu3hk9KjA4wVN9W5BTPzOuoIdOfZcAp55xw==", "dev": true, "requires": { - "@aws-cdk/cfnspec": "1.41.0", + "@aws-cdk/cfnspec": "1.46.0", "colors": "^1.4.0", "diff": "^4.0.2", - "fast-deep-equal": "^3.1.1", + "fast-deep-equal": "^3.1.3", "string-width": "^4.2.0", "table": "^5.4.6" } }, "@aws-cdk/core": { - "version": "1.41.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/core/-/core-1.41.0.tgz", - "integrity": "sha512-6hHNpXA7tbceOKxIeVnRCKVKZe7Bf/bZ/UgqB7/XcdAxdn8HIvo/lY3cb64zqRL3b04pjsvgoF/8wU92edj/uA==", + "version": "1.46.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/core/-/core-1.46.0.tgz", + "integrity": "sha512-PqK0fmt28ExMNXJiAdZU3A0jQeynd3Set+P86Tx9p2t7tI92oArh9lhuBGhoZ0sTjTUD0/ZqX4dYnH7JcFYUAg==", "requires": { - "@aws-cdk/cdk-assets-schema": "1.41.0", - "@aws-cdk/cloud-assembly-schema": "1.41.0", - "@aws-cdk/cx-api": "1.41.0", + "@aws-cdk/cdk-assets-schema": "1.46.0", + "@aws-cdk/cloud-assembly-schema": "1.46.0", + "@aws-cdk/cx-api": "1.46.0", "constructs": "^3.0.2", + "fs-extra": "^9.0.1", "minimatch": "^3.0.4" }, "dependencies": { + "at-least-node": { + "version": "1.0.0", + "bundled": true + }, "balanced-match": { "version": "1.0.0", "bundled": true @@ -757,35 +764,61 @@ "version": "0.0.1", "bundled": true }, + "fs-extra": { + "version": "9.0.1", + "bundled": true, + "requires": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^1.0.0" + } + }, + "graceful-fs": { + "version": "4.2.4", + "bundled": true + }, + "jsonfile": { + "version": "6.0.1", + "bundled": true, + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^1.0.0" + } + }, "minimatch": { "version": "3.0.4", "bundled": true, "requires": { "brace-expansion": "^1.1.7" } + }, + "universalify": { + "version": "1.0.0", + "bundled": true } } }, "@aws-cdk/custom-resources": { - "version": "1.41.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/custom-resources/-/custom-resources-1.41.0.tgz", - "integrity": "sha512-hXdsyoGR4SnQfHi3S7HMH4qToOYVCB7ofv18CFvsUHxxdq42gUeoXboWUdPCFDi/gEHhoShEeccVeakQrOAaMA==", - "requires": { - "@aws-cdk/aws-cloudformation": "1.41.0", - "@aws-cdk/aws-iam": "1.41.0", - "@aws-cdk/aws-lambda": "1.41.0", - "@aws-cdk/aws-logs": "1.41.0", - "@aws-cdk/aws-sns": "1.41.0", - "@aws-cdk/core": "1.41.0", + "version": "1.46.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/custom-resources/-/custom-resources-1.46.0.tgz", + "integrity": "sha512-NJUTvY5o9pBiRSV8Sj1UTmhHCvHGUFjnAbwNl4cZLFqYWF4KYyxEmmQjPMmCIgn2FWySnMEVhVN9FmrvEznaQQ==", + "requires": { + "@aws-cdk/aws-cloudformation": "1.46.0", + "@aws-cdk/aws-iam": "1.46.0", + "@aws-cdk/aws-lambda": "1.46.0", + "@aws-cdk/aws-logs": "1.46.0", + "@aws-cdk/aws-sns": "1.46.0", + "@aws-cdk/core": "1.46.0", "constructs": "^3.0.2" } }, "@aws-cdk/cx-api": { - "version": "1.41.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/cx-api/-/cx-api-1.41.0.tgz", - "integrity": "sha512-rX0EVVkCAeDvmJMMolRLeHCOufKEMuBvIkc8E7PV9zgQCqKuV5MV7sZ5cXWDiE8kbPGQx8B6ipsDvRwi5Z7//Q==", + "version": "1.46.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/cx-api/-/cx-api-1.46.0.tgz", + "integrity": "sha512-3U4wbywHlYLqWllCNOVGqxDee3N5PxaQHkjpC3v0vhI+LPwcJEW1Vz11k3PMG6FaPcrLrfkAn1y7HSFsPXh8Qg==", "requires": { - "@aws-cdk/cloud-assembly-schema": "1.41.0", + "@aws-cdk/cloud-assembly-schema": "1.46.0", "semver": "^7.2.2" }, "dependencies": { @@ -796,9 +829,9 @@ } }, "@aws-cdk/region-info": { - "version": "1.41.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/region-info/-/region-info-1.41.0.tgz", - "integrity": "sha512-NjeVkpK/dnhK+JPDzkrTCtA5GANs28DtitvlVVDbO8JKYGMTZbjqznS2LyuMP3Idx82lCJ8eL6zstMiQaTmBaw==" + "version": "1.46.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/region-info/-/region-info-1.46.0.tgz", + "integrity": "sha512-EJYZCi2WVUnjPPlxJko66Vzc3LbAFA4dkdC9TDV+IxuBqGVts/7oHJf/Ca9RVglkbOkov7p78OTBWmONqncDEg==" }, "@babel/code-frame": { "version": "7.10.1", @@ -2102,23 +2135,23 @@ "dev": true }, "aws-cdk": { - "version": "1.41.0", - "resolved": "https://registry.npmjs.org/aws-cdk/-/aws-cdk-1.41.0.tgz", - "integrity": "sha512-rTgz05vSICOhzWFIb/DYBXahvjJW9h+/VNbNsfIoI4dQG2x4cMyNbQt8zrCN7mO83545zlbPUIt/uiElX5TdkA==", + "version": "1.46.0", + "resolved": "https://registry.npmjs.org/aws-cdk/-/aws-cdk-1.46.0.tgz", + "integrity": "sha512-D0yUKA2TmlFAy00fezPjokgKhlDr8+axUY2Z1NR3U9J6ZvOnzTRWBab8rVPGoKZJ4WkQy4s637ahUx2C3mg+Kw==", "dev": true, "requires": { - "@aws-cdk/cdk-assets-schema": "1.41.0", - "@aws-cdk/cloud-assembly-schema": "1.41.0", - "@aws-cdk/cloudformation-diff": "1.41.0", - "@aws-cdk/cx-api": "1.41.0", - "@aws-cdk/region-info": "1.41.0", + "@aws-cdk/cdk-assets-schema": "1.46.0", + "@aws-cdk/cloud-assembly-schema": "1.46.0", + "@aws-cdk/cloudformation-diff": "1.46.0", + "@aws-cdk/cx-api": "1.46.0", + "@aws-cdk/region-info": "1.46.0", "archiver": "^4.0.1", - "aws-sdk": "^2.681.0", + "aws-sdk": "^2.699.0", "camelcase": "^6.0.0", - "cdk-assets": "1.41.0", + "cdk-assets": "1.46.0", "colors": "^1.4.0", "decamelize": "^4.0.0", - "fs-extra": "^8.1.0", + "fs-extra": "^9.0.1", "glob": "^7.1.6", "json-diff": "^0.5.4", "minimatch": ">=3.0", @@ -2127,33 +2160,34 @@ "semver": "^7.2.2", "source-map-support": "^0.5.19", "table": "^5.4.6", - "uuid": "^8.0.0", + "uuid": "^8.1.0", + "wrap-ansi": "^7.0.0", "yaml": "^1.10.0", "yargs": "^15.3.1" }, "dependencies": { "@aws-cdk/cdk-assets-schema": { - "version": "1.41.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/cdk-assets-schema/-/cdk-assets-schema-1.41.0.tgz", - "integrity": "sha512-lB/YAnoYoTq09Z5DAzg3eLJQZwkyFIopYg2a5Y1GlpDfgRoNAxb0rjgDfp68dVeBbisID2AfczdVv6Mhq/xzFQ==", + "version": "1.46.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/cdk-assets-schema/-/cdk-assets-schema-1.46.0.tgz", + "integrity": "sha512-5YM/WHdfiiXkyN+oqPWIcrU7nQUzEVRmViiN+SGy/NZ6Tj9r30N9YygYMZO8z9sM7r20dOTl+pY9SYrclIeNUQ==", "dev": true, "requires": { "semver": "^7.2.2" } }, "@aws-cdk/cfnspec": { - "version": "1.41.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/cfnspec/-/cfnspec-1.41.0.tgz", - "integrity": "sha512-i7GmO4Q3UMTJgKKKpmRoXmIRhXah58fXPL+WQdG1aTT5hSjKIAp7qTdMIIt/UEmlEtT+TRTsXafq86LpjQ95zw==", + "version": "1.46.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/cfnspec/-/cfnspec-1.46.0.tgz", + "integrity": "sha512-oc+k7viT1wukeeH+WIbMRn/QXmS/iDGW5lkn0SIVaOKAZDmErlXGMbeenxSgdAvUysUw8gy30VYXQ5LI3JgenQ==", "dev": true, "requires": { "md5": "^2.2.1" } }, "@aws-cdk/cloud-assembly-schema": { - "version": "1.41.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/cloud-assembly-schema/-/cloud-assembly-schema-1.41.0.tgz", - "integrity": "sha512-13uULbrkiO07KEhn2E77QgfFjq2qrrR4sevi85hVgwCo0QN5ZWyYJzyWpVphaXRcY2vTHUI+/KgFtgwDMdplqQ==", + "version": "1.46.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/cloud-assembly-schema/-/cloud-assembly-schema-1.46.0.tgz", + "integrity": "sha512-ji92c9RCMoY426vH1RbLstUOiUYqM84qa4Ww9Nsbn6Aw3qIS1Gz603dNgcIl+rK78SOq6WqlgykSyFAFykqVgA==", "dev": true, "requires": { "jsonschema": "^1.2.5", @@ -2161,33 +2195,33 @@ } }, "@aws-cdk/cloudformation-diff": { - "version": "1.41.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/cloudformation-diff/-/cloudformation-diff-1.41.0.tgz", - "integrity": "sha512-O6JjnSbpgUvRGwXcEE6cixBscbhUamImLjOx1hgEQKO7jzeJnR9Z1UM2lvsq5dSCbz/tlsUF+wmNYsWrKiEl+Q==", + "version": "1.46.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/cloudformation-diff/-/cloudformation-diff-1.46.0.tgz", + "integrity": "sha512-kz8OHZd9B9JwhgtSnivExh1lN9K9TgJaByAUqrzeWY9DZmmkHMQKu3hk9KjA4wVN9W5BTPzOuoIdOfZcAp55xw==", "dev": true, "requires": { - "@aws-cdk/cfnspec": "1.41.0", + "@aws-cdk/cfnspec": "1.46.0", "colors": "^1.4.0", "diff": "^4.0.2", - "fast-deep-equal": "^3.1.1", + "fast-deep-equal": "^3.1.3", "string-width": "^4.2.0", "table": "^5.4.6" } }, "@aws-cdk/cx-api": { - "version": "1.41.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/cx-api/-/cx-api-1.41.0.tgz", - "integrity": "sha512-rX0EVVkCAeDvmJMMolRLeHCOufKEMuBvIkc8E7PV9zgQCqKuV5MV7sZ5cXWDiE8kbPGQx8B6ipsDvRwi5Z7//Q==", + "version": "1.46.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/cx-api/-/cx-api-1.46.0.tgz", + "integrity": "sha512-3U4wbywHlYLqWllCNOVGqxDee3N5PxaQHkjpC3v0vhI+LPwcJEW1Vz11k3PMG6FaPcrLrfkAn1y7HSFsPXh8Qg==", "dev": true, "requires": { - "@aws-cdk/cloud-assembly-schema": "1.41.0", + "@aws-cdk/cloud-assembly-schema": "1.46.0", "semver": "^7.2.2" } }, "@aws-cdk/region-info": { - "version": "1.41.0", - "resolved": "https://registry.npmjs.org/@aws-cdk/region-info/-/region-info-1.41.0.tgz", - "integrity": "sha512-NjeVkpK/dnhK+JPDzkrTCtA5GANs28DtitvlVVDbO8JKYGMTZbjqznS2LyuMP3Idx82lCJ8eL6zstMiQaTmBaw==", + "version": "1.46.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/region-info/-/region-info-1.46.0.tgz", + "integrity": "sha512-EJYZCi2WVUnjPPlxJko66Vzc3LbAFA4dkdC9TDV+IxuBqGVts/7oHJf/Ca9RVglkbOkov7p78OTBWmONqncDEg==", "dev": true }, "@types/color-name": { @@ -2314,13 +2348,19 @@ "lodash": "^4.17.14" } }, + "at-least-node": { + "version": "1.0.0", + "resolved": "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", + "dev": true + }, "aws-sdk": { - "version": "2.681.0", - "resolved": "https://registry.yarnpkg.com/aws-sdk/-/aws-sdk-2.681.0.tgz#09eeedb5ca49813dfc637908abe408ae114a6824", - "integrity": "sha512-/p8CDJ7LZvB1i4WrJrb32FUbbPdiZFZSN6FI2lv7s/scKypmuv/iJ9kpx6QWSWQZ72kJ3Njk/0o7GuVlw0jHXw==", + "version": "2.699.0", + "resolved": "https://registry.yarnpkg.com/aws-sdk/-/aws-sdk-2.699.0.tgz#e77b6ffa4c860882e2779c060b74fab33d42f554", + "integrity": "sha512-EC431z/+i/cJgOgnDpOJ8Fa6+p7Oo1vIvdm/uJqP9tJX3+pxi/M/tvQavfz4yAlLBFqjQwxa8nrPisby0Mr5MQ==", "dev": true, "requires": { - "buffer": "4.9.1", + "buffer": "4.9.2", "events": "1.1.1", "ieee754": "1.1.13", "jmespath": "0.15.0", @@ -2332,9 +2372,9 @@ }, "dependencies": { "buffer": { - "version": "4.9.1", - "resolved": "https://registry.yarnpkg.com/buffer/-/buffer-4.9.1.tgz#6d1bb601b07a4efced97094132093027c95bc298", - "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=", + "version": "4.9.2", + "resolved": "https://registry.yarnpkg.com/buffer/-/buffer-4.9.2.tgz#230ead344002988644841ab0244af8c44bbe3ef8", + "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", "dev": true, "requires": { "base64-js": "^1.0.2", @@ -2446,15 +2486,15 @@ "dev": true }, "cdk-assets": { - "version": "1.41.0", - "resolved": "https://registry.npmjs.org/cdk-assets/-/cdk-assets-1.41.0.tgz", - "integrity": "sha512-GocvpXglX7MyHWrj6wkqkRsNUliLRCrMIMDacHy0Xpq6U2VgOyzkP7++76qAeRheK2y+rReePPsr+gd4UXWqkA==", + "version": "1.46.0", + "resolved": "https://registry.npmjs.org/cdk-assets/-/cdk-assets-1.46.0.tgz", + "integrity": "sha512-mirLzi1YoMHR/mfZ9lWOtnuSS6pC/5g5Xfvg4yXxOSjQu32C/ktktQVG30KJZ4zJZAxZjN0G9KJfAXoyQIsbvQ==", "dev": true, "requires": { - "@aws-cdk/cdk-assets-schema": "1.41.0", - "@aws-cdk/cx-api": "1.41.0", + "@aws-cdk/cdk-assets-schema": "1.46.0", + "@aws-cdk/cx-api": "1.46.0", "archiver": "^4.0.1", - "aws-sdk": "^2.681.0", + "aws-sdk": "^2.699.0", "glob": "^7.1.6", "yargs": "^15.3.1" } @@ -2483,6 +2523,44 @@ "string-width": "^4.2.0", "strip-ansi": "^6.0.0", "wrap-ansi": "^6.2.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.2.1", + "resolved": "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.2.1.tgz#90ae75c424d008d2624c5bf29ead3177ebfcf359", + "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", + "dev": true, + "requires": { + "@types/color-name": "^1.1.1", + "color-convert": "^2.0.1" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + } } }, "co": { @@ -2702,8 +2780,7 @@ "esprima": "^4.0.1", "estraverse": "^4.2.0", "esutils": "^2.0.2", - "optionator": "^0.8.1", - "source-map": "~0.6.1" + "optionator": "^0.8.1" }, "dependencies": { "esprima": { @@ -2745,9 +2822,9 @@ "dev": true }, "fast-deep-equal": { - "version": "3.1.1", - "resolved": "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz#545145077c501491e33b15ec408c294376e94ae4", - "integrity": "sha512-8UEa58QDLauDNfpbrX55Q9jrGHThw2ZMdOky5Gl1CDtVeJDPVrG4Jxx1N8jw2gkWaff5UUuX1KJd+9zGe2B+ZA==", + "version": "3.1.3", + "resolved": "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", "dev": true }, "fast-json-stable-stringify": { @@ -2785,14 +2862,15 @@ "dev": true }, "fs-extra": { - "version": "8.1.0", - "resolved": "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "version": "9.0.1", + "resolved": "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.0.1.tgz#910da0062437ba4c39fedd863f1675ccfefcb9fc", + "integrity": "sha512-h2iAoN838FqAFJY2/qVpzFXy+EBxfVE220PalAqQLDVsFOHLJrZvut5puAbCdNv6WJk+B8ihI+k0c7JK5erwqQ==", "dev": true, "requires": { + "at-least-node": "^1.0.0", "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" + "jsonfile": "^6.0.1", + "universalify": "^1.0.0" } }, "fs.realpath": { @@ -2889,9 +2967,9 @@ } }, "graceful-fs": { - "version": "4.2.3", - "resolved": "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.3.tgz#4a12ff1b60376ef09862c2093edd908328be8423", - "integrity": "sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ==", + "version": "4.2.4", + "resolved": "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb", + "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", "dev": true }, "heap": { @@ -3040,12 +3118,12 @@ "dev": true }, "jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb", - "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "version": "6.0.1", + "resolved": "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.0.1.tgz#98966cba214378c8c84b82e085907b40bf614179", + "integrity": "sha512-jR2b5v7d2vIOust+w3wtFKZIfpC2pnRmFAhAC/BuweZFQR8qZzxH1OyrQ10HmdVYiXWkYUqPVsz91cG7EL2FBg==", "dev": true, "requires": { - "graceful-fs": "^4.1.6" + "universalify": "^1.0.0" } }, "jsonschema": { @@ -3627,9 +3705,9 @@ } }, "universalify": { - "version": "0.1.2", - "resolved": "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "version": "1.0.0", + "resolved": "https://registry.yarnpkg.com/universalify/-/universalify-1.0.0.tgz#b61a1da173e8435b2fe3c67d29b9adf8594bd16d", + "integrity": "sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug==", "dev": true }, "unpipe": { @@ -3672,9 +3750,9 @@ "dev": true }, "uuid": { - "version": "8.0.0", - "resolved": "https://registry.yarnpkg.com/uuid/-/uuid-8.0.0.tgz#bc6ccf91b5ff0ac07bbcdbf1c7c4e150db4dbb6c", - "integrity": "sha512-jOXGuXZAWdsTH7eZLtyXMqUb9EcWMGZNbL9YcGBJl4MH4nrxHmZJhEHvyLFrkxo+28uLb/NYRcStH48fnD0Vzw==", + "version": "8.1.0", + "resolved": "https://registry.yarnpkg.com/uuid/-/uuid-8.1.0.tgz#6f1536eb43249f473abc6bd58ff983da1ca30d8d", + "integrity": "sha512-CI18flHDznR0lq54xBycOVmphdCYnQLKn8abKn7PXUiKUGdEd+/l9LWNJmugXel4hXq7S+RMNl34ecyC9TntWg==", "dev": true }, "which-module": { @@ -3696,9 +3774,9 @@ "dev": true }, "wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "version": "7.0.0", + "resolved": "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dev": true, "requires": { "ansi-styles": "^4.0.0", diff --git a/src/js/grapl-cdk/package.json b/src/js/grapl-cdk/package.json index e5a724da92..58d9261afc 100644 --- a/src/js/grapl-cdk/package.json +++ b/src/js/grapl-cdk/package.json @@ -11,37 +11,37 @@ "cdk": "cdk" }, "devDependencies": { - "@aws-cdk/assert": "1.41.x", + "@aws-cdk/assert": "1.46.x", "@types/jest": "26.0.x", "@types/node": "14.0.x", "@types/uuid": "7.0.x", - "aws-cdk": "1.41.x", + "aws-cdk": "1.46.x", "jest": "26.0.x", "ts-jest": "26.0.x", "ts-node": "8.10.x", "typescript": "~3.9.3" }, "dependencies": { - "@aws-cdk/aws-apigateway": "1.41.x", - "@aws-cdk/aws-cloudformation": "1.41.x", - "@aws-cdk/aws-dynamodb": "1.41.x", - "@aws-cdk/aws-ec2": "1.41.x", - "@aws-cdk/aws-ecs": "1.41.x", - "@aws-cdk/aws-elasticache": "1.41.x", - "@aws-cdk/aws-events-targets": "1.41.x", - "@aws-cdk/aws-iam": "1.41.x", - "@aws-cdk/aws-lambda": "1.41.x", - "@aws-cdk/aws-lambda-event-sources": "1.41.x", - "@aws-cdk/aws-s3": "1.41.x", - "@aws-cdk/aws-s3-deployment": "1.41.x", - "@aws-cdk/aws-s3-notifications": "1.41.x", - "@aws-cdk/aws-sagemaker": "1.41.x", - "@aws-cdk/aws-secretsmanager": "1.41.x", - "@aws-cdk/aws-servicediscovery": "1.41.x", - "@aws-cdk/aws-sns": "1.41.x", - "@aws-cdk/aws-sns-subscriptions": "1.41.x", - "@aws-cdk/aws-sqs": "1.41.x", - "@aws-cdk/core": "1.41.x", + "@aws-cdk/aws-apigateway": "1.46.x", + "@aws-cdk/aws-cloudformation": "1.46.x", + "@aws-cdk/aws-dynamodb": "1.46.x", + "@aws-cdk/aws-ec2": "1.46.x", + "@aws-cdk/aws-ecs": "1.46.x", + "@aws-cdk/aws-elasticache": "1.46.x", + "@aws-cdk/aws-events-targets": "1.46.x", + "@aws-cdk/aws-iam": "1.46.x", + "@aws-cdk/aws-lambda": "1.46.x", + "@aws-cdk/aws-lambda-event-sources": "1.46.x", + "@aws-cdk/aws-s3": "1.46.x", + "@aws-cdk/aws-s3-deployment": "1.46.x", + "@aws-cdk/aws-s3-notifications": "1.46.x", + "@aws-cdk/aws-sagemaker": "1.46.x", + "@aws-cdk/aws-secretsmanager": "1.46.x", + "@aws-cdk/aws-servicediscovery": "1.46.x", + "@aws-cdk/aws-sns": "1.46.x", + "@aws-cdk/aws-sns-subscriptions": "1.46.x", + "@aws-cdk/aws-sqs": "1.46.x", + "@aws-cdk/core": "1.46.x", "@types/node-dir": "0.0.33", "aws-sdk": "2.682.x", "node-dir": "0.1.17", diff --git a/src/js/grapl-cdk/test/grapl-cdk.test.ts b/src/js/grapl-cdk/test/grapl-cdk.test.ts index a39aa3a3fe..2970fe06e6 100644 --- a/src/js/grapl-cdk/test/grapl-cdk.test.ts +++ b/src/js/grapl-cdk/test/grapl-cdk.test.ts @@ -5,7 +5,9 @@ import * as GraplCdk from '../lib/grapl-cdk-stack'; test('Empty Stack', () => { const app = new cdk.App(); // WHEN - const stack = new GraplCdk.GraplCdkStack(app, 'MyTestStack'); + const stack = new GraplCdk.GraplCdkStack(app, 'MyTestStack', { + stackName: 'Grapl-Test', + }); // THEN expectCDK(stack).to(matchTemplate({ "Resources": {} diff --git a/src/rust/Cargo.lock b/src/rust/Cargo.lock index ae84aa3dde..c1784eee45 100644 --- a/src/rust/Cargo.lock +++ b/src/rust/Cargo.lock @@ -1126,7 +1126,7 @@ dependencies = [ [[package]] name = "grapl-config" -version = "0.0.1" +version = "0.0.2" dependencies = [ "color-eyre", "eyre", diff --git a/src/rust/grapl-config/Cargo.toml b/src/rust/grapl-config/Cargo.toml index 660d1f41cd..9dc93d20e6 100644 --- a/src/rust/grapl-config/Cargo.toml +++ b/src/rust/grapl-config/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "grapl-config" -version = "0.0.1" +version = "0.0.2" authors = ["Insanitybit "] edition = "2018" description = "Config and utility library for Grapl services" diff --git a/src/rust/grapl-config/src/lib.rs b/src/rust/grapl-config/src/lib.rs index 84cae5f756..a5602ab441 100644 --- a/src/rust/grapl-config/src/lib.rs +++ b/src/rust/grapl-config/src/lib.rs @@ -158,3 +158,42 @@ where errs } + +pub fn static_mapping_table_name() -> String { + return std::env::var("STATIC_MAPPING_TABLE").expect("STATIC_MAPPING_TABLE"); +} + +pub fn dynamic_session_table_name() -> String { + return std::env::var("DYNAMIC_SESSION_TABLE").expect("DYNAMIC_SESSION_TABLE"); +} + +pub fn process_history_table_name() -> String { + return std::env::var("PROCESS_HISTORY_TABLE").expect("PROCESS_HISTORY_TABLE"); +} + +pub fn file_history_table_name() -> String { + return std::env::var("FILE_HISTORY_TABLE").expect("FILE_HISTORY_TABLE"); +} + +pub fn inbound_connection_history_table_name() -> String { + return std::env::var("INBOUND_CONNECTION_HISTORY_TABLE") + .expect("INBOUND_CONNECTION_HISTORY_TABLE"); +} + +pub fn outbound_connection_history_table_name() -> String { + return std::env::var("OUTBOUND_CONNECTION_HISTORY_TABLE") + .expect("OUTBOUND_CONNECTION_HISTORY_TABLE"); +} + +pub fn network_connection_history_table_name() -> String { + return std::env::var("NETWORK_CONNECTION_HISTORY_TABLE") + .expect("NETWORK_CONNECTION_HISTORY_TABLE"); +} + +pub fn ip_connection_history_table_name() -> String { + return std::env::var("IP_CONNECTION_HISTORY_TABLE").expect("IP_CONNECTION_HISTORY_TABLE"); +} + +pub fn asset_id_mappings_table_name() -> String { + return std::env::var("ASSET_ID_MAPPINGS").expect("ASSET_ID_MAPPINGS"); +} diff --git a/src/rust/node-identifier/src/assetdb.rs b/src/rust/node-identifier/src/assetdb.rs index fc78d5045f..cd2f801306 100644 --- a/src/rust/node-identifier/src/assetdb.rs +++ b/src/rust/node-identifier/src/assetdb.rs @@ -8,7 +8,6 @@ use serde::{Deserialize, Serialize}; use graph_descriptions::graph_description::host::*; use graph_descriptions::graph_description::node::WhichNode; use graph_descriptions::graph_description::*; -use graph_descriptions::graph_description::*; #[derive(Debug, Serialize, Deserialize)] pub struct ResolvedAssetId { @@ -52,7 +51,7 @@ where let query = QueryInput { consistent_read: Some(true), limit: Some(1), - table_name: "asset_id_mappings".to_owned(), + table_name: grapl_config::asset_id_mappings_table_name(), key_condition_expression: Some( "pseudo_key = :pkey_val AND c_timestamp >= :c_timestamp".into(), ), @@ -98,7 +97,7 @@ where consistent_read: Some(true), limit: Some(1), scan_index_forward: Some(false), - table_name: "asset_id_mappings".to_owned(), + table_name: grapl_config::asset_id_mappings_table_name(), key_condition_expression: Some( "pseudo_key = :pseudo_key AND c_timestamp <= :c_timestamp".into(), ), @@ -162,7 +161,7 @@ where let put_req = PutItemInput { item: serde_dynamodb::to_hashmap(&mapping).unwrap(), - table_name: "asset_id_mappings".to_owned(), + table_name: grapl_config::asset_id_mappings_table_name(), ..Default::default() }; diff --git a/src/rust/node-identifier/src/dynamic_sessiondb.rs b/src/rust/node-identifier/src/dynamic_sessiondb.rs index abfa89ecbe..4f9a913bfa 100644 --- a/src/rust/node-identifier/src/dynamic_sessiondb.rs +++ b/src/rust/node-identifier/src/dynamic_sessiondb.rs @@ -54,7 +54,7 @@ where let query = GetItemInput { consistent_read: Some(true), - table_name: "static_mapping_table".to_owned(), + table_name: grapl_config::static_mapping_table_name(), key, ..Default::default() }; @@ -79,7 +79,7 @@ where let put_req = PutItemInput { item: serde_dynamodb::to_hashmap(&mapping).unwrap(), - table_name: "static_mapping_table".to_owned(), + table_name: grapl_config::static_mapping_table_name(), ..Default::default() }; diff --git a/src/rust/node-identifier/src/lib.rs b/src/rust/node-identifier/src/lib.rs index 1a4addbb97..8fe4f670e9 100644 --- a/src/rust/node-identifier/src/lib.rs +++ b/src/rust/node-identifier/src/lib.rs @@ -112,7 +112,10 @@ where Some(unid) => unid, None => bail!("Could not identify ProcessNode"), }; - let session_db = SessionDb::new(self.node_id_db.clone(), "process_history_table"); + let session_db = SessionDb::new( + self.node_id_db.clone(), + grapl_config::process_history_table_name(), + ); let node_key = session_db .handle_unid_session(unid, self.should_default) .await?; @@ -127,7 +130,10 @@ where Some(unid) => unid, None => bail!("Could not identify FileNode"), }; - let session_db = SessionDb::new(self.node_id_db.clone(), "file_history_table"); + let session_db = SessionDb::new( + self.node_id_db.clone(), + grapl_config::file_history_table_name(), + ); let node_key = session_db .handle_unid_session(unid, self.should_default) .await?; @@ -141,8 +147,10 @@ where Some(unid) => unid, None => bail!("Could not identify ProcessInboundConnectionNode"), }; - let session_db = - SessionDb::new(self.node_id_db.clone(), "inbound_connection_history_table"); + let session_db = SessionDb::new( + self.node_id_db.clone(), + grapl_config::inbound_connection_history_table_name(), + ); let node_key = session_db .handle_unid_session(unid, self.should_default) .await?; @@ -156,8 +164,10 @@ where Some(unid) => unid, None => bail!("Could not identify ProcessOutboundConnectionNode"), }; - let session_db = - SessionDb::new(self.node_id_db.clone(), "outbound_connection_history_table"); + let session_db = SessionDb::new( + self.node_id_db.clone(), + grapl_config::outbound_connection_history_table_name(), + ); let node_key = session_db .handle_unid_session(unid, self.should_default) .await?; @@ -204,8 +214,10 @@ where Some(unid) => unid, None => bail!("Could not identify NetworkConnectionNode"), }; - let session_db = - SessionDb::new(self.node_id_db.clone(), "network_connection_history_table"); + let session_db = SessionDb::new( + self.node_id_db.clone(), + grapl_config::network_connection_history_table_name(), + ); let node_key = session_db .handle_unid_session(unid, self.should_default) .await?; @@ -219,8 +231,10 @@ where Some(unid) => unid, None => bail!("Could not identify IpConnectionNode"), }; - let session_db = - SessionDb::new(self.node_id_db.clone(), "ip_connection_history_table"); + let session_db = SessionDb::new( + self.node_id_db.clone(), + grapl_config::ip_connection_history_table_name(), + ); let node_key = session_db .handle_unid_session(unid, self.should_default) .await?; @@ -912,10 +926,7 @@ fn _handler(event: SqsEvent, ctx: Context, should_default: bool) -> Result<(), H let bucket = bucket_prefix + "-subgraphs-generated-bucket"; info!("Output events to: {}", bucket); - let region = { - let region_str = std::env::var("AWS_REGION").expect("AWS_REGION"); - Region::from_str(®ion_str).expect("Region error") - }; + let region = grapl_config::region(); let cache = RedisCache::new(cache_address.to_owned()) .await .expect("Could not create redis client"); @@ -923,7 +934,8 @@ fn _handler(event: SqsEvent, ctx: Context, should_default: bool) -> Result<(), H let asset_id_db = AssetIdDb::new(DynamoDbClient::new(region.clone())); let dynamo = DynamoDbClient::new(region.clone()); - let dyn_session_db = SessionDb::new(dynamo.clone(), "dynamic_session_table"); + let dyn_session_db = + SessionDb::new(dynamo.clone(), grapl_config::dynamic_session_table_name()); let dyn_mapping_db = DynamicMappingDb::new(DynamoDbClient::new(region.clone())); let asset_identifier = AssetIdentifier::new(asset_id_db); @@ -1098,7 +1110,7 @@ pub async fn local_handler(should_default: bool) -> Result<(), Box Result<(), Box