Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Azure Key Vault biedt een veilige manier om referenties te beheren, waaronder sleutels, geheimen en certificaten. Met behulp van Azure-pipelines kunt u het proces van toegang tot en het gebruik van sleutelkluizen stroomlijnen om referenties op te slaan en op te halen.
In bepaalde scenario's geven organisaties prioriteit aan beveiliging door de toegang tot sleutelkluizen exclusief te beperken tot aangewezen Azure virtuele netwerken. Deze beperking zorgt voor het hoogste beveiligingsniveau voor kritieke toepassingen. In deze zelfstudie leert u hoe u verificatie instelt en binnenkomende toegang configureert, zodat uw pijplijn gegevens kan opvragen en ophalen uit een privé-Azure Key Vault.
Vereisten
| Product | Vereisten |
|---|---|
| Azure DevOps | - Een Azure DevOps organisatie. - Een Azure DevOps project. -Machtigingen: - Als u toegang wilt verlenen tot alle pijplijnen in het project: u moet lid zijn van de groep Projectbeheerders. - Als u serviceverbindingen wilt maken: u moet de rol Beheerder of Maker hebben voor serviceverbindingen. |
| Azure | - Een Azure-abonnement. - Een Azure Key Vault. |
Toegang tot een persoonlijke sleutelkluis
Ontwikkelaars kunnen Azure-pipelines gebruiken om een Azure sleutelkluis te koppelen aan een variabele groep en selectieve kluisgeheimen eraan toe te wijzen. Een sleutelkluis die wordt gebruikt als een variabelegroep, kan worden geopend:
- Vanuit Azure DevOps tijdens de configuratie van een variabele groep.
- Van een zelf-hostende agent tijdens de runtime van de pijplijntaak.
Voer de volgende stappen uit om toegang tot uw persoonlijke sleutelkluis in te stellen:
- Maak een service-principal voor verificatie met Azure resources.
- Maak een Azure Resource Manager-serviceverbinding in Azure DevOps met behulp van de service-principal.
- Maak een federatieve referentie voor uw service-principal in Azure.
Een service-principal maken
Maak een service-principal voor verificatie met Azure resources:
Ga naar de Azure-portal.
Open Azure Cloud Shell in het bovenste menu en selecteer Bash.
Voer de volgende opdracht uit om een nieuwe service-principal te maken:
az ad sp create-for-rbac --name YOUR_SERVICE_PRINCIPAL_NAMEKopieer de uitvoer van de opdracht. U hebt deze waarden nodig in de volgende stap wanneer u de serviceverbinding maakt.
Een serviceverbinding maken
Nadat u de service-principal hebt gemaakt, gebruikt u de uitvoerwaarden om een Azure Resource Manager serviceverbinding te maken in Azure DevOps.
Meld u aan bij uw Azure DevOps-organisatie en ga vervolgens naar uw project.
Selecteer Projectinstellingen>Serviceverbindingen>Nieuwe serviceverbinding.
Selecteer Azure Resource Manager en selecteer vervolgens Volgende.
Voor identiteitstype selecteert u App-registratie (automatisch) in de vervolgkeuzelijst.
Laat voor Inloggegevens de standaard aanbevolen waarde op workloadidentiteitsfederatie staan.
Selecteer abonnement op bereikniveau en selecteer vervolgens uw abonnement in de vervolgkeuzelijst.
Selecteer een resourcegroep als u alleen de toegang tot de opgegeven resourcegroep wilt beperken.
Voer een naam in voor uw serviceverbinding en schakel vervolgens het selectievakje Toegang verlenen aan alle pijplijnen in om toe te staan dat alle pijplijnen deze serviceverbinding gebruiken.
Selecteer Opslaan.
Een federatieve identiteitsbewijs maken
Nadat u de serviceverbinding hebt opgeslagen, configureert u een federatieve referentie in Azure om een vertrouwensrelatie tot stand te brengen tussen uw service-principal en Azure DevOps.
Ga naar de Azure portal, voer de client-id van uw service-principal in de zoekbalk in en selecteer vervolgens uw toepassing.
Selecteer onder Beheren de opties Certificaten en geheimen en >.
Selecteer Referentie toevoegen en selecteer vervolgens voor het Federatief referentiescenario de optie Andere verstrekker.
Voor Verlener plakt u de volgende URL om de tijdelijke aanduiding te vervangen door de GUID van uw organisatie. U vindt de organisatie-id door naar Organization-instellingen>Microsoft Entra te gaan. Download de lijst met Azure DevOps organisaties die zijn verbonden met uw directory.
https://login.microsoftonline.com/<TENANT_ID>/v2.0Plak de volgende URL voor onderwerp-id. Vervang de tijdelijke aanduidingen door de naam van uw organisatie, projectnaam en serviceverbindingsnaam.
ENTRA_PREFIX/sc/ORGANIZATION_NAME/PROJECT_NAME/SERVICE_CONNECTION_NAMEVoer een naam in voor uw federatieve referentie en selecteer Vervolgens Toevoegen.
Een serviceverbinding maken
Nadat u de service-principal hebt gemaakt, gebruikt u de uitvoerwaarden om een Azure Resource Manager serviceverbinding te maken in Azure DevOps.
Meld u aan bij uw Azure DevOps-organisatie en ga vervolgens naar uw project.
Selecteer Projectinstellingen>Serviceverbindingen>Nieuwe serviceverbinding.
Selecteer Azure Resource Manager>Next en selecteer vervolgens Service-principal (handmatig)>Next.
Voor Omgeving selecteert u Azure Cloud en selecteert u BereikniveauSubscription. Voer vervolgens uw abonnements-id en uw abonnementsnaam in.
Voer de gegevens van uw service-principal in en selecteer Verifiëren.
Geef na een geslaagde verificatie uw serviceverbinding een naam, voeg een beschrijving toe en schakel vervolgens het selectievakje Toegang verlenen toe aan alle pijplijnen in. Selecteer Verifiëren en opslaan.
Aanbeveling
Als u de verbinding van uw service-principal niet kunt verifiëren, geeft u de service-principal Reader-toegang tot uw abonnement.
Toegang tot een persoonlijke sleutelkluis vanuit Azure DevOps
In deze sectie worden twee methoden beschreven voor toegang tot een persoonlijke sleutelkluis vanuit Azure DevOps.
De eerste methode maakt gebruik van variabele groepen om geheimen uit uw sleutelkluis te koppelen en toe te wijzen, gevolgd door het instellen van binnenkomende toegang door statische IP-bereiken toe te staan. Azure-pipelines gebruikt het openbare IP-adres van Azure DevOps bij het opvragen van een sleutelkluis vanuit een variabelegroep, dus moet u die IP-bereiken toestaan in de firewall van de sleutelkluis.
Met de tweede methode wordt het ip-adres van de Microsoft gehoste agent dynamisch toegevoegd aan de acceptatielijst van de sleutelkluisfirewall aan het begin van de pijplijn, wordt de sleutelkluis opgevraagd en wordt het IP-adres ten slotte verwijderd. Deze methode is alleen bedoeld voor demonstratiedoeleinden en wordt niet aanbevolen voor productiegebruik.
Stap 1: Key Vault-geheimen toewijzen aan een variabelengroep
Meld u aan bij uw Azure DevOps-organisatie en ga vervolgens naar uw project.
Selecteer Pijplijnen>Bibliotheek en selecteer vervolgens + Groep variabel.
Geef de variabelegroep een naam en schakel vervolgens Link geheimen uit een Azure Key Vault als variabele in.
Selecteer de serviceverbinding die u eerder hebt gemaakt, selecteer uw sleutelkluis en selecteer vervolgens Autoriseren.
Selecteer Onder Variabelen de optie Toevoegen om uw geheim toe te voegen en selecteer vervolgens Opslaan.
Notitie
Zorg ervoor dat uw serviceverbinding beschikt over de machtigingen Get en Lijst en dat de service-principal de rol Key Vault Geheimengebruiker in uw privé-key vault heeft toegewezen.
Stap 1.1: De serviceverbindingsmachtigingen instellen
Ga naar uw Azure sleutelkluis en selecteer Access-beleid.
Selecteer Maken en onder Geheime machtigingen de machtigingen Ophalen en Lijst toevoegen en selecteer vervolgens Volgende.
Voeg uw serviceverbinding toe in de zoekbalk, selecteer deze en selecteer vervolgens Volgende.
Selecteer Volgende nogmaals, controleer uw instellingen en selecteer Vervolgens Beoordelen en maken.
Stap 1.2: De machtigingen voor de service-principal instellen
Ga naar uw Azure-sleutelkluis en selecteer vervolgens Access control (IAM).
Selecteer Roltoewijzing toevoegen> en selecteer vervolgens het tabblad Rol.
Selecteer de Key Vault Secrets User rol en selecteer vervolgens Volgende.
Kies Leden selecteren, voeg uw service-principal toe en kies Selecteren.
Selecteer Beoordelen en toewijzen.
Meld u aan bij uw Azure DevOps-organisatie en ga vervolgens naar uw project.
Selecteer Pijplijnen>Bibliotheek en selecteer vervolgens + Groep variabel.
Geef de variabelegroep een naam en schakel vervolgens Link geheimen uit een Azure Key Vault als variabele in.
Selecteer de Azure serviceverbinding die u eerder hebt gemaakt in de vervolgkeuzelijst en selecteer vervolgens uw sleutelkluis.
Mogelijk ziet u het foutbericht "De opgegeven Azure-serviceverbinding moet beschikken over de machtigingen 'Get, List' voor geheimenbeheer op de geselecteerde sleutelkluis." Ga naar uw sleutelkluis in de Azure-portal en selecteer Toegangsbeheer (IAM)>Roltoewijzing toevoegen>key vault secrets user>Volgende. Voeg uw service-principal toe en selecteer Beoordelen en toewijzen.
Voeg uw geheimen toe en selecteer Opslaan.
Stap 2: Binnenkomende toegang vanuit Azure DevOps configureren
Nadat u de variabelegroep hebt geconfigureerd, kunt u binnenkomende toegang van Azure DevOps naar uw sleutelkluis toestaan door de statische IP-bereiken voor de geografische regio van uw organisatie toe te voegen.
Meld u aan bij uw Azure DevOps-organisatie.
Selecteer Organisatie-instellingen.
Ga naar Overzicht om de geografische locatie te vinden.
Zoek uw geografische IP V4-bereiken.
Belangrijk
Voor Verenigde Staten binnenkomende verbindingen moet u ervoor zorgen dat u de IP-bereiken voor alle Amerikaanse regio's toevoegt.
Configureer uw sleutelkluis om toegang vanuit statische IP-bereiken toe te staan.
Stap 3: Een privésleutelkluis opvragen met een variabelengroep
Nadat uw variabelegroep is gekoppeld en inkomende toegang is geconfigureerd, gebruikt u de volgende pijplijn om uw privé-sleutelkluis te raadplegen en het opgehaalde geheim te kopiëren. Azure-pipelines gebruikt het openbare IP-adres om de sleutelkluis uit een variabelegroep te raadplegen, dus zorg ervoor dat u inkomende toegang hebt geconfigureerd voordat u de pijplijn uitvoert.
variables:
- group: mySecret-VG
steps:
- task: CmdLine@2
inputs:
script: 'echo $(mySecret) > secret.txt'
- task: CopyFiles@2
inputs:
Contents: secret.txt
targetFolder: '$(Build.ArtifactStagingDirectory)'
- task: PublishBuildArtifacts@1
inputs:
PathtoPublish: '$(Build.ArtifactStagingDirectory)'
ArtifactName: 'drop'
publishLocation: 'Container'
Alternatieve methode: het IP-adres van de door Microsoft gehoste agent dynamisch toestaan
Bij deze benadering vraagt de pijplijn bij het opstarten het IP-adres op van de door Microsoft gehoste agent, voegt dit toe aan de lijst met toegestane adressen in de firewall van de sleutelkluis, voert de taken voor de sleutelkluis uit en verwijdert vervolgens het IP-adres voordat de pijplijn wordt afgerond.
Notitie
Deze aanpak is alleen bedoeld voor demonstratiedoeleinden. We raden deze methode niet aan voor Azure-pipelines.
- task: AzurePowerShell@5
displayName: 'Allow agent IP'
inputs:
azureSubscription: 'YOUR_SERVICE_CONNECTION_NAME'
azurePowerShellVersion: LatestVersion
ScriptType: InlineScript
Inline: |
$ip = (Invoke-WebRequest -uri "http://ifconfig.me/ip").Content
Add-AzKeyVaultNetworkRule -VaultName "YOUR_KEY_VAULT_NAME" -ResourceGroupName "YOUR_RESOURCE_GROUP_NAME" -IpAddressRange $ip
echo "##vso[task.setvariable variable=agentIP]ip"
- task: AzureKeyVault@2
inputs:
azureSubscription: 'YOUR_SERVICE_CONNECTION_NAME'
KeyVaultName: 'YOUR_KEY_VAULT_NAME'
SecretsFilter: '*'
RunAsPreJob: false
- task: AzurePowerShell@5
displayName: 'Remove agent IP'
inputs:
azureSubscription: 'YOUR_SERVICE_CONNECTION_NAME'
azurePowerShellVersion: LatestVersion
ScriptType: InlineScript
Inline: |
$ipRange = $env:agentIP + "/32"
Remove-AzKeyVaultNetworkRule -VaultName "YOUR_KEY_VAULT_NAME" -IpAddressRange $ipRange
condition: succeededOrFailed()
Belangrijk
Zorg ervoor dat de service-principal die u gebruikt om vanuit uw pijplijn toegang te krijgen tot uw key vault, de rol Key Vault Contributor heeft in het toegangsbeheer (IAM) van uw key vault.
Toegang tot een privé sleutelkluis vanaf een zelfgehoste agent
Gebruik een zelf-hostende agent (Windows, Linux of Mac) of Virtual Machine Scale Sets agents om toegang te krijgen tot een persoonlijke sleutelkluis vanaf een Azure-pipelines-agent. Door Microsoft gehoste agents vallen, net als andere generieke rekendiensten, niet onder de lijst van Key Vault met trusted services.
Om verbinding te maken met uw privésleutelkluis, configureert u een privé-eindpunt voor line-of-sight-toegang. Dit eindpunt moet routeerbaar zijn en de privé-DNS-naam ervan moet kunnen worden opgelost door de zelf-gehoste pijplijnagent.
Stap 1: Binnenkomende toegang configureren vanuit een zelf-hostende agent
Volg de instructies voor het maken van een virtueel netwerk.
Gebruik in de Azure portal de zoekbalk boven aan de pagina om uw Azure sleutelkluis te vinden.
Selecteer uw sleutelkluis en ga vervolgens naar Instellingen>Netwerken.
Selecteer Privé-eindpuntverbindingen en selecteer Maken om een nieuw privé-eindpunt te maken.
Selecteer de resourcegroep die als host fungeert voor het virtuele netwerk dat u eerder hebt gemaakt. Voer een naam en een netwerkinterfacenaam in voor uw exemplaar en zorg ervoor dat u dezelfde regio selecteert als het virtuele netwerk dat u eerder hebt gemaakt. Kies Volgende.
Voor Connection-methode selecteert u Verbinding maken met een Azure-resource in mijn directory. Voor Resourcetype kiest u Microsoft.KeyVault/vaults in het vervolgkeuzemenu. Selecteer uw resource in de vervolgkeuzelijst. De subresource van het doel wordt automatisch ingevuld met de waarde vault. Kies Volgende.
Selecteer op het tabblad Virtual Network het virtual network en subnet dat u eerder hebt gemaakt en laat de rest van de velden standaard staan. Kies Volgende.
Accepteer de standaardinstellingen op de tabbladen DNS en Tags . Selecteer Maken op het tabblad Beoordelen en maken.
Nadat uw resource is geïmplementeerd, gaat u naar uw sleutelkluis en selecteert u Instellingen>Netwerken>Verbindingen met privé-eindpunten. Uw privé-eindpunt moet worden vermeld met de verbindingsstatusGoedgekeurd. Als u een koppeling naar een Azure resource in een andere map hebt gemaakt, moet u wachten totdat de resource-eigenaar uw verbindingsaanvraag goedkeurt.
Stap 2: uw virtuele netwerk toestaan
Wanneer het privé-eindpunt is geconfigureerd, moet u in de firewallinstellingen van de Key Vault het virtuele netwerk waarop uw zelf-gehoste agent wordt gehost, toestaan.
Ga naar de Azure-portal en zoek uw Azure sleutelkluis.
Selecteer Instellingen>netwerken en zorg ervoor dat u zich op het tabblad Firewalls en virtuele netwerken bevindt.
Selecteer Een virtueel netwerk toevoegen>Bestaande virtuele netwerken toevoegen.
Selecteer uw abonnement in de vervolgkeuzelijst, selecteer het virtuele netwerk dat u eerder hebt gemaakt en selecteer vervolgens uw subnetten.
Selecteer Toevoegen en schuif naar de onderkant van de pagina en selecteer Toepassen om uw wijzigingen op te slaan.
Stap 3: Een privé-sleutelkluis opvragen vanuit een zelfgehoste agent
Wanneer toegang via het virtuele netwerk is toegestaan, gebruikt u de volgende pipeline om via de gekoppelde variabelegroep vanuit een zelf-gehoste agent een query uit te voeren op de privé-Key Vault:
pool: Self-hosted-pool
variables:
group: mySecret-VG
steps:
- task: CmdLine@2
inputs:
script: 'echo $(mySecret) > secret.txt'
- task: CopyFiles@2
inputs:
Contents: secret.txt
targetFolder: '$(Build.ArtifactStagingDirectory)'
- task: PublishBuildArtifacts@1
inputs:
PathtoPublish: '$(Build.ArtifactStagingDirectory)'
ArtifactName: 'drop'
publishLocation: 'Container'
Als u geen Azure DevOps binnenkomende toegang wilt verlenen tot uw persoonlijke sleutelkluis, gebruikt u de taak AzureKeyVault om rechtstreeks een query uit te voeren op de sleutelkluis. Zorg er in dit geval voor dat het virtuele netwerk dat als host fungeert voor uw zelf-hostende agent, is toegestaan in de firewallinstellingen van de sleutelkluis.
pool: Self-hosted-pool
steps:
- task: AzureKeyVault@2
inputs:
azureSubscription: '$(SERVICE_CONNECTION_NAME)'
keyVaultName: $(KEY_VAULT_NAME)
SecretsFilter: '*'
- task: CmdLine@2
inputs:
script: 'echo $(mySecret) > secret.txt'
- task: CopyFiles@2
inputs:
Contents: secret.txt
targetFolder: '$(Build.ArtifactStagingDirectory)'
- task: PublishBuildArtifacts@1
inputs:
PathtoPublish: '$(Build.ArtifactStagingDirectory)'
ArtifactName: 'drop'
publishLocation: 'Container'
Problemen oplossen
Gebruik de volgende richtlijnen om veelvoorkomende toegangsfouten in key vault op te lossen:
Public network access is disabled and request is not from a trusted service nor via an approved private link.Deze fout geeft aan dat openbare toegang is uitgeschakeld, maar geen privé-eindpunt of de vereiste firewall-uitzonderingen zijn geconfigureerd. Volg, afhankelijk van uw situatie, de stappen onder Inkomende toegang vanaf een zelf-hosted agent configureren of Inkomende toegang vanaf Azure DevOps configureren om toegang tot uw privé-sleutelkluis in te stellen.
Request was not allowed by NSP rules and the client address is not authorized and caller was ignored because bypass is set to None Client address: <x.x.x.x>Deze fout geeft aan dat openbare toegang is uitgeschakeld, Vertrouwde Microsoft-services toestaan om deze firewall te omzeilen niet is ingeschakeld en het client-IP-adres zich niet in de acceptatielijst van de sleutelkluisfirewall bevindt. Ga in de Azure-portal naar uw sleutelkluis, selecteer Settings>Networking en voeg het client-IP-adres toe aan de lijst met toegestane firewalls.
Error: Client address is not authorized and caller is not a trusted service.Zorg ervoor dat de IPv4-bereiken van uw geografie zijn toegevoegd aan de acceptatielijst van de sleutelkluis. Zie Toegang voor inkomend verkeer configureren vanuit Azure DevOps voor meer informatie.
U kunt ook Dynamisch het IP-adres van Microsoft gehoste agent toestaan om het client-IP-adres tijdens runtime toe te voegen aan de firewall van de sleutelkluis.