Få åtkomst till ett privat nyckelvalv från din pipeline
Azure Key Vault erbjuder en säker lösning för att hantera autentiseringsuppgifter som nycklar, hemligheter och certifikat med sömlös säkerhet. Med Hjälp av Azure Pipelines kan du effektivisera processen för att komma åt och använda nyckelvalv, vilket gör det enkelt att lagra och hämta autentiseringsuppgifter.
I vissa scenarier prioriterar organisationer säkerhet genom att begränsa åtkomsten till nyckelvalv exklusivt till utsedda virtuella Azure-nätverk för att säkerställa den högsta säkerhetsnivån för kritiska program.
I den här självstudien får du lära dig hur man:
- Skapa ett huvudnamn för tjänsten
- Skapa en tjänstanslutning
- Konfigurera dina inkommande åtkomstpunkter
- Fråga ett privat Azure-nyckelvalv från din pipeline
Förutsättningar
En Azure DevOps-organisation och ett projekt. Skapa en organisation eller ett projekt om du inte redan har gjort det.
En Azure-prenumeration Skapa ett kostnadsfritt Azure-konto om du inte redan har ett.
Ett Azure Key Vault. Skapa ett nytt Azure Key Vault om du inte redan har gjort det.
Få åtkomst till ett privat nyckelvalv
Med Azure Pipelines kan utvecklare länka ett Azure Key Vault till en variabelgrupp och mappa selektiva valvhemligheter till den. Du kan komma åt ett nyckelvalv som används som en variabelgrupp:
Från Azure DevOps under konfigurationstiden för variabelgrupper.
Från en lokalt installerad agent under körningen av pipelinejobbet.
Skapa ett huvudnamn för tjänsten
Börja med att skapa ett nytt huvudnamn för tjänsten, vilket gör att du kan komma åt Azure-resurser. Därefter måste du skapa en ny ARM-tjänstanslutning i Azure DevOps och sedan konfigurera en federerad autentiseringsuppgift för tjänstens huvudnamn i Azure innan du verifierar och sparar tjänstanslutningen i Azure DevOps.
Navigera till Azure-portalen.
Öppna Cloud Shell från menyraden och välj sedan Bash.
Kör följande kommando för att skapa ett nytt huvudnamn för tjänsten:
az ad sp create-for-rbac --name YOUR_SERVICE_PRINCIPAL_NAME
Se till att kopiera utdata eftersom vi använder det för att skapa tjänstanslutningen i nästa steg.
Skapa en tjänstanslutning
Logga in på din Azure DevOps-organisation och navigera sedan till projektet.
Välj Projektinställningar>Tjänstanslutningar>Ny tjänstanslutning.
Välj Azure Resource Manager och välj sedan Nästa.
För Identitetstyp väljer du Appregistrering (automatisk) i listrutan.
För autentiseringsuppgifter lämnar du det rekommenderade standardvärdet: Arbetsbelastningsidentitetsfederation.
För Omfångsnivå väljer du **Prenumeration och väljer sedan din prenumeration på den nedrullningsbara menyn.
Välj en resursgrupp om du endast vill begränsa åtkomsten till den angivna resursgruppen.
Ange ett namn för tjänstanslutningen och markera sedan kryssrutan Bevilja åtkomstbehörighet till alla pipelines så att alla pipelines kan använda den här tjänstanslutningen.
Välj Spara när du är klar.
Skapa en federerad autentiseringsuppgift
Gå till Azure Portal, ange tjänstens huvudnamns ClientID i sökfältet och välj sedan ditt program.
Under Hantera väljer du Certifikat och hemligheter>Federerade autentiseringsuppgifter.
Välj Lägg till autentiseringsuppgifter och välj sedan Annan utfärdare för federerade autentiseringsuppgifter.
För Utfärdare klistrar du in följande URL som ersätter platshållaren med organisationens GUID. Du hittar ditt organisations-ID genom att gå till Organisationsinställningar>Microsoft Entra> Ladda ned listan över Azure DevOps-organisationer som är anslutna till din katalog.
https://vstoken.dev.azure.com/<ORGANIZATION_ID>
För Ämnesidentifierare klistrar du in följande URL som ersätter platshållaren med ditt organisationsnamn, projektnamn och tjänstanslutningsnamn.
sc://ORGANIZATION_NAME/PROJECT_NAME/SERVICE_CONNECTION_NAME
Ange ett namn för dina federerade autentiseringsuppgifter och välj sedan Lägg till när du är klar.
Skapa en tjänstanslutning
Logga in på din Azure DevOps-organisation och navigera sedan till projektet.
Välj Projektinställningar>Tjänstanslutningar>Ny tjänstanslutning.
Välj Azure Resource Manager, >Nästa och välj sedan Tjänstens huvudnamn (manuell)>Nästa.
Välj Azure Cloud för miljö och prenumeration för omfångsnivån och ange sedan ditt prenumerations-ID och ditt prenumerationsnamn.
Ange information om tjänstens huvudnamn och välj sedan Verifiera.
När verifieringen har slutförts namnger du tjänstanslutningen, lägger till en beskrivning och markerar sedan kryssrutan Bevilja åtkomstbehörighet till alla pipelines . Välj Verifiera och spara när du är klar.
Dricks
Om du inte kan verifiera anslutningen till tjänstens huvudnamn ger du tjänstens huvudnamn Läsare åtkomst till din prenumeration.
Skapa en tjänstanslutning
Logga in på din Azure DevOps-samling och navigera sedan till projektet.
Välj Projektinställningar>Tjänstanslutningar>Ny tjänstanslutning.
Välj Azure Resource Manager, namnge tjänstanslutningen och välj sedan Azure Cloud for Environment and Subscription för omfångsnivån.
Ange ditt prenumerations-ID och ditt prenumerationsnamn.
Ange information om tjänstens huvudnamn och välj sedan Verifiera anslutning.
Markera kryssrutan Tillåt alla pipelines att använda den här anslutningen och välj sedan Ok när du är klar.
Dricks
Om du inte kan verifiera anslutningen till tjänstens huvudnamn ger du tjänstens huvudnamn Läsare åtkomst till din prenumeration.
Få åtkomst till ett privat nyckelvalv från Azure Devops
I det här avsnittet ska vi utforska två metoder för att komma åt ett privat nyckelvalv från Azure DevOps. Först använder vi variabelgrupper för att länka och mappa hemligheter från vårt nyckelvalv, följt av att konfigurera inkommande åtkomst genom att tillåta statiska IP-intervall. Vi upprättar inkommande åtkomst eftersom Azure Pipelines använder den publicerade offentliga IP-adressen för Azure DevOps när du kör frågor mot Azure Key Vault från en variabelgrupp. Genom att lägga till inkommande anslutningar till Azure Key Vault-brandväggen kan vi därför ansluta till vårt Azure Key Vault.
För vår andra metod demonstrerar vi att dynamiskt lägga till IP-adressen för den Microsoft-värdbaserade agenten i nyckelvalvets brandväggslista, köra frågor mot nyckelvalvet och sedan ta bort IP-adressen efter slutförandet. Den andra metoden är i demonstrationssyfte och är inte den rekommenderade metoden för Azure Pipelines.
1 – Mappa key vault-hemligheter med en variabelgrupp
Logga in på din Azure DevOps-organisation och navigera sedan till projektet.
Välj Pipelines-bibliotek> och välj sedan + Variabelgrupp.
Ge variabelgruppen ett namn och välj sedan växlingsknappen för att aktivera knappen Länka hemligheter från ett Azure Key Vault som variabel .
Välj den tjänstanslutning som du skapade tidigare, välj ditt nyckelvalv och välj sedan Auktorisera.
Under Variabler väljer du Lägg till för att lägga till din hemlighet och väljer sedan Spara när du är klar.
Kommentar
Kontrollera att tjänstanslutningen har behörigheterna Hämta och lista och att tjänstens huvudnamn har tilldelats rollen Key Vault Secrets User i ditt privata nyckelvalv.
1.1 Konfigurera behörigheter för tjänstanslutning
Gå till ditt Azure-nyckelvalv och välj sedan Åtkomstprinciper.
Välj Skapa och under Hemliga behörigheter lägger du till behörigheterna Hämta och Lista och väljer sedan Nästa.
Lägg till tjänstanslutningen i sökfältet, välj den och välj sedan Nästa.
Välj Nästa en gång till, granska inställningarna och välj sedan Granska + skapa när du är klar.
1.2 Konfigurera behörigheter för tjänstens huvudnamn
Gå till ditt Azure-nyckelvalv och välj sedan Åtkomstkontroll (IAM)..
Välj Lägg till>rolltilldelning> och välj sedan fliken Roll.
Välj rollen Key Vault Secrets User (Nyckelvalvshemligheter) och välj sedan Nästa.
Välj Välj medlemmar> lägg till tjänstens huvudnamn >Välj.
Välj Granska + tilldela när du är klar.
Logga in på din Azure DevOps-organisation och navigera sedan till projektet.
Välj Pipelines-bibliotek> och välj sedan + Variabelgrupp.
Ge variabelgruppen ett namn och välj sedan växlingsknappen för att aktivera knappen Länka hemligheter från ett Azure Key Vault som variabel .
Välj din Azure-tjänstanslutning som du skapade tidigare från den nedrullningsbara menyn och välj sedan ditt nyckelvalv.
Om du stöter på felmeddelandet: Den angivna Azure-tjänstanslutningen måste ha behörigheten "Hämta, lista" för hemlig hantering i det valda nyckelvalvet. Som du ser ovan. Gå till ditt nyckelvalv i Azure Portal, välj Åtkomstkontroll (IAM)>Lägg till nyckelvalvshemlighetsanvändare>för rolltilldelning>Nästa, lägg sedan till tjänstens huvudnamn och välj sedan Granska + tilldela när du är klar.
Lägg till dina hemligheter och välj sedan Spara när du är klar.
2 – Konfigurera inkommande åtkomst från Azure DevOps
Om du vill aktivera åtkomst till ditt nyckelvalv från Azure DevOps måste du bevilja åtkomst från specifika statiska IP-intervall. Dessa intervall bestäms av den geografiska platsen för din Azure DevOps-organisation.
Logga in på din Azure DevOps-organisation.
Välj Organisationsinställningar.
Gå till Översikt, där du hittar den geografiska platsen längst ned på sidan.
Konfigurera ditt nyckelvalv för att tillåta åtkomst från statiska IP-intervall.
3 – Fråga ett privat nyckelvalv med en variabelgrupp
I det här exemplet använder vi variabelgruppen, konfigurerade tidigare och auktoriserade med tjänstens huvudnamn, för att fråga och kopiera vår hemlighet från vårt privata Azure Key Vault genom att bara använda den länkade variabelgruppen. Azure Pipelines använder den publicerade offentliga IP-adressen när du frågar Azure Key Vault från en variabelgrupp, så se till att du har konfigurerat inkommande åtkomst för att detta ska fungera korrekt:
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'
Alternativ metod – Dynamiskt tillåta IP-adress för Microsoft-värdbaserad agent
I den här andra metoden börjar vi med att fråga IP-adressen för den Microsoft-värdbaserade agenten i början av pipelinen. Sedan lägger vi till den i listan över tillåtna nyckelvalv, fortsätter med de återstående uppgifterna och tar slutligen bort IP-adressen från nyckelvalvets lista över tillåtna brandväggar.
Kommentar
Den här metoden är endast i demonstrationssyfte och är inte den rekommenderade metoden för 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()
Viktigt!
Se till att tjänstens huvudnamn som du använder för att komma åt ditt nyckelvalv från pipelinen innehåller rollen Key Vault-deltagare i nyckelvalvets åtkomstkontroll (IAM).
Få åtkomst till ett privat nyckelvalv från en lokalt installerad agent
För att kunna komma åt ett privat nyckelvalv från en Azure Pipelines-agent måste du använda antingen en lokalt installerad agent (Windows, Linux, Mac) eller skalningsuppsättningsagenter. Det beror på att Microsoft Hosted-agenter, liksom andra allmänna beräkningstjänster, inte ingår i nyckelvalvets lista över betrodda tjänster.
Om du vill upprätta en anslutning till ditt privata nyckelvalv måste du tillhandahålla en anslutningslinje genom att konfigurera en privat slutpunkt för ditt nyckelvalv. Den här slutpunkten måste vara dirigerbar och ha ett privat DNS-namn som kan matchas från pipelineagenten med egen värd.
1 – Konfigurera inkommande åtkomst från en lokalt installerad agent
Följ den angivna instruktionen för att skapa ett virtuellt nätverk.
I Azure Portal använder du sökfältet överst på sidan för att hitta ditt Azure Key Vault.
När du har hittat nyckelvalvet i sökresultaten väljer du det och navigerar sedan till Inställningar>Nätverk.
Välj Privata slutpunktsanslutningar och välj sedan Skapa för att skapa en ny privat slutpunkt.
Välj den resursgrupp som är värd för det virtuella nätverk som du skapade tidigare. Ange ett namn och ett nätverksgränssnittsnamn för din instans och se till att du väljer samma region som det virtuella nätverk som du skapade tidigare. Välj Nästa när du är klar.
Välj Anslut till en Azure-resurs i min katalog för metoden Anslutning och välj sedan Microsoft.KeyVault/vaults i listrutan för resurstypen. Välj resursen på den nedrullningsbara menyn. Underresursen Target fylls i automatiskt med värdet: valv. Välj Nästa när du är klar.
Under fliken Virtuellt nätverk väljer du det virtuella nätverk och undernät som du skapade tidigare och lämnar resten av fälten som standard. Välj Nästa när du är klar.
Fortsätt genom flikarna DNS och Taggar och acceptera standardinställningarna. Under fliken Granska + skapa väljer du Skapa när du är klar.
När resursen har distribuerats går du till inställningar för nyckelvalvet >>Nätverksanslutningar> För privata slutpunkter bör din privata slutpunkt visas med ett godkänt anslutningstillstånd. Om du länkar till en Azure-resurs i en annan katalog måste du vänta tills resursägaren godkänner anslutningsbegäran.
2 – Tillåt ditt virtuella nätverk
Gå till Azure Portal och leta sedan upp ditt Azure Key Vault.
Välj Inställningar>Nätverk och se till att du är under fliken Brandväggar och virtuella nätverk.
Välj Lägg till ett virtuellt nätverk>Lägg till befintliga virtuella nätverk.
Välj din prenumeration på den nedrullningsbara menyn och välj sedan det virtuella nätverk som du skapade tidigare och välj sedan dina undernät.
Välj Lägg till när du är klar och rulla sedan längst ned på sidan och välj Använd för att spara ändringarna.
3 – Fråga ett privat nyckelvalv från en lokalt installerad agent
I följande exempel används en agent som konfigurerats på det virtuella nätverkets virtuella dator för att köra frågor mot det privata nyckelvalvet via variabelgruppen:
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'
Om du föredrar att inte ge Azure DevOps inkommande åtkomst till ditt privata nyckelvalv kan du använda AzureKeyVault-uppgiften för att köra frågor mot ditt nyckelvalv. Du måste dock se till att du tillåter det virtuella nätverket som är värd för din agent i nyckelvalvets brandväggsinställningar.
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'
Felsöka
Om du får följande fel följer du stegen i det här avsnittet för att felsöka och lösa problemet:
Public network access is disabled and request is not from a trusted service nor via an approved private link.
Detta indikerar att offentlig åtkomst har inaktiverats och att varken en privat slutpunktsanslutning eller brandväggsfel har konfigurerats. Följ stegen under [#configure-inbound-access-from-a-self-hosted-agent] och Konfigurera inkommande åtkomst från Azure DevOps för att konfigurera åtkomst till ditt privata nyckelvalv.
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>
Det här felmeddelandet anger att nyckelvalvets offentliga åtkomst har inaktiverats och alternativet Tillåt betrodda Microsoft-tjänster att kringgå den här brandväggen är avmarkerat, men klientens IP-adress har inte lagts till i nyckelvalvsbrandväggen. Gå till ditt nyckelvalv i Azure Portal, sedan Inställningar>Nätverk och lägg till klient-IP-adressen i brandväggens tillåtna lista.
Error: Client address is not authorized and caller is not a trusted service.
Se till att du lägger till geografins IPV4-intervall i listan över tillåtna nyckelvalv. Mer information finns i Konfigurera inkommande åtkomst från Azure DevOps . Du kan också hoppa till Dynamiskt tillåta Microsoft-värdbaserad agent-IP för att lära dig hur du lägger till din klient-IP i nyckelvalvets brandvägg under körningen.