{"id":13821782,"url":"https://github.com/tensult/cloud-reports","last_synced_at":"2025-05-16T15:30:49.579Z","repository":{"id":55780455,"uuid":"111874581","full_name":"tensult/cloud-reports","owner":"tensult","description":"Scans your AWS cloud resources and generates reports. Check out free hosted version:","archived":true,"fork":false,"pushed_at":"2020-12-12T07:40:44.000Z","size":2589,"stargazers_count":276,"open_issues_count":6,"forks_count":61,"subscribers_count":13,"default_branch":"master","last_synced_at":"2024-06-28T10:31:56.792Z","etag":null,"topics":["analyzer","aws","best-practices","cloud","cloud-computing","html","json","pdf","puppeteer","reports","scans","security"],"latest_commit_sha":null,"homepage":"https://apps.tensult.com","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/tensult.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2017-11-24T04:03:47.000Z","updated_at":"2024-04-27T04:17:09.000Z","dependencies_parsed_at":"2022-08-15T07:00:52.832Z","dependency_job_id":null,"html_url":"https://github.com/tensult/cloud-reports","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tensult%2Fcloud-reports","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tensult%2Fcloud-reports/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tensult%2Fcloud-reports/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tensult%2Fcloud-reports/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/tensult","download_url":"https://codeload.github.com/tensult/cloud-reports/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":213893315,"owners_count":15653524,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["analyzer","aws","best-practices","cloud","cloud-computing","html","json","pdf","puppeteer","reports","scans","security"],"created_at":"2024-08-04T08:01:28.074Z","updated_at":"2024-08-04T08:07:01.638Z","avatar_url":"https://github.com/tensult.png","language":"TypeScript","readme":"[![Board Status](https://dev.azure.com/tensult/2c29ab5b-9000-4fa6-9749-f4e61e2ade0f/cf3227c2-a417-4152-9b04-adb28ea85230/_apis/work/boardbadge/fc868809-c7e9-4f6b-9d31-c36850a90084)](https://dev.azure.com/tensult/2c29ab5b-9000-4fa6-9749-f4e61e2ade0f/_boards/board/t/cf3227c2-a417-4152-9b04-adb28ea85230/Microsoft.RequirementCategory)\n[![Donate](https://img.shields.io/badge/Donate-PayPal-green.svg)](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick\u0026hosted_button_id=73QY55FZWSPRJ)\n\n# Cloud Reports\nCollects info about various cloud resources and analyzes them against best practices and give a JSON, CSV, HTML, or PDF reports.\n\n\n\u003cp align=\"center\"\u003e \n\u003cimg src=\"https://user-images.githubusercontent.com/33080863/54195436-a734d300-44e4-11e9-952e-482eac08f345.png\"\u003e\n\u003c/p\u003e\n\n## Modules\n### [Collectors](https://github.com/tensult/cloud-reports/tree/master/src/collectors)\nThese collect the information about various cloud resources from the cloud provider. This information later used by [Analyzers](https://github.com/tensult/cloud-reports/tree/master/src/analyzers) to analyze.\n### [Analyzers](https://github.com/tensult/cloud-reports/tree/master/src/analyzers)\nAnalyzers are the codified best practices for the cloud and these analyzes each best practice against the collected information and generates report which then consumed by [Reporters](https://github.com/tensult/cloud-reports/tree/master/src/reporters) to generate reports in a desired format.\n### [Reporters](https://github.com/tensult/cloud-reports/tree/master/src/reporters)\nThese are for generating reports in various formats and currently supported formats are JSON, HTML and PDF.\n### AWS (Amazon Web Services)\nWe are implementing checks based on [AWS Well Architected](https://aws.amazon.com/architecture/well-architected/) best practices. \n* [AWS Collectors](https://github.com/tensult/cloud-reports/tree/master/src/collectors/aws): Collects information from various AWS services.\n* [AWS Analyzers](https://github.com/tensult/cloud-reports/tree/master/src/analyzers/aws): Analyzes the information collected.\n* Currently supported AWS service modules:\n* * acm: [AWS Certificate Manager](https://github.com/tensult/cloud-reports/tree/master/src/analyzers/aws/acm)\n* * apigateway: [Amazon APIGateway](https://github.com/tensult/cloud-reports/tree/master/src/analyzers/aws/apigateway)\n* * cloudfront: [AWS CloudFront](https://github.com/tensult/cloud-reports/tree/master/src/analyzers/aws/cloudfront)\n* * cloudwatch: [AWS CloudWatch](https://github.com/tensult/cloud-reports/tree/master/src/analyzers/aws/cloudwatch)\n* * dynamodb: [AWS DynamoDB](https://github.com/tensult/cloud-reports/tree/master/src/analyzers/aws/dynamodb)\n* * ebs: [AWS Elastic Block Storage](https://github.com/tensult/cloud-reports/tree/master/src/analyzers/aws/ebs)\n* * ec2: [AWS Elastic Cloud Computing](https://github.com/tensult/cloud-reports/tree/master/src/analyzers/aws/ec2)\n* * elasticsearch: [AWS Elasticsearch Service](https://github.com/tensult/cloud-reports/tree/master/src/analyzers/aws/elasticsearch)\n* * elb: [AWS Elastic Load Balancer](https://github.com/tensult/cloud-reports/tree/master/src/analyzers/aws/elb)\n* * iam: [AWS Identity and Access Management](https://github.com/tensult/cloud-reports/tree/master/src/analyzers/aws/iam)\n* * lambda: [Amazon Lambda](https://github.com/tensult/cloud-reports/tree/master/src/analyzers/aws/lambda)\n* * rds: [AWS Relational Databases](https://github.com/tensult/cloud-reports/tree/master/src/analyzers/aws/rds)\n* * redshift: [AWS Redshift](https://github.com/tensult/cloud-reports/tree/master/src/analyzers/aws/redshift)\n* * resourcegroups: [AWS Resource Groups](https://github.com/tensult/cloud-reports/tree/master/src/analyzers/aws/resourcegroups)\n* * route53: [AWS Route 53](https://github.com/tensult/cloud-reports/tree/master/src/analyzers/aws/route53)\n* * s3: [AWS Simple Storage Service](https://github.com/tensult/cloud-reports/tree/master/src/analyzers/aws/s3)\n* * sns: [AWS Simple Notification Service](https://github.com/tensult/cloud-reports/tree/master/src/analyzers/aws/sns)\n* * sqs: [AWS Simple Queue Service](https://github.com/tensult/cloud-reports/tree/master/src/analyzers/aws/sqs)\n* * route53: [AWS Elastic Load Balancer](https://github.com/tensult/cloud-reports/tree/master/src/analyzers/aws/elb)\n* * trails: [AWS CloudTrails](https://github.com/tensult/cloud-reports/tree/master/src/analyzers/aws/trails)\n* * vpc: [AWS Virtual Private Cloud](https://github.com/tensult/cloud-reports/tree/master/src/analyzers/aws/vpc)\n\n### Install NodeJS\nThis package is based on NodeJS framework so you can it install from [here](https://nodejs.org/en/).\n### Installing cloud-reports from source\n#### Download\n\n    git clone https://github.com/tensult/cloud-reports.git\n\n#### To get updates\nIf you have already cloned this repository before then for getting new updates, change directory to the cloud-reports directory and then do git pull.\n```\ngit pull\n```\n\n#### Installing and Building\n*Make sure you are in the cloud-reports directory.*\n\nTo convert typescript to javascript\n\n    npm run build \n#### Scan\nThis collects and analyzes information about your AWS cloud and stores as a report file with name **scan_report.pdf**.\n* To run for all modules\n```\nnpm run scan -- --profile Your-AWS-profile\n```\n* To run on an EC2 instance\n  * It is recommended not to keep the hard coded credentials on the instance so make sure to configure IAM EC2 instance profile role with Read access to AWS account.\n  * Kindly make sure the machine has minimum 2 GB RAM available and the IAM role has atleast ReadOnly access to the AWS account.\n  * Once the above conditions are met, CloudReports can run on the instance using instance profile role so no need to pass the profile parameter.\n\n```\nnpm run scan -- -m s3,acm\n```\n* To run for specific module\n```\nnpm run scan -- --profile Your-AWS-profile -m s3,acm\n```\n* To run for single module\n```\nnpm run scan -- --profile Your-AWS-profile  -m s3\n```\n* To run for specific regions\n```\nnpm run scan -- --profile Your-AWS-profile -m s3,acm -r ap-south-1,ap-southeast-1\n```\n* We can generate report in following formats: \n* To generate HTML report file\n```\nnpm run scan -- --profile Your-AWS-profile  -f html\n```\n* To generate PDF report file\n```\nnpm run scan -- --profile Your-AWS-profile  -f pdf\nnpm run scan -- --profile Your-AWS-profile  -f pdf -i # This will only report issues\n```\n* To generate CSV report file\n```\nnpm run scan -- --profile Your-AWS-profile  -f csv\nnpm run scan -- --profile Your-AWS-profile  -f csv -i # This will only report issues\n```\n* To generate JSON report file\n```\nnpm run scan -- --profile Your-AWS-profile  -f json\n```\n* To generate report with custom name\n```\nnpm run scan -- --profile Your-AWS-profile  -f json -o my-dev-account\n```\n#### [Sample reports](https://github.com/tensult/cloud-reports/tree/master/sample-reports)\n\n### Debugging\nYou can run this tool in debug mode to generate intermediate reports: collector_report.json and analyzer_report.json\n```\nnpm run scan -- --profile Your-AWS-profile  -f pdf -d\n```\n#### Reusing Collector report\nWhen we are working on analyzers, we will be testing them multiple times and every time collecting data will cause delays, to avoid such delays you can use the following command to reuse already collected collector report.\n```\nnpm run scan -- --profile Your-AWS-profile  -f pdf -d -u\n```\n### Install as npm module to an existing package\n#### Install cloud-reports npm module\n```\nnpm install -S cloud-reports\n```\n#### Usage\nMake sure you have initialized [AWS.config](https://docs.aws.amazon.com/sdk-for-javascript/v2/developer-guide/global-config-object.html), otherwise this will use default AWS profile.\n```js\n    const cloudReporter = require('cloud-reports');\n    // To collect for all modules\n    const collectionPromise = cloudReporter.collect()\n    // To collect for specific modules\n    // const collectedJson = cloudReporter.collect(['s3', 'iam']);\n    // const collectedJson = cloudReporter.collect('vpc');\n    const analysisPromise = collectionPromise.then((collectedJson) =\u003e cloudReporter.analyze(collectedJson));\n    analysisPromise.then((analysisJson) =\u003e console.log(JSON.stringify(analysisJson, null, 2)));\n```\n#### Multiple credentials support\nYou may want to run the report for multiple accounts with different set of credentials at once, then in that case you can pass different credentials to collect method.\n```js\n    const cloudReporter = require('cloud-reports');\n    const account1CollectionPromise = cloudReporter.collect(all, credentials1);\n    const account2CollectionPromise = cloudReporter.collect(all, credentials2);\n\n    const analysisPromise = Promise.all([account1CollectionPromise, account2CollectionPromise])\n                                   .then((collectedJsons) =\u003e {\n                                       return collectedJsons.map((collectedJson) =\u003e {\n                                           return cloudReporter.analyze(collectedJson);\n                                       });\n                                    });\n    analysisPromise.then((analysisJsons) =\u003e console.log(JSON.stringify(analysisJsons, null, 2)));\n```\n### Update service regions[Broken as AWS changed the documentation UI]\nWe have written a [script](https://github.com/tensult/cloud-reports/blob/master/src/scripts/updateAwsServiceRegionsData.js) which updates the [AWS regions data](https://github.com/tensult/cloud-reports/blob/master/src/utils/aws/regions_data.ts)\n```\nnode src/scripts/updateAwsServiceRegionsData.js\n```\n## Contribute\nCurrently this application only supports AWS, but can be extendable to other cloud providers. Contributions are most welcome.\n\n## Contact us\nThis product is supported and actively developed by [Tensult](https://www.tensult.com). You can contact us at info@tensult.com. Also, we have a SaaS version also for [this](https://apps.tensult.com) and currently it is free so please try it.\n","funding_links":["https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick\u0026hosted_button_id=73QY55FZWSPRJ"],"categories":["TypeScript"],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftensult%2Fcloud-reports","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftensult%2Fcloud-reports","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftensult%2Fcloud-reports/lists"}