Aller au contenu

Lab 11 : Mettre en place une authentification multi-facteurs pour OSC-CLI et Cockpit

Dans cet atelier, vous allez apprendre comment mettre en place une authentification multi-facteurs sur le Cockpit V2 de 3DS OUTSCALE.

Pour mettre en place une authentification multi-facteurs (MFA) sur votre compte OUTSCALE :

  • Vous devez importer une autorité de certification (CA) qui servira d’ancre de confiance dans une chaîne de confiance.
  • Vous devez ensuite configurer vos règles d’accès API pour obliger toutes les requêtes API à fournir un certificat client. Si ce certificat client est stocké sur un périphérique physique distinct, tel qu’une carte à puce, il constitue un facteur de possession et donc un second facteur d’authentification (par rapport à vos access keys, facteur de connaissance, qui constituent le premier facteur d’authentification).
  • Les cartes à puce doivent se conformer au standard Personal Identity Verification (PIV).
  • Vous pouvez alors activer une session de confiance avec votre politique d’accès API afin de simplifier votre accès aux API. Si vous utilisez Cockpit v2-beta, une session de confiance est automatiquement simulée pour vous.

Générez une clé privée de CA :

Terminal window
openssl genrsa -aes256 -out ca-key.pem 4096

Avec la clé privée de CA, générez un certificat de CA :

Terminal window
openssl req -new \
-x509 \
-days 365 \
-key ca-key.pem \
-out ca-certificate.pem \
-config <(cat /etc/ssl/openssl.cnf <(echo -e "[ext]\nbasicConstraints = critical,CA:TRUE,pathlen:1")) \
-extensions ext
  • Cette commande contient une configuration spécifique de “contraintes de base”, nécessaire pour que le certificat de CA soit accepté dans le Cloud OUTSCALE.
  • Cette commande génère via le paramètre -days 365 un certificat de CA valide pendant un an

La clé privée de CA est enregistrée sous ca-key.pem et votre certificat de CA sous ca-certificate.pem.

Importez votre certificat de CA avec OSC CLI :

Terminal window
osc-cli api CreateCa \
--Description "Useitcloud CA" \
--CaPem="$(cat ca-certificate.pem)"

Exemple de réponse :

osc-cli ca output

Pour vérifier la bonne transmission de votre CA, vous pouvez comparer l’empreinte de la réponse ci-dessus avec l’empreinte générée par cette commande :

Terminal window
openssl x509 -in ca-certificate.pem -noout -sha1 -fingerprint | awk '{gsub(/.*=/, ""); gsub(":",""); print tolower($0)}'

ca fingerprint

Votre certificat de CA est maintenant disponible dans votre compte OUTSCALE.

Créez une règle d’accès API autorisant uniquement les requêtes API qui fournissent un certificat client :

Terminal window
osc-cli api CreateApiAccessRule \
--CaIds '["ca-12345678"]' \
--Description "Allow access with certificates validated by my CA"
(Optionnel) Créez une règle d’accès API autorisant uniquement les requêtes API qui proviennent d’une IP à laquelle vous avez accès :
osc-cli api CreateApiAccessRule \
--IpRanges '["192.0.2.0/32"]' \
--Description "Backup access if certificate access fails"

Si possible, utilisez une IP différente de votre IP actuelle, par exemple une IP de VPN, afin de tester parfaitement l’accès.

Listez les ID de toutes vos règles d’accès API :

Terminal window
osc-cli api ReadApiAccessRules

Par défaut, chaque compte possède les règles d’accès API suivantes :

  • L’accès global est autorisé (0.0.0.0/0).
  • L’accès depuis l’interface web Cockpit v1 de la Région du compte est autorisée.

Supprimez la règle d’accès API autorisant l’accès global :

Terminal window
osc-cli api DeleteApiAccessRule --ApiAccessRuleId "aar-11111111"

Générez une clé privée de certificat et une demande de certificat :

Terminal window
openssl req -new \
-sha256 \
-nodes \
-newkey rsa:2048 \
-keyout client-key.pem \
-out client-certificate.csr

Votre clé privée de certificat est enregistrée sous client-key.pem et votre demande de certificat sous client-certificate.csr.

Avec les fichiers ci-dessus, générez un certificat client signé par votre CA :

Terminal window
openssl x509 -req \
-sha256 \
-days 365 \
-CAkey ca-key.pem \
-CA ca-certificate.pem \
-CAcreateserial \
-in client-certificate.csr \
-out client-certificate.pem \
-extfile <(echo "extendedKeyUsage = clientAuth")

Votre certificat client est enregistré sous client-certificate.pem.

Pour configurer OSC CLI de sorte à utiliser votre certificat client, ajoutez un profil (nommé par exemple secure) dans votre fichier ~/.osc/config.json :

{
"default": {
"access_key": "ACCESSKEY",
"secret_key": "SECRETKEY",
"host": "outscale.com",
"https": true,
"method": "POST",
"region_name": "eu-west-2"
},
"secure": {
"access_key": "ACCESSKEY",
"secret_key": "SECRETKEY",
"host": "outscale.com",
"https": true,
"method": "POST",
"region_name": "eu-west-2",
"client_certificate": [
"/PATHTO/client-certificate.pem",
"/PATHTO/client-key.pem"
]
}
}

Testez votre profil secure en exécutant une commande OSC CLI quelconque :

Terminal window
osc-cli api ReadVms --profile "secure"

VMs list

Si votre profil secure fonctionne correctement, vous pouvez supprimer la règle d’accès API autorisant l’accès depuis Cockpit v1, ainsi que celle autorisant une IP à laquelle vous avez l’accès :

Terminal window
osc-cli api DeleteApiAccessRule --profile "secure" --ApiAccessRuleId "aar-22222222"
osc-cli api DeleteApiAccessRule --profile "secure" --ApiAccessRuleId "aar-44444444"

Récupérez les ID de toutes vos access keys :

Terminal window
osc-cli api ReadAccessKeys --profile "secure"

Exemple de réponse :

"AccessKeys": [
{
"AccessKeyId": "AAAAAAAAAAAAAAAA",
"CreationDate": "YYYY-MM-DDThh:mm:ss.000Z",
"LastModificationDate": "YYYY-MM-DDThh:mm:ss.000Z",
"State": "ACTIVE"
},
{
"AccessKeyId": "BBBBBBBBBBBBBBBB",
"CreationDate": "YYYY-MM-DDThh:mm:ss.000Z",
"LastModificationDate": "YYYY-MM-DDThh:mm:ss.000Z",
"State": "ACTIVE"
}
]

Définissez des dates d’expiration pour toutes vos access keys :

Terminal window
osc-cli api UpdateAccessKey \
--profile "secure" \
--AccessKeyId "AAAAAAAAAAAAAAAA" \
--State "ACTIVE" \
--ExpirationDate "20XX-XX-XXTXX:XX:XXZ"
osc-cli api UpdateAccessKey \
--profile "secure" \
--AccessKeyId "BBBBBBBBBBBBBBBB" \
--State "ACTIVE" \
--ExpirationDate "20XX-XX-XXTXX:XX:XXZ"

Toutes vos access keys ont maintenant des durées de vie finies.

Pour activer une session de confiance, modifiez votre politique d’accès API :

Terminal window
osc-cli api UpdateApiAccessPolicy \
--profile "secure" \
--MaxAccessKeyExpirationSeconds XXXXXX \
--RequireTrustedEnv True

Cockpit V2 permet plusieurs formes d’authentification multi-facteurs :

  • A l’aide d’un dispositif de sécurité (lecteur biométrique ou clé physique) ;
  • A l’aide d’une application (mobile) qui génère un « one time password » (OTP)

Ici, nous allons configurer une application qui génère une OTP.

Il existe de nombreuses applications de gestion de mot de passe à usage unique, en voici quelques-unes :

  • FreeOTP Authenticator (Open Source)
  • Google Authenticator
  • Microsoft Authenticator
  • Open OTP Token (Open Source)

Chacune de ces applications permet de se connecter indifféremment sur cockpit V2. Si vous n’en utilisez aucune, choisissez celle qui vous semble la plus adaptée selon vos autres usages (les applications d’éditeurs permettent en général d’être utilisé comme second facteur sans avoir à saisir le mot de passe à usage unique).

Accéder aux paramètres d’authentification dans le menu personnel.

Auth parameters

Ouvrez le menu Setup OTP

MFA menu

  • Scannez le QR code affiché ou bien suivez le lien pour une méthode alternative.
  • Ensuite reportez le premier « OTP » affiché dans vote application.
  • Donnez un nom à cet appareil (par exemple : « mobile pro » ou « MS Authenticator »).
  • Ensuite ceci vous permettra de discinguer plusieurs dispositif si vous devez les supprimer.

MFA QR code

  • Mettez en place le système en validant la création en cliquant sur set up.

Vous disposez à présent d’un système MFA pour contrôler votre connexion sur cockpit.

Si vous souhaitez désactiver le système MFA mis en place, vous devez retourner dans les « paramètres d’authentification » dans le « menu personnel » et sélectionner « remove » pour le dispositif que vous souhaitez supprimer.

Disable MFA