# AWS - DataPipeline, CodePipeline & CodeCommit Enum

{{#include ../../../banners/hacktricks-training.md}}

## DataPipeline

AWS Data Pipeline est conçu pour faciliter l'**accès, la transformation et le transfert efficace** de données à grande échelle. Il permet d'effectuer les opérations suivantes :

1. **Accédez à vos données où elles sont stockées** : Les données résidant dans divers services AWS peuvent être accessibles sans effort.
2. **Transformez et traitez à grande échelle** : Les tâches de traitement et de transformation de données à grande échelle sont gérées efficacement.
3. **Transférez les résultats efficacement** : Les données traitées peuvent être transférées efficacement vers plusieurs services AWS, y compris :
- Amazon S3
- Amazon RDS
- Amazon DynamoDB
- Amazon EMR

En essence, AWS Data Pipeline rationalise le mouvement et le traitement des données entre différents services de calcul et de stockage AWS, ainsi que des sources de données sur site, à des intervalles spécifiés.

### Enumeration
```bash
aws datapipeline list-pipelines
aws datapipeline describe-pipelines --pipeline-ids <ID>
aws datapipeline list-runs --pipeline-id <ID>
aws datapipeline get-pipeline-definition --pipeline-id <ID>
```
### Privesc

Dans la page suivante, vous pouvez vérifier comment **abuser des permissions de datapipeline pour escalader les privilèges** :

{{#ref}}
../aws-privilege-escalation/aws-datapipeline-privesc.md
{{#endref}}

## CodePipeline

AWS CodePipeline est un **service de livraison continue** entièrement géré qui vous aide à **automatiser vos pipelines de publication** pour des mises à jour d'application et d'infrastructure rapides et fiables. CodePipeline automatise les **phases de construction, de test et de déploiement** de votre processus de publication chaque fois qu'il y a un changement de code, en fonction du modèle de publication que vous définissez.

### Enumeration
```bash
aws codepipeline list-pipelines
aws codepipeline get-pipeline --name <pipeline_name>
aws codepipeline list-action-executions --pipeline-name <pl_name>
aws codepipeline list-pipeline-executions --pipeline-name <pl_name>
aws codepipeline list-webhooks
aws codepipeline get-pipeline-state --name <pipeline_name>
```
### Privesc

Dans la page suivante, vous pouvez vérifier comment **abuser des permissions de codepipeline pour escalader les privilèges** :

{{#ref}}
../aws-privilege-escalation/aws-codepipeline-privesc.md
{{#endref}}

## CodeCommit

C'est un **service de contrôle de version**, qui est hébergé et entièrement géré par Amazon, et qui peut être utilisé pour stocker des données (documents, fichiers binaires, code source) de manière privée et les gérer dans le cloud.

Il **élimine** la nécessité pour l'utilisateur de connaître Git et **de gérer son propre système de contrôle de version** ou de s'inquiéter de l'augmentation ou de la réduction de son infrastructure. Codecommit prend en charge toutes les **fonctionnalités standard que l'on peut trouver dans Git**, ce qui signifie qu'il fonctionne sans effort avec les outils basés sur Git de l'utilisateur.

### Enumeration
```bash
# Repos
aws codecommit list-repositories
aws codecommit get-repository --repository-name <name>
aws codecommit get-repository-triggers --repository-name <name>
aws codecommit list-branches --repository-name <name>
aws codecommit list-pull-requests --repository-name <name>

# Approval rules
aws codecommit list-approval-rule-templates
aws codecommit get-approval-rule-template --approval-rule-template-name <name>
aws codecommit list-associated-approval-rule-templates-for-repository --repository-name <name>

# Get & Put files
## Get a file
aws codecommit get-file --repository-name backend-api --file-path app.py
## Put a file
aws codecommit get-branch --repository-name backend-api --branch-name master
aws codecommit put-file --repository-name backend-api --branch-name master --file-content fileb://./app.py --file-path app.py --parent-commit-id <commit-id>

# SSH Keys & Clone repo
## Get codecommit keys
aws iam list-ssh-public-keys #User keys for CodeCommit
aws iam get-ssh-public-key --user-name <username> --ssh-public-key-id <id> --encoding SSH #Get public key with metadata
# The previous command will give you the fingerprint of the ssh key
# With the next command you can check the fingerprint of an ssh key and compare them
ssh-keygen -f .ssh/id_rsa -l -E md5

# Clone repo
git clone ssh://<SSH-KEY-ID>@git-codecommit.<REGION>.amazonaws.com/v1/repos/<repo-name>
```
## Références

- [https://docs.aws.amazon.com/whitepapers/latest/aws-overview/analytics.html](https://docs.aws.amazon.com/whitepapers/latest/aws-overview/analytics.html)

{{#include ../../../banners/hacktricks-training.md}}
