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. Mit Azure Pipelines können Sie den Prozess des Zugriffs auf und die Verwendung von Schlüsseltresorn zum Speichern und Abrufen von Anmeldeinformationen optimieren.
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 erfahren Sie, wie:
- Erstellen eines Dienstprinzipals
- Erstellen Sie eine Dienstverbindung.
- Konfigurieren Sie Ihre eingehenden Zugriffspunkte.
- Abfragen eines privaten Azure Key Vault über Ihre Pipeline
Voraussetzungen
- Eine Azure DevOps-Organisation 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-Schlüsseltresor. Create a new Azure key vault, falls Sie noch keinen haben.
Zugreifen auf einen privaten Schlüsseltresor
Entwickler können Azure Pipelines verwenden, um einen Azure Key Vault mit einer Variablengruppe zu verknüpfen und ausgewählte Vault-Geheimnisse zuzuordnen. Auf einen Key Vault, der als Variablengruppe verwendet wird, kann wie folgt zugegriffen werden:
- Über Azure DevOps (während der Konfiguration der Variablengruppe)
- Von einem selbstgehosteten Agenten während der Laufzeit des Pipelineauftrags.
Erstellen eines Serviceprincipals
Erstellen Sie zunächst einen neuen Dienstprinzipal, damit Sie auf Azure-Ressourcen zugreifen können. Als Nächstes müssen Sie eine neue Azure Resource Manager Dienstverbindung in Azure DevOps erstellen. Anschließend richten Sie in Azure eine Verbundanmeldeinformation für Ihren Dienstprinzipal ein, bevor Sie Ihre Dienstverbindung in Azure DevOps überprüfen und speichern.
Öffnen Sie das Azure-Portal.
Öffnen Sie im Dienstmenü Azure Cloud Shell, 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, da Sie sie zum Erstellen der Dienstverbindung im nächsten Schritt verwenden.
Erstellen einer Dienstverbindung
Melden Sie sich bei Ihrer Azure DevOps-Organisation an, und wechseln 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 im Dropdownmenü die App-Registrierung (automatisch) aus.
Lassen Sie für Anmeldeinformationen den als Standard empfohlenen Wert als Workload-Identitätsverbund.
Wählen Sie für Bereichsebene"Abonnement" und dann Im Dropdownmenü Ihr Abonnement 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 ein, 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.
Erstellen einer Verbundanmeldeinformation
Wechseln Sie zum portal Azure, geben Sie die Client-ID Ihres Dienstprinzipals in die Suchleiste ein, und wählen Sie dann Ihre Anwendung aus.
Wählen Sie unter
Verwalten die OptionZertifikate & Geheimnisse Verbundanmeldeinformationen .Wählen Sie Anmeldeinformationen hinzufügen aus und wählen Sie dann beim VerbundanmeldeinformationsszenarioAndere Aussteller aus.
Fügen Sie für Aussteller die folgende URL ein, um den Platzhalter durch die GUID Ihrer Organisation zu ersetzen. Sie finden Ihre Organisations-ID, indem Sie zu Organization settings>Microsoft Entra wechseln. Laden Sie die Liste der Azure DevOps Organisationen herunter, die mit Ihrem Verzeichnis verbunden sind.
https://login.microsoftonline.com/<TENANT_ID>/v2.0Fügen Sie für den Betreffbezeichner die folgende URL ein. Ersetzen Sie die Platzhalter durch den Namen Ihrer Organisation, den Projektnamen und den Dienstverbindungsnamen.
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.
Erstellen einer Dienstverbindung
Melden Sie sich bei Ihrer Azure DevOps-Organisation an, und wechseln Sie dann zu Ihrem Projekt.
Wählen Sie Projekteinstellungen>Dienstverbindungen>Neue Dienstverbindung aus.
Wählen Sie Azure Resource Manager>Next und dann Service principal (manual)>Next aus.
Wählen Sie für UmgebungAzure Cloud und für Scope-EbeneAbonnement aus. Geben Sie dann Ihre Abonnement-ID und Ihren Abonnementnamen ein.
Geben Sie Ihre Dienstprinzipalinformationen ein, und wählen Sie anschließend Überprüfen aus.
Benennen Sie nach erfolgreicher Überprüfung Ihre Dienstverbindung, fügen Sie eine Beschreibung hinzu, und aktivieren Sie dann das Kontrollkästchen "Zugriffsberechtigung für alle Pipelines erteilen ". Klicken Sie auf Verify and save.
Tipp
Wenn Sie Ihre Dienstprinzipalverbindung nicht verifizieren können, gewähren Sie dem Dienstprinzipal Lesezugriff auf Ihr Abonnement.
Zugriff auf einen privaten Key Vault über Azure DevOps.
In diesem Abschnitt untersuchen wir zwei Methoden für den Zugriff auf einen privaten Schlüsseltresor aus Azure DevOps. Zuerst verwenden wir variable Gruppen, um Geheimnisse aus Ihrem Kea Vault zu verknüpfen und abzubilden, gefolgt von der Einrichtung des eingehenden Zugriffs durch die Zulassung statischer IP-Bereiche. Wir stellen einen eingehenden Zugriff her, da Azure Pipelines die veröffentlichte öffentliche IP-Adresse von Azure DevOps verwendet, wenn der Azure Key Vault über eine Variablengruppe abgefragt wird. Durch das Hinzufügen von eingehenden Verbindungen zur Azure Key Vault-Firewall können Sie erfolgreich eine Verbindung zu Ihrem Azure Key Vault herstellen.
Beim zweiten Ansatz zeigen wir, wie die IP-Adresse des von Microsoft gehosteten Agenten dynamisch zur Zulassungsliste der Firewall Ihres Schlüsseltresors hinzugefügt, der Schlüsseltresor abgefragt und die IP-Adresse nach Abschluss des Vorgangs wieder entfernt wird. Dieser zweite Ansatz dient nur zu Demonstrationszwecken. Wir empfehlen diesen Ansatz für Azure Pipelines nicht.
Schritt 1: Zuordnen von Key Vault-Geheimnissen mit einer Variablengruppe
Melden Sie sich bei Ihrer Azure DevOps-Organisation an, und wechseln Sie dann zu Ihrem Projekt.
Wählen Sie Pipelines>Bibliothek und anschließend + Variablengruppe aus.
Benennen Sie die Variablegruppe, und aktivieren Sie die Option Geheimnisse aus einem Azure Key Vault als Variable verknüpfen.
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.
Hinweis
Stellen Sie sicher, dass Ihre Dienstverbindung über die Berechtigungen Get und List verfügt und dass Ihrem Dienstprinzipal die Rolle "Benutzer von Key Vault-Geheimnissen" in Ihrem privaten Key Vault zugewiesen ist.
Schritt 1.1: Einrichten der Dienstverbindungsberechtigungen
Wechseln Sie zu Ihrem Azure Key Vault, und wählen Sie dann Access-Richtlinien aus.
Wählen Sie "Erstellen", und fügen Sie unter Geheimnissberechtigungen die Berechtigungen Abrufen und Auflisten hinzu, und wählen Sie 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.
Schritt 1.2: Einrichten der Dienstprinzipalberechtigungen
Wechseln Sie zu Ihrem Azure Key Vault, und wählen Sie dann Zugriffskontrolle (IAM) aus.
Wählen Sie "> und dann die Registerkarte "Rolle" aus.
Wählen Sie die Rolle Key Vault Secrets User und dann Next.
Wählen Sie Mitglieder auswählen, fügen Sie Ihren Dienstprinzipal hinzu, und wählen Auswählen aus.
Wählen Sie "Überprüfen+ Zuweisen" aus.
Melden Sie sich bei Ihrer Azure DevOps-Organisation an, und wechseln Sie dann zu Ihrem Projekt.
Wählen Sie Pipelines>Bibliothek und anschließend + Variablengruppe aus.
Benennen Sie die Variablegruppe, und aktivieren Sie dann Geheimnisse von einem Azure Key Vault als Variable verknüpfen.
Wählen Sie die Azure Dienstverbindung aus, die Sie zuvor im Dropdownmenü erstellt haben, und wählen Sie dann Ihren Schlüsseltresor aus.
Möglicherweise wird die Fehlermeldung "Die angegebene Azure-Dienstverbindung muss die Verwaltungsberechtigungen 'Abrufen, Auflisten' für Geheimnisse im ausgewählten Schlüsseltresor haben." angezeigt. Wechseln Sie zu Ihrem Schlüsseltresor im Azure-Portal und wählen Sie Access Control (IAM)>Rollenzuweisung hinzufügen>Benutzer von Schlüsseltresor-Geheimnissen>Weiter. Fügen Sie Ihren Dienstprinzipal hinzu, und wählen Sie dann "Überprüfen+ Zuweisen" aus.
Screenshot, der zeigt, wie Sie einen Dienstprinzipal als geheimen Benutzer für einen Azure Key Vault. Fügen Sie Ihre geheimen Schlüssel hinzu, und wählen Sie dann "Speichern" aus.
Schritt 2: Konfigurieren des eingehenden Zugriffs von 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. Der geografische Standort Ihrer Azure DevOps Organisation bestimmt diese Bereiche.
Melden Sie sich bei Ihrer Azure DevOps-Organisation an.
Wählen Sie Organisationseinstellungen aus.
Wechseln Sie zur Übersicht , um den geografischen Standort zu finden.
Ermitteln Sie Ihre geografischen IPv4-Bereiche.
Wichtig
Stellen Sie sicher, dass für eingehende Verbindungen in die Vereinigten Staaten die IP-Bereiche für alle US-Regionen hinzugefügt werden.
Konfigurieren Sie Ihren Schlüsseltresor, um Zugriff über statische IP-Bereiche zu ermöglichen.
Schritt 3: Abfragen eines privaten Key Vaults mit einer Variablengruppe
In diesem Beispiel verwenden Sie die Variablengruppe, die zuvor eingerichtet und mit einem Dienstprinzipal autorisiert wurde, um Ihr Geheimnis aus Ihrem privaten Azure Key Vault mithilfe der verknüpften Variablengruppe abzufragen und zu kopieren. Azure Pipelines verwendet die gepostete öffentliche IP-Adresse, wenn der Azure-Schlüsseltresor aus einer Variablengruppe abgefragt wird. Stellen Sie daher sicher, dass Sie den eingehenden Zugriff konfiguriert haben, damit diese Aktion 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 fragen Sie die IP des Microsoft gehosteten Agents am Anfang Ihrer Pipeline ab. Anschließend fügen Sie sie der Erlaubnisliste des Key Vault hinzu. Fahren Sie mit den verbleibenden Aufgaben fort und entfernen Sie anschließend die IP aus der Freigabeliste der Firewall des Key Vault.
Hinweis
Dieser Ansatz dient nur zu Demonstrationszwecken. Wir empfehlen diesen Ansatz für Azure Pipelines nicht.
- 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, den Sie für den Zugriff auf Ihren Schlüsseltresor aus Ihrer Pipeline verwenden, die Rolle Key Vault-Mitwirkender innerhalb der Zugriffskontrolle (IAM) Ihres Key Vault besitzt.
Zugreifen auf einen privaten Schlüsseltresor über einen selbstgehosteten Agent
Um von einem Azure Pipelines-Agent auf einen privaten Schlüsseltresor zuzugreifen, müssen Sie entweder einen selbst gehosteten Agenten (Windows, Linux oder Mac) oder Virtual Machine Scale Sets Agents verwenden. Diese Anforderung besteht, weil von Microsoft gehostete Agenten, wie andere generische Computerdienste, nicht in der Liste der vertrauenswürdiger Dienste des Key Vault enthalten sind.
Um eine Verbindung zu Ihrem privaten Key Vault herzustellen, müssen Sie einen privaten Endpunkt für Ihren Schlüsselspeicher konfigurieren, der eine Sichtverbindung ermöglicht Dieser Endpunkt muss routingfähig sein und sein privater Domänenname muss vom selbst gehosteten Pipeline-Agenten aufgelöst werden können.
Schritt 1: Konfigurieren des eingehenden Zugriffs von einem selbst gehosteten Agent
Befolgen Sie die Anweisungen zum Erstellen eines virtuellen Netzwerks.
Verwenden Sie im Azure-Portal die Suchleiste oben auf der Seite, um Ihren Azure Schlüsseltresor zu finden.
Wählen Sie Ihren Schlüsseltresor aus und gehen Sie dann zu Einstellungen>Netzwerkeinstellungen.
Wählen Sie Private Endpunktverbindungen und anschließend Erstellen aus, um einen neuen privaten Endpunkt zu erstellen.
Wählen Sie die Ressourcengruppe aus, in der das virtuelle Netzwerk gehostet wird, das Sie zuvor erstellt haben. Geben Sie einen Namen und einen Netzwerkschnittstellennamen für Ihre Instanz ein, und stellen Sie sicher, dass Sie dieselbe Region wie das zuvor erstellte virtuelle Netzwerk auswählen. Wählen Sie Weiteraus.
Wählen Sie für Connection-MethodeVerbinden mit einer Azure Ressource in meinem Verzeichnis aus. Wählen Sie für Resource-TypMicrosoft.KeyVault/vaults aus dem Dropdownmenü aus. Wählen Sie Ihre Ressource aus dem Dropdownmenü aus. Zielunterressource wird automatisch mit dem Wert Vault ausgefüllt. Wählen Sie Weiteraus.
Screenshot, der zeigt, wie Sie die Registerkarte "Ressource" konfigurieren, wenn Sie eine neue private Endpunktinstanz für Ihren Azure Key Vault. Wählen Sie auf der Registerkarte Virtual Network die virtual network und das Subnetz aus, das Sie zuvor erstellt haben, und lassen Sie die restlichen Felder als Standard. Wählen Sie Weiteraus.
Übernehmen Sie die Standardeinstellungen auf den Registerkarten DNS und Tags . Wählen Sie auf der Registerkarte Überprüfen + erstellen die Option Erstellen aus.
Nachdem Ihre Ressource bereitgestellt wurde, wechseln Sie zu Ihrem Schlüsseltresor und wählen Sie Einstellungen>Netzwerk>Private Endpunktverbindungen aus. Ihr privater Endpunkt sollte mit dem Verbindungsstatus als genehmigt aufgeführt werden. Wenn Sie eine Verknüpfung mit einer Azure Ressource in einem anderen Verzeichnis herstellen, müssen Sie warten, bis der Ressourcenbesitzer Ihre Verbindungsanforderung genehmigt.
Schritt 2: Zulassen Ihres virtuellen Netzwerks
Wechseln Sie zum Azure-Portal, und suchen Sie dann Ihren Azure-Schlüsseltresor.
Wählen Sie "Netzwerkeinstellungen">aus, und stellen Sie sicher, 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 Ihr Abonnement im Dropdownmenü aus, wählen Sie das virtuelle Netzwerk aus, das Sie zuvor erstellt haben, und wählen Sie dann Ihre Subnetze aus.
Wählen Sie Hinzufügen und scrollen Sie dann zum Ende der Seite und wählen Sie Übernehmen aus, um Ihre Änderungen zu speichern.
Schritt 3: Abfragen eines privaten Key Vault über einen selbstgehosteten Agent
Im folgenden Beispiel wird ein Agent verwendet, der auf der virtuellen Maschine des virtuellen Netzwerks eingerichtet ist, um den private Key Vault ü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 eingehenden Zugriff auf Ihren privaten Schlüsseltresor nicht gewähren möchten, können Sie die Aufgabe AzureKeyVault verwenden, um Ihren Schlüsseltresor abzufragen. Sie müssen sicherstellen, dass Sie das virtuelle Netzwerk, das Ihren Agenten hostet, in den Firewall-Einstellungen Ihres Key Vaults zulassen.
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
Wenn die folgenden Fehler auftreten, führen Sie die Schritte in diesem Abschnitt aus, um das Problem zu beheben.
Public network access is disabled and request is not from a trusted service nor via an approved private link.Dieser Fehler gibt an, dass der öffentliche Zugriff deaktiviert wurde, und eine private Endpunktverbindung und Firewall-Ausnahmen wurden nicht eingerichtet. Führen Sie die Schritte unter Configure eingehenden Zugriff von einem selbst gehosteten Agent und Configure eingehenden Zugriff von Azure DevOps aus, 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 weist darauf hin, dass der öffentliche Zugriff auf den Key Vault deaktiviert wurde und die Option Vertrauenswürdigen Microsoft-Diensten die Umgehung dieser Firewall erlauben leer gelassen wurde, die Client-IP-Adresse jedoch nicht zur Key Vault-Firewall hinzugefügt wurde. Wechseln Sie zum Schlüsseltresor im Azure-Portal, wählen Sie Settings>Networking aus, und fügen Sie dann Ihre Client-IP zur Zulassungsliste der Firewall hinzu.
Error: Client address is not authorized and caller is not a trusted service.Stellen Sie sicher, dass Sie die IPv4-Adressbereiche Ihrer Region zur Zulassungsliste Ihres Key Vault hinzufügen. Weitere Informationen finden Sie unter Konfigurieren Sie den eingehenden Zugriff von 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.