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

如何使用服务主体从AKS集群安全连接Azure PostgreSQL单服务器

使用服务主体从AKS集群安全连接Azure PostgreSQL单服务器步骤

1. 创建并记录Azure服务主体(SP)

  • 执行Azure CLI命令创建服务主体,跳过自动权限分配:
    az ad sp create-for-rbac --name aks-postgres-sp --skip-assignment
    
  • 保存命令输出中的appId、password、tenantId以及displayName字段,后续配置会用到。

2. 配置Azure PostgreSQL的AD认证

  • 设置PostgreSQL服务器的AD管理员为该服务主体:
    az postgres server ad-admin create \
      --resource-group <你的资源组名称> \
      --server-name <PostgreSQL服务器名称> \
      --display-name <SP的displayName> \
      --object-id <SP的appId>
    
  • 使用PostgreSQL管理员账号(本地或AD管理员)登录数据库,创建对应服务主体的数据库用户:
    CREATE ROLE "<SP的displayName>" WITH LOGIN PASSWORD '<SP的password>' IN ROLE azure_ad_user;
    
  • 为该用户分配目标数据库的必要权限(示例为读写权限):
    GRANT CONNECT ON DATABASE <目标数据库名称> TO "<SP的displayName>";
    GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA public TO "<SP的displayName>";
    

3. 在AKS集群中存储服务主体凭据

  • 通过Kubernetes Secret存储SP的认证信息,避免硬编码:
    kubectl create secret generic postgres-sp-secret \
      --from-literal=client-id=<SP的appId> \
      --from-literal=client-secret=<SP的password> \
      --from-literal=tenant-id=<SP的tenantId> \
      --from-literal=server-name=<PostgreSQL服务器名称> \
      --from-literal=db-name=<目标数据库名称>
    
  • 应用部署时可通过环境变量或卷挂载方式读取该Secret中的内容。

4. 在AKS应用中实现认证连接

  • 应用需先从Azure AD获取PostgreSQL的访问令牌,再用令牌作为密码建立连接:
    • 以Python为例,使用Azure Identity SDK获取令牌:
      from azure.identity import ClientSecretCredential
      import psycopg2
      
      # 从Kubernetes Secret读取配置
      tenant_id = "<SP的tenantId>"
      client_id = "<SP的appId>"
      client_secret = "<SP的password>"
      server_name = "<PostgreSQL服务器名称>"
      db_name = "<目标数据库名称>"
      
      # 获取AD访问令牌
      credential = ClientSecretCredential(tenant_id, client_id, client_secret)
      token = credential.get_token("https://ossrdbms-aad.database.windows.net/.default")
      
      # 建立PostgreSQL连接
      conn_str = f"host={server_name}.postgres.database.azure.com dbname={db_name} user={client_id} password={token.token} sslmode=require"
      conn = psycopg2.connect(conn_str)
      
  • 确保应用容器安装了依赖包(如azure-identity、psycopg2-binary)。

5. 验证连接有效性

  • 部署应用到AKS后,检查应用日志确认连接是否成功
  • 可临时进入AKS Pod,执行测试代码或命令验证令牌获取与数据库连接流程

内容的提问来源于stack exchange,提问作者Anjali Loganathan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 22:40:56