在 GitHub Actions 中使用 Azure Key Vault 对 Azure Spring Apps 进行身份验证
注意
基本、标准和企业计划将从 2025 年 3 月中旬开始弃用,停用期为 3 年。 建议转换到 Azure 容器应用。 有关详细信息,请参阅 Azure Spring Apps 停用公告。
标准消耗和专用计划将于 2024 年 9 月 30 日开始弃用,并在六个月后完全关闭。 建议转换到 Azure 容器应用。
本文介绍如何通过 GitHub Actions 将 Key Vault 与 Azure Spring Apps 的 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.partner.microsoftonline.cn",
"resourceManagerEndpointUrl": "https://management.chinacloudapi.cn/",
"sqlManagementEndpointUrl": "https://management.core.chinacloudapi.cn:8443/",
"galleryEndpointUrl": "https://gallery.azure.com/",
"managementEndpointUrl": "https://management.core.chinacloudapi.cn/"
}
然后,按设置 GitHub 存储库并进行 Azure 身份验证中所述,将结果保存到 GitHub 机密。
添加凭据的访问策略
在上文中创建的凭据只能获取密钥保管库的一般信息,不能获取其存储的内容。 若要获取密钥保管库中存储的机密,需设置凭据的访问策略。
转到 Azure 门户中的“密钥保管库”仪表板,选择“访问控制”菜单,然后打开“角色分配”选项卡。为“类型”选择“应用”,并为“范围”选择 This resource
。 应看到在上一步中创建的凭据:
复制凭据名称,例如 azure-cli-2020-01-19-04-39-02
。 打开“访问策略”菜单,然后选择“添加访问策略”链接 。 为“模板”选择 Secret Management
,然后选择“主体” 。 将凭据名称粘贴到“主体”/“选择”输入框 :
选择“添加访问策略”对话框中的“添加”按钮,然后选择“保存” 。
生成全作用域 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.partner.microsoftonline.cn",
"resourceManagerEndpointUrl": "https://management.chinacloudapi.cn/",
"sqlManagementEndpointUrl": "https://management.core.chinacloudapi.cn:8443/",
"galleryEndpointUrl": "https://gallery.azure.com/",
"managementEndpointUrl": "https://management.core.chinacloudapi.cn/"
}
复制整个 JSON 字符串。 返回到“密钥保管库”仪表板。 打开“机密”菜单,然后选择“生成/导入”按钮 。 输入机密名称,如 AZURE-CREDENTIALS-FOR-SPRING
。 将 JSON 凭据字符串粘贴到“值”输入框。 你可能会注意到,值输入框是单行文本字段,而不是多行文本区域。 可以在其中粘贴完整的 JSON 字符串。
合并 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