Gérer les secrets de serveur
Tableau Server doit stocker un certain nombre de secrets qu’il utilise pour effectuer diverses fonctions, notamment sécuriser la communication interne, communiquer avec d’autres applications ou le système d’exploitation, ou mettre en œuvre une communication sécurisée avec les clients. Dans ce contexte, le terme secret peut désigner un mot de passe, un jeton ou toute autre chaîne utilisée pour authentifier une entité sur une autre.
Deux catégories de secrets sont nécessaires pour exécuter Tableau Server. Elles diffèrent selon la façon dont les secrets sont générés :
- Secrets générés par les administrateurs. Il s’agit notamment des informations d’identification et des secrets associés pour le compte Exécuter en tant qu’utilisateur et des informations d’identification SMTP utilisées par Tableau Server.
- Secrets générés automatiquement par différents processus du système. Par exemple, un secret est nécessaire pour protéger la communication entre les processus du contrôleur de grappe et ZooKeeper. Et plusieurs mots de passe différents sont requis pour chaque service et utilisateur programmatique qui communique avec Postgres.
La plupart des secrets sont chiffrés au repos. Lorsqu’un secret est nécessaire, il est déchiffré au moment de l’exécution.
Cette rubrique explique comment fonctionne le stockage de secrets et décrit les mesures à prendre pour gérer correctement le stockage de secrets sur Tableau Server.
Fonctionnement des secrets
Lors de l’installation, Tableau Server génère et stocke une clé principale dans le keystore Java. La clé principale sert à chiffrer une clé de chiffrement de la configuration qui s’applique à l’ensemble du système.
Chaque fois qu’un nouveau secret est créé ou mis à jour, il est chiffré avec la clé de chiffrement de la configuration. La valeur chiffrée est alors enregistrée avec son paramètre de configuration correspondant dans un fichier YAML sur le serveur. Les paramètres contenant une valeur chiffrée utilisent le format ENC(<encrypted string>)
, où <encrypted string>
est une chaîne chiffrée en Base64.
Au moment de l’exécution, lorsqu’un secret donné doit être utilisé, les valeurs chiffrées sont lues dans la mémoire et déchiffrées avec la clé de chiffrement de la configuration.
Dans le cas de modifications en attente, lorsque des secrets sont saisis lors d’un changement de configuration, l’ensemble de la transaction est chiffré. Dans ce scénario, après que vous avez saisi un secret et enregistré le changement en attente, le secret est transmis au service de coordination (par SSL chiffré). Le service de coordination chiffre le secret et le stocke jusqu’à ce que les modifications en attente soient appliquées. Lorsque des modifications sont appliquées, le secret (toujours chiffré) est promu à la version de configuration actuelle.
Tableau Server chiffre les secrets avec AES 256 bits en mode GCM. Les clés utilisées pour le stockage sécurisé sont différentes de celles utilisées pour chiffrer les informations d’identification de la base de données intégrée avant qu’elles ne soient stockées dans le référentiel.
Qui a accès à la clé principale?
Dans une installation par défaut, le keystore Java pour Tableau Server est répliqué dans le dossier /tabsvc/keystores
pour chaque service sur ce nœud sous /var/opt/tableau/tableau_server/data/tabsvc/config
.
Par exemple,
/var/opt/tableau/tableau_server/data/tabsvc/config/tabadminagent_<version_number>/tabsvc/keystores/tableauserver.jks
.
Si vous utilisez un répertoire d’installation personnalisé, les fichiers keystore sont disponibles sous
<install directory>/tableau_server/data/tabsvc/config/<service name_#.version_number>/tabsvc/keystores
Par défaut, les utilisateurs et les groupes suivants ont accès à ce répertoire :
- root
- tableau (utilisateur)
- membres du groupe « tableau »
Importer et exporter les informations de configuration
Tableau Services Manager introduit une fonction d’importation et d’exportation des informations de configuration à l’aide de tsm settings export.
Remarque : cette version de Tableau Server ne prend pas en charge la restauration des informations de configuration à partir d’une sauvegarde. Au lieu de cela, nous vous recommandons d’utiliser les commandes de configuration d’exportation et d’importation pour sauvegarder et restaurer les informations de configuration.
Tandis que les secrets de configuration sont chiffrés lors d’un stockage sur le disque en interne, si la configuration est exportée dans un fichier, les secrets sont écrits dans le fichier en texte ordinaire. C’est l’administrateur qui doit prendre les mesures nécessaires pour protéger ce fichier. Plusieurs options sont disponibles :
- Écrivez le fichier sur un système de fichiers chiffré.
- Écrivez le fichier sur un répertoire qui est limité à des utilisateurs ou des groupes spécifiques selon les autorisations du système de fichiers.
- Cryptez le fichier de sortie.
Sécurisation des secrets pour les opérations d’importation et d’exportation
Cette section décrit comment appliquer un chiffrement PGP à la sortie de sauvegarde. Avec cette méthode, créez un canal nommé et fournissez-le en tant qu’argument de fichier, puis utilisez-le comme entrée pour le chiffrement gpg. L’avantage est que les secrets ne sont jamais écrits sur le disque en texte ordinaire. gpg doit être disponible, ainsi qu’une clé privée. La section suivante présente un exemple de cette méthode.
L’exemple de cette section décrit une manière de traiter les secrets de manière à les stocker sur un ordinateur séparé.
Pour obtenir davantage d’informations, consultez les références externes suivantes :
Exemple : déchiffrer et exporter
Voici un exemple de sécurisation du fichier lors de l’exportation de la configuration.
mkfifo -m 600 /tmp/secure1 && (gpg --symmetric --batch --yes --passphrase-file ~/.secrets/pgppassphrase.txt --cipher-algo AES256 --output encrypted.enc < /tmp/secure1 &) && tsm settings export -f /tmp/secure1 && rm /tmp/secure1
Voici les détails de cette opération :
Créez un canal nommé avec un accès limité à rw par les autorisations de fichiers pour l’utilisateur actuel.
mkfifo -m 600 /tmp/secure1
Appelez gpg pour chiffrer les données envoyées au canal nommé, en mettant l’opération en arrière-plan en tant que processus séparé. Il est bloqué dans l’attente des données. Le résultat sera un fichier contenant les données chiffrées.
gpg --symmetric --batch --yes --passphrase-file ~/.secrets/pgppassphrase.txt --cipher-algo AES256 --output encrypted.enc < /tmp/secure1 &
Appelez tsm pour exporter la configuration, en fournissant le canal nommé comme argument de fichier.
tsm settings export -f /tmp/secure1
Supprimez le canal nommé.
rm /tmp/secure1
Les données chiffrées se trouvent dans le fichier "encrypted.enc."
Exemple : déchiffrer et importer
Voici un exemple de déchiffrement et d’importation de la configuration.
mkfifo -m 600 /tmp/secret2 && (gpg --decrypt --batch --yes --passphrase-file ~/.secrets/pgppassphrase.txt encrypted.enc > /tmp/secret2 &) && tsm settings import -f /tmp/secret2 && rm /tmp/secret2
Voici les détails de cette opération :
Créez un canal nommé avec un accès limité à rw par les autorisations de fichiers pour l’utilisateur actuel.
mkfifo -m 600 /tmp/secure2
Déchiffrez la configuration et envoyez-la au canal nommé. Mettez l’opération en arrière-plan en tant que processus séparé. Il sera bloqué dans l’attente d’être lu.
gpg --decrypt --batch --yes --passphrase-file ~/.secrets/pgppassphrase.txt encrypted.enc > /tmp/secret2 &
Exécutez la commande d’importation de configuration tsm, en vous connectant comme nécessaire.
tsm settings import -f /tmp/secret2
Supprimez le canal nommé.
rm /tmp/secure1
La configuration en attente contient la configuration importée.
Exécutez tsm pending-changes apply pour appliquer les modifications. Si les modifications en attente nécessitent un redémarrage du serveur, la commande pending-changes apply
affichera une invite pour vous informer qu’un redémarrage va avoir lieu. Cette invite s’affiche même si le serveur est arrêté, mais dans ce cas, il n’y a pas de redémarrage. Vous pouvez supprimer l’invite à l’aide de l’option --ignore-prompt
, mais cela ne modifiera pas le comportement de redémarrage. Si les modifications ne nécessitent pas de redémarrage, les modifications sont appliquées sans invite. Pour plus d’informations, consultez tsm pending-changes apply.
Nœuds de groupement
Lorsque vous ajoutez un nouveau nœud à votre groupement Tableau Server, vous devez d’abord générer le fichier de configuration de nœud (tsm topology). Le fichier de configuration de nœud contient une copie du fichier keystore principal utilisé pour le chiffrement des secrets de configuration.
Important : Nous vous recommandons vivement de prendre des mesures supplémentaires pour sécuriser le fichier de configuration du nœud lors de l’exportation d’un fichier de configuration contenant des secrets.
Lorsque vous installez et configurez Tableau Server sur le nouveau nœud, vous devez fournir le fichier de configuration de nœud à la commande initialize-tsm
. initialize-tsm
.
Journalisation des événements de stockage de secrets
Les événements suivants en rapport avec le stockage de secrets sont enregistrés dans le journal :
- Génération de nouvelles clés de chiffrement
- Annulation ou modification d’une clé de chiffrement
- Chiffrement d’une nouvelle valeur dans le fichier de configuration
Pour plus d’informations sur les fichiers journaux et leur emplacement de stockage, consultez Travailler avec des fichiers journaux.
Gestion des secrets
En tant qu’administrateur de Tableau Server, la tâche la plus importante liée au stockage des secrets est leur mise à jour périodique. Dans certains cas (dépannage ou audit du serveur), vous serez peut-être amené à récupérer un mot de passe.
Pour d’autres opérations, comme la mise à niveau de versions, la sauvegarde et la restauration ou l’ajout de nouveaux nœuds à un groupement, comme indiqué précédemment, Tableau Server gère automatiquement le stockage des secrets et les processus associés.
Mise à jour des secrets
Vous devez mettre à jour les secrets de manière régulière, conformément à la politique de sécurité de votre entreprise.
Pour mettre à jour la clé principale et les secrets générés automatiquement, exécutez tsm security regenerate-internal-tokens.
Récupération de mots de passe
Vous pourrez être amené à récupérer des mots de passe dans le cadre d’activités de dépannage ou d’autres opérations. Par exemple, il vous faudra peut-être récupérer les informations d’identification d’utilisateurs Postgres en lecture seule qui sont générées et chiffrées par Tableau Server. Dans ces cas, vous pouvez exécuter une commande tsm qui récupérera et déchiffrera les mots de passe.
Pour récupérer un mot de passe, ouvrez l’invite de commande et exécutez une commande tsm configuration get
pour l’un des paramètres répertoriés dans le tableau ci-dessous.
Par exemple, pour récupérer le mot de passe d’un utilisateur Postgres en lecture seule, entrez la commande suivante :
tsm configuration get -k pgsql.readonly_password
La commande renvoie le mot de passe en texte clair :
$ tsm configuration get -k pgsql.readonly_password
password
Configuration Parameter | Description |
---|---|
clustercontroller.zookeeper.password | Password for cluster controller to connect to zookeeper. |
indexandsearchserver.client.password | Password for logging into Index and Search Server. |
indexandsearchserver.ssl.admin.cert.bytes | Admin certificate that is used for administrative access to the Index and Search Server. The admin certificate is used to generate the node certificate. |
indexandsearchserver.ssl.admin.key.file_bytes | Certificate key for administrative access to the Index and Search Server. |
indexandsearchserver.ssl.node.cert.bytes | Certificate that is used for Index and Search Server node-to-node communication. |
indexandsearchserver.ssl.node.key.file_bytes | Certificate key that is used for Index and Search Server node-to-node communication. |
indexandsearchserver.ssl.root.cert.bytes | Certificate that is used to sign the admin and node certificates . This certificate is used by TSM for health check and by NLP to connect to Index and Search Server. |
indexandsearchserver.ssl.root.key.file_bytes | Certificate key for root certificate. |
filestore.zookeeper.password | Password for filestore to connect to zookeeper. |
hyper.connection.init_password | Password used to initialize the Hyper database for user tableau_internal_user and is then used for connecting to Hyper.
|
jdbc.password | Password for the rails Postgres user. |
kms.persistent_store | A collection of master encryption keys (MEKs) used by the Key Management System. |
maestro.rserve.password | Password for connecting to an external Rserve instance used by Tableau Prep Conductor for running flows that have nodes with R scripts. |
maestro.tabpy.password | Password for connecting to an external TabPy (Python server) instance used by Tableau Prep Conductor for running flows that have nodes with Python scripts. |
oauth.google.client_secret | Client secret of the Google Cloud Platform account. |
oauth.quickbooks.consumer_secret | Consumer secret of the Intuit developer account. |
oauth.salesforce.client_secret | Client secret of the Salesforce developer account. |
pgsql.adminpassword | Mot de passe pour l’utilisateur Postgres tblwgadmin. Remarque : bien que le paramètre de configuration soit chiffré dans les fichiers de configuration de Tableau (tabsvc.yml, workgroup.yml), ce mot de passe est stocké en texte ordinaire dans les fichiers utilisés par SAML. |
pgsql.readonly_password | Password for the readonly Postgres user. |
pgsql.remote_password | Password for the tableau Postgres user. |
redis.password | Mot de passe pour Redis. Remarque : bien que le paramètre de configuration soit chiffré dans les fichiers de configuration de Tableau (tabsvc.yml, workgroup.yml), la configuration continue d’être en texte ordinaire dans le fichier redis.conf utilisé par l’application Redis. Redis ne prend pas en charge les mots de passe chiffrés/sécurisés. |
servercrashupload.proxy_server_password | Password for custom proxy server used to upload crash reports. |
service.runas.password | Password of the Run As users. Stored temporarily. |
ssl.cert.file_bytes | The content of one of the three SSL certificate files uploaded by the administrator. The certificate files are required to enable secure external connections to Tableau Server. |
ssl.chain.file_bytes | The chain file(s) for the certificates uploaded by the administrator for external SSL. |
ssl.key.file_bytes | Key file(s) for the certificates uploaded by the administrator for external SSL. |
ssl.key.passphrase | Optional passphrase used to protect the external SSL key. |
svcmonitor.notification.smtp.password | SMTP Server password supplied by the administrator through TabConfig.exe. |
tabadminservice.password | Password for the service that allows server admins to download log files through the web interface. |
vizportal.openid.client_secret | This is the password ("provider client secret") used for OpenID Connect SSO. |
vizqlserver.external_proxy_password | Password used to authenticate to an external proxy. |
wgserver.domain.password | Password used to bind to Active Directory. |
wgserver.saml.key.passphrase | Passphrase used to access the PKCS#8 SAML key file. |
zookeeper.tsm.password | Password that TSM uses to connect to Zookeeper coordination service |