Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Release/v1.0.0 #27

Merged
merged 23 commits into from
Jul 31, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
23 commits
Select commit Hold shift + click to select a range
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 0 additions & 9 deletions .aws/workflows/README.md

This file was deleted.

70 changes: 0 additions & 70 deletions .aws/workflows/ci-cd-dev.yml

This file was deleted.

28 changes: 0 additions & 28 deletions .aws/workflows/ci-pr.yml

This file was deleted.

Binary file not shown.
Binary file not shown.
31 changes: 0 additions & 31 deletions .aws/workflows/scan-image.sh

This file was deleted.

27 changes: 27 additions & 0 deletions .github/workflows/build_release_cli.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
name: Build and Release CLI

on:
release:
types: [published]

jobs:
build-release:
runs-on: ubuntu-latest
name: Build and Release CLI
steps:
- name: Checkout
uses: actions/checkout@main
- name: Setup Go
uses: actions/setup-go@main
with:
go-version-file: './go.mod'
- name: Build CLI
run: go build -o ./ceai ./cmd/cli
- name: Zip CLI
run: zip -r ceai-cli-linux-${{ github.ref_name }}.zip ./ceai
- name: Upload to Release
uses: Shopify/upload-to-release@master
with:
name: ceai-cli-linux-${{ github.ref_name }}.zip
path: ./ceai-cli-linux-${{ github.ref_name }}.zip
repo-token: ${{ secrets.GITHUB_TOKEN }}
9 changes: 9 additions & 0 deletions .github/workflows/contrib-tests.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
name: Contributions tests

on:
pull_request:
branches: ["release/*", "main"]

jobs:
go-validations:
uses: ./.github/workflows/go-validations.yaml
21 changes: 21 additions & 0 deletions .github/workflows/go-validations.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
name: Go Validations

on: [ workflow_call ]

jobs:
lint:
runs-on: ubuntu-latest
name: Validations Go
steps:
- name: Checkout
uses: actions/checkout@main
- name: Setup Go
uses: actions/setup-go@main
with:
go-version-file: './go.mod'
- name: StaticCheck
run: |
go install "honnef.co/go/tools/cmd/staticcheck@latest"
$(go env GOPATH)/bin/staticcheck ./...
- name: GoVulnCheck
uses: golang/govulncheck-action@v1
23 changes: 0 additions & 23 deletions .github/workflows/sonarqube.yml

This file was deleted.

4 changes: 2 additions & 2 deletions Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
############################
# STEP 1 build executable binary
############################
FROM golang:1.18 AS builder
FROM golang:1.22 AS builder

#Copy source files
ENV GOPATH=/go
Expand Down Expand Up @@ -35,7 +35,7 @@ RUN cp ./openshift/kubeconfig /go/bin/kubeconfig
############################
# STEP 2 build a small image
############################
FROM registry.access.redhat.com/ubi8/ubi:latest
FROM registry.access.redhat.com/ubi9

# Copy our static executable.
COPY --from=builder /go/bin /go/bin
Expand Down
46 changes: 23 additions & 23 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,46 +1,44 @@
# API d'administration de l'infrastructure du centre d'expertise appliquée en innovation du CQEN

Le centre d'expertise appliquée en innovation du CQEN offre des services de laboratoires d'expérimentation sur ses plateformes AWS SEA et Openshift. Il fournit une authentification unique vers ses plateformes via un serveur d'authentification Keycloak.
Le centre d'expertise appliquée en innovation du CQEN offre des services de laboratoires d'expérimentation sur ses plateformes AWS SEA et Openshift. Il fournit une authentification unique vers ses plateformes via un fournisseur d'identité Keycloak.

Le CEAI a conçu une API d'administration unifiant la gestion des usagers et des ressources allouées aux laboratoires sur les trois produits mentionnés ci-haut : AWS SEA, Openshift et Keycloak.
Le CEAI a conçu un API d'administration unifiant la gestion des usagers et des ressources allouées aux laboratoires sur les trois produits mentionnés ci-haut : AWS SEA, Openshift et Keycloak.

La création de cet API vise les buts suivants :

* Propager les droits d'accès aux ressources de laboratoires via une ressource unique.
* Propager les droits d'accès aux ressources de laboratoires via un point d'entré unique.
* Permettre la création de consoles d'administration unifiées.
* Automatiser la gestion de l'infrastructure via des scripts et des appels HTTP.
* Produire une preuve de concept d'un API défini par sa documentation (API first) dans le langage Go et la spécification OpenAPI 3.0.
* Produire une preuve de concept d'un API défini par sa documentation (API first) dans le langage Go et la spécification OpenAPI 3.0+.

Le dépôt contient le serveur d'API ainsi qu'une console en ligne de commande (CLI) pour exploiter celui-ci.

# Serveur API

L'API s'appuis sur un Realm Keycloak lequel il exploite via l'API Keycloak. L'API nécessite des accès API au point d'accès du service SSO SCIM ainsi qu'un accès API IAM au compte AWS Master de l'environnement SEA. Finalement, un accès API à Openshift est aussi nécessaire.
L'API d'administration du laboratoire du CEAI consiste en une collection de service web REST interfaçant les API d'administration des différents produits dans lequel le laboratoire provisionne des ressources.

## Keycloak

TODO
Keycloak est le fournisseur d'identité du laboratoire. L'API s'appuis sur ce produit pour persister les usagers du laboratoire ainsi que les informations permettant d'effectuer la gestion des accès aux ressources. Un *realm* et un client Keycloak gère aussi les accès à l'API lui-même.

## AWS SSO SCIM
## AWS Identity Center (SCIM)

TODO
Pour permettre aux usagers d'accéder aux comptes de travail, AWS mets à disposition le service IAM Identity Center. Celui-ci utilise le protocol SCIM pour permettre la propagation des informations des usagers vers AWS.

## AWS Master
## AWS Compte *Management*

TODO
Les informations concernant les comptes de travail de la zone d'accueil sont récupérées via l'API d'AWS. Le compte *management* de la zone LZA expose en lecture seule les informations nécessaires à l'administration du laboratoire.

## Openshift

TODO
Openshift est déployé comme plateforme en tant que service dans le laboratoire. Le provisionnement des usagers ainsi que des *projects* est effectué via son API d'administration.


## Sécurité

L'API ne contient pas de mécanisme d'authentification des usagers. Cela doit être pris en charge par un API Gateway ou un Reverse Proxy. Celui-ci doit prendre en charge l'authentification et l'identification de l'usager. Il doit passer le nom d'usager et son rôle à l'API via les entêtes _X-CEAI-Username_ et _X-CEAI-UserRoles_ .
L'API ne contient pas de mécanisme d'authentification des usagers. Cela doit être pris en charge par un API Gateway ou un Reverse Proxy. Celui-ci doit prendre en charge l'authentification et l'identification de l'usager via le protocol OpenIdConnect au realm Keycloak. Il doit passer le nom d'usager et son rôle à l'API via les entêtes _X-CEAI-Username_ et _X-CEAI-UserRoles_ .

Pour s'assurer que l'API ne soit pas accédée directement un "Gateway Secret" peut être défini dans les variables d'environnement. L'API validera que celui-ci est passé dans l'entête _X-CEAI-Gateway-Secret_ avant de traiter la requête.

Un exemple de déploiement derrière le produit AWS API Gateway est disponible dans le dépôt suivant : https://github.com/CQEN-QDCE/ceai-cqen-deployments
Pour s'assurer que l'API ne soit pas accédé directement un "Gateway Secret" peut être défini dans les variables d'environnement. L'API validera que celui-ci est passé dans l'entête _X-CEAI-Gateway-Secret_ avant de traiter la requête.

## Variables d'environnement

Expand All @@ -56,19 +54,15 @@ Un exemple de déploiement derrière le produit AWS API Gateway est disponible d
| `AWS_SECRET` | Secret du compte IAM de Service
| `AWS_SSO_INSTANCE_ARN` | ARN de l'instance AWS SSO
| `AWS_ADMIN_PERMISSION_SET_ARN`| ARN du Permission Set lié au profil Administrateur dans AWS
| `AWS_DEV_PERMISSION_SET_ARN` | ARN du Permission Set lié au profil Developpeur dans AWS
| `AWS_DEV_PERMISSION_SET_ARN` | ARN du Permission Set lié au profil Développeur dans AWS
| `KEYCLOAK_URL` | Url du serveur Keycloak
| `KEYCLOAK_REALM` | Nom du realm Keycloak
| `KEYCLOAK_CLIENT_ID` | Identifiant du client Keycloak dédié à l'API
| `KEYCLOAK_CLIENT_SECRET` | Secret du client Keycloak dédié à l'API
| `KUBECONFIG_PATH` | Chemin vers le fichier kubeconfig lié au Cluster Openshift
| `KUBECONFIG_PATH` | Chemin vers le fichier kubeconfig lié au compte de service Openshift

## Développement

### Architecture

TODO

### Tester

```
Expand All @@ -93,7 +87,7 @@ cd third_party

### test.http

Des tests unitaires sont pour la plupart des routes sont disponibles dans le fichier test.http. Pour utiliser celui-ci, vous avez besoin de l'extension VS Code [Rest-Client](https://marketplace.visualstudio.com/items?itemName=humao.rest-client)
Des tests unitaires sont définis pour la plupart des routes dans le fichier test.http. Pour utiliser celui-ci, vous aurez besoin de l'extension VS Code [Rest-Client](https://marketplace.visualstudio.com/items?itemName=humao.rest-client)

# Console CLI

Expand All @@ -110,4 +104,10 @@ echo $PATH
cp ceai [/votre/repertoire/de/bin/prefere/]

ceai --help
```
```

## Références
* https://www.keycloak.org/
* https://en.wikipedia.org/wiki/System_for_Cross-domain_Identity_Management
* https://aws.amazon.com/fr/iam/identity-center/
* https://docs.openshift.com/container-platform/4.16/rest_api/understanding-api-support-tiers.html
Loading
Loading