分享方式:


在 GitHub Actions 中使用 Azure 金鑰保存庫 驗證 Azure Spring Apps

注意

基本標準和企業方案將從 2025 年 3 月中旬開始淘汰,並停用 3 年。 建議您轉換至 Azure Container Apps。 如需詳細資訊,請參閱 Azure Spring Apps 淘汰公告

標準 耗用量和專用 方案將從 2024 年 9 月 30 日起淘汰,並在六個月後完成關閉。 建議您轉換至 Azure Container Apps。 如需詳細資訊,請參閱 將 Azure Spring Apps 標準取用和專用方案遷移至 Azure Container Apps

本文適用於: ✔️ Java ✔️ C#

本文適用於: ✔️ 基本/標準 ✔️ 企業

本文說明如何使用 金鑰保存庫 搭配 Azure Spring Apps 與 GitHub Actions 的 CI/CD 工作流程。

金鑰儲存庫是儲存金鑰的安全位置。 企業用戶必須在其控制的範圍內儲存 CI/CD 環境的認證。 金鑰保存庫中要取得認證的金鑰應受限於資源範圍。 它只能存取金鑰保存庫範圍,而非整個 Azure 範圍。 就像一個鑰匙,只能打開一個堅強的盒子,而不是一個主鍵,可以打開大樓中的所有門。 這是使用另一個密鑰取得密鑰的方法,這在 CICD 工作流程中很有用。

產生認證

若要產生金鑰以存取金鑰保存庫,請在本機電腦上執行下列命令:

az ad sp create-for-rbac --role contributor --scopes /subscriptions/<SUBSCRIPTION_ID>/resourceGroups/<RESOURCE_GROUP>/providers/Microsoft.KeyVault/vaults/<KEY_VAULT> --json-auth

參數所 --scopes 指定的範圍會限制資源的密鑰存取權。 它只能存取強方塊。

結果為:

{
    "clientId": "<GUID>",
    "clientSecret": "<GUID>",
    "subscriptionId": "<GUID>",
    "tenantId": "<GUID>",
    "activeDirectoryEndpointUrl": "https://login.microsoftonline.com",
    "resourceManagerEndpointUrl": "https://management.azure.com/",
    "sqlManagementEndpointUrl": "https://management.core.windows.net:8443/",
    "galleryEndpointUrl": "https://gallery.azure.com/",
    "managementEndpointUrl": "https://management.core.windows.net/"
}

然後,將結果儲存至 GitHub 秘密,如設定 GitHub 存放庫並使用 Azure 進行驗證中所述

新增認證存取原則

您在上面建立的認證只能取得 金鑰保存庫 的一般資訊,而不是儲存的內容。 若要取得儲存在 金鑰保存庫 中的秘密,您需要設定認證的存取原則。

移至 Azure 入口網站 中的 金鑰保存庫 儀錶板,選取 [訪問控制] 功能表,然後開啟 [角色指派] 索引標籤。選取 [類型] 和 This resource [範圍的應用程式]。 您應該會看到您在上一個步驟中建立的認證:

顯示 [存取控制] 頁面的 Azure 入口網站 螢幕快照,其中已醒目提示 [角色指派] 索引標籤。

複製認證名稱,例如 azure-cli-2020-01-19-04-39-02。 開啟 [ 存取原則] 功能表,然後選取 [ 新增存取原則 ] 連結。 選取 Secret Management [ 範本],然後選取 [ 主體]。 在 [主體/選取輸入] 方塊中貼上認證名稱:

顯示 [新增存取原則] 頁面並開啟 [主體] 窗格之 Azure 入口網站 螢幕快照。

選取 [新增存取原則] 對話框中的 [新增] 按鈕,然後選取 [儲存]。

產生完整範圍的 Azure 認證

這是打開大樓里所有門的主要鑰匙。 此程式與上一個步驟類似,但在這裡我們將範圍變更為產生主要密鑰:

az ad sp create-for-rbac --role contributor --scopes /subscriptions/<SUBSCRIPTION_ID> --json-auth

同樣地,結果:

{
    "clientId": "<GUID>",
    "clientSecret": "<GUID>",
    "subscriptionId": "<GUID>",
    "tenantId": "<GUID>",
    "activeDirectoryEndpointUrl": "https://login.microsoftonline.com",
    "resourceManagerEndpointUrl": "https://management.azure.com/",
    "sqlManagementEndpointUrl": "https://management.core.windows.net:8443/",
    "galleryEndpointUrl": "https://gallery.azure.com/",
    "managementEndpointUrl": "https://management.core.windows.net/"
}

複製整個 JSON 字串。 返回 金鑰保存庫 儀錶板。 開啟 [ 秘密] 功能表,然後選取 [ 產生/匯 入] 按鈕。 輸入秘密名稱,例如 AZURE-CREDENTIALS-FOR-SPRING。 將 JSON 認證字串貼到 [ ] 輸入方塊。 您可能會注意到值輸入方塊是一行文字欄位,而不是多行文字區域。 您可以在該處貼上完整的 JSON 字串。

顯示 [建立秘密] 頁面之 Azure 入口網站 螢幕快照。

在 GitHub Actions 中結合認證

設定 CICD 管線執行時所使用的認證:

on: [push]

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
    - uses: azure/login@v1
      with:
        creds: ${{ secrets.AZURE_CREDENTIALS }}           # Strong box key you generated in the first step
    - uses: Azure/get-keyvault-secrets@v1.0
      with:
        keyvault: "<Your Key Vault Name>"
        secrets: "AZURE-CREDENTIALS-FOR-SPRING"           # Master key to open all doors in the building
      id: keyvaultaction
    - uses: azure/login@v1
      with:
        creds: ${{ steps.keyvaultaction.outputs.AZURE-CREDENTIALS-FOR-SPRING }}
    - name: Azure CLI script
      uses: azure/CLI@v1
      with:
        azcliversion: 2.0.75
        inlineScript: |
          az extension add --name spring             # Spring CLI commands from here
          az spring list

下一步