【问题标题】:testing locally managed indentity with python使用 python 测试本地管理的身份
【发布时间】:2021-10-26 05:09:08
【问题描述】:

我尝试使用 python 设置代码来测试 azure 托管身份服务,并且使用 C# 我可以在本地测试代码。有没有办法在本地测试python代码?

在 azure appservice 中启用托管标识 在 Azure SQL Server 中添加应用程序用户(appservice)并授予权限。

这是我使用托管标识连接到 azure sql 的示例 python 代码

conn = db.connect('Driver={ODBC Driver 17 for SQL Server};'
                  'Server=testdb.database.windows.net;'
                  'Database=studentdb;'
                  'Authentication=ActiveDirectoryIntegrated;'
                  )

        query = pd.read_sql_query('SELECT * FROM STUDENT', conn)

        frame = pd.DataFrame(query)
        return func.HttpResponse(frame.to_json(orient="index"), status_code=200)

谁能帮我在本地测试这段代码?因为我没有在 azure 上部署此代码和测试的权限。

【问题讨论】:

    标签: python python-3.x azure-managed-identity


    【解决方案1】:

    您可以使用这个Moto 库来测试服务。您可以像运行 python 脚本一样运行 Lambda 函数。

    if __name__ == "__main__":
    event = []
    context = []
    lambda_handler(event, context)
    

    如果您在虚拟环境中,那么这将确保为具有正确 python 函数的 lambda 函数正确安装所有必需的依赖项。

    【讨论】:

      【解决方案2】:

      如果你查看这个来自微软的document,那么你会发现——

      托管身份不能用于验证本地运行的应用程序。您的应用程序必须部署到支持托管标识的 Azure 服务。

      了解 Azure 中的托管标识功能仅在部署应用服务时才相关,这一点很重要。

      作为替代方案,您可以使用 Azure.Identity 库中的 DefaultAzureCredential(),该库在本地运行和部署的 Web 应用程序时都兼容。您可以阅读更多关于 Azure.Identity 如何工作的信息official docs

      大多数情况下,我们使用 Azure MSI 将 Azure 函数中的 Azure SQL 与 python 连接起来。我们可以使用 Azure MSI 获取 Azure AD 访问令牌,然后您可以使用该令牌连接 Azure SQL。

      在 Azure Web App 上启用系统分配的身份并授予 SQL 权限后,您可以直接从 python 访问数据库,如下面的 sn-p 所示。

      import pyodbc  
      from logzero import loggerwith pyodbc.connect(  
                  "Driver=" + driver + ";Server=" + server + ";PORT=1433;Database=" + database  
                   + ";Authentication=ActiveDirectoryMsi",  
      ) as conn:  
              logger.info("Successful connection to database")
      with conn.cursor() as cursor:  
              cursor.execute(“select @@version")).fetchall()
      

      以下是上面用到的参数:

      • 驱动程序:我们应该使用:“{ODBC Driver 17 for SQL Server}”
      • 服务器:您的数据库所在的 sql 服务器
      • 数据库:您的数据库名称
      • 身份验证:指定连接方式“ActiveDirectoryMsi”

      查看SQL database access with managed identity from Azure Web App 文档和Configure your local Python dev environment for Azure 文档了解更多信息。

      【讨论】:

        最近更新 更多