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

Azure での安全なサービス間通信のためのマネージド ID の使用

Susan Sarandon
リリース: 2024-12-23 00:40:01
オリジナル
622 人が閲覧しました

マネージド 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
ログイン後にコピー

これらのロールにより、マネージド 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 サイトの他の関連記事を参照してください。

ソース:dev.to
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート