IAM (InterSystems API Manager), le chemin vers la réussite

Cet article contient le matériel, les exemples, les exercices pour apprendre les concepts de base de IAM.
Toutes les ressources sont disponibles sur ce git : https://github.com/grongierisc/iam-training.
Les solutions sont dans la branche training.
Cet article couvre les sujets suivants :
- 1. Introduction
- 2. Installation
- 3. Premier service/route
- 3. Ensuite, allez plus loin avec le plugin
- 5. Troisièmement, ajoutez votre propre authentification
- 6. Exercice, limitation du débit
- 7. Portail développeur
- 8. Portail développeur, partie deux, authentification
- 9. Portail de gestion sécurisé
- 10. Plug-ins
- 11. CI / CD
1. Introduction

1.1. Qu'est-ce que IAM ?
IAM signifie InterSystems API Manager, il est basé sur Kong Enterprise Edition.
Cela signifie que vous avez accès, en plus de l'édition Kong Open Source, au :
- Portail gestionnaire
- Portail des développeurs
- Plugin avancé
- Oauth2
- Mise en cache
- ...

1.2. Qu'est-ce que la gestion d''API ?
La gestion des API est le processus de création et de publication d'interfaces de programmation d'applications (API) Web, d'application de leurs politiques d'utilisation, de contrôle de l'accès, d'entretien de la communauté d'abonnés, de collecte et d'analyse des statistiques d'utilisation et de production de rapports sur les performances. Les composants de gestion des API fournissent des mécanismes et des outils pour soutenir la communauté des développeurs et des abonnés.

1.3. Portail IAM
Kong et IAM sont conçus comme des API d'abord, ce qui signifie que tout ce qui est fait dans Kong/IAM peut être fait par des appels REST ou le portail du gestionnaire.
Au cours de cet article, tous les exemples/exercices présenteront les deux de cette façon :
| Portail IAM | API Rest |
|---|---|
![]() |
![]() |
1.4. Flux de cet article
Le but de cet article est d'utiliser IAM comme proxy d'une API rest IRIS.
La définition de cette API rest peut être trouvée ici :
http://localhost:52773/swagger-ui/index.html#/
ou ici
https://github.com/grongierisc/iam-training/blob/training/misc/spec.yml
Commencez cet article avec la branche principale.
A la fin de l'article, vous devriez avoir le même résultat que la branche d'entraînement.
2. Installation

2.1. Que devez-vous installer ?
- Git
- Docker (si vous utilisez Windows, assurez-vous de configurer votre installation Docker pour utiliser les « conteneurs Linux »).
- Docker Compose
- Visual Studio Code + l'extension VSCode InterSystems ObjectScript
- Fichier de licence IRIS IAM InterSystems activé.
- Image Docker IAM
2.2. Comment IAM fonctionne avec IRIS
Au démarrage de Kong/IAM, le conteneur vérifie la licence Kong/IAM avec un appel curl.
Le point de terminaison de cet appel est une API REST sur le conteneur IRIS.
Info : la licence Kong est incorporée dans celle d'IRIS.

2.3. Configuration
Clonez Git ce dépôt.
git clone https://github.com/grongierisc/iam-training
Exécutez l'API rest initiale :
docker-compose up
Testez-la :
http://localhost:52773/swagger-ui/index.html#/
Identifiant/mot de passe : SuperUser/SYS
2.4. Installer IAM
2.4.1. Image Iris
Vous devez d'abord passer de l'édition communautaire à une édition sous licence.
Pour ce faire, vous devez configurer votre accès à InterSystems Container Registry pour télécharger les images IRIS à accès limité.
Jetez un œil à la Présentation d'InterSystems Container Registry dans la Communauté des développeurs.
- Connectez-vous à https://containers.intersystems.com/ en utilisant vos informations d'identification du WRC et obtenez un jeton.
- Configurez la connexion docker sur votre ordinateur :
docker login -u="user" -p="token" containers.intersystems.com
- Obtenez l'image IRIS InterSystems :
docker pull containers.intersystems.com/intersystems/irishealth:2020.4.0.524.0
2.4.2. Image IAM
Dans la distribution logicielle WRC :
- Composants > Téléchargez le fichier IAM-1.5.0.9-4.tar.gz, décompressez & untar puis chargez l'image :
docker load -i iam_image.tar
2.4.3. Mettre le fichier docker à jour
Remplacer l'édition communautaire d'IRIS par une édition sous licence.
- containers.intersystems.com/intersystems/irishealth:2020.4.0.524.0
- ajoutez iris.key dans le dossier key
Modifiez le dockerfile pour ajouter par-dessus cette partie
ARG IMAGE=containers.intersystems.com/intersystems/irishealth:2020.4.0.524.0
# Première étape
FROM $IMAGE as iris-iam
COPY key/iris.key /usr/irissys/mgr/iris.key
COPY iris-iam.script /tmp/iris-iam.script
RUN iris start IRIS \
&& iris session IRIS < /tmp/iris-iam.script \
&& iris stop IRIS quietly
# Seconde étape
FROM iris-iam
Cette partie va créer un dockerfile à plusieurs étapes.
- la première étape consiste à permettre à IRIS de servir la licence IAM.
- la deuxième étape est pour la compliation de l'API REST
Créez un nouveau fichier iris-iam.script pour compiler une nouvelle image IRIS afin d'activer le point de terminaison et l'utilisateur IAM.
zn "%SYS"
write "Création d'une application Web ...",!
set webName = "/api/iam"
set webProperties("Enabled") = 1
set status = ##class(Security.Applications).Modify(webName, .webProperties)
write:'status $system.Status.DisplayError(status)
write "Web application "_webName_" a été mis à jour !",!
set userProperties("Enabled") = 1
set userName = "IAM"
Do ##class(Security.Users).Modify(userName,.userProperties)
write "User "_userName_" a été mis à jour !",!
halt
2.4.4. Mettre le docker-compose à jour
Metez le fichier docker-compose à jour vers :
- db
- base de données postgres pour IAM
- iam-migration
- amorcer la base de données
- iam
- instance IAM réelle
- un volume pour les données persistantes
Ajoutez cette partie à la fin du fichier docker-compose.
iam-migrations:
image: intersystems/iam:1.5.0.9-4
command: kong migrations bootstrap up
depends_on:
- db
environment:
KONG_DATABASE: postgres
KONG_PG_DATABASE: ${KONG_PG_DATABASE:-iam}
KONG_PG_HOST: db
KONG_PG_PASSWORD: ${KONG_PG_PASSWORD:-iam}
KONG_PG_USER: ${KONG_PG_USER:-iam}
KONG_CASSANDRA_CONTACT_POINTS: db
KONG_PLUGINS: bundled,jwt-crafter
ISC_IRIS_URL: IAM:${IRIS_PASSWORD}@iris:52773/api/iam/license
restart: on-failure
links:
- db:db
iam:
image: intersystems/iam:1.5.0.9-4
depends_on:
- db
environment:
KONG_ADMIN_ACCESS_LOG: /dev/stdout
KONG_ADMIN_ERROR_LOG: /dev/stderr
KONG_ADMIN_LISTEN: '0.0.0.0:8001'
KONG_ANONYMOUS_REPORTS: 'off'
KONG_CASSANDRA_CONTACT_POINTS: db
KONG_DATABASE: postgres
KONG_PG_DATABASE: ${KONG_PG_DATABASE:-iam}
KONG_PG_HOST: db
KONG_PG_PASSWORD: ${KONG_PG_PASSWORD:-iam}
KONG_PG_USER: ${KONG_PG_USER:-iam}
KONG_PROXY_ACCESS_LOG: /dev/stdout
KONG_PROXY_ERROR_LOG: /dev/stderr
KONG_PORTAL: 'on'
KONG_PORTAL_GUI_PROTOCOL: http
KONG_PORTAL_GUI_HOST: '127.0.0.1:8003'
KONG_ADMIN_GUI_URL: http://localhost:8002
KONG_PLUGINS: bundled
ISC_IRIS_URL: IAM:${IRIS_PASSWORD}@iris:52773/api/iam/license
volumes:
- ./iam:/iam
links:
- db:db
ports:
- target: 8000
published: 8000
protocol: tcp
- target: 8001
published: 8001
protocol: tcp
- target: 8002
published: 8002
protocol: tcp
- target: 8003
published: 8003
protocol: tcp
- target: 8004
published: 8004
protocol: tcp
- target: 8443
published: 8443
protocol: tcp
- target: 8444
published: 8444
protocol: tcp
- target: 8445
published: 8445
protocol: tcp
restart: on-failure
db:
image: postgres:9.6
environment:
POSTGRES_DB: ${KONG_PG_DATABASE:-iam}
POSTGRES_PASSWORD: ${KONG_PG_PASSWORD:-iam}
POSTGRES_USER: ${KONG_PG_USER:-iam}
volumes:
- 'pgdata:/var/lib/postgresql/data'
healthcheck:
test: ["CMD", "pg_isready", "-U", "${KONG_PG_USER:-iam}"]
interval: 30s
timeout: 30s
retries: 3
restart: on-failure
stdin_open: true
tty: true
volumes:
pgdata:
Ajoutez le fichier .env dans le dossier racine :
IRIS_PASSWORD=SYS
NB : Voici la définition des ports Kong :
| Port | Protocole | Description |
|---|---|---|
| :8000 | HTTP | Prend le trafic HTTP entrant des Consommateurs, et le transmet aux Services en amont. |
| :8443 | HTTPS | Reçoit le trafic HTTPS entrant des consommateurs et le transmet aux services en amont. |
| :8001 | HTTP | API d'administration. Écoute les appels de la ligne de commande via HTTP. |
| :8444 | HTTPS | API d'administration. Écoute les appels de la ligne de commande via HTTPS. |
| :8002 | HTTP | Kong Manager (GUI). Écoute le trafic HTTP. |
| :8445 | HTTPS | Kong Manager (GUI). Écoute le trafic HTTPS. |
| :8003 | HTTP | Portail des développeurs. Écoute le trafic HTTP, en supposant que Portail des développeurs est activé. |
| :8446 | HTTPS | Portail des développeurs. Écoute le trafic HTTPS, en supposant que Portail des développeurs est activé. |
| :8004 | HTTP | Portail des développeurs /écoute le trafic HTTP, en supposant que le portail des développeurs est activé. |
| :8447 | HTTPS | Portail des développeurs /écoute le trafic HTTPS, en supposant que le portail des développeurs est activé. |
2.4.5. Option : add IRIS_PASSWARD comme .env
Pour des raisons de facilité d'utilisation (et peut-être de sécurité), vous pouvez utiliser le fichier .env dans le dockerfile IRIS.
Pour ce faire, modifiez le docker-compose avec ceci dans la partie service iris :
build:
context: .
dockerfile: dockerfile
args:
- IRIS_PASSWORD=${IRIS_PASSWORD}
Et le dockerfile (deuxième ou première étape de la compilation) :
ARG IRIS_PASSWORD
RUN echo "${IRIS_PASSWORD}" > /tmp/password.txt && /usr/irissys/dev/Container/changePassword.sh /tmp/password.txt
2.4.6. Essayez !
docker-compose -f "docker-compose.yml" up -d --build
3. Premier service/route

Vous vous souvenez comment fonctionne Kong/IAM ?

Ici, nous compilerons :
- un service
- pour notre API crud
- une route
- pour accéder à ce service
3.1. Créer un service
| Portail IAM | API Rest | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
|
Comments
Merci Guillaume! Quel article utile (j'ai pas trouvé de mot à la hauteur...)
A quand les traductions de la documentation, dans la documentation?
Je transmet ton article chez CFAO de ce pas!
Salut Fabien, Nous n'allons pas traduire la documentation. Mais tu vas voir de plus en plus d'article anglais traduit en français.










































