You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Quarkus应用部署Azure时如何安全传递数据库凭证与认证密钥?

基于Azure KeyVault的Quarkus应用安全凭证管理方案

以下是针对你的Quarkus应用、GitHub Actions部署Azure Web App场景的完整安全凭证配置方案,全程无需硬编码敏感信息:

1. 准备Azure KeyVault与敏感凭证

  • 创建Azure KeyVault(若未存在),将所有敏感数据以Secret形式存入:
    • 数据库相关:db-url、db-username、db-password(Secret名称可自定义,需与后续配置对应)
    • 认证相关:auth-client-id、auth-client-secret

2. 配置Azure Web App访问KeyVault权限

  • 为Web App启用系统分配托管身份:进入Web App → 身份 → 系统分配 → 状态设为"开启"并保存
  • 进入KeyVault → 访问策略 → 添加访问策略:
    • 权限选择"机密"下的"获取"权限
    • 主体选择你的Web App名称(即刚才启用的托管身份)
    • 保存策略

3. 简化Dockerfile配置

无需在Dockerfile中设置环境变量或硬编码启动参数,Quarkus原生支持从环境变量读取配置占位符。保留简洁版Dockerfile即可:

# Use a base image with JDK 17
FROM openjdk:17

# Set the working directory in the Docker container
WORKDIR /app

# Copy the Maven build output (fat jar) into the Docker image
COPY target/quarkus-app/ /app

# Expose the port your application runs on
EXPOSE 8080

# Command to execute the Quarkus application
CMD ["java", "-jar", "/app/quarkus-run.jar"]

4. 更新application.properties配置

添加认证相关的占位符,保持数据库配置不变,确保占位符名称与后续环境变量名一致:

# 数据库配置
quarkus.datasource.url=${DB_URL}
quarkus.datasource.username=${DB_USERNAME}
quarkus.datasource.password=${DB_PASSWORD}

# 认证配置(根据你的认证框架调整,示例为Quarkus OIDC)
quarkus.oidc.client-id=${AUTH_CLIENT_ID}
quarkus.oidc.credentials.secret=${AUTH_CLIENT_SECRET}

5. 配置Azure Web App映射KeyVault Secrets为环境变量

通过Azure CLI或Portal将KeyVault中的Secrets映射为Web App的环境变量:

Azure CLI命令示例

az webapp config appsettings set \
  --name <你的WebApp名称> \
  --resource-group <你的资源组名称> \
  --settings \
    DB_URL="@Microsoft.KeyVault(SecretName=db-url)" \
    DB_USERNAME="@Microsoft.KeyVault(SecretName=db-username)" \
    DB_PASSWORD="@Microsoft.KeyVault(SecretName=db-password)" \
    AUTH_CLIENT_ID="@Microsoft.KeyVault(SecretName=auth-client-id)" \
    AUTH_CLIENT_SECRET="@Microsoft.KeyVault(SecretName=auth-client-secret)"

Portal操作方式

进入Web App → 配置 → 应用程序设置 → 新建应用设置:

  • 名称填DB_URL,值填@Microsoft.KeyVault(SecretName=db-url)
  • 重复上述步骤添加其余环境变量

6. 调整GitHub Actions部署流程(deploy.yaml)

无需在部署脚本中声明业务敏感环境变量,只需保留Azure登录、镜像构建推送、Web App部署逻辑即可:

name: Deploy Quarkus App to Azure Web App

on:
  push:
    branches: [ main ]

jobs:
  build-and-deploy:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout code
        uses: actions/checkout@v4

      - name: Set up JDK 17
        uses: actions/setup-java@v4
        with:
          java-version: '17'
          distribution: 'temurin'

      - name: Build with Maven
        run: mvn clean package -DskipTests

      - name: Login to Azure
        uses: azure/login@v1
        with:
          creds: ${{ secrets.AZURE_CREDENTIALS }}

      - name: Login to Azure Container Registry
        uses: azure/docker-login@v1
        with:
          login-server: <你的ACR名称>.azurecr.io
          username: ${{ secrets.AZURE_ACR_USERNAME }}
          password: ${{ secrets.AZURE_ACR_PASSWORD }}

      - name: Build and push Docker image
        run: |
          docker build -t <你的ACR名称>.azurecr.io/quarkus-app:${{ github.sha }} .
          docker push <你的ACR名称>.azurecr.io/quarkus-app:${{ github.sha }}

      - name: Deploy to Azure Web App
        uses: azure/webapps-deploy@v2
        with:
          app-name: <你的WebApp名称>
          images: <你的ACR名称>.azurecr.io/quarkus-app:${{ github.sha }}

注:AZURE_CREDENTIALS、AZURE_ACR_USERNAME、AZURE_ACR_PASSWORD需提前存入GitHub仓库的Secrets中,用于Azure身份验证。

核心原理说明

  • Azure Web App会自动通过托管身份从KeyVault拉取Secrets,并将其注入为应用的环境变量
  • Quarkus会自动识别环境变量与application.properties中的占位符匹配关系,无需额外配置参数传递
  • 全程无敏感信息暴露在代码、Docker镜像或部署脚本中,完全符合安全最佳实践

内容的提问来源于stack exchange,提问作者grigor martirosyan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 17:14:53