チュートリアル: マネージ ID と SQL バインドを使用して Azure SQL に関数アプリを接続する

Azure Functions は、Azure SQL Database やその他の Azure サービスへのアクセスをセキュリティ保護するためのターンキー ソリューションであるマネージド ID を提供しています。 マネージド ID を使用すると、接続文字列内の認証情報などのシークレットをアプリから排除することで、アプリのセキュリティを強化できます。 このチュートリアルでは、Azure SQL バインドを利用する Azure Function にマネージド ID を追加します。 SQL バインドを使用したサンプルの Azure Function プロジェクトを、ToDo バックエンドの例で入手できます。

このチュートリアルを終了すると、ユーザー名とパスワードを指定しなくとも、Azure Function を Azure SQL データベースに接続できるようになります。

実行する手順の概要は次のとおりです。

Microsoft Entra ユーザーへのデータベース アクセスの許可

まず、Microsoft Entra ユーザーをサーバーの Active Directory 管理者として割り当てることで、SQL データベースへの Microsoft Entra 認証を有効にします。 このユーザーは、ご使用の Azure サブスクリプションのサインアップに使用した Microsoft アカウントと異なります。 Microsoft Entra ID に作成、インポート、同期、または招待したユーザーである必要があります。 許可されている Microsoft Entra ユーザーの詳細については、SQL データベースでの Microsoft Entra の機能と制限事項に関する記事を参照してください。

Azure portal、PowerShell、または Azure CLI を使用して Microsoft Entra 認証を有効にすることができます。 Azure CLI を使用した手順を以下に示します。Azure portal と PowerShell を使用してこれを完了する方法については、Microsoft Entra 認証に関する Azure SQL のドキュメントを参照してください。

  1. Microsoft Entra テナントにまだユーザーが作成されていない場合は、Microsoft Entra ID を使ったユーザーの追加または削除に関する記事の手順に従ってユーザーを作成します。

  2. az ad user list を使用して Microsoft Entra ユーザーのオブジェクト ID を見つけ、<user-principal-name> を置き換えます。 結果は変数に保存されます。

    Azure CLI 2.37.0 以降の場合:

    azureaduser=$(az ad user list --filter "userPrincipalName eq '<user-principal-name>'" --query [].id --output tsv)
    

    以前のバージョンの Azure CLI の場合:

    azureaduser=$(az ad user list --filter "userPrincipalName eq '<user-principal-name>'" --query [].objectId --output tsv)
    

    ヒント

    Microsoft Entra ID 内のすべてのユーザー プリンシパル名の一覧を表示するには、az ad user list --query [].userPrincipalName を実行します。

  3. Cloud Shell で az sql server ad-admin create コマンドを使用して、この Microsoft Entra ユーザーを Active Directory 管理者として追加します。 次のコマンドで、<server-name> を、サーバー名 (.database.windows.net サフィックスなし) に置き換えます。

    az sql server ad-admin create --resource-group myResourceGroup --server-name <server-name> --display-name ADMIN --object-id $azureaduser
    

Active Directory 管理者の追加の詳細については、サーバーの Microsoft Entra 管理者のプロビジョニングに関するセクションを参照してください

Azure Function でシステム割り当てマネージド ID を有効にする

この手順では、システム割り当て ID を Azure Function に追加します。 後の手順で、この ID に SQL データベースへのアクセス権が付与されます。

Azure portal でシステム割り当てマネージド ID を有効にするには

  1. 通常どおり、ポータルで Azure Function を作成します。 ポータルでアプリに移動します。
  2. 左側のナビゲーションで、[設定] グループまで下にスクロールします。
  3. [ID] を選択します。
  4. [システム割り当て済み] タブで、 [状態] を [オン] に切り替えます。 [保存] をクリックします。

Turn on system assigned identity for Function app

Azure CLI または PowerShell を使用してシステム割り当てマネージド ID を有効にする方法については、Azure Functions でのマネージド ID の使用に関する詳細を確認してください。

ヒント

ユーザー割り当てマネージド ID の場合は、[ユーザー割り当て] タブに切り替えます。[追加] をクリックし、マネージド ID を選択します。 ユーザー割り当てマネージド ID を作成する方法の詳細については、「ユーザー割り当てマネージド ID の管理」を参照してください。

SQL データベースへのアクセスをマネージド ID に付与する

この手順では、Microsoft Entra ユーザー アカウントを使用して SQL データベースに接続し、データベースへのアクセスをマネージド ID に付与します。

  1. 任意の SQL ツールを開き、Microsoft Entra ユーザー アカウント (管理者として割り当てた Microsoft Entra ユーザーなど) でログインします。 これは、Cloud Shell で、SQLCMD コマンドを使用して実行できます。

    sqlcmd -S <server-name>.database.windows.net -d <db-name> -U <aad-user-name> -P "<aad-password>" -G -l 30
    
  2. 対象のデータベースの SQL プロンプトで次のコマンドを実行して、自分の関数にアクセス許可を付与します。 たとえば、 にします。

    CREATE USER [<identity-name>] FROM EXTERNAL PROVIDER;
    ALTER ROLE db_datareader ADD MEMBER [<identity-name>];
    ALTER ROLE db_datawriter ADD MEMBER [<identity-name>];
    GO
    

    <identity-name> は、Microsoft Entra ID でのマネージド ID の名前です。 ID がシステムによって割り当てられる場合は常に、関数アプリと同じ名前になります。

Azure Function SQL 接続文字列を構成する

最後の手順では、Microsoft Entra マネージド ID 認証を使用するように Azure Function SQL 接続文字列を構成します。

SQL の入力バインドの属性と注釈に示されているように、接続文字列の設定名は、関数コードでバインド属性 "ConnectionStringSetting" として識別されます。

関数アプリのアプリケーション設定で、SQL 接続文字列の設定を次の形式に更新する必要があります。

Server=demo.database.windows.net; Authentication=Active Directory Managed Identity; Database=testdb

testdb は接続先のデータベースの名前で、demo.database.windows.net は接続先のサーバーの名前です。

ヒント

ユーザー割り当てマネージド ID には、Server=demo.database.windows.net; Authentication=Active Directory Managed Identity; User Id=ClientIdOfManagedIdentity; Database=testdb を使用します。

次のステップ