Share via


Azure SQL Database との間でパスワードレス接続を使うように .NET アプリケーションを移行する

適用対象:Azure SQL Database

Azure SQL Database に対するアプリケーション要求は、認証される必要があります。 Azure SQL Database の認証を受けるオプションは複数ありますが、可能な場合は、アプリケーションでパスワードレス接続を優先することをお勧めします。 パスワードや秘密鍵を使用する従来の認証方法は、セキュリティ リスクと複雑さが生じます。 パスワードレス接続に移行する利点の詳細については、「Azure サービスのパスワードレス接続」ハブを参照してください。 次のチュートリアルでは、Azure SQL Database に接続する既存のアプリケーションを、ユーザー名とパスワードのソリューションではなくパスワードレス接続を使うように移行する方法について説明します。

Azure SQL Database の構成

パスワードレスの接続は、Azure Active Directory (Azure AD) 認証を使って、Azure SQL Database を含む Azure サービスに接続します。 Azure AD 認証を使うと、ID を一元管理して、権限の管理を簡略化できます。 Azure SQL Database の Microsoft Entra 認証の構成の詳細については、こちらをご覧ください。

この移行ガイドでは、Azure SQL Database に Microsoft Entra 管理者が割り当てられていることを確認してください。

  1. 論理サーバーの Microsoft Entra ページに移動します。

  2. [管理者の設定] を選択し、[Microsoft Entra ID] フライアウト メニューを開きます。

  3. Microsoft Entra ID フライアウト メニューで、管理者として割り当てるユーザーを検索します。

  4. ユーザーを選び、[選択] を選びます。

    A screenshot showing how to enable Microsoft Entra admin.

ローカルの開発環境を構成する

パスワードレス接続は、ローカル環境と Azure ホステッド環境の両方で機能するように構成できます。 このセクションでは、ローカル開発のために個々のユーザーが Azure SQL Database の認証を受けられるようにする構成を適用します。

Azure へのサインイン

ローカル開発の場合、Azure SQL Database へのアクセスに使うものと同じ Azure AD アカウントでサインインする必要があります。 Azure CLI や Azure PowerShell などの一般的な開発ツールを使用して認証できます。 認証に使用できる開発ツールは、言語によって異なります。

Azure CLI で次のコマンドを使って Azure にサインインします。

az login

データベース ユーザーを作成してロールを割り当てる

Azure SQL Database でユーザーを作成します。 このユーザーは、ローカルで Visual Studio や IntelliJ などの開発ツールを使ってサインインするときに使った Azure アカウントに対応している必要があります。

  1. Azure portal で SQL データベースに移動し、[クエリ エディター (プレビュー)] を選びます。

  2. 画面の右側にある [<your-username> として続行] を選択し、自分のアカウントを使ってデータベースにサインインします。

  3. クエリ エディター ビューで、次の T-SQL コマンドを実行します。

    CREATE USER [user@domain] FROM EXTERNAL PROVIDER;
    ALTER ROLE db_datareader ADD MEMBER [user@domain];
    ALTER ROLE db_datawriter ADD MEMBER [user@domain];
    ALTER ROLE db_ddladmin ADD MEMBER [user@domain];
    GO
    

    A screenshot showing how to use the Azure Query editor.

    これらのコマンドを実行すると、指定したアカウントに SQL DB 共同作成者ロールが割り当てられます。 このロールを割り当てられた ID は、データベースのデータとスキーマの読み取り、書き込み、変更を行うことができます。 割り当てられるロールについて詳しくは、「固定データベース ロール」をご覧ください。

ローカル接続の構成を更新する

Microsoft.Data.SqlClient ライブラリまたは Entity Framework Core を使って Azure SQL Database に接続する既存のアプリケーション コードは、パスワードレス接続でも引き続き機能します。 ただし、パスワードレス形式を使うようにデータベース接続文字列を更新する必要があります。 たとえば、次のコードは、SQL 認証とパスワードレス接続の両方で機能します。

string connectionString = app.Configuration.GetConnectionString("AZURE_SQL_CONNECTIONSTRING")!;

using var conn = new SqlConnection(connectionString);
conn.Open();

var command = new SqlCommand("SELECT * FROM Persons", conn);
using SqlDataReader reader = command.ExecuteReader();

参照されている接続文字列 (AZURE_SQL_CONNECTIONSTRING) をパスワードレス接続文字列形式を使うように更新するには:

  1. 接続文字列を特定します。 .NET アプリケーションを使ったローカル開発の場合、通常、これは次のいずれかの場所に格納されています。

    • プロジェクトの appsettings.json 構成ファイル。
    • Visual Studio プロジェクトの launchsettings.json 構成ファイル。
    • ローカル システムまたはコンテナー環境変数。
  2. 接続文字列値を次のパスワードレス形式に置き換えます。 プレースホルダー <database-server-name><database-name> を実際の値に更新します。

    Server=tcp:<database-server-name>.database.windows.net,1433;Initial Catalog=<database-name>;
    Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;Authentication="Active Directory Default";
    

アプリをテストする

ローカルでアプリを実行し、Azure SQL Database への接続が期待どおりに機能することを確認します。 Azure ユーザーとロールの変更が Azure 環境に反映されるまでに数分かかる場合があることに注意してください。 これで、開発者がアプリケーション内でシークレットを管理しなくても、ローカルで実行できるようにアプリケーションが構成されました。

Azure ホスティング環境を構成する

ローカルでパスワードレス接続を使うようにアプリを構成して、Azure にデプロイすると、同じコードで Azure SQL Database の認証を受けられるようになります。 以下のセクションでは、マネージド ID を使って Azure SQL Database に接続するようにデプロイされたアプリケーションを構成する方法について説明します。 マネージド ID により、Microsoft Entra ID (旧称 Azure Active Directory) 認証をサポートするリソースに接続するときに使用される Microsoft Entra のマネージド ID がアプリケーションに提供されます。 マネージド ID の詳細を確認してください。

マネージド ID を作成する

Azure portal または Azure CLI を使ってユーザー割り当てマネージド ID を作成します。 アプリケーションでは、ID を使用して他のサービスに対する認証が行われます。

  1. Azure portal の上部で、"マネージド ID" を検索します。 [マネージド ID] の結果を選択します。
  2. [マネージド ID] 概要ページの上部にある [+ 作成] を選択します。
  3. [基本] タブで、次の値を入力します。
    • サブスクリプション: 目的のサブスクリプションを選択します。
    • [リソース グループ]: 目的のリソース グループを選びます。
    • リージョン: ご自分の場所に近いリージョンを選びます。
    • 名前: MigrationIdentity など、ID のわかりやすい名前を入力します。
  4. ページ下部にある [確認と作成] を選択します。
  5. 検証チェックが完了したら、[作成] を選択します。 Azure で、新しいユーザー割り当て ID が作成されます。

リソースが作成されたら、[Go to resource] (リソースに移動) を選択して、マネージド ID の詳細を表示します。

A screenshot showing how to create a managed identity using the Azure portal.

マネージド ID を Web アプリに関連付ける

作成したユーザー割り当てマネージド ID を使うように Web アプリを構成します。

ユーザー割り当てマネージド ID をアプリに関連付けるには、Azure portal で次の手順を実行します。 これらの同じ手順は、次の Azure サービスに適用されます。

  • Azure Spring Apps
  • Azure Container Apps
  • Azure の仮想マシン
  • Azure Kubernetes Service
  • Web アプリの概要ページに移動します。
  1. 左側のナビゲーションから、[ID] を選択します。

  2. [ID] ページで、[ユーザー割り当て済み] タブに切り替えます。

  3. [+ 追加] を選択して、[ユーザー割り当てマネージド ID の追加] ポップアップを開きます。

  4. ID を作成するために使用したサブスクリプションを選択します。

  5. 名前で MigrationIdentity を検索し、検索結果から選択します。

  6. [追加] を選択して、ID をアプリに関連付けます。

    A screenshot showing how to assign a managed identity.

ID のデータベース ユーザーを作成し、ロールを割り当てる

元のユーザー割り当てマネージド ID にマップする SQL データベース ユーザーを作成します。 アプリでデータベースのデータとスキーマの読み取り、書き込み、変更を実行できるように、必要な SQL ロールをユーザーに割り当てます。

  1. Azure portal で、SQL データベースに移動し、[クエリ エディター (プレビュー)] を選択します。

  2. 画面の右側にある [<username> として続行] を選択し、自分のアカウントを使ってデータベースにサインインします。

  3. クエリ エディター ビューで、次の T-SQL コマンドを実行します。

    CREATE USER [user-assigned-identity-name] FROM EXTERNAL PROVIDER;
    ALTER ROLE db_datareader ADD MEMBER [user-assigned-identity-name];
    ALTER ROLE db_datawriter ADD MEMBER [user-assigned-identity-name];
    ALTER ROLE db_ddladmin ADD MEMBER [user-assigned-identity-name];
    GO
    

    A screenshot showing how to use the Azure Query editor to create a SQL user for a managed identity.

    これらのコマンドを実行すると、ユーザー割り当てマネージド ID に SQL DB 共同作成者ロールが割り当てられます。 このロールを割り当てられた ID は、データベースのデータとスキーマの読み取り、書き込み、変更を行うことができます。


重要

エンタープライズ運用環境でデータベース ユーザー ロールを割り当てるときには注意が必要です。 それらのシナリオでは、アプリで 1 つの昇格された ID を使用して、すべての操作を実行すべきではありません。 特定のタスクのための特定のアクセス許可を持つ複数の ID を構成することで、最小限の特権の原則を実装してみてください。

データベース ロールとセキュリティの構成について詳しくは、次のリソースを参照してください。

接続文字列を更新する

パスワードレス接続文字列形式を使うように Azure アプリの構成を更新します。 通常、接続文字列は、アプリのホスティング環境の環境変数として格納されています。 以下の手順では App Service に焦点を当てていますが、他の Azure ホスティング サービスにも同様の構成が用意されています。

  1. App Service インスタンスの構成ページに移動し、Azure SQL Database 接続文字列を探します。

  2. 編集アイコンを選び、接続文字列値を次の形式になるように更新します。 <database-server-name><database-name> のプレースホルダーをお使いのサービスの値に変更します。

    Server=tcp:<database-server-name>.database.windows.net,1433;Initial Catalog=<database-name>;
    Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;Authentication="Active Directory Default";
    
  3. 変更を保存し、アプリケーションを再起動します (自動的に行われない場合)。

アプリケーションをテストする

アプリをテストして、すべてが正常に機能していることを確認します。 すべての変更が Azure 環境に反映されるまで、数分かかることがあります。

次の手順

このチュートリアルでは、アプリケーションをパスワードレス接続に移行する方法について説明しました。

この記事で説明されている概念の詳細については、次のリソースを参照してください。