搜索
首页后端开发Python教程使用托管标识在 Azure 中实现安全的跨服务通信

托管身份对于 Azure 中的安全跨服务通信至关重要。它们消除了管理秘密、密钥或连接字符串的需要,从而实现了应用程序组件的无缝集成。在本博客中,我将演示如何使用托管标识将 Azure SQL 数据库连接到在 Azure 应用服务上运行的 Python 后端。


微软身份验证库

要使用 Entra 身份连接到 Azure 服务,您需要 Microsoft 身份验证库 (MSAL)。在此示例中,我使用的是 Python 库,但不用担心,每种主要编程语言都存在 MSAL。

import msal

这是一个连接到 Azure SQL 数据库的简单函数:

def get_db_connection():
    connection_string = f'DRIVER={{ODBC Driver 17 for SQL Server}};SERVER={server}.database.windows.net;PORT=1433;DATABASE={database};Authentication=ActiveDirectoryMsi'
    return pyodbc.connect(connection_string)

满足这些先决条件后,您可以在代码中建立数据库连接并执行查询,而无需处理机密或连接字符串。


演示 Python 后端

为了演示,我创建了一个简单的 Python Flask API,它返回员工数据,例如姓名、职位和薪水。注意如何使用 get_db_connection() 函数打开数据库连接并查询数据。

def get_employees():
    conn = get_db_connection()
    cursor = conn.cursor()
    cursor.execute('SELECT ID, Name, Position, Salary FROM Employees')
    rows = cursor.fetchall()
    conn.close()

    # Convert data to a list of dictionaries.
    employees = []
    for row in rows:
        employees.append({
            'ID': row.ID,
            'Name': row.Name,
            'Position': row.Position,
            'Salary': row.Salary
        })

    return jsonify(employees)

这种简单的方法可确保您的后端使用托管身份与数据库安全地交互。


Dockerfile

如果您要在 Docker 容器中部署应用程序,这里是用于安装 SQL Server 的 ODBC 驱动程序的 Dockerfile:

FROM python:3.13-slim

COPY . /app
WORKDIR /app

# Install Microsoft ODBC Driver 17 for SQL Server and dependencies
RUN apt-get update \
 && apt-get install -y gnupg curl apt-transport-https \
 && curl https://packages.microsoft.com/keys/microsoft.asc | tee /etc/apt/trusted.gpg.d/microsoft.asc \
 && echo "deb [arch=amd64] https://packages.microsoft.com/debian/11/prod bullseye main" | tee /etc/apt/sources.list.d/mssql-release.list \
 && apt-get update \
 && ACCEPT_EULA=Y apt-get install -y msodbcsql17 unixodbc-dev \
 && apt-get install -y build-essential \
 && apt-get clean -y

# Install Python dependencies
RUN pip install -r requirements.txt

EXPOSE 80

CMD ["gunicorn", "-w", "4", "-b", "0.0.0.0:80", "app:app"]

此设置可确保您的容器已准备好安全连接到 Azure SQL。


SQL Server 和数据库部署

部署 Azure SQL 服务器时,配置仅 Azure AD 身份验证。这是托管身份的要求。以下是用于部署 SQL 服务器和数据库的 Bicep 模板:

resource sqlServer 'Microsoft.Sql/servers@2023-08-01-preview' = {
  name: serverName
  location: location
  tags: {
    workload: 'Sample Backend with SQL Database'
    topic: 'SQL Server'
    environment: 'Production'
  }
  properties: {
    minimalTlsVersion: '1.2'
    administrators: {
      administratorType: 'ActiveDirectory'
      login: sqlAdminName
      sid: sqlAdminObjectId
      tenantId: tenantId
      principalType: principalType
      azureADOnlyAuthentication: azureADOnlyAuthentication
    }
  }
}

resource sqlDB 'Microsoft.Sql/servers/databases@2023-08-01-preview' = {
  parent: sqlServer
  name: sqlDBName
  location: location
  sku: {
    name: sqlDBSkuName
    tier: sqlDBSkuTier
    capacity: capacity
  }
}

此模板确保数据库已安全配置并可供使用。


向托管身份授予数据库角色

要使您的应用服务能够在没有机密的情况下访问数据库,请将必要的数据库角色分配给托管标识。您无法使用 Bicep 或 Terraform 执行此步骤。创建自定义脚本或通过 Azure 门户访问数据库。

CREATE USER [<displayname-of-appservice>] FROM EXTERNAL PROVIDER;
ALTER ROLE db_datareader ADD MEMBER [<displayname-of-appservice>];
ALTER ROLE db_datawriter ADD MEMBER [<displayname-of-appservice>];
ALTER ROLE db_ddladmin ADD MEMBER [<displayname-of-appservice>];
GO
</displayname-of-appservice></displayname-of-appservice></displayname-of-appservice></displayname-of-appservice>

这些角色允许托管身份根据需要执行读取、写入和架构更改操作。


GitHub 上的公共模板

有关完整的代码,包括 CI/CD 集成,请查看 GitHub 上的公共模板。该存储库包含复制本博客中描述的设置所需的一切。

Using Managed Identities for Secure Cross-Service Communication in Azure 拉佐克斯 / 带有 sql 数据库的快速启动后端

用于测试新应用程序功能的轻量级后端环境。它包括从托管应用程序到管理数据持久性的所有内容,并集成 CI/CD 以方便测试和迭代。

使用 SQL 数据库连接快速启动后端

此用例涉及使用 Azure SQL 数据库部署 Azure 应用服务,以提供用于测试新应用程序功能的轻量级后端环境。它包括从托管应用程序到管理数据持久性的所有内容,并集成 CI/CD 以方便测试和迭代。

目标

  • 在 Azure 上部署可扩展且安全的 Web 后端,用于测试新的应用程序功能。
  • 使用 Bicep 自动配置基础设施。
  • 集成应用程序的持续部署,以便频繁测试和轻松更新。

组件概述

  • Azure 应用服务 - 部署简单的后端 API。
  • Azure SQL 数据库 - 设置 SQL 数据库以实现持久性。
  • Azure 容器注册表(可选)- 存储容器映像以进行版本控制(如果您使用的是容器化版本)。
  • 持续集成/持续部署 (CI/CD) - 使用 GitHub Actions 自动部署。



在 GitHub 上查看



使用托管身份可以简化跨服务通信,并通过消除对机密的需求来增强安全性。强烈建议任何在 Azure 中构建安全且可扩展的应用程序的人使用此方法。

以上是使用托管标识在 Azure 中实现安全的跨服务通信的详细内容。更多信息请关注PHP中文网其他相关文章!

声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
Python的执行模型:编译,解释还是两者?Python的执行模型:编译,解释还是两者?May 10, 2025 am 12:04 AM

pythonisbothCompileDIntered。

Python是按线执行的吗?Python是按线执行的吗?May 10, 2025 am 12:03 AM

Python不是严格的逐行执行,而是基于解释器的机制进行优化和条件执行。解释器将代码转换为字节码,由PVM执行,可能会预编译常量表达式或优化循环。理解这些机制有助于优化代码和提高效率。

python中两个列表的串联替代方案是什么?python中两个列表的串联替代方案是什么?May 09, 2025 am 12:16 AM

可以使用多种方法在Python中连接两个列表:1.使用 操作符,简单但在大列表中效率低;2.使用extend方法,效率高但会修改原列表;3.使用 =操作符,兼具效率和可读性;4.使用itertools.chain函数,内存效率高但需额外导入;5.使用列表解析,优雅但可能过于复杂。选择方法应根据代码上下文和需求。

Python:合并两个列表的有效方法Python:合并两个列表的有效方法May 09, 2025 am 12:15 AM

有多种方法可以合并Python列表:1.使用 操作符,简单但对大列表不内存高效;2.使用extend方法,内存高效但会修改原列表;3.使用itertools.chain,适用于大数据集;4.使用*操作符,一行代码合并小到中型列表;5.使用numpy.concatenate,适用于大数据集和性能要求高的场景;6.使用append方法,适用于小列表但效率低。选择方法时需考虑列表大小和应用场景。

编译的与解释的语言:优点和缺点编译的与解释的语言:优点和缺点May 09, 2025 am 12:06 AM

CompiledLanguagesOffersPeedAndSecurity,而interneterpretledlanguages provideeaseafuseanDoctability.1)commiledlanguageslikec arefasterandSecureButhOnderDevevelmendeclementCyclesclesclesclesclesclesclesclesclesclesclesclesclesclesclesclesclesclesandentency.2)cransportedeplatectentysenty

Python:对于循环,最完整的指南Python:对于循环,最完整的指南May 09, 2025 am 12:05 AM

Python中,for循环用于遍历可迭代对象,while循环用于条件满足时重复执行操作。1)for循环示例:遍历列表并打印元素。2)while循环示例:猜数字游戏,直到猜对为止。掌握循环原理和优化技巧可提高代码效率和可靠性。

python concatenate列表到一个字符串中python concatenate列表到一个字符串中May 09, 2025 am 12:02 AM

要将列表连接成字符串,Python中使用join()方法是最佳选择。1)使用join()方法将列表元素连接成字符串,如''.join(my_list)。2)对于包含数字的列表,先用map(str,numbers)转换为字符串再连接。3)可以使用生成器表达式进行复杂格式化,如','.join(f'({fruit})'forfruitinfruits)。4)处理混合数据类型时,使用map(str,mixed_list)确保所有元素可转换为字符串。5)对于大型列表,使用''.join(large_li

Python的混合方法:编译和解释合并Python的混合方法:编译和解释合并May 08, 2025 am 12:16 AM

pythonuseshybridapprace,ComminingCompilationTobyTecoDeAndInterpretation.1)codeiscompiledtoplatform-Indepententbybytecode.2)bytecodeisisterpretedbybythepbybythepythonvirtualmachine,增强效率和通用性。

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

VSCode Windows 64位 下载

VSCode Windows 64位 下载

微软推出的免费、功能强大的一款IDE编辑器

SublimeText3 Linux新版

SublimeText3 Linux新版

SublimeText3 Linux最新版

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

安全考试浏览器

安全考试浏览器

Safe Exam Browser是一个安全的浏览器环境,用于安全地进行在线考试。该软件将任何计算机变成一个安全的工作站。它控制对任何实用工具的访问,并防止学生使用未经授权的资源。