将 Azure 密钥保管库 与 Azure Pipelines 集成
Azure Key Vault 可安全存储和管理敏感数据,例如密钥、密码和证书。 Azure Key Vault 支持硬件安全模块以及各种加密算法和密钥长度。 通过使用 Azure 密钥保管库,可最大程度地降低通过源代码泄漏敏感数据的可能性,而这是开发人员的一个常见错误。 访问 Azure Key Vault 需要正确的身份验证和授权,从而支持对其内容进行细化的权限管理。
在此实验室中,你将了解如何使用以下步骤将 Azure 密钥保管库与 Azure Pipelines 集成:
- 创建 Azure Key Vault 以将 ACR 密码存储为机密。
- 配置权限以允许服务主体读取机密。
- 配置管道,以从 Azure 密钥保管库检索密码并将其传递给后续任务。
这些练习大约需要 30 分钟才能完成。
准备工作
需要 Azure 订阅、Azure DevOps 组织和 eShopOnWeb 应用程序才能遵循实验室。
- 按照步骤 验证实验室环境。
在此实验中,将执行以下操作:
- 在 Azure 订阅上部署资源。
- 获取对 Azure 密钥保管库机密的读取访问权限。
说明
练习 1:设置 CI 管道以生成 eShopOnWeb 容器
在本练习中,你将为以下项设置 CI YAML 管道:
- 创建 Azure 容器注册表以保存容器映像
- 使用 Docker Compose 生成和推送 eshoppublicapi 和 eshopwebmvc 容器映像。 将仅部署 eshopwebmvc 容器。
任务 1:设置和运行 CI 管道
在此任务中,你将导入现有的 CI YAML 管道定义、修改并运行它。 该管道将创建 Azure 容器注册表 (ACR) 并生成/发布 eShopOnWeb 容器映像。
-
导航到 Azure DevOps 门户
https://aex.dev.azure.com
并打开你的组织。 -
导航到 Azure DevOps eShopOnWeb 项目。 转到“管道 > 管道”,然后选择“新建管道”。
-
在“你的代码在哪里?”页面上,选择“Azure Repos Git (YAML)”,然后选择“eShopOnWeb”存储库。
-
在“配置管道”页面上,选择“现有 Azure Pipelines YAML 文件”。 提供以下路径 /.ado/eshoponweb-ci-dockercompose.yml,然后选择“继续”。
-
在 YAML 管道定义中,在变量部分执行以下操作:
- 将 AZ400-EWebShop-NAME 替换为 rg-eshoponweb-secure
- 将位置变量的值设置为在本课程的上一个实验室中所使用的 Azure 区域的名称(例如 centralus)
- 将 YOUR-SUBSCRIPTION-ID 替换为 Azure 订阅 ID
-
选择“保存并运行”,然后选择直接提交到主分支。
-
再次选择“保存并运行”。
备注:如果选择创建新分支,则需要创建一个拉取请求,以将更改合并到主分支。
-
打开管道。 如果看到消息“此管道需要访问资源的权限,然后才能继续运行‘为映像创建 ACR’”,请选择“查看”、“允许”,并再次选择“允许”。 管道将在几分钟后运行。
-
等待管道运行完成。 这可能需要几分钟的时间。 生成定义由以下任务构成:
- AzureResourceManagerTemplateDeployment 使用 bicep 创建 Azure 容器注册表。
- PowerShell 任务获取 bicep 输出(ACR 登录服务器)并创建管道变量。
- DockerCompose 任务会生成 eShopOnWeb 的容器映像并将其推送到 Azure 容器注册表。
-
管道将默认采用基于项目名称的名称。 将其重命名为 eshoponweb-ci-dockercompose,以便更好地识别管道。
-
管道运行完成后,使用 Web 浏览器导航到 Azure 门户,打开 rg-eshoponweb-docker 资源组,然后选择表示由管道部署的 Azure 容器注册表 (ACR) 的条目。
备注:要在注册表中查看存储库,需要向用户帐户授予提供此类访问权限的角色。 你将为此使用 AcrPull 角色。
-
在“容器注册表”页上,依次选择“访问控制 (IAM)”、“+ 添加”,然后从下拉菜单中选择“添加角色分配”。
-
在“添加角色分配”页的“角色”选项卡上,选择“AcrPull”,然后选择“下一步”。
-
在“成员”选项卡上,单击“+ 选择成员”,选择你的用户帐户,点击“选择”,然后选择“下一步”。
-
选择“审阅 + 分配”,并在分配成功完成后刷新浏览器页面。
-
返回“容器注册表”页,在左侧的垂直菜单栏中,在“服务”部分,选择“存储库”。
-
验证注册表是否包含映像 eshoppublicapi 和 eshopwebmvc。 你只会在部署阶段使用 eshopwebmvc。
-
在“设置”中,选择“访问密钥”,启用“管理员用户”复选框,并复制“用户名”和“注册表名称”值,该值将用于以下任务,因为你会将其作为机密添加到 Azure 密钥保管库。
-
在同一页上,记录“注册表名称”的值。 本实验室中稍后会用到它。
任务 2:创建 Azure 密钥保管库
在本任务中,你将使用 Azure 门户创建 Azure 密钥保管库。
对于本实验室场景,我们将使用一个 Azure 容器实例 (ACI),用于拉取并运行存储在 Azure 容器注册表 (ACR) 中的容器映像。 我们打算将 ACR 的密码作为机密存储到 Azure 密钥保管库中。
-
在 Azure 门户中的“搜索资源、服务和文档”文本框中,键入“密钥保管库”,然后按 Enter 键。
-
选择“密钥保管库”边栏选项卡,单击“创建密钥保管库”。
-
在“创建密钥保管库”边栏选项卡的“基本信息”选项卡中,指定以下设置,然后单击“下一步”:
设置 值 订阅 你在此实验室中使用的 Azure 订阅的名称 资源组 资源组名称 rg-eshoponweb-secure 密钥保管库名称 任何唯一的有效名称,如 ewebshop-kv 区域 你先前在本实验室中选择的同一 Azure 区域 定价层 标准 保留已删除保管库的天数 7 清除保护 禁用清除保护 -
单击“下一步: 访问配置”。
-
在“权限模型”部分,选择“保管库访问策略”。
-
在“访问策略”部分中,选择“+ 创建”来设置新策略。
注意:你需要保护对密钥保管库的访问,只允许得到授权的应用程序和用户进行访问。 若要从保管库访问数据,你需要提供对先前创建的服务主体的读取(获取/列出)权限,以便在管道中进行身份验证。
- 在“权限”边栏选项卡上,选中“机密权限”下的“获取”和“列出”权限。 选择下一步。
- 在“主体”边栏选项卡上,搜索并选择用户,选择“下一步”,然后再次选择“下一步”。
- 在“查看 + 创建”边栏选项卡上,选择“创建”。
-
返回到“创建密钥保管库”边栏选项卡,选择 “查看 + 创建”>“创建”
注意:等待预配 Azure 密钥保管库。 此过程应该会在 1 分钟内完成。
-
在“部署已完成”边栏选项卡上,选择“转到资源”。
-
在“Azure 密钥保管库”边栏选项卡左侧的垂直菜单中,选择“对象”部分中的“机密”。
-
在“机密”边栏选项卡上,选择“生成/导入”。
-
在“创建机密”边栏选项卡上,指定以下设置并选择“创建”(将其他设置保留为默认值):
设置 值 上传选项 手动 名称 acr-secret 值 在上一任务中复制的 ACR 访问密码 -
等待机密创建完毕。
任务 3:创建连接到 Azure 密钥保管库的变量组
在此任务中,你将在 Azure DevOps 中创建一个变量组,该变量组将使用服务连接(服务主体)从密钥保管库中检索 ACR 密码机密
-
导航到 Azure DevOps 门户
https://aex.dev.azure.com
并打开你的组织。 -
导航到 Azure DevOps 项目 eShopOnWeb。
-
在 Azure DevOps 门户的垂直导航窗格中,选择“管道 > 库”。 选择“+ 变量组”。
-
在“新建变量组”边栏选项卡上,指定以下设置:
设置 值 变量组名称 eshopweb-vg 链接 Azure 密钥保管库的机密(作为变量) enable Azure 订阅 可用的 Azure 服务连接 > Azure 订阅 密钥保管库名称 在上一个任务中分配给 Azure 密钥保管库的名称 -
单击“授权”按钮。
-
在“变量”下,选择“+ 添加”,然后选择 acr-secret 机密。 选择“确定”。
-
选择“保存”。
任务 4:设置 CD 管道以在 Azure 容器实例 (ACI) 中部署容器
在此任务中,你将导入一个 CD 管道,对其进行自定义并运行,以部署之前在 Azure 容器实例中创建的容器映像。
-
在显示 eShopOnWeb 项目的 Azure DevOps 门户中,选择“管道 > 管道”,然后选择“新管道”。
-
在“你的代码在哪里?”页面上,选择“Azure Repos Git (YAML)”,然后选择“eShopOnWeb”存储库。
-
在“配置管道”页面上,选择“现有 Azure Pipelines YAML 文件”。 提供以下路径 /.ado/eshoponweb-cd-aci.yml,然后选择“继续”。
-
在 YAML 管道定义中,在变量部分执行以下操作:
- 将位置变量的值设置为此前在此实验室中使用的 Azure 区域的名称,例如 centralus。
- 将 YOUR-SUBSCRIPTION-ID 替换为 Azure 订阅 ID
- 将 az400eshop-NAME 替换为要部署的 Azure 容器实例的全局唯一名称,例如字符串 eshoponweb-lab-docker 后跟随机六位数字。
- 将 YOUR-ACR 和 ACR-USERNAME 替换为此前在本实验室中记录的 ACR 注册表名称。
- 将 AZ400-EWebShop-NAME 替换为此前在本实验室中创建的资源组名称 (rg-eshoponweb-secure)。
-
选择“保存并运行”,然后再次选择“保存并运行”。
-
打开管道,注意以下消息:“此管道需要访问 2 个资源的权限,然后才能继续运行 Docker Compose to ACI”。 选择“查看”,然后选择“允许”两次(每个资源一次)以允许管道运行。
-
等待管道运行完成。 这可能需要几分钟的时间。 生成定义包含一个单一任务 AzureResourceManagerTemplateDeployment,该任务使用 bicep 模板部署 Azure 容器实例 (ACI),并提供 ACR 登录参数以允许 ACI 下载以前创建的容器映像。
-
管道将采用基于项目名称的名称。 将其重命名为 eshoponweb-cd-aci,以便更轻松地识别其用途。
[!IMPORTANT] 请记住删除在 Azure 门户中创建的资源,以避免不必要的费用。
审阅
在本实验室中,你已使用以下步骤将 Azure Key Vault 与 Azure DevOps 管道集成:
- 提供从 Azure DevOps 对 Azure 密钥保管可的机密和 Azure 资源的访问权限。
- 运行从 Git 存储库导入的 2 个 YAML 管道。
- 配置了管道,以使用变量组从 Azure 密钥保管库检索密码并将其重复用于后续任务。