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

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

このチュートリアルではユーザー割り当て管理型アイデンティティ(UAMI)を使用しており、リソース間で共有でき、アプリのライフサイクルに依存しないため推奨されています。 Azure Functionsのアイデンティティベース接続についての詳細は、「リモートサービスへの接続の設定」をご覧ください。

このチュートリアルを終えると、関数アプリはユーザー名やパスワードなしでAzure SQL Databaseに接続されます。

あなたが取るステップの概要:

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

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

Azureポータル、PowerShell、またはAzure CLIを通じてMicrosoft Entra認証を有効にすることができます。 Azure CLIの手順は以下のセクションにあります。 AzureポータルとPowerShellを通じてこのタスクを完了する方法については、Microsoft Entra認証に関するAzure SQLのドキュメントをご覧ください。

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

  2. Microsoft EntraユーザーのオブジェクトIDをaz ad user listコマンドで見つけ、<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. Microsoft Entra Cloud Shellaz sql server ad-admin createコマンドを使ってこのユーザーを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管理者をプロビジョニングする」をご覧ください。

ユーザー割り当てマネージド ID を作成する

ユーザー割り当ての管理IDを作成し、関数アプリに割り当ててください。 ユーザー割り当てのアイデンティティを使うと良いです。複数のリソースで再利用でき、そのライフサイクルは関数アプリに依存しません。

  1. Azureポータルで「管理された身分証明書」を検索し、「作成」を選択します。

  2. サブスクリプションリソースグループ地域を選択し、そのアイデンティティに名前(例:my-sql-identity)を付けます。

  3. [確認と作成] を選択し、次に [作成] を選択します。

  4. アイデンティティが作成されたら、ポータルの関数アプリにアクセスしてください。

  5. 設定の中で「Identity」を選択し、「ユーザー割り当て」タブを選択します。

  6. 追加」を選択し、作成した管理されたアイデンティティを選択して「 追加」を選択します。

ヒント

システムに割り当てられたマネージドIDを使うこともできます。 システム割り当てを希望する場合は、アイデンティティページの「システム割り当て」タブで有効にしてください。 システム割り当てIDを使う場合、SQLコマンドの<identity-name>は関数アプリの名前であり、接続文字列にUser 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 の名前です。 ユーザー割り当てのアイデンティティの場合、この名前は作成時に付けた名前です(例: my-sql-identity)。 システムに割り当てられたアイデンティティの場合、名前は常に関数アプリの名前と同じです。

    Note

    Azure SQL トリガー を使用している場合、マネージド ID には、db_datareader および db_datawriter を超える追加のアクセス許可が必要です。 詳細については、Azure SQL トリガーのアクセス許可を付与する を参照。

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

最後のステップでは、関数アプリのSQL 接続文字列をMicrosoft Entra管理型ID認証に設定します。

関数コード内の接続文字列設定名をバインディング属性ConnectionStringSettingとして識別します。これはSQL入力のバインディング属性や注釈で確認できます。

関数アプリのアプリケーション設定で、SQL 接続文字列設定を次の形式に更新してください:

Server=<server-name>.database.windows.net; Authentication=Active Directory Default; Database=<database-name>; User Id=<client-id-of-user-assigned-identity>

<server-name>をSQLサーバー名に、<database-name>をデータベース名に、<client-id-of-user-assigned-identity>をユーザー割り当て管理IDのクライアントIDに置き換えます。 クライアントIDはAzureポータルのマネージデンティティリソースの概要ページで見つけることができます。

ヒント

Active Directory Default認証キーワードは、ローカル(開発者の認証情報使用)とAzure(管理ID使用)の両方で動作します。 この機能により、両方の環境で同じ接続文字列を使えます。 システム割り当て管理型アイデンティティの場合、 User Id パラメータを省略します。

アイデンティティベースの接続についての詳細は、「 リモートサービスへの接続の設定」をご覧ください。

次のステップ