使用 GitHub Actions 連線到 Azure
瞭解如何使用 Azure 登入 搭配 Azure PowerShell 或 Azure CLI 來與您的 Azure 資源互動。
若要在 GitHub Actions 工作流程中使用 Azure PowerShell 或 Azure CLI,您必須先使用 Azure 登入 動作登入。
Azure 登入動作支援兩種不同的方式向 Azure 進行驗證:
根據預設,登入動作會使用 Azure CLI 登入,並設定 Azure CLI 的 GitHub Actions 執行器環境。 您可以使用 Azure PowerShell 搭配 enable-AzPSSession
Azure 登入動作的 屬性。 這會使用 Azure PowerShell 模組來設定 GitHub Actions 執行器環境。
您可以使用 Azure 登入來連線到公用或主權雲端,包括 Azure Government 和 Azure Stack Hub。
搭配 OpenID 連線 使用 Azure 登入動作
若要使用 OpenID 設定 Azure 登入 連線 並在 GitHub Actions 工作流程中使用,您需要:
- Microsoft Entra 應用程式,具有已將適當角色指派給您訂用帳戶的服務主體。
- 使用同盟認證設定的 Microsoft Entra 應用程式,以信任 GitHub Actions 發行給 GitHub 存放庫的令牌。 您可以在 Azure 入口網站 或使用 Microsoft Graph REST API 進行此設定。
- GitHub Actions 工作流程,要求 GitHub 向工作流程發出令牌,並使用 Azure 登入動作。
建立 Microsoft Entra 應用程式和服務主體
您必須建立 Microsoft Entra 應用程式和服務主體,然後將訂用帳戶上的角色指派給您的應用程式,讓您的工作流程能夠存取您的訂用帳戶。
如果您沒有現有的應用程式,請註冊 可存取資源的新 Microsoft Entra 應用程式和服務主體。 在此程式中,請務必:
- 使用 Microsoft Entra 識別子註冊您的應用程式,並建立服務主體
- 將角色指派給應用程式
在 Azure 入口網站 中開啟 應用程式註冊,並尋找您的應用程式。 複製應用程式 (用戶端) 識別碼和目錄 (租使用者) 識別碼的值,以在 GitHub Actions 工作流程中使用。
在 Azure 入口網站 中開啟訂用帳戶,並尋找您的訂用帳戶。 複製訂用帳戶 標識碼。
新增同盟認證
您可以在 Azure 入口網站 或 Microsoft Graph REST API 中新增同盟認證。
- 移至 Azure 入口網站 中的 應用程式註冊,然後開啟您想要設定的應用程式。
- 在應用程式中,移至 [憑證和秘密]。
- 在 [ 同盟認證] 索引卷標中,選取 [ 新增認證]。
- 選取認證案例 GitHub Actions 部署 Azure 資源。 輸入認證詳細數據以產生您的認證。
欄位 | 描述 | 範例 |
---|---|---|
Organization | 您的 GitHub 組織名稱或 GitHub 用戶名稱。 | contoso |
存放庫 | 您的 GitHub 存放庫名稱。 | contoso-app |
實體類型 | 用來設定 GitHub 工作流程 OIDC 要求範圍的篩選條件。 此欄位用來產生 subject 宣告。 |
Environment 、 、 Branch 、 Pull request Tag |
GitHub 名稱 | 環境、分支或標記的名稱。 | main |
名稱 | 同盟認證的標識碼。 | contoso-deploy |
如需更詳細的概觀,請參閱 設定應用程式以信任 GitHub 存放庫。
建立 GitHub 祕密
您必須將應用程式的 用戶端識別碼、 租使用者標識碼 和 訂用帳戶標識碼 提供給登入動作。 這些值可以直接在工作流程中提供,也可以儲存在 GitHub 的秘密中,並在您的工作流程中參考。 將值儲存為 GitHub 秘密是較安全的選擇。
開啟您的 GitHub 存放庫,並移至 設定。
選取 [安全性] > [祕密和變數] > [動作]。
建立
AZURE_CLIENT_ID
、AZURE_TENANT_ID
和AZURE_SUBSCRIPTION_ID
的秘密。 針對 GitHub 秘密,請使用 Azure Active Directory 應用程式中的這些值:GitHub 祕密 Azure Active Directory 應用程式 AZURE_CLIENT_ID 應用程式 (用戶端) 識別碼 AZURE_TENANT_ID 目錄 (租用戶) 識別碼 AZURE_SUBSCRIPTION_ID 訂用帳戶識別碼 選取 [新增秘密] 以儲存每個秘密。
使用 OpenID 連線 驗證設定 Azure 登入
您的 GitHub Actions 工作流程會使用 OpenID 連線 向 Azure 進行驗證。 若要深入瞭解此互動,請參閱 GitHub Actions 檔。
在此範例中,您將使用 OpenID 連線 Azure CLI 使用 Azure 登入動作向 Azure 進行驗證。 此範例會針對 client-id
、 tenant-id
和 subscription-id
值使用 GitHub 秘密。 您也可以直接在登入動作中傳遞這些值。
Azure 登入動作包含預設為 api://AzureADTokenExchange
的選擇性audience
輸入參數。 您可以針對自訂物件值更新此參數。
此工作流程會向 OpenID 連線 進行驗證,並使用 Azure CLI 來取得連線的訂用帳戶和清單資源群組的詳細數據。
name: Run Azure Login with OpenID Connect
on: [push]
permissions:
id-token: write
contents: read
jobs:
build-and-deploy:
runs-on: ubuntu-latest
steps:
- name: 'Az CLI login'
uses: azure/login@v1
with:
client-id: ${{ secrets.AZURE_CLIENT_ID }}
tenant-id: ${{ secrets.AZURE_TENANT_ID }}
subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
- name: 'Run Azure CLI commands'
run: |
az account show
az group list
pwd
使用 OpenID 驗證成功的 Azure 登入
Az CLI login
開啟動作,並確認它已成功執行。 您應該會看到訊息 Login successful
。 如果您的登入失敗,您會看到訊息 Az CLI Login failed.
。
使用 Azure 登入動作搭配服務主體秘密
若要搭配服務主體使用 Azure 登入 ,您必須先將 Azure 服務主體新增為 GitHub 存放庫的秘密。
建立服務主體
在此範例中,您將建立名為 AZURE_CREDENTIALS
的秘密,以用來向 Azure 進行驗證。
在本機 Azure 入口網站 或 Azure CLI 中開啟 Azure Cloud Shell。
注意
如果您使用 Azure Stack Hub,您必須將 SQL 管理端點設定為
not supported
。az cloud update -n {environmentName} --endpoint-sql-management https://notsupported
在應用程式的 Azure 入口網站 中建立新的服務主體。 服務主體必須指派適當的角色。
az ad sp create-for-rbac --name "myApp" --role contributor \ --scopes /subscriptions/{subscription-id}/resourceGroups/{resource-group} \ --json-auth
參數
--json-auth
會輸出登入動作所接受的結果字典,可在 Azure CLI 版本 >= 2.51.0 中存取。 此--sdk-auth
版本之前的版本會搭配取代警告使用。複製服務主體的 JSON 物件。
{ "clientId": "<GUID>", "clientSecret": "<GUID>", "subscriptionId": "<GUID>", "tenantId": "<GUID>", (...) }
將服務主體新增為 GitHub 秘密
在 GitHub (英文) 中,前往您的存放庫。
移至導覽功能表中的 設定。
選取 [安全性] > [祕密和變數] > [動作]。
選取 [新增存放庫祕密]。
將得自 Azure CLI 命令的整個 JSON 輸出貼到祕密的 [值] 欄位中。 將祕密命名為
AZURE_CREDENTIALS
。選取 [新增祕密]。
使用 Azure 登入動作
使用服務主體秘密搭配 Azure 登入動作 向 Azure 進行驗證。
在此工作流程中,您會使用 Azure 登入動作與儲存在 中的 secrets.AZURE_CREDENTIALS
服務主體詳細數據進行驗證。 然後,您會執行 Azure CLI 動作。 如需在工作流程檔案中參考 GitHub 秘密的詳細資訊,請參閱 在 GitHub Docs 中使用工作流程 中的加密密碼。
擁有運作中的 Azure 登入步驟之後,您可以使用 Azure PowerShell 或 Azure CLI 動作。 您也可以使用其他 Azure 動作,例如 Azure webapp 部署 和 Azure 函式。
on: [push]
name: AzureLoginSample
jobs:
build-and-deploy:
runs-on: ubuntu-latest
steps:
- name: Log in with Azure
uses: azure/login@v1
with:
creds: '${{ secrets.AZURE_CREDENTIALS }}'
使用 Azure PowerShell 動作
在此範例中,您會使用 Azure 登入動作登入,然後使用 Azure PowerShell 動作擷取資源群組。
on: [push]
name: AzureLoginSample
jobs:
build-and-deploy:
runs-on: ubuntu-latest
steps:
- name: Log in with Azure
uses: azure/login@v1
with:
creds: '${{ secrets.AZURE_CREDENTIALS }}'
enable-AzPSSession: true
- name: Azure PowerShell Action
uses: Azure/powershell@v1
with:
inlineScript: Get-AzResourceGroup -Name "< YOUR RESOURCE GROUP >"
azPSVersion: "latest"
使用 Azure CLI 動作
在此範例中,您會使用 Azure 登入動作登入,然後使用 Azure CLI 動作擷取資源群組。
on: [push]
name: AzureLoginSample
jobs:
build-and-deploy:
runs-on: ubuntu-latest
steps:
- name: Log in with Azure
uses: azure/login@v1
with:
creds: ${{ secrets.AZURE_CREDENTIALS }}
- name: Azure CLI script
uses: azure/CLI@v1
with:
azcliversion: 2.0.72
inlineScript: |
az account show
az storage -h
連線 至 Azure Government 和 Azure Stack Hub 雲端
若要登入其中一個 Azure Government 雲端,請使用支援的雲端名稱 AzureUSGovernment
或 AzureChinaCloud
設定選擇性參數環境。 如果未指定此參數,則會採用預設值 AzureCloud
並連線到 Azure 公用雲端。
- name: Login to Azure US Gov Cloud with CLI
uses: azure/login@v1
with:
creds: ${{ secrets.AZURE_US_GOV_CREDENTIALS }}
environment: 'AzureUSGovernment'
enable-AzPSSession: false
- name: Login to Azure US Gov Cloud with Az Powershell
uses: azure/login@v1
with:
creds: ${{ secrets.AZURE_US_GOV_CREDENTIALS }}
environment: 'AzureUSGovernment'
enable-AzPSSession: true
與其他 Azure 服務 連線
下列文章提供從 Azure 和其他服務連線到 GitHub 的詳細數據。