Skip to content

Commit

Permalink
big undocumented changes
Browse files Browse the repository at this point in the history
  • Loading branch information
srault95 committed May 12, 2020
1 parent 5b11895 commit ce3b4fb
Show file tree
Hide file tree
Showing 38 changed files with 1,008 additions and 270 deletions.
108 changes: 104 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Cloud Explorer - AWS

Librairie pour télécharger un inventaire des ressources d'une souscription AWS.
Librairie pour réaliser un inventaire des ressources d'une souscription AWS.

[![License: GPL v3](https://img.shields.io/badge/License-GPLv3-blue.svg)](https://www.gnu.org/licenses/gpl-3.0)
[![Build Status](https://travis-ci.org/multi-cloud-explorer/mce-lib-aws.svg)](https://travis-ci.org/multi-cloud-explorer/mce-lib-aws)
Expand All @@ -12,16 +12,116 @@ Librairie pour télécharger un inventaire des ressources d'une souscription AWS

[Documentation](https://multi-cloud-explorer.readthedocs.org)

> **En cours de développement...**
## Ressources AWS implémentées

- [x] aws.acm.certificate
- [x] aws.apigateway.restapis
- [x] aws.autoscaling.autoScalingGroup
- [x] aws.cloudfront.distribution
- [x] aws.cloudsearch.domain
- [x] aws.dynamodb.table
- [x] aws.ec2.instance
- [x] aws.ecs.cluster
- [x] aws.efs.filesystem
- [x] aws.elasticache.cluster
- [x] aws.elasticbeanstalk.application
- [x] aws.elb.loadbalancer
- [x] aws.elbv2.loadbalancer
- [x] aws.es.domain
- [x] aws.lambda.function
- [x] aws.opsworks.stack
- [x] aws.rds.db
- [x] aws.redshift.cluster
- [x] aws.s3.bucket
- [x] aws.sqs.queue
- [x] aws.sns.topic

## Remarques

Sans filtre de région ou de type, cette librairie va parcourir TOUTES les régions AWS pour tous les types de services gérés par mce-lib-aws.

Tant que le parallélisme n'est pas implémenté, cette opération peut prendre de 5 à 30 mn pour réaliser un inventaire complet.

Il est donc conseillé pour le moment de selectionner les régions à filtrer pour éviter des connections inutiles et diminuer le temps d'exécution.

## Installation

```bash
pip install git+https://github.com/multi-cloud-explorer/mce-lib-aws.git
```

## Configure
## Utilisation en ligne de commande

```shell
mce-aws run --help

Usage: mce-aws run [OPTIONS]

Options:
-S, --services [aws.acm.certificate|aws.apigateway.restapis|aws.autoscaling.autoScalingGroup|aws.cloudfront.distribution|aws.cloudsearch.domain|aws.dynamodb.table|aws.ec2.instance|aws.ecs.cluster|aws.efs.filesystem|aws.elasticache.cluster|aws.elasticbeanstalk.application|aws.elb.loadbalancer|aws.elbv2.loadbalancer|aws.es.domain|aws.lambda.function|aws.opsworks.stack|aws.rds.db|aws.redshift.cluster|aws.s3.bucket|aws.sqs.queue|aws.sns.topic]
Multiple services filter
-R, --regions TEXT Multiple regions filter
-a, --account-id TEXT Subscription ID [required]
-k, --access-key-id TEXT AWS Access Key ID [required]
-s, --secret-access-key TEXT AWS Secret Key [required]
-r, --default-region TEXT AWS Default Region [default: eu-central-1; required]
--output PATH File for output json data
-v, --verbose Enables verbose mode.
-D, --debug
-l, --log-level [DEBUG|WARN|ERROR|INFO|CRITICAL]
Logging level [default: INFO]
--log-file PATH File for output logs
--help Show this message and exit.
```

```shell
mce-aws run -S aws.s3.bucket -R us-east-1 -a 123456789001 -k testing -s testing --output /tmp/export.json
# Ou:
export AWS_ACCESS_KEY_ID=testing
export AWS_SECRET_ACCESS_KEY=testing
export AWS_DEFAULT_REGION=us-east-1
mce-aws run -S aws.s3.bucket -a 123456789001 --output /tmp/export.json

cat /tmp/export.json
```

```json
[
{
"arn": "arn:aws:s3:::mybucket0",
"data": {
"Name": "mybucket0",
"CreationDate": "2020-05-12T14:00:53.127747"
},
"tags": {
"key1": "value1"
},
"name": "mybucket0",
"account_id": "123456789001",
"region": "us-east-1",
"service": "aws.s3.bucket"
}
]
```

## Intégration dans votre code

```python
import boto3
from mce_lib_aws.crawler import get_all_assets
account_id = '123456789'
regions_allowed = ['eu-west-3', 'aws-global']
resources_allowed = ['aws.s3.bucket', 'aws.ec2.instance']
session = boto3.Session(aws_access_key_id="testing", aws_secret_access_key="testing", region_name="us-east-1")
for asset in get_all_assets(session, account_id, resources_allowed=resources_allowed, regions_allowed=regions_allowed):
print(asset)
```

TODO...
## TODO

- [ ] Ajouter du parallélisme avec Gevent ou concurrent.futures
- [ ] Documenter la création d'un compte et des droits AWS nécessaires à l'inventaire
- [ ] Terminer les exemples dans contrib/
- [ ] Ajouter des services AWS
- [ ] Ajouter des tests sur les opérations sur les Tags

15 changes: 13 additions & 2 deletions contrib/README.md
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
# Quelques exemples pour utiliser mce-lib-aws
# Quelques exemples pour exploiter mce-lib-aws

En cours de mise au point...

## Localstack

- Exécution d'un localstack local

```shell
docker run -d --name localstack-us-east-1 \
--hostname localstack-us-east-1 \
Expand All @@ -22,6 +24,15 @@ docker run --rm -it -e SERVICES=sqs,sts,ec2,iam,secretsmanager,acm -p 45660:4566

```

## contrib/python

- Alimentation de localstack à partir des fixtures python livrés avec mce-lib-aws

## contrib/terraform

- Alimentation de localstack à partir de templates Terraform

## contrib/serverless

- Publication d'une fonction lambda, utilisant mce-lib-aws pour gérér les évènements d'inventaires (création/modification/suppression de ressources)


35 changes: 22 additions & 13 deletions contrib/serverless/handler.py
Original file line number Diff line number Diff line change
@@ -1,16 +1,25 @@
import json
import datetime
import boto3
from decouple import config
from mce_lib_aws.crawler import get_all_assets


def endpoint(event, context):
current_time = datetime.datetime.now().time()
body = {
"message": "Hello, the current time is " + str(current_time)
}

response = {
"statusCode": 200,
"body": json.dumps(body)
}

return response
# account_id = '123456789'
# regions_allowed = ['eu-west-3', 'aws-global']
# resources_allowed = ['aws.s3.bucket', 'aws.ec2.instance']
# session = boto3.Session(aws_access_key_id="testing", aws_secret_access_key="testing", region_name="us-east-1")
# for asset in get_all_assets(session, account_id, resources_allowed=resources_allowed, regions_allowed=regions_allowed):
# print(asset)
#
# def endpoint(event, context):
# current_time = datetime.datetime.now().time()
# body = {
# "message": "Hello, the current time is " + str(current_time)
# }
#
# response = {
# "statusCode": 200,
# "body": json.dumps(body)
# }
#
# return response
3 changes: 2 additions & 1 deletion contrib/serverless/requirements.txt
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
PyYAML
dynamodb-json
python-decouple
boto3
git+https://github.com/multi-cloud-explorer/mce-lib-aws.git
3 changes: 2 additions & 1 deletion mce_lib_aws/__init__.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@

from .services import (
acm,
autoscaling,
Expand Down Expand Up @@ -25,7 +26,7 @@
)


_AVAILABLES_RESOURCES = {
SERVICES = {
'aws.acm.certificate': acm.Certificate,
'aws.apigateway.restapis': apigateway.RestApi,
'aws.autoscaling.autoScalingGroup': autoscaling.AutoScalingGroup,
Expand Down

0 comments on commit ce3b4fb

Please sign in to comment.