Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Azure Key Vault bietet eine sichere Lösung für die Verwaltung von Anmeldeinformationen wie Schlüsseln, Geheimnissen und Zertifikaten mit nahtloser Sicherheit. Mithilfe von Azure Pipelines können Sie den Zugriff auf Schlüsseltresore und deren Verwendung optimieren sowie mühelos Anmeldeinformationen speichern und abrufen.
In bestimmten Szenarien priorisieren Organisationen die Sicherheit, indem sie den Zugriff auf Schlüsseltresore auf bestimmte virtuelle Azure-Netzwerke beschränken, um ein Höchstmaß an Sicherheit für kritische Anwendungen zu gewährleisten.
In diesem Tutorial lernen Sie Folgendes:
- Erstellen eines Dienstprinzipals
- Erstellen einer Dienstverbindung
- Konfigurieren Ihrer Zugriffspunkte für eingehenden Zugriff
- Abfragen eines privaten Azure-Schlüsseltresors über Ihre Pipeline
Voraussetzungen
Ein Azure DevOps-organization und ein Projekt. Erstellen Sie ein organization oder ein Projekt, falls noch nicht geschehen.
Ein Azure-Abonnement. Erstellen Sie ein kostenloses Azure-Konto, falls Sie noch keines besitzen.
Ein Azure Key Vault. Erstellen Sie eine neue Azure Key Vault-Instanz, falls noch keine vorhanden ist.
Zugreifen auf einen privaten Schlüsseltresor
Mit Azure Pipelines können Entwickler eine Azure Key Vault-Instanz mit einer Variablengruppe verknüpfen und ihr selektive Tresorgeheimnisse zuordnen. Auf einen Schlüsseltresor, der als Variablengruppe verwendet wird, kann wie folgt zugegriffen werden:
Über Azure DevOps (während der Konfiguration der Variablengruppe)
Über einen selbstgehosteten Agent (während der Laufzeit des Pipelineauftrags)
Erstellen eines Dienstprinzipals
Zunächst erstellen Sie einen neuen Dienstprinzipal. Dadurch können Sie auf Azure-Ressourcen zugreifen. Als Nächstes müssen Sie eine neue ARM-Dienstverbindung in Azure DevOps erstellen und dann eine Verbundanmeldeinformationen für Ihren Dienstprinzipal in Azure einrichten, bevor Sie Ihre Dienstverbindung in Azure DevOps überprüfen und speichern.
Navigieren Sie zum Azure-Portal.
Öffnen Sie die Cloud Shell über die Menüleiste, und wählen Sie dann Bash aus.
Führen Sie den folgenden Befehl aus, um einen neuen Dienstprinzipal zu erstellen:
az ad sp create-for-rbac --name YOUR_SERVICE_PRINCIPAL_NAMEKopieren Sie die Ausgabe. Sie wird im nächsten Schritt zum Erstellen der Dienstverbindung benötigt.
Erstellen einer Dienstverbindung
Melden Sie sich bei Ihrer Azure DevOps-Organisation an, und navigieren Sie dann zu Ihrem Projekt.
Wählen Sie Projekteinstellungen>Dienstverbindungen>Neue Dienstverbindung aus.
Wählen Sie Azure Resource Manager und dann Weiter aus.
Wählen Sie für den Identitätstyp die App-Registrierung (automatisch) im Dropdownmenü aus.
Lassen Sie für Anmeldeinformationen den standardwert empfohlenen Wert: Workload-Identitätsverbund.
Wählen Sie für Bereichsebene **Abonnement und dann Ihr Abonnement aus dem Dropdownmenü aus.
Wählen Sie eine Ressourcengruppe aus, wenn Sie den Zugriff nur auf die angegebene Ressourcengruppe beschränken möchten.
Geben Sie einen Namen für Ihre Dienstverbindung an, und aktivieren Sie dann das Kontrollkästchen "Zugriffsberechtigung für alle Pipelines erteilen", damit alle Pipelines diese Dienstverbindung verwenden können.
Wählen Sie Speichern aus, wenn Sie fertig sind.
Erstellen einer Verbundanmeldeinformation
Navigieren Sie zu Azure-Portal, geben Sie die ClientID Ihres Dienstprinzipals in die Suchleiste ein, und wählen Sie dann Ihre Anwendung aus.
Wählen Sie unter "Verwalten" die Option "Zertifikate und geheime
Wählen Sie "Anmeldeinformationen hinzufügen" und dann für das Verbundanmeldeinformationsszenario "Andere Aussteller" aus.
Fügen Sie für Aussteller die folgende URL ein, die den Platzhalter durch die GUID Ihrer Organisation ersetzt. Sie finden Ihre Organisations-ID, indem Sie zu den Organisationseinstellungen>navigieren, die Microsoft Entra> Herunterladen der Liste der Azure DevOps-Organisationen, die mit Ihrem Verzeichnis verbunden sind.
https://login.microsoftonline.com/<TENANT_ID>/v2.0Fügen Sie für den Antragstellerbezeichner die folgende URL ein, die den Platzhalter durch den Namen Ihrer Organisation, den Projektnamen und den Dienstverbindungsnamen ersetzt.
ENTRA_PREFIX/sc/ORGANIZATION_NAME/PROJECT_NAME/SERVICE_CONNECTION_NAMEGeben Sie einen Namen für Ihre Verbundanmeldeinformationen ein, und wählen Sie dann "Hinzufügen" aus, wenn Sie fertig sind.
Erstellen einer Dienstverbindung
Melden Sie sich bei Ihrer Azure DevOps-Organisation an, und navigieren Sie dann zu Ihrem Projekt.
Wählen Sie Projekteinstellungen>Dienstverbindungen>Neue Dienstverbindung aus.
Wählen Sie Azure Resource Manager>Weiter und anschließend Dienstprinzipal (manuell)>Weiter aus.
Wählen Sie Azure Cloud für Umgebung und Abonnement für die Umfangsebene, dann geben Sie Ihre Abonnement-ID und Ihren Abonnementnamen ein.
Geben Sie Ihre Dienstprinzipalinformationen ein, und wählen Sie anschließend Überprüfen aus.
Geben Sie nach erfolgreicher Verifizierung einen Namen für Ihre Dienstverbindung ein, fügen Sie eine Beschreibung hinzu, und aktivieren Sie dann das Kontrollkästchen Allen Pipelines die Zugriffsberechtigung gewähren. Wählen Sie Überprüfen und Speichern aus, wenn Sie fertig sind.
Tipp
Falls Sie Ihre Dienstprinzipalverbindung nicht verifizieren können, gewähren Sie dem Dienstprinzipal Zugriff vom Typ Leser auf Ihr Abonnement.
Zugriff auf einen privaten Key Vault über Azure DevOps.
In diesem Abschnitt werden zwei Methoden für den Zugriff auf einen privaten Schlüsseltresor über Azure DevOps gezeigt. Zunächst verwenden wir Variablengruppen, um Geheimnisse aus dem Schlüsseltresor zu verknüpfen und zuzuordnen. Anschließend richten wir eingehenden Zugriff ein, indem wir statische IP-Bereiche zulassen. Wir richten eingehenden Zugriff ein, da Azure Pipelines die bereitgestellte öffentliche Azure DevOps-IP-Adresse verwendet, wenn die Azure Key Vault-Instanz über eine Variablengruppe abgefragt wird. Daher können wir durch Hinzufügen eingehender Verbindungen zur Azure Key Vault-Firewall erfolgreich eine Verbindung mit unserer Azure Key Vault-Instanz herstellen.
Für den zweiten Ansatz wird gezeigt, wie die IP-Adresse des von Microsoft gehosteten Agents dynamisch der Firewall-Zulassungsliste des Schlüsseltresors hinzugefügt, der Schlüsseltresor abgefragt und die IP-Adresse nach Abschluss des Vorgangs wieder entfernt wird. Dieser zweite Ansatz dient lediglich zu Demonstrationszwecken und ist nicht der von Azure Pipelines empfohlene Ansatz.
1. Zuordnen von Schlüsseltresorschlüsseln mit einer Variablengruppe
Melden Sie sich bei Ihrer Azure DevOps-Organisation an, und navigieren Sie dann zu Ihrem Projekt.
Wählen Sie Pipelines>Bibliothek und anschließend + Variablengruppe aus.
Benennen Sie Ihre Variablengruppe, und wählen Sie dann die Umschaltfläche aus, um die Option Geheimnisse von einem Azure Key Vault als Variablen verknüpfen zu aktivieren.
Wählen Sie die zuvor erstellte Dienstverbindung aus, wählen Sie Ihren Schlüsseltresor und dann "Autorisieren" aus.
Wählen Sie unter "Variablen" die Option "Hinzufügen" aus, um Ihren geheimen Schlüssel hinzuzufügen, und wählen Sie dann " Speichern" aus, wenn Sie fertig sind.
Hinweis
Stellen Sie sicher, dass Ihre Dienstverbindung über die Berechtigungen "Abrufen " und "Liste " verfügt, und Ihrem Dienstprinzipal wird die Rolle " Schlüsseltresorgeheimnisse" in Ihrem privaten Schlüsseltresor zugewiesen.
1.1 Einrichten der Dienstverbindungsberechtigungen
Navigieren Sie zu Ihrem Azure Key Vault, und wählen Sie dann Access-Richtlinien aus.
Wählen Sie "Erstellen" und unter "Geheime Berechtigungen" die Berechtigungen "Abrufen" und "Liste" und dann "Weiter" aus.
Fügen Sie Ihre Dienstverbindung in der Suchleiste hinzu, wählen Sie sie aus, und wählen Sie dann "Weiter" aus.
Wählen Sie "Weiter" aus, überprüfen Sie Ihre Einstellungen, und wählen Sie dann "Überprüfen " + erstellen" aus, wenn Sie fertig sind.
1.2 Einrichten der Dienstprinzipalberechtigungen
Navigieren Sie zu Ihrem Azure Key Vault, und wählen Sie dann Access Control (IAM) aus.
Wählen Sie >und dann die " aus.
Wählen Sie die Rolle " Schlüsseltresorgeheimnisse" und dann " Weiter" aus.
Wählen Sie " auswählen" aus, um Ihren Dienstprinzipal >>.
Wählen Sie " Überprüfen" und "Zuweisen " aus, wenn Sie fertig sind.
Melden Sie sich bei Ihrer Azure DevOps-Organisation an, und navigieren Sie dann zu Ihrem Projekt.
Wählen Sie Pipelines>Bibliothek und anschließend + Variablengruppe aus.
Benennen Sie Ihre Variablengruppe, und wählen Sie dann die Umschaltfläche aus, um die Option Geheimnisse von einem Azure Key Vault als Variablen verknüpfen zu aktivieren.
Wählen Sie Ihre zuvor erstellte Azure-Dienstverbindung aus dem Dropdownmenü aus, und wählen Sie anschließend Ihren Schlüsseltresor aus.
Sollte wie oben gezeigt eine Fehlermeldung mit dem Hinweis angezeigt werden,dass die angegebene Azure-Dienstverbindung die Berechtigungen „Get“ und „List“ für die Verwaltung von Geheimnissen für den ausgewählten Schlüsseltresor benötigt, navigieren Sie im Azure-Portal zu Ihrem Schlüsseltresor, und wählen Sie Zugriffssteuerung (IAM)>Rollenzuweisung>Key Vault-Geheimnisbenutzer>Weiter aus. Fügen Sie Ihren Dienstprinzipal hinzu, und wählen Sie abschließend Überprüfen und zuweisen aus.
Fügen Sie Ihre Geheimnisse hinzu, und wählen Sie anschließend Speichern aus.
2. Konfigurieren des eingehenden Zugriffs über Azure DevOps
Um Zugriff auf Ihren Schlüsseltresor über Azure DevOps zu ermöglichen, müssen Sie Zugriff über bestimmte statische IP-Bereiche gewähren. Diese Bereiche werden durch den geografischen Standort Ihrer Azure DevOps-Organisation bestimmt.
Melden Sie sich bei Ihrer Azure DevOps-Organisation an.
Wählen Sie Organisationseinstellungen aus.
Navigieren Sie zu Übersicht. Dort ist im unteren Bereich der Seite der geografische Standort angegeben.
Ermitteln Sie Ihre geografischen IPv4-Bereiche.
Wichtig
Achten Sie bei eingehenden Verbindungen in den USA darauf, die IP-Bereiche für alle US-Regionen hinzuzufügen.
Konfigurieren Sie Ihren Schlüsseltresor, um Zugriff über statische IP-Bereiche zu ermöglichen.
3. Abfragen eines privaten Schlüsseltresors mit einer Variablengruppe
In diesem Beispiel verwenden wir die zuvor eingerichtete und mit einem Dienstprinzipal autorisierte Variablengruppe, um unser Geheimnis aus unserer privaten Azure Key Vault-Instanz einfach mithilfe der verknüpften Variablengruppe abzufragen und zu kopieren. Azure Pipelines verwendet beim Abfragen der Azure Key Vault-Instanz über eine Variablengruppe die bereitgestellte öffentliche IP-Adresse. Stellen Sie daher sicher, dass Sie eingehenden Zugriff konfiguriert haben, damit dies ordnungsgemäß funktioniert:
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'
Alternative Methode: Dynamisches Zulassen der IP-Adresse des von Microsoft gehosteten Agents
Bei diesem zweiten Ansatz wird am Anfang der Pipeline zunächst die IP-Adresse des von Microsoft gehosteten Agents abgefragt. Danach fügen wir sie der Zulassungsliste für den Schlüsseltresor hinzu, führen die verbleibenden Aufgaben aus, und entfernen die IP-Adresse anschließend wieder aus der Firewall-Zulassungsliste des Schlüsseltresors.
Hinweis
Dieser Ansatz dient lediglich zu Demonstrationszwecken und ist nicht der von Azure Pipelines empfohlene Ansatz.
- 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()
Wichtig
Stellen Sie sicher, dass der Dienstprinzipal, mit dem Sie über Ihre Pipeline auf Ihren Schlüsseltresor zugreifen, innerhalb der Zugriffssteuerung (IAM) Ihres Schlüsseltresors über die Rolle Key Vault-Mitwirkender verfügt.
Zugreifen auf einen privaten Schlüsseltresor über einen selbstgehosteten Agent
Um über einen Azure Pipelines-Agent auf einen privaten Schlüsseltresor zugreifen zu können, müssen Sie entweder einen selbstgehosteten Agent (Windows, Linux, Mac) oder Agents für Azure-VM-Skalierungsgruppen verwenden. Das liegt daran, dass von Microsoft gehostete Agents (genau wie andere generische Computedienste) nicht in der Liste vertrauenswürdiger Dienste des Schlüsseltresors enthalten sind.
Um eine Verbindung mit Ihrem privaten Schlüsseltresor herzustellen, müssen Sie eine Sichtverbindung einrichten, indem Sie einen privaten Endpunkt für Ihren Schlüsseltresor konfigurieren. Dieser Endpunkt muss routingfähig sein, und sein privater DNS-Name muss über den selbstgehosteten Pipeline-Agent auflösbar sein.
1. Konfigurieren des eingehenden Zugriffs über einen selbstgehosteten Agent
Folgen Sie der bereitgestellten Anleitung zum Erstellen eines virtuellen Netzwerks.
Suchen Sie im Azure-Portal über die Suchleiste oben auf der Seite nach Ihrer Azure Key Vault-Instanz.
Wählen Sie Ihren Schlüsseltresor in den Suchergebnissen aus, und navigieren Sie dann zu Einstellungen>Netzwerk.
Wählen Sie Private Endpunktverbindungen und anschließend Erstellen aus, um einen neuen privaten Endpunkt zu erstellen.
Wählen Sie die Ressourcengruppe aus, die das zuvor von Ihnen erstellte virtuelle Netzwerk hostet. Geben Sie unter Name einen Namen und unter Name der Netzwerkschnittstelle einen Namen für die Netzwerkschnittstelle Ihrer Instanz an, und wählen Sie unter Region die gleiche Region aus wie für das zuvor erstellte virtuelle Netzwerk. Wählen Sie Weiter aus, wenn Sie fertig sind.
Wählen Sie unter Verbindungsmethode die Option Mit einer Azure-Ressource in meinem Verzeichnis verbinden und anschließend im Dropdownmenü für den Ressourcentyp die Option Microsoft.KeyVault/vaults aus. Wählen Sie im Dropdownmenü Ressource Ihre Ressource aus. Unter Zielunterressource wird automatisch der Wert Tresor eingefügt. Wählen Sie Weiter aus, wenn Sie fertig sind.
Wählen Sie auf der Registerkarte Virtuelles Netzwerk unter Virtuelles Netzwerk das virtuelle Netzwerk und unter Subnetz das Subnetz aus, die Sie zuvor erstellt haben, und behalten Sie in den restlichen Feldern die Standardeinstellungen bei. Wählen Sie Weiter aus, wenn Sie fertig sind.
Übernehmen Sie auf den Registerkarten DNS und Tags jeweils die Standardeinstellungen. Wählen Sie auf der Registerkarte Überprüfen + erstellen die Option Erstellen aus, wenn Sie so weit sind.
Wenn Ihre Ressource bereitgestellt wurde, navigieren Sie für Ihren Schlüsseltresor zu >Einstellungen>Netzwerk>Private Endpunktverbindungen. Der Verbindungsstatus Ihres privaten Endpunkts sollte Genehmigt lauten. Wenn Sie eine Verknüpfung mit einer Azure-Ressource in einem anderen Verzeichnis erstellen möchten, müssen Sie warten, bis der Ressourcenbesitzer Ihre Verbindungsanforderung genehmigt hat.
2. Zulassen Ihres virtuellen Netzwerks
Navigieren Sie im Azure-Portal zu Ihrer Azure Key Vault-Instanz.
Wählen Sie Einstellungen>Netzwerk aus, und vergewissern Sie sich, dass Sie sich auf der Registerkarte Firewalls und virtuelle Netzwerke befinden.
Wählen Sie Virtuelles Netzwerk hinzufügen>Vorhandene virtuelle Netzwerke hinzufügen aus.
Wählen Sie im Dropdownmenü Abonnement Ihr Abonnement aus. Wählen Sie dann das virtuelle Netzwerk aus, das Sie zuvor erstellt haben, und wählen Sie anschließend unter Subnetze Ihre Subnetze aus.
Wählen Sie Hinzufügen aus, wenn Sie so weit sind. Scrollen Sie anschließend auf der Seite nach unten, und wählen Sie Übernehmen aus, um Ihre Änderungen zu speichern.
3. Abfragen eines privaten Schlüsseltresors über einen selbstgehosteten Agent
Im folgenden Beispiel wird ein auf dem virtuellen Computer des virtuellen Netzwerks eingerichteter Agent verwendet, um den privaten Schlüsseltresor über die Variablengruppe abzufragen:
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'
Wenn Sie Azure DevOps keinen eingehenden Zugriff auf Ihren privaten Schlüsseltresor gewähren möchten, können Sie die Aufgabe AzureKeyVault verwenden, um Ihren Schlüsseltresor abzufragen. Sie müssen jedoch in den Einstellungen der Schlüsseltresorfirewall das virtuelle Netzwerk zulassen, in dem Ihr Agent gehostet wird.
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'
Problembehandlung
Führen Sie im Falle folgender Fehler die in diesem Abschnitt beschriebenen Schritte aus, um das entsprechende Problem zu behandeln:
Public network access is disabled and request is not from a trusted service nor via an approved private link.
Diese Fehlermeldung deutet darauf hin, dass der öffentliche Zugriff deaktiviert wurde und dass keine private Endpunktverbindung und keine Firewallausnahmen eingerichtet wurden. Gehen Sie wie unter [#configure-inbound-access-from-a-self--hosted-agent] und unter Konfigurieren des eingehenden Zugriffs über Azure DevOps beschrieben vor, um den Zugriff auf Ihren privaten Schlüsseltresor einzurichten.
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>
Diese Fehlermeldung deutet darauf hin, dass der öffentliche Zugriff des Schlüsseltresors deaktiviert und die Option Vertrauenswürdigen Microsoft-Diensten die Umgehung dieser Firewall erlauben nicht aktiviert wurde, die Client-IP-Adresse aber nicht der Schlüsseltresorfirewall hinzugefügt wurde. Navigieren Sie im Azure-Portal zu Ihrem Schlüsseltresor, navigieren Sie zu Einstellungen>Netzwerk, und fügen Sie Ihre Client-IP-Adresse der Zulassungsliste der Firewall hinzu.
Error: Client address is not authorized and caller is not a trusted service.
Stellen Sie sicher, dass Sie die IPv4-Bereiche Ihrer geografischen Region der Zulassungsliste für den Schlüsseltresor hinzufügen. Ausführliche Informationen finden Sie unter Konfigurieren des eingehenden Zugriffs über Azure DevOps. Alternativ können Sie zu Dynamisches Zulassen der IP-Adresse des von Microsoft gehosteten Agents navigieren, um zu erfahren, wie Sie der Schlüsseltresorfirewall Ihre Client-IP-Adresse während der Laufzeit hinzufügen.