搜索
首页后端开发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的主要目的:灵活性和易用性Apr 17, 2025 am 12:14 AM

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

Python:多功能编程的力量Python:多功能编程的力量Apr 17, 2025 am 12:09 AM

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

每天2小时学习Python:实用指南每天2小时学习Python:实用指南Apr 17, 2025 am 12:05 AM

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

Python与C:开发人员的利弊Python与C:开发人员的利弊Apr 17, 2025 am 12:04 AM

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

Python:时间投入和学习步伐Python:时间投入和学习步伐Apr 17, 2025 am 12:03 AM

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

Python:自动化,脚本和任务管理Python:自动化,脚本和任务管理Apr 16, 2025 am 12:14 AM

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

Python和时间:充分利用您的学习时间Python和时间:充分利用您的学习时间Apr 14, 2025 am 12:02 AM

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

Python:游戏,Guis等Python:游戏,Guis等Apr 13, 2025 am 12:14 AM

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

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脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
1 个月前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
1 个月前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
1 个月前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.聊天命令以及如何使用它们
1 个月前By尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

Atom编辑器mac版下载

Atom编辑器mac版下载

最流行的的开源编辑器

适用于 Eclipse 的 SAP NetWeaver 服务器适配器

适用于 Eclipse 的 SAP NetWeaver 服务器适配器

将Eclipse与SAP NetWeaver应用服务器集成。

SecLists

SecLists

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

VSCode Windows 64位 下载

VSCode Windows 64位 下载

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