Azure Data Factory : Il essaie de récupérer un secret Azure Key Vault dans un Pipeline, ça tourne mal !

Azure Key Vault (AKV) est un produit Azure assez pratique pour stocker de façon sécurisée des secrets (entre autres) et Azure Data Factory (ADF) permet nativement d’y accéder. Ca s’utilise généralement dans la configuration de nos linked services ADF, cf. la doc officielle pour voir comment faire : https://docs.microsoft.com/en-us/azure/data-factory/store-credentials-in-key-vault

On va donc pouvoir utiliser AKV pour gérer toute la configuration de nos ADF : les users, les mots de passe, les chaines de connexions, les chemins, les tokens…

47306e90e47927fd0cd4b65648854841

Bon récupérer des secrets dans des linked services c’est cool…

…Mais maintenant, il y a des cas où ce n’est pas suffisant, et je vais vous montrer comment allez un peu plus loin, et récupérer des secrets directement dans un pipeline pour ensuite utiliser la valeur du secret dans n’importe quelle activité !

Il n’existe malheureusement pas, au moment où j’écris cet article, de moyen natif pour faire cela, par contre c’est possible via une simple activité web. Pour ce faire, on va falloir :

  1. S’assurer que le MSI de notre ADF a le bien droit de récupérer les secrets (GET) de votre AKV, voir le l’étape 2 de la doc ‘”In your key vault -> Access policies -> Add new -> search this managed identity application ID to grant Get permission in Secret permissions dropdown” et surtout oubliez pas de cliquer sur “save” pour enregistrer votre affectation :
  2. https://docs.microsoft.com/en-us/azure/data-factory/store-credentials-in-key-vault#steps

  3. Ajouter une activité web dans votre pipeline ADF avec la conf suivante :
    1. URL : l’url de votre secret, https://<AKVName>.vault.azure.net/secrets/<SecretName>?api-version=2016-10-01 en remplaçant <AKVName> par le nom de votre AKV et <SecretName> par le nom de votre secret
    2. Method : GET
    3. Authentication : MSI
    4. Resource : https://vault.azure.net

chrome_tINXRL6kx2

Vous pourrez ensuite récupérer la valeur du secret dans les activités suivantes et dans n’importe quelle expression avec la formule @activity(‘<NomDeVotreActiviteWeb>’).output.value, en remplaçant <NomDeVotreActiviteWeb> par le nom de votre activité web.

Si vous voulez sécuriser encore plus la valeur de votre secret je vous conseille d’aller dans l’onglet General de votre activité web et de cocher les paramètres “Secure output” et “Secure input”, sinon la valeur de votre secret sera affichée en clair dans le monitoring de votre pipeline. Ce qui n’est pas top si on va chercher un mot de passe par exemple Smile 

chrome_Y5dqX2NMIq

Voici au final, le code Json de votre activité web :

{
    "name": "GetSecret",
    "type": "WebActivity",
    "dependsOn": [],
    "policy": {
        "timeout": "7.00:00:00",
        "retry": 0,
        "retryIntervalInSeconds": 30,
        "secureOutput": true,
        "secureInput": true
    },
    "userProperties": [],
    "typeProperties": {
        "url": "https://<AKVName>.vault.azure.net/secrets/<SecretName>?api-version=2016-10-01",
        "method": "GET",
        "authentication": {
            "type": "MSI",
            "resource": "https://vault.azure.net"
        }
    }
}

Attention aussi avec l’activité “set value” de ADF, qui elle aussi affiche la valeur qu’on affecte dans une variable en clair dans la log. La sécurité s’est important !

FADATA

Fabien Adato est Customer Engineer Data et AI chez Microsoft. Après avoir intégré la société CGI Business Consulting où il rejoint une équipe dédiée à la Business Intelligence, il fait ses premières armes sur la solution Microsoft SQL Server. Pendant plus de 4 ans, il acquiert des compétences techniques et fonctionnelles sur toute la chaîne de valeur de la BI (ETL, Base de Données, Cube Olap et Rapport). Il a pu se spécialiser également sur de nouvelles technologies de la Data et notamment Hadoop, Pig et Hive, ainsi que des technologies self-service BI, le No-SQL comme la base de données MongoDB et le moteur d’indexation ElasticSearch. Il entre chez AZEO en 2014 puis Avanade en 2021 puis Microsoft en 2021 pour y assurer le poste de CE DATA / AI, autour des technologies Microsoft SQL Server, Power BI et Azure Data.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée.