托管身份对于 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 上的公共模板。该存储库包含复制本博客中描述的设置所需的一切。
拉佐克斯
/
带有 sql 数据库的快速启动后端
用于测试新应用程序功能的轻量级后端环境。它包括从托管应用程序到管理数据持久性的所有内容,并集成 CI/CD 以方便测试和迭代。
使用 SQL 数据库连接快速启动后端
此用例涉及使用 Azure SQL 数据库部署 Azure 应用服务,以提供用于测试新应用程序功能的轻量级后端环境。它包括从托管应用程序到管理数据持久性的所有内容,并集成 CI/CD 以方便测试和迭代。
目标
- 在 Azure 上部署可扩展且安全的 Web 后端,用于测试新的应用程序功能。
- 使用 Bicep 自动配置基础设施。
- 集成应用程序的持续部署,以便频繁测试和轻松更新。
组件概述
- Azure 应用服务 - 部署简单的后端 API。
- Azure SQL 数据库 - 设置 SQL 数据库以实现持久性。
- Azure 容器注册表(可选)- 存储容器映像以进行版本控制(如果您使用的是容器化版本)。
- 持续集成/持续部署 (CI/CD) - 使用 GitHub Actions 自动部署。
使用托管身份可以简化跨服务通信,并通过消除对机密的需求来增强安全性。强烈建议任何在 Azure 中构建安全且可扩展的应用程序的人使用此方法。
以上是使用托管标识在 Azure 中实现安全的跨服务通信的详细内容。更多信息请关注PHP中文网其他相关文章!

Python的灵活性体现在多范式支持和动态类型系统,易用性则源于语法简洁和丰富的标准库。1.灵活性:支持面向对象、函数式和过程式编程,动态类型系统提高开发效率。2.易用性:语法接近自然语言,标准库涵盖广泛功能,简化开发过程。

Python因其简洁与强大而备受青睐,适用于从初学者到高级开发者的各种需求。其多功能性体现在:1)易学易用,语法简单;2)丰富的库和框架,如NumPy、Pandas等;3)跨平台支持,可在多种操作系统上运行;4)适合脚本和自动化任务,提升工作效率。

可以,在每天花费两个小时的时间内学会Python。1.制定合理的学习计划,2.选择合适的学习资源,3.通过实践巩固所学知识,这些步骤能帮助你在短时间内掌握Python。

Python适合快速开发和数据处理,而C 适合高性能和底层控制。1)Python易用,语法简洁,适用于数据科学和Web开发。2)C 性能高,控制精确,常用于游戏和系统编程。

学习Python所需时间因人而异,主要受之前的编程经验、学习动机、学习资源和方法及学习节奏的影响。设定现实的学习目标并通过实践项目学习效果最佳。

Python在自动化、脚本编写和任务管理中表现出色。1)自动化:通过标准库如os、shutil实现文件备份。2)脚本编写:使用psutil库监控系统资源。3)任务管理:利用schedule库调度任务。Python的易用性和丰富库支持使其在这些领域中成为首选工具。

要在有限的时间内最大化学习Python的效率,可以使用Python的datetime、time和schedule模块。1.datetime模块用于记录和规划学习时间。2.time模块帮助设置学习和休息时间。3.schedule模块自动化安排每周学习任务。

Python在游戏和GUI开发中表现出色。1)游戏开发使用Pygame,提供绘图、音频等功能,适合创建2D游戏。2)GUI开发可选择Tkinter或PyQt,Tkinter简单易用,PyQt功能丰富,适合专业开发。


热AI工具

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

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

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

Atom编辑器mac版下载
最流行的的开源编辑器

适用于 Eclipse 的 SAP NetWeaver 服务器适配器
将Eclipse与SAP NetWeaver应用服务器集成。

SecLists
SecLists是最终安全测试人员的伙伴。它是一个包含各种类型列表的集合,这些列表在安全评估过程中经常使用,都在一个地方。SecLists通过方便地提供安全测试人员可能需要的所有列表,帮助提高安全测试的效率和生产力。列表类型包括用户名、密码、URL、模糊测试有效载荷、敏感数据模式、Web shell等等。测试人员只需将此存储库拉到新的测试机上,他就可以访问到所需的每种类型的列表。

VSCode Windows 64位 下载
微软推出的免费、功能强大的一款IDE编辑器