Package: cdktg
cdk-threagile (cdktg)Agile Threat Modeling as CodeCDK Constructs forthreagileInstallationTypeScript/JavaScript:npmicdktgPython:pipinstallcdktgHow to useInitialize a project:mkdirthreagilecdthreagile
cdktginitThreat Model written in typescript:// threagile.tsconstproject=newProject();constmodel=newModel(project,'Model Stub',{title:'Model Stub',version:'1.0.0',date:'2020-03-31',author:newAuthor({name:'John Doe',}),businessCriticality:BusinessCriticality.IMPORTANT,});constsomeData=newDataAsset(model,'Some Data Asset',{description:'Some Description',usage:Usage.BUSINESS,origin:'Some Origin',owner:'Some Owner',quantity:Quantity.MANY,ciaTriad:newCIATriad({confidentiality:Confidentiality.CONFIDENTIAL,integrity:Integrity.CRITICAL,availability:Availability.OPERATIONAL,}),});constsomeTrustBoundary=newTrustBoundary(model,'Some Trust Boundary',{description:'Some Description',type:TrustBoundaryType.NETWORK_DEDICATED_HOSTER,});constsomeTechnicalAsset=newTechnicalAsset(model,'Some Technical Asset',{trustBoundary:someTrustBoundary,description:'Some Description',type:TechnicalAssetType.PROCESS,usage:Usage.BUSINESS,humanUse:false,size:Size.COMPONENT,technology:Technology.WEB_SERVICE_REST,internet:false,machine:Machine.VIRTUAL,encryption:Encryption.NONE,owner:'Some Owner',ciaTriad:newCIATriad({confidentiality:Confidentiality.CONFIDENTIAL,integrity:Integrity.CRITICAL,availability:Availability.CRITICAL,}),multiTenant:false,redundant:true,});someTechnicalAsset.processes(someData);constsomeOtherTechnicalAsset=newTechnicalAsset(model,'Some Other Technical Asset',{description:'Some Description',type:TechnicalAssetType.PROCESS,usage:Usage.BUSINESS,humanUse:false,size:Size.COMPONENT,technology:Technology.WEB_SERVICE_REST,tags:['some-tag','some-other-tag'],internet:false,machine:Machine.VIRTUAL,encryption:Encryption.NONE,owner:'Some Owner',ciaTriad:newCIATriad({confidentiality:Confidentiality.CONFIDENTIAL,integrity:Integrity.IMPORTANT,availability:Availability.IMPORTANT,}),multiTenant:false,redundant:true,});someOtherTechnicalAsset.processes(someData);constsomeTraffic=someTechnicalAsset.communicatesWith('Some Traffic',someOtherTechnicalAsset,{description:'Some Description',protocol:Protocol.HTTPS,authentication:Authentication.NONE,authorization:Authorization.NONE,vpn:false,ipFiltered:false,readonly:false,usage:Usage.BUSINESS,});someTraffic.sends(someData);constsomeSharedRuntime=newSharedRuntime(model,"Some Shared Runtime",{description:"Some Description",});someSharedRuntime.runs(someTechnicalAsset,someOtherTechnicalAsset);project.synth();High level constructs (cdktg/plus*)import{ApplicationLoadBalancer,Cloud}from"cdktg/plus-aws";// ...constalb=newApplicationLoadBalancer(model,"ALB",{waf:true,ciaTriad:newCIATriad({availability:Availability.CRITICAL,integrity:Integrity.IMPORTANT,confidentiality:Confidentiality.CONFIDENTIAL,}),});constcloud=newCloud(model,"AWS-Cloud");cloud.addTechnicalAssets(alb);// ...cdktg CLI commands:A running thragile rest api server is required for the CLI. The URL can be passed by parameterurlor environment variableCDKTG_THREAGILE_BASE_URL.The examples can be used with thethreagile playgroundcdktg[command]Commands:cdktginitcreateanewcdk-threagileprojectcdktgsynth<filename>synthesizethemodelscdktgpingpingtheapicdktgcheckcheckthemodelscdktganalyzeanalyzethemodelscdktgcompletiongeneratecompletionscript

Options:--helpShowhelp[boolean]--versionShowversionnumber[boolean]Analyze outputs:dist
└──ModelStub├──data-asset-diagram.png├──data-flow-diagram.png├──report.pdf├──risks.json├──risks.xlsx├──stats.json├──tags.xlsx├──technical-assets.json└──threagile.yamlExamplesSee more completeexamples.LicenseMIT