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

  1. Vous devez uploader une autorité de certification (CA) qui servira d'ancre de confiance dans une chaîne de confiance.

  2. 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).
  3. Vous pouvez alors activer une session de confiance avec votre politique d'accès API afin de simplifier votre accès aux API.

Faites attention lorsque vous suivez ce tutoriel. Une mauvaise configuration de vos CA, certificat client et règles d'accès API peuvent entraîner un blocage de votre compte.

Ce tutoriel contient les étapes suivantes :

Générer une CA

Si vous possédez déjà d'une CA au format PEM, vous pouvez sauter cette section.

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

    $ openssl genrsa -aes256 -out ca-key.pem 4096

    Il est recommandé de protéger votre clé privée de CA par une phrase de passe.

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

    $ 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, mais vous pouvez aussi spécifier une valeur différente. Pour en savoir plus, voir le site officiel de la commande OpenSSL.

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


Uploader votre CA

Avant de commencer : Installez OSC CLI. Pour en savoir plus, voir Installer et configurer OSC CLI.


  1. Pour uploader votre certificat de CA avec OSC CLI, celui-ci doit être formaté comme une chaîne de texte monoligne et doit inclure des guillemets à l'intérieur de la chaîne de texte. Vous pouvez uploader votre certificat de CA directement au bon format en utilisant la commande suivante :

    $ osc-cli api CreateCa \
        --Description "My company CA" \
        --CaPem "$(awk -v quote="'" 'BEGIN {printf quote} {ORS="\\n"} END {printf quote}; 1' ca-certificate.pem)"
    Exemple de réponse
    "Ca": {
    	"CaFingerprint": "FINGERPRINT",
        "CaId": "ca-12345678",
        "Description": "My company CA"
    }

    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 :

    $ openssl x509 -in ca-certificate.pem -noout -sha1 -fingerprint

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


Configurez vos règles d'accès API

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

    $ osc-cli api CreateApiAccessRule \
        --CaIds '["ca-12345678"]' \
        --Description "Allow access with certificates validated by my CA"
  2. (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.

  3. Listez les ID de toutes vos règles d'accès API :

    $ osc-cli api ReadApiAccessRules
    Exemple de réponse
        "ApiAccessRules": [
            {
                "ApiAccessRuleId": "aar-11111111",
                "CaIds": [],
                "Cns": [],
                "Description": "Allows all IPv4 domain",
                "IpRanges": [
                    "0.0.0.0/0"
                ]
            },
            {
                "ApiAccessRuleId": "aar-22222222",
                "CaIds": [],
                "Cns": [],
                "Description": "Allows Outscale Cockpit of this region",
                "IpRanges": [
                    "46.231.144.177/32"
                ]
            }
    		{
    			"ApiAccessRuleId": "aar-33333333",
    			"CaIds": [
    				"ca-12345678"
    			],
    			"Cns": [],
    			"Description": "Allow access with certificates validated by my CA", 
    			"IpRanges": []
    		}
    		{
    			"ApiAccessRuleId": "aar-44444444",
    			"CaIds": [],
    			"Cns": [],
    			"Description": "Backup access if certificate access fails",
    			"IpRanges": [
    				"192.0.2.0/32"
    			]
    		}
    	]

    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 de la Région du compte est autorisée.
  4. Supprimez la règle d'accès API autorisant l'accès global :

    $ osc-cli api DeleteApiAccessRule --ApiAccessRuleId "aar-11111111"


Testez votre accès aux API

Générez un certificat client

Pour une authentification multi-facteurs au sens strict, vous pouvez utiliser un périphérique physique distinct, tel qu'une carte à puce, pour générer et stocker vos certificats clients.

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

    $ openssl req -new \
        -sha256 \
        -nodes \
        -newkey rsa:4096 \
        -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.

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

    $ 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")

    Cette commande génère via le paramètre -days 365 un certificat client valide pendant un an, mais vous pouvez aussi spécifier une valeur différente. Pour en savoir plus, voir le site officiel de la commande OpenSSL.

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

Testez votre certificat client

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

    .osc_sdk/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"
            ]
         }
    }

    Remplacez ACCESSKEY, SECRETKEY, eu-west-2, et /PATHTO/ avec les valeurs adéquates.

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

    $ osc-cli api ReadVms --profile "secure"
    
  3. Si votre profil secure fonctionne correctement, vous pouvez supprimer la règle d'accès API autorisant l'accès depuis Cockpit, ainsi que celle autorisant une IP à laquelle vous avez l'accès :

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

    Votre compte est maintenant configuré pour autoriser uniquement les requêtes API qui fournissent un certificat client.

    Si vous n'avez plus accès aux API via les règles en place, vous devez contacter l'équipe Support pour y avoir accès à nouveau. Pour en savoir plus, voir Support technique.


Activez une session de confiance

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

    $ 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"
        }
    ]
  2. Définissez des dates d'expiration pour toutes vos access keys :

    $ 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.

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

    $ osc-cli api UpdateApiAccessPolicy \
        --profile "secure" \
        --MaxAccessKeyExpirationSeconds XXXXXX \
        --RequireTrustedEnv True
    • La valeur du paramètre MaxAccessKeyExpirationSeconds doit être supérieure ou égale à chacune des durées de vie restantes de vos access keys.
    • Vos access keys peuvent expirer avant la fin de votre session de confiance. Assurez-vous de les renouveler lorsque nécessaire.
    • Il peut y avoir un léger délai entre la réponse de la commande et l'application effective de la session de confiance.

    Votre session de confiance est maintenant activée. Vous n'avez plus besoin de fournir votre certificat client, jusqu'à ce que vous décidiez de désactiver la session de confiance, sauf pour certaines actions spécifiques. Pour en savoir plus, voir À propos de votre politique d'accès API > Portée d'une session de confiance.