Centric connect.engage.succeed

Kun jij een geheim bewaren?

Geschreven door Dick van Straaten - 02 februari 2018

Dick van Straaten
Als ontwikkelaar heb je vaak te maken met gevoelige data. Deze data beschermen we zo zorgvuldig mogelijk. Bij het ontwerp van de infrastructuur is er daarom veel aandacht voor maximale veiligheid. En bij de ontwikkeling van een applicatie passen we Security by Design Principles toe. Toch?

(https://www.owasp.org/index.php/Security_by_Design_Principles)

Met ‘geheimen’ zoals connection strings, encryption keys en credentials geven we de eindgebruiker van de applicatie uiteindelijk toegang tot zijn gevoelige data. Deze geheimen worden door ontwikkelaars vaak bewaard in de configuratiebestanden van hun applicaties. Zolang dit geheimen zijn die toegang geven tot de ontwikkelomgeving is dat geen probleem, maar helaas tref ik in die bestanden ook vaak productiegeheimen aan.

Zwervende data

De configuratiebestanden staan vaak in een code repository die beschikbaar is voor alle ontwikkelaars met toegang tot de applicatie. Dit betekent dat ontwikkelaars die de bestanden downloaden op hun laptop, aan het einde van de dag met alle geheimen de deur uitlopen. Misschien gaan die geheimen mee naar huis, maar het is ook goed mogelijk dat ze op publieke locaties terecht komen. Of op een Spaans party-eiland.

Zeker in het jaar waarin we aan de nieuwe Europese wet databescherming (General Data Protection Regulation) moeten voldoen, zou je hier als ontwikkelaar slapeloze nachten van moeten hebben. En als eigenaar van de gevoelige data is dit natuurlijk al helemaal geen prettig idee!

Key Vault is key!

Een goede remedie tegen die slapeloosheid en zorgen? Azure Key Vault! Key Vault bewaart alle geheimen versleuteld op een centrale veilige locatie en geeft je als eigenaar weer volledig de controle.

Azure Active Directory Service Principle

Uiteraard heb je voor het gebruik van de Azure Key Vault een Azure Subscription nodig. Daarmee beschik je automatisch over een Azure Active Directory. Voordat je met Key Vault kunt beginnen, maak je in deze Azure Active Directory een Service Principle aan. Onderstaande animatie toont hoe je een Service Principle in Azure Active Directory aanmaakt.

In stappen

  1. Log in op de Azure Portal via http://portal.azure.com
  2. Navigeer naar je Azure Active Directory
  3. Selecteer App registrations
  4. Kies New application registration
  5. Vul een naam in die herkenbaar is
  6. Kies Web app/API
  7. Voer een fictieve URL in, deze hoeft voor dit doeleinde feitelijk niet te bestaan
  8. Klik op Create
  9. We noteren de Application ID als username van onze Service Principle
  10. We klikken op Settings
  11. Klik in het menu op Keys
  12. Vul een herkenbare naam in
  13. Kies een geldigheidsduur
  14. Klik op Save
  15. Kopieer de Value als password van onze Service Principle
  16. Sluit het Keys-venster
  17. Klik in het menu op Required permissions
  18. Klik op Add
  19. Selecteer Azure Key Vault API
  20. Klik op Select
  21. Selecteer Select permissions
  22. Selecteer Delegated permissions om de Service Principle toegang te geven tot de Azure Key Vault API

Het gebruik van een Service Principle geeft je volledige controle op de toegang tot de Key Vault:

  • Je kunt de Service Principles beheren.
  • Je kunt machtigingen laten verlopen en/of intrekken.
  • Je kunt gemakkelijk differentiëren tussen verschillende afnemers van de Azure Key Vault.
  • Je beschikt over een audit log, waarmee je inzage hebt in het gebruik van mijn Service Principle.

Nadat we in de Azure Portal een Key Vault hebben toegevoegd, gaan we onze Service Principal toevoegen aan onze Key Vault.
Onderstaande afbeelding toont hoe je de Service Principle toevoegt.

In stappen:

  1. Klik op Access policies
  2. Klik op Add new
  3. Klik op Select principal
  4. Selecteer de Service Principal die eerder is aangemaakt.
  5. Klik op Select

Ken vervolgens voor de minimaal benodigde permissie toe aan je Service Principle voor respectievelijk handelingen op Keys, Secrets en/of Certificates. Nu is alles gereed om je geheimen aan de Key Vault toe te voegen.

Keys, Secrets and Certificates

Binnen Azure Key Vault wordt er onderscheid gemaakt tussen drie soorten objecten, namelijk:

  • Keys: encryptiesleutels voor het symmetrisch versleutelen van data
  • Secrets: geheime variabelen zoals connection strings, autorisatiesleutels et cetera
  • Certificates: certificaten met een private en een public key voor beveiliging en/of het asymmetrisch versleutelen van data

Navigeer naar jouw Key Vault. Via het menu kun je Keys, Secrets en Certificates aanmaken, verwijderen of wijzigen.

Onderstaande afbeelding laat zien hoe je een Secret aanmaakt.

In stappen:

  1. Klik op Secrets
  2.  Klik op Add
  3. Selecteer Manual
  4. Voer een naam in voor het geheim
  5. Voer een value in
  6. Geef een omschrijving op
  7. Klik op Create

Na het aanmaken van je Secret kun je een Secret Identifier kopiëren. Op deze URL kun je met de Service Principle Credentials handelingen uitvoeren waarvoor je geautoriseerd bent. Je maakt een Key of Certificate op dezelfde manier aan als een Secret.

Je hebt vervolgens volledige controle over de objecten in je Key Vault:

  • Je kunt de permissies van een Service Principle gemakkelijk wijzigen.
  • Je kunt objecten en/of versies van verschillende objecten beheren.
  • Je beschikt over een audit log, waarmee je inzage hebt in het gebruik van de objecten.

Azure Key Vault SDK

In je solution kun je eenvoudig de Azure Key Vault SDK toevoegen door in je Package Manager de volgende opdracht uit te voeren: Install-Package Microsoft.Azure.KeyVault -Version 2.3.2

Na installatie beschik je in je solution over een KeyVaultClient Object waarmee alle operations op de Azure Key Vault API uitgevoerd kunnen worden. Daarvoor moet eerst een Access Token door de Azure Active Directory worden verstrekt. In onderstaande code wordt de Access Token opgevraagd en de KeyVaultClient geïnitieerd.

Na het initiëren van de KeyVaultClient zijn alle operations op de Key Vault gemakkelijk uit te voeren: objecten ophalen, bewerken, data versleutelen en nog veel meer.

(https://docs.microsoft.com/en-us/dotnet/api/microsoft.azure.keyvault.keyvaultclient?view=azure-dotnet)

Zo kan ik bijvoorbeeld eenvoudig een connection string uit de Azure Key Vault ophalen om mijn databaseconnectie te maken. Deze connection string kan ik even gemakkelijk door meerder applicaties laten gebruiken en aanpassen, zonder wijzigingen in een applicatie te doen.

Conclusie

Uiteraard lossen we de slapeloze nachten van een data-eigenaar niet op door alleen Key Vault te gebruiken. Ontwikkelaars hebben enkel gegevens nodig om te kunnen ontwikkelen. Zij hebben geen toegang nodig tot productiegeheimen. De productiegeheimen moeten pas bij publicatie naar de productieomgeving aan de applicatie worden toegevoegd.

Met Azure Key Vault heb je als data-eigenaar wel veel meer controle. Je bepaalt zelf wie welke geheimen gebruikt en wanneer. Je kunt het gebruik monitoren en de versies van geheimen eenvoudig beheren. En dat is toch wel een fijne gedachte als een ontwikkelaar tijdens zijn vakantie met zijn laptop is het buitenland verblijft.

Over Dick

Dick van Straaten is Craft Expert van Team Azure Development binnen Craft, hét groeiprogramma voor IT'ers (powered by Centric). Wil je zijn blog volgen? Schrijf je in voor de Craft-update

Wil je meer weten over Craft, hét groeiprogramma voor IT'ers? Neem een kijkje op de website!

     
Schrijf een reactie
  • Captcha image
  • Verzenden