検索
ホームページバックエンド開発Python チュートリアルAzure での安全なサービス間通信のためのマネージド ID の使用

マネージド ID は、Azure での安全なクロスサービス通信に不可欠です。シークレット、キー、接続文字列を管理する必要がなくなり、アプリケーション コンポーネントのシームレスな統合が可能になります。このブログでは、マネージド ID を使用して Azure SQL Database を Azure App Service 上で実行されている Python バックエンドに接続する方法を説明します。


Microsoft 認証ライブラリ

Entra ID を使用して Azure サービスに接続するには、Microsoft Authentication Library (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)

このシンプルなアプローチにより、マネージド ID を使用してバックエンドがデータベースと安全にやり取りできるようになります。


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 のみの認証を構成します。これはマネージド ID の要件です。以下は、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
  }
}

このテンプレートにより、データベースが安全に構成され、すぐに使用できるようになります。


マネージド ID へのデータベース ロールの付与

App Service がシークレットなしでデータベースにアクセスできるようにするには、必要なデータベース ロールをマネージド ID に割り当てます。 Bicep または Terraform ではこの手順を実行できません。カスタム スクリプトを作成するか、Azure Portal 経由でデータベースにアクセスします。

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>

これらのロールにより、マネージド ID は必要に応じて読み取り、書き込み、スキーマ変更操作を実行できます。


GitHub 上の公開テンプレート

CI/CD 統合を含む完全なコードについては、GitHub のパブリック テンプレートを確認してください。このリポジトリには、このブログで説明されているセットアップを複製するために必要なものがすべて含まれています。

Using Managed Identities for Secure Cross-Service Communication in Azure ラッツォックス / SQLデータベースを使用したクイックスタートバックエンド

新しいアプリケーション機能をテストするための軽量のバックエンド環境。これには、アプリのホスティングからデータ永続性の管理までのすべてが含まれており、テストと反復を容易にするために CI/CD が統合されています。

SQL データベース接続を使用したクイックスタート バックエンド

この使用例には、新しいアプリケーション機能をテストするための軽量のバックエンド環境を提供するために、Azure SQL Database を使用して Azure App Service をデプロイすることが含まれます。これには、アプリのホスティングからデータ永続性の管理までのすべてが含まれており、テストと反復を容易にするために CI/CD が統合されています。

目的

  • 新しいアプリケーション機能をテストするために、スケーラブルで安全な Web バックエンドを Azure にデプロイします。
  • Bicep を使用してインフラストラクチャのプロビジョニングを自動化します。
  • 頻繁なテストと簡単な更新のために、アプリケーションの継続的デプロイメントを統合します。

コンポーネントの概要

  • Azure App Service - シンプルなバックエンド API をデプロイします。
  • Azure SQL データベース - 永続化のために SQL データベースをセットアップします。
  • Azure Container Registry (オプション) - バージョン管理用のコンテナー イメージを保存します (コンテナー化されたバージョンを使用している場合)。
  • 継続的インテグレーション/継続的デプロイメント (CI/CD) - GitHub Actions を使用してデプロイメントを自動化します。



GitHub で表示



マネージド ID を使用すると、シークレットの必要性がなくなるため、サービス間の通信が簡素化され、セキュリティが強化されます。このアプローチは、Azure で安全でスケーラブルなアプリケーションを構築している人には強くお勧めします。

以上がAzure での安全なサービス間通信のためのマネージド ID の使用の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
Pythonの実行モデル:コンパイル、解釈、またはその両方?Pythonの実行モデル:コンパイル、解釈、またはその両方?May 10, 2025 am 12:04 AM

pythonisbothcompiledinterted.whenyourunapythonscript、itisfirstcompiledintobytecode、これはdenepythonvirtualmachine(pvm).thishybridapproaChallowsforplatform-platform-denodent-codebutcututicut。

Pythonはラインごとに実行されますか?Pythonはラインごとに実行されますか?May 10, 2025 am 12:03 AM

Pythonは厳密に行ごとの実行ではありませんが、最適化され、インタープレーターメカニズムに基づいて条件付き実行です。インタープリターは、コードをPVMによって実行されるBytecodeに変換し、定数式または最適化ループを事前促進する場合があります。これらのメカニズムを理解することで、コードを最適化し、効率を向上させることができます。

Pythonの2つのリストを連結する代替品は何ですか?Pythonの2つのリストを連結する代替品は何ですか?May 09, 2025 am 12:16 AM

Pythonに2つのリストを接続する多くの方法があります。1。オペレーターを使用しますが、これはシンプルですが、大きなリストでは非効率的です。 2。効率的ですが、元のリストを変更する拡張メソッドを使用します。 3。=演算子を使用します。これは効率的で読み取り可能です。 4。itertools.chain関数を使用します。これはメモリ効率が高いが、追加のインポートが必要です。 5。リストの解析を使用します。これはエレガントですが、複雑すぎる場合があります。選択方法は、コードのコンテキストと要件に基づいている必要があります。

Python:2つのリストをマージする効率的な方法Python:2つのリストをマージする効率的な方法May 09, 2025 am 12:15 AM

Pythonリストをマージするには多くの方法があります。1。オペレーターを使用します。オペレーターは、シンプルですが、大きなリストではメモリ効率的ではありません。 2。効率的ですが、元のリストを変更する拡張メソッドを使用します。 3. Itertools.chainを使用します。これは、大規模なデータセットに適しています。 4.使用 *オペレーター、1つのコードで小規模から中型のリストをマージします。 5. numpy.concatenateを使用します。これは、パフォーマンス要件の高い大規模なデータセットとシナリオに適しています。 6.小さなリストに適したが、非効率的な追加方法を使用します。メソッドを選択するときは、リストのサイズとアプリケーションのシナリオを考慮する必要があります。

コンパイルされた通信言語:長所と短所コンパイルされた通信言語:長所と短所May 09, 2025 am 12:06 AM

compiledlanguagesOfferspeedandsecurity、foredlanguagesprovideeaseofuseandportability.1)compiledlanguageslikec arefasterandsecurebuthavelOnderdevelopmentsplat dependency.2)

Python:ループのために、そして最も完全なガイドPython:ループのために、そして最も完全なガイドMay 09, 2025 am 12:05 AM

Pythonでは、forループは反復可能なオブジェクトを通過するために使用され、条件が満たされたときに操作を繰り返し実行するためにしばらくループが使用されます。 1)ループの例:リストを通過し、要素を印刷します。 2)ループの例:正しいと推測するまで、数値ゲームを推測します。マスタリングサイクルの原則と最適化手法は、コードの効率と信頼性を向上させることができます。

Python concatenateリストを文字列に入れますPython concatenateリストを文字列に入れますMay 09, 2025 am 12:02 AM

リストを文字列に連結するには、PythonのJoin()メソッドを使用して最良の選択です。 1)join()メソッドを使用して、 '' .join(my_list)などのリスト要素を文字列に連結します。 2)数字を含むリストの場合、連結する前にマップ(str、数字)を文字列に変換します。 3) '、'などの複雑なフォーマットに発電機式を使用できます。 4)混合データ型を処理するときは、MAP(STR、Mixed_List)を使用して、すべての要素を文字列に変換できるようにします。 5)大規模なリストには、 '' .join(lage_li)を使用します

Pythonのハイブリッドアプローチ:コンピレーションと解釈を組み合わせたPythonのハイブリッドアプローチ:コンピレーションと解釈を組み合わせたMay 08, 2025 am 12:16 AM

pythonusesahybridapproach、コンコイリティレーショントビテコードと解釈を組み合わせて、コードコンピレッドフォームと非依存性bytecode.2)

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

MantisBT

MantisBT

Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

AtomエディタMac版ダウンロード

AtomエディタMac版ダウンロード

最も人気のあるオープンソースエディター

DVWA

DVWA

Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、

WebStorm Mac版

WebStorm Mac版

便利なJavaScript開発ツール

EditPlus 中国語クラック版

EditPlus 中国語クラック版

サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません