マネージド ID は、Azure での安全なクロスサービス通信に不可欠です。シークレット、キー、接続文字列を管理する必要がなくなり、アプリケーション コンポーネントのシームレスな統合が可能になります。このブログでは、マネージド ID を使用して Azure SQL Database を Azure App Service 上で実行されている Python バックエンドに接続する方法を説明します。
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 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 を使用してバックエンドがデータベースと安全にやり取りできるようになります。
アプリケーションを 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 に安全に接続できるようになります。
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 } }
このテンプレートにより、データベースが安全に構成され、すぐに使用できるようになります。
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
これらのロールにより、マネージド ID は必要に応じて読み取り、書き込み、スキーマ変更操作を実行できます。
CI/CD 統合を含む完全なコードについては、GitHub のパブリック テンプレートを確認してください。このリポジトリには、このブログで説明されているセットアップを複製するために必要なものがすべて含まれています。
この使用例には、新しいアプリケーション機能をテストするための軽量のバックエンド環境を提供するために、Azure SQL Database を使用して Azure App Service をデプロイすることが含まれます。これには、アプリのホスティングからデータ永続性の管理までのすべてが含まれており、テストと反復を容易にするために CI/CD が統合されています。
マネージド ID を使用すると、シークレットの必要性がなくなるため、サービス間の通信が簡素化され、セキュリティが強化されます。このアプローチは、Azure で安全でスケーラブルなアプリケーションを構築している人には強くお勧めします。
以上がAzure での安全なサービス間通信のためのマネージド ID の使用の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。