Configuration de Microsoft Entra ID avec Boundary

1.Connectez-vous à Microsoft Entra avec un compte qui a les accès administrateurs

2. Allez ensuite dans la section Applications/App registrations et cliquer sur + New registration

    3. Entrer un nom pour votre application et ajouter un url web en lien avec le nom de domaine de votre serveur Boundary suivi de v1/auth-methods/oidc:authenticate:callback

    4. Allez ensuite dans la section Certificates & secrets et créer un nouveau secret

    5. Prenez en note la valeur du secret qui s’affiche car il va automatiquement disparaître si vous changer de section

    6. Connectez-vous maintenant à votre serveur Boundary à l’aide du compte admin et allez dans la section “Auth Methods”

    7. Cliquer sur New et sélectionner OIDC

    8. Entrer un nom pour la connexion. Ensuite dans la section Issuer il faut entrer https://sts.windows.net/ suivi de votre Directory (tenant) ID que vous pouvez trouver dans la section Overview de votre application. Le client ID est le numéro qui est affiché dans la section Application (client) ID et le client secret c’est ce que vous avez généré précédemment. Dans la section Signing Algorithms il faut sélectionner RS256, cliquer sur Add et ajouter l’url de votre serveur Boundary dans la section API URL Prefix.

    9. Une fois sauvegardée, vous pouvez valider que l’adresse affiché dans la section Callback URL est identique à celle que vous avez mis dans la section Authentication de votre application.

    10. Il reste maintenant à changer le status en haut à droite à Public. Vous pouvez également aller dans la section Manage et définir ce type de connexion comme celle par défaut en choisissant Make Primary et en confirmant.

    11. Une fois que c’est fait la section Microsoft Entra ID devrait apparaitre et être sélectionnée par défaut lors de l’authentification à votre serveur Boundary.

    12. Si la configuration a été bien effectuée, une nouvelle fenêtre devrait s’ouvrir et vous devriez être en mesure de vous authentifier avec votre compte Microsoft. Lors de la première connexion, vous devrez autoriser la connexion et l’approuver. Si vous êtes administrateur du côté de Microsoft, vous aurez l’option d’effectuer le consentement pour l’ensemble des utilisateurs de l’organisation.

    13. Une fois authentifié, vous devriez voir le projet qui est créé par défaut dans Boundary mais avec des accès limités.

    14. La configuration de Microsoft Entra ID est complétée.

    Configuration de Vault pour que Boundary puisse s’y connecter

    Afin de pouvoir permettre à Boundary de se connecter à Vault pour récupérer certains accès, il faut créer une règle d’accès.

    1. Connectez-vous à l’interface web de votre serveur Vault et authentifier vous avec le token root

    2. Allez dans la section Policies et cliquer sur le bouton Create ACL policy

    3. Nommer la boundary-controller et entrer les informations suivantes dans la section Policy :

    # Copyright (c) HashiCorp, Inc.
    # SPDX-License-Identifier: MPL-2.0
     
    path "auth/token/lookup-self" {
      capabilities = ["read"]
    }
    path "auth/token/renew-self" {
      capabilities = ["update"]
    }
    path "auth/token/revoke-self" {
      capabilities = ["update"]
    }
    path "sys/leases/renew" {
      capabilities = ["update"]
    }
    path "sys/leases/revoke" {
      capabilities = ["update"]
    }
    path "sys/capabilities-self" {
      capabilities = ["update"]
    }
    path "ldap/*" {
      capabilities = ["list", "read"]
    }
    path "kv/*" {
      capabilities = [ "list" ]
    }
    path "kv/*" {
      capabilities = ["create", "read", "update"]
    }
    # To allow the extension of TTL
    path "sys/leases/renew" {
      capabilities = [ "update" ]
    }
    # To list SSH secrets paths
    path "ssh/*" {
      capabilities = [ "list" ]
    }
    # To use the configured SSH secrets engine opt_key_role role
    path "ssh/creds/otp_key_role" {
      capabilities = ["create", "read", "update"]
    }

      4. Appuyer sur le bouton Create policy pour terminer la configuration

      Ajout de Vault dans Boundary

      Voici les étapes requises pour permettre à Boundary de se connecter à Vault

      1. Connectez-vous à l’interface web de votre serveur Boundary avec le compte admin ou un compte qui a les droits d’administration

      2. Une fois connecté, nous allons supprimer en premier lieu l’organisation qui a été créé automatiquement lors de configuration initiale

      3. Sélectionner l’organisation Generated org scope, allez dans la section Org settings, sélectionner Manage dans le coin en haut à droite et cliquer sur Delete Org

      4. Confirmer la suppression

      5. Nous allons maintenant créer une nouvelle organisation en cliquant sur le bouton + New

      6. Entrer un nom pour votre organisation, une description si vous le désirez et appuyer sur le bouton Save

      7. Allez ensuite dans la section Projects de votre nouvelle organisation et appuyer sur le bouton New

      8. Entrer un nom pour ce projet et une description si vous le désirez et cliquer sur Save

      9. Pour ajouter un serveur Vault il faut aller dans la section Credentials Stores, cliquer sur New et sélectionner Vault

      10. Afin de pouvoir générer un token il faut se connecter à votre instance/serveur Vault en SSH

      11. Une fois connecté à votre instance/serveur il faut en premier lieu mettre en mémoire 2 variables. Soit l’url de votre serveur Vault ainsi que le token root.

      export VAULT_ADRR='https://UrlOfYourVaultServer:8200'
      export VAULT_TOKEN='RootTokenFromJSONFile'

          12. Une fois que c’est fait il faut entrer la commande suivante pour générer un token qui sera valide que pour 20 minutes mais que le serveur Boundary sera en mesure de renouveler automatiquement de son côté une fois la connexion établie. Si vous avez installé un certificat SSL valide sur votre serveur Vault, vous pouvez retirer la dernière section de la commande qui ignore la validité du certificat.

          vault token create -no-default-policy=true -policy="boundary-controller" -orphan=true -period=20m -renewable=true -tls-skip-verify

          13. Copier le token débutant par hvs qui s’affiche et entrer le dans la section Token de la page Boundary où vous voulez ajouter Vault. Entrer également l’adresse de votre serveur Vault dans la section Address avant de le sauvegarder. Vous pouvez également entrer un nom et une description si vous le désirez mais ce n’est pas requis.

          14. Si la connexion fonctionne, vous devriez recevoir un message comme quoi la connexion a fonctionné et par la suite dans la section Credential Stores vous devriez voir une entrée de type Vault s’afficher.

          15. Il est important de savoir qu’il faut refaire la connexion à Vault pour chaque projet que vous créez. Il est également important de savoir que lorsque Vault est redémarré, la connexion avec Boundary sera rompu. Il faudra générer un nouveau token et modifier celui qui est sauvegarder du côté du serveur Boundary dans chacun des projets auquel vous l’avez connecté.

          16. La première étape de connexion entre Boundary et Vault est complétée.

          Configuration Vault OTP

          Nous allons maintenant configurer Vault et votre instance Ubuntu pour permettre l’utilisation d’un mot de passe à usage unique pour la connexion SSH.

          1. Connectez-vous à l’interface web de votre serveur Vault et authentifiez-vous avec le token root

          2. Allez dans la section Secret Engines et cliquer sur Enable new engine

          3. Sélectionner SSH et cliquer sur Enable engine.

          4. Par la suite cliquer sur le bouton Create role

          5. Entrer otp_key_role dans la section Role Name, changer la section Key type de ca à otp, entrer ubuntu dans la section Default Username et cliquer sur le bouton Options pour afficher plus d’option

          6. Ajouter 0.0.0.0/0 dans la section CIDR List et appuyer sur Create role

          7. La configuration du côté du serveur Vault est complété.

          Configuration Vault Dynamic RDP

          Afin de pouvoir permettre à Vault de créer un compte Active Directory, il faut mettre en place certains éléments et s’assurer que votre serveur Vault est en mesure de se connecter à votre contrôleur de domaine via ldaps.

          1. Connectez-vous à votre serveur Active Directory

          2. Ouvrez Active Directory Users and Computers

          3. Il faut créer un nouveau OU que nous allons nommer Vault

          4. Nous allons maintenant créer un groupe de sécurité VaultUsers à l’intérieur de ce nouveau OU

          5. Nous allons maintenant créer un utilisateur VaultAdmin qui aura à terme les droits de créer des comptes dans ce OU et de les ajouter au groupe VaultUsers. Créez ce compte à l’extérieur de ce OU soit dans Users ou dans un autre OU que vous utilisez pour la gestion de vos autres comptes. Dans l’exemple suivant je vais cocher l’option de faire en sorte que le mot de passe n’expire jamais mais si vous voulez déployer ceci en production je ne le recommande pas.

          6. La prochaine étape consiste à s’assurer que le compte VaultAdmin est les droits nécessaires pour créer des usagers dans le OU VautUsers. Nous allons donc créer une délégation qui permet à VaultAdmin de pouvoir au minimum créer, supprimer et gérer un compte, de pouvoir modifier le mot de passe du compte, de pouvoir lire les informations du compte et de pouvoir modifier l’appartenance à un groupe.

          7. Connectez-vous à l’interface web de votre serveur Vault et authentifiez-vous avec le token root

          8. Allez dans la section Secret Engines et cliquer sur Enable new engine

          9. Sélectionnez LDAP

          10. Cliquer sur Enable engine

          11. Connectez-vous maintenant en SSH à votre serveur Vault

          12. Une fois connecté à votre instance/serveur il faut en premier lieu mettre en mémoire 2 variables. Soit l’url de votre serveur Vault ainsi que le token root.

          export VAULT_ADRR='https://UrlOfYourVaultServer:8200'
          export VAULT_TOKEN='RootTokenFromJSONFile'

                    13. Entrer les informations de connexion à votre contrôleur de domaine. Si vous utilisez un nom de domaine que le serveur Vault n’est pas en mesure de résoudre (exemple un .local), assurez-vous d’ajouter une entrée dans le fichier /etc/hosts avant de procéder. Dans le cas présent nous allons également utilisé l’option insecure_tls mais si vous voulez déployer cette option en production, il serait préférable d’importer le certificat SSL utilisé pour la connexion LDAPS de votre serveur Active Directory pour améliorer la sécurité.

                    vault write ldap/config binddn=VaultAdmin@YourdDomain.com bindpass=PasswordOfVaultAdmin url=ldaps://URLOfYourADServer schema=ad insecure_tls=true userdn='dc=YourDomain,dc=com'

                    14. Si vous avez entrer l’information correctement, vous devriez recevoir le message suivant :

                    Success! Data written to: ldap/config

                    15. Une fois le role créé, il faut maintenant créer 3 fichiers de configuration

                    16. Le premier fichier se nomme creation.ldif et doit avoir les informations suivantes (ajuster en fonction de votre domaine) :

                    dn: CN={{.Username}},OU=Vault,DC=YourDomain,DC=com
                    changetype: add
                    objectClass: top
                    objectClass: person
                    objectClass: organizationalPerson
                    objectClass: user
                    userPrincipalName: {{.Username}}@YourDomain
                    sAMAccountName: {{.Username}}
                    dn: CN={{.Username}},OU=Vault,DC=YourDomain,DC=com
                    changetype: modify
                    replace: unicodePwd
                    unicodePwd::{{ printf "%q" .Password | utf16le | base64 }}
                    replace: userAccountControl
                    userAccountControl: 66048
                    dn: CN=VaultUsers,OU=Vault,DC=YourDomain,DC=com
                    changetype: modify
                    add: member
                    member: CN={{.Username}},OU=Vault,DC=YourDomain,DC=com

                      17. Le second fichier se nomme delete.ldif et doit avoir les informations suivantes (ajuster en fonction de votre de domaine) :

                      dn: CN={{.Username}},OU=Vault,DC=YourDomain,dc=com
                      changetype: delete

                      18. Le troisième fichier se nomme rollback.ldif et doit avoir les informations suivantes (ajuster en fonction de votre de domaine) :

                      dn: CN={{.Username}},OU=Vault,DC=YourDomain,dc=com
                      changetype: delete

                      19. Nous pouvons maintenant créer le role Dynamic RDP avec la commande suivante (assurez-vous de mentionner le chemin de vos 3 fichiers). Nous allons ici préciser une suppression de compte après 8 heures de temps car c’est le temps par défaut maximal d’une session dans Boundary Desktop mais vous pouvez l’ajuster à votre convenance.

                      vault write ldap/role/dynamic-role creation_ldif=@creation.ldif default_ttl=1h max_ttl=8h deletion_ldif=@deletion.ldif rollback_ldif=@rollback.ldif username_template="v_{{unix_time}}"

                      20. Si vous avez mentionner le bon chemin des fichiers, vous devriez recevoir le message suivant :

                      Success! Data written to: ldap/role/dynamic-role

                      21. La prochaine étape est de valider que la création du compte fonctionne réellement. Vous pouvez utiliser la commande suivante pour valider si votre configuration fonctionne correctement :

                      vault read ldap/creds/dynamic-role

                      22. Si la configuration a été faite correctement, vous devriez recevoir les informations d’un compte qui aura une durée de vie d’une heure par défaut.

                      23. La configuration de Vault avec votre contrôleur de domaine pour la création de compte dynamique est complétée.

                      Configuration de votre instance Ubuntu avec vault-ssh-helper

                      Afin de pouvoir utiliser Vault OTP, il faut s’assurer que votre instance puisse se connecter à votre serveur Vault via le port 8200 ainsi que d’avoir vault-ssh-helper d’installé.

                      1. Connectez-vous en SSH à l’instance Ubuntu que vous avez déployé et qui est connecté dans le même subnet que votre serveur Boundary ou dans un subnet que votre serveur Boundary est en mesure de se connecter en utilisant le réseau interne et non le réseau public.

                      2. Téléchargé le logiciel vault-ssh-helper en utilisant la commande suivante :

                      wget https://releases.hashicorp.com/vault-ssh-helper/0.2.1/vault-ssh-helper_0.2.1_linux_amd64.zip

                        3. Installer vault-ssh-helper dans le répertoire /usr/local/bin

                        sudo unzip -q vault-ssh-helper_0.2.1_linux_amd64.zip -d /usr/local/bin

                        4. Assurez-vous que vault-ssh-helper est exécutable

                        sudo chmod 0755 /usr/local/bin/vault-ssh-helper

                        5. Assurez-vous également que root est le seul propriétaire

                        sudo chown root:root /usr/local/bin/vault-ssh-helper

                        6. Créer un dossier pour conserver le fichier de configuration

                        sudo mkdir /etc/vault-ssh-helper.d

                        7. Créer le fichier de configuration

                        sudo vi /etc/vault-ssh-helper.d/config.hcl

                        8. Ajouter les informations suivante dans le fichier

                        vault_addr = "https://URlOfYourVaultServer:8200"
                        ssh_mount_point = "ssh"
                        ca_cert = "/opt/ssl/cacert.pem"
                        tls_skip_verify = false
                        allowed_roles = "*"

                        9. Créer un dossier pour conserver un certificat racine qui permettra de valider le certificat installé sur votre serveur Vault

                        sudo mkdir /opt/ssl

                        10. Si vous utilisez un certificat provenant d’une autorité de certification reconnu, vous pouvez utiliser un certificat qui regroupe l’ensemble des certificats racines des principaux fournisseurs de certificat SSL en récupérant par exemple celui-ci et en le déposant dans le dossier créé à l’étape précédente.

                        wget https://curl.se/ca/cacert.pem
                        sudo cp cacert.pem /opt/ssl/

                        11. Modifier le fichier pam.d

                        sudo vi /etc/pam.d/sshd

                        12. Assurez-vous de mettre en commentaire la section include common-auth et d’ajouter les lignes suivantes en dessous avant de le sauvegarder :

                        #@include common-auth
                        auth requisite pam_exec.so quiet expose_authtok log=/tmp/vaultssh.log /usr/local/bin/vault-ssh-helper -config=/etc/vault-ssh-helper.d/config.hcl
                        auth optional pam_unix.so not_set_pass use_first_pass nodelay

                        13. Modifier maintenant le fichier sshd_config

                        sudo vi /etc/ssh/sshd_config

                        14. Assurez-vous que les 2 sections suivantes sont activées et sauvegarder le fichier :

                        KbdInteractiveAuthentication yes
                        UsePAM yes

                        15. Redémarrer le service sshd :

                        sudo systemctl restart sshd

                        16. Votre instance est maintenant configuré avec vault-ssh-helper

                        Installation de Boundary Desktop sur votre poste de travail

                        Afin de pouvoir effectuer les tests de connexion, il faut s’assurer que Boundary Desktop soit installé sur votre poste de travail.

                        Vous pouvez récupérer les fichiers d’installation en fonction de votre système d’exploitation via le lien suivant : Boundary-Desktop Versions | HashiCorp Releases

                        Boundary Desktop existe pour Windows, macOS et Linux.

                        Au moment d’écrire ces lignes la dernière version était la 2.0.3

                        Pour récupérer la version Windows : https://releases.hashicorp.com/boundary-desktop/2.0.3/boundary-desktop_2.0.3_windows_amd64.zip

                        Pour récupérer la version macOS pour processeur Apple Silicon : https://releases.hashicorp.com/boundary-desktop/2.0.3/boundary-desktop_2.0.3_darwin_arm64.dmg

                        Pour récupérer la version macOS pour processeur Intel : https://releases.hashicorp.com/boundary-desktop/2.0.3/boundary-desktop_2.0.3_darwin_amd64.dmg

                        Pour récupérer la version Ubuntu : https://releases.hashicorp.com/boundary-desktop/2.0.3/boundary-desktop_2.0.3_amd64.deb

                        Pour récupérer la version pour les autres systèmes d’exploitation sous Linux : https://releases.hashicorp.com/boundary-desktop/2.0.3/boundary-desktop_2.0.3_linux_amd64.zip