Skip to content

Commit 6a405f4

Browse files
committed
add initial content
1 parent df499d3 commit 6a405f4

35 files changed

+1187
-0
lines changed

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
# docs.exitcloud.io

src/README.md

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
# cloudexit (EscapeCloud Community Edition)
2+
3+
cloudexit is an open-source tool that helps cloud engineers perform **cloud exit readiness assessments**.
4+
5+
It discovers your cloud services, costs, and portability constraints, then generates reports and scores that help you understand:
6+
- where vendor lock-in risks exist,
7+
- what alternative technologies could replace cloud services,
8+
- and how prepared you are for an exit scenario.
9+
10+
cloudexit can run fully offline and is free to use forever.
11+
Optionally, you can connect to exitcloud.io to store assessments and generate advanced reports.

src/SUMMARY.md

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,46 @@
11
# Summary
2+
3+
- [Welcome](README.md)
4+
5+
# Overview
6+
- [What is cloudexit?](overview/what-is-cloudexit.md)
7+
- [Exit Strategy](overview/exit-strategy.md)
8+
- [Assessment Types](overview/assessment-types.md)
9+
- [Offline vs Connected mode](overview/offline-vs-connected.md)
10+
11+
12+
# Getting Started
13+
- [Quickstart](getting-started/quickstart.md)
14+
- [Prerequisites](getting-started/prerequisites.md)
15+
- [Running assessments](getting-started/running-assessments.md)
16+
17+
# Cloud Providers
18+
- [Required permissions](cloud-providers/required-permissions.md)
19+
- [AWS](cloud-providers/aws.md)
20+
- [Azure](cloud-providers/azure.md)
21+
22+
# Configuration
23+
- [Config schema](config/config-schema.md)
24+
- [AWS](config/aws-config-example.md)
25+
- [Azure](config/azure-config-example.md)
26+
27+
# Reports & Scores
28+
- [Reports Overview](reports/overview.md)
29+
- [Resource Inventory](reports/resource-inventory.md)
30+
- [Cost Overview](reports/cost-overview.md)
31+
- [Risk Inventory](reports/risk-inventory.md)
32+
- [Alternative Technologies](reports/alternative-technologies.md)
33+
- [Scores](reports/scores.md)
34+
35+
# Connected Mode
36+
- [Connect to Platform](connected-mode/connect-to-platform.md)
37+
- [What gets uploaded](connected-mode/what-gets-uploaded.md)
38+
- [Offline vs online reports](connected-mode/offline-vs-online-reports.md)
39+
40+
# Troubleshooting
41+
- [Common errors](troubleshooting/common-errors.md)
42+
- [Auth & permissions](troubleshooting/auth-and-permissions.md)
43+
44+
# License
45+
- [How to contribute](contributing/how-to-contribute.md)
46+
- [License](contributing/license.md)

src/cloud-providers/aws.md

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
# AWS
2+
3+
This page explains how to authenticate cloudexit against AWS and what permissions are required.
4+
5+
**Authentication Methods**
6+
7+
cloudexit supports:
8+
- **Access key / secret key** (interactive or config file)
9+
- **AWS CLI profiles** (`--profile PROFILE`)
10+
11+
**Required Permissions**
12+
13+
To run an AWS assessment, the following AWS managed policies must be attached:
14+
15+
- **ViewOnlyAccess** [(AWS Docs)](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/ViewOnlyAccess.html)
16+
- **AWSBillingReadOnlyAccess** [(AWS Docs)](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AWSBillingReadOnlyAccess.html)
17+
18+
See also: [Required permissions](required-permissions.md)
19+
20+
**Run an assessment (AWS)**
21+
22+
***Interactive***
23+
24+
```bash
25+
python3 main.py aws
26+
```
27+
28+
cloudexit will prompt you for:
29+
- Exit strategy
30+
- Assessment type
31+
- Access key
32+
- Secret key
33+
- Region
34+
35+
***Interactive with AWS Profile***
36+
37+
```bash
38+
python3 main.py aws --profile default
39+
```
40+
41+
cloudexit will use credentials from your local AWS CLI config.
42+
[(AWS Docs)](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-quickstart.html)

src/cloud-providers/azure.md

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
# Azure
2+
3+
This page explains how to authenticate CloudExit against Microsoft Azure and what permissions are required.
4+
5+
**Authentication Methods**
6+
7+
cloudexit supports:
8+
- **Service principal** (interactive or config file)
9+
- **Azure CLI credentials** (`--cli`)
10+
11+
**Required Permissions**
12+
13+
To run an Azure assessment, the following role assignments must be attached:
14+
15+
- **Reader** [(Microsoft Docs)](https://learn.microsoft.com/en-us/azure/role-based-access-control/built-in-roles/general#reader)
16+
- **Cost Management Reader** [(Microsoft Docs)](https://learn.microsoft.com/en-us/azure/role-based-access-control/built-in-roles/management-and-governance#cost-management-reader)
17+
18+
These roles should be assigned at the appropriate scope:
19+
- Subscription (recommended)
20+
- Resource group (supported if you want a narrower scope)
21+
22+
See also: [Required permissions](required-permissions.md)
23+
24+
**Run an assessment (Azure)**
25+
26+
***Interactive***
27+
28+
```bash
29+
python3 main.py azure
30+
```
31+
32+
cloudexit will prompt you for:
33+
- Exit strategy
34+
- Assessment type
35+
- Tenant ID
36+
- Service Principal / Client ID
37+
- Client Secret ID
38+
39+
Then you've to select from the followings:
40+
- Select Subscription Name / ID
41+
- Select Resource Group Name
42+
43+
***Interactive with Azure CLI***
44+
45+
```bash
46+
python3 main.py azure --cli
47+
```
48+
49+
cloudexit will use your authenticated Azure CLI session.
50+
[(Microsoft Docs)](https://learn.microsoft.com/en-us/cli/azure/)
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
# Required permissions
2+
3+
cloudexit requires **read-only** access to discover resources and retrieve cost signals.
4+
5+
If permissions are missing, the most common symptoms are:
6+
- empty or incomplete inventory
7+
- missing cost data
8+
- validation failures during the “Validate permissions” stage
9+
10+
**Minimum required permissions**
11+
12+
| Cloud Provider | Required Permissions |
13+
|--------------|----------------------|
14+
| Microsoft Azure | **Reader** + **Cost Management Reader** |
15+
| Amazon Web Services | **ViewOnlyAccess** + **AWSBillingReadOnlyAccess** |
16+
17+
18+
**Principle of least privilege**
19+
20+
We recommend using least-privilege credentials:
21+
- avoid overly privileged accounts (e.g., Owner/Admin)
22+
- scope access to only the subscriptions / accounts / projects you intend to assess
23+
24+
cloudexit does **not** require write permissions.
25+
26+
**Troubleshooting permission issues**
27+
28+
If assessment fails during:
29+
- **Validate permissions**
30+
- **Build Resource Inventory**
31+
- **Build Cost Inventory**
32+
33+
…double check that the credentials include the required roles/policies above.
34+
35+
Provider-specific guides:
36+
- [AWS permissions](aws.md)
37+
- [Azure permissions](azure.md)

src/config/aws-config-example.md

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
# Amazon Web Services (AWS) config
2+
3+
This page shows an example configuration file for running an AWS assessment.
4+
5+
![image](/docs/images/AWS_Config.png)
6+
7+
**Example AWS config**
8+
9+
```json
10+
{
11+
"name": "DMS System",
12+
"cloudServiceProvider": 2,
13+
"exitStrategy": 3,
14+
"assessmentType": 1,
15+
"providerDetails": {
16+
"accessKey": "AKAAXASJHMTOST9YTLHE",
17+
"secretKey": "",
18+
"region": "eu-central-1"
19+
}
20+
}
21+
```
22+
23+
**Run with the config**
24+
25+
Save your config (for example as `config/aws.json`) and run:
26+
27+
```bash
28+
python3 main.py aws --config config/aws.json
29+
```
30+
31+
**Notes**
32+
33+
- Keep your `accessKey` and `secretKey` secure.
34+
- Do not commit real credentials to GitHub.

src/config/azure-config-example.md

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
# Microsoft Azure config
2+
3+
This page shows an example configuration file for running an Azure assessment.
4+
5+
![image](/docs/images/Azure_Config.png)
6+
7+
8+
**Example Azure config**
9+
10+
```json
11+
{
12+
"name": "DMS System",
13+
"cloudServiceProvider": 1,
14+
"exitStrategy": 3,
15+
"assessmentType": 1,
16+
"providerDetails": {
17+
"clientId": "a5d7a310-26a4-115f-b679-ca01f0d73b75",
18+
"clientSecret": "",
19+
"tenantId": "38986009-9ded-42b3-b187-55f1cb61560a",
20+
"subscriptionId": "1299bf9a-8ca8-478b-8659-c62e62cd7baa",
21+
"resourceGroupName": "test-project"
22+
}
23+
}
24+
```
25+
26+
**Run with the config**
27+
28+
Save your config (for example as `config/azure.json`) and run:
29+
30+
```bash
31+
python3 main.py azure --config config/azure.json
32+
```
33+
34+
**Notes**
35+
36+
- Keep your `clientId` and `clientSecret` secure.
37+
- Do not commit real credentials to GitHub.

src/config/config-schema.md

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
# Config schema
2+
3+
cloudexit supports running assessments using configuration files.
4+
5+
Configuration files are useful when you want to:
6+
- run assessments repeatedly in a consistent way
7+
- automate runs in CI or scripts
8+
- store non-secret defaults (scope, provider, strategy)
9+
10+
### `name`
11+
Assessment name shown in reports.
12+
13+
Example:
14+
```json
15+
"name": "DMS System"
16+
```
17+
18+
### `cloudServiceProvider`
19+
Which cloud provider to assess.
20+
21+
| Cloud Provider | Value |
22+
|--------------|------:|
23+
| Microsoft Azure | 1 |
24+
| Amazon Web Services | 2 |
25+
| Google Cloud Platform | TBD |
26+
| Alibaba Cloud | TBD |
27+
28+
### `exitStrategy`
29+
Which exit strategy the assessment should model.
30+
31+
| Strategy | Value |
32+
|---------|------:|
33+
| Repatriation to On-Premises | 1 |
34+
| Hybrid Cloud Adoption | TBD |
35+
| Migration to Alternate Cloud | 3 |
36+
37+
### `assessmentType`
38+
Which assessment type to run.
39+
40+
| Type | Value | Comment |
41+
|------|------:|---------|
42+
| Basic | 1 | No API key required |
43+
| Standard | 2 | API key required |
44+
45+
### `providerDetails`
46+
Provider-specific authentication details (varies by cloud provider).
47+
48+
See:
49+
- [AWS config example](aws-config-example.md)
50+
- [Azure config example](azure-config-example.md)
51+
52+
## Example structure
53+
54+
```json
55+
{
56+
"name": "DMS System",
57+
"cloudServiceProvider": 2,
58+
"exitStrategy": 3,
59+
"assessmentType": 1,
60+
"providerDetails": {
61+
"...": "..."
62+
}
63+
}
64+
```

0 commit comments

Comments
 (0)