0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Azure FunctionsでマネージドIDを使ってSQL Serverにつないだメモ

Posted at

概要

接続文字列を使ってnode-mssqlでDBに接続していたところを、マネージドIDを使ってDBに接続に変更する。

変更点

なお、PrismaでもマネージドIDを使ってみたかったが、Issueにもあるように2024.09.21時点では使用できない模様。(authenticationの設定がsetupMSSQL.tsにない)

接続までの手順

SQL データベースで Microsoft Entra 認証を有効にする
Azure Function マネージド ID を有効にする
SQL Database へのアクセスをマネージド ID に付与する
node-mssqlの接続設定を作成する

SQL データベースで Microsoft Entra 認証を有効にする

チュートリアル: マネージ ID と SQL バインドを使用して Azure SQL に関数アプリを接続するの手順にまずは従う。

testuser@hogeoutlook.onmicrosoft.com というプリンシパル名を持つユーザを作成する

hogeoutlookの部分は、「Microsoft Entra ID」を開いた時の下記画面を参照。
image.png

infra/bin/add-d-b-user.sh
infra/bin/add-d-b-user.sh
#!/bin/bash

BIN_DIR=$(cd $(dirname $0) && pwd)
source $BIN_DIR/.env
azureaduser=$(az ad user list --filter "userPrincipalName eq '$DB_ACCESS_USER_MAIL'" --query [].id --output tsv)
if [ -z "$azureaduser" ]; then
  az ad user create --display-name $DB_ACCESS_USER_NAME --password $DB_ACCESS_USER_PW --user-principal-name $DB_ACCESS_USER_MAIL
fi

# Microsoft Entra ユーザーへのデータベース アクセスの許可
az sql server ad-admin create --resource-group $DB_RESOURCE_GROUP_NAME --server-name $DB_SERVER_NAME --display-name ADMIN --object-id $azureaduser
環境変数 設定値例
DB_ACCESS_USER_NAME mogamoga
DB_ACCESS_USER_PW mogamogaPassw0rd
DB_ACCESS_USER_MAIL mogauser@contosooutlook.onmicrosoft.com
DB_RESOURCE_GROUP_NAME myDbResourceGroup
DB_SERVER_NAME my-server-name

Azure Function マネージド ID を有効にする

以前の手順の通り、bicepで設定。

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

作成したユーザでログインする。

image.png

下記SQLを流す

CREATE USER functionsの名前 FROM EXTERNAL PROVIDER;
ALTER ROLE db_datareader ADD MEMBER functionsの名前;
ALTER ROLE db_datawriter ADD MEMBER functionsの名前;

node-mssqlの接続設定を作成する

Node.js と mssql npm パッケージを使用して Azure SQL Database に接続し、クエリを実行するを参考に設定する。

apps/api/src/routes/transactionTest.ts
const config = {
  server: processEnv.SQLSERVER_NAME,
  port: 1433,
  database: processEnv.SQLSERVER_DB_NAME,
  authentication: {
    type: 'azure-active-directory-default',
    options: {},
  },
  options: {
    encrypt: true,
  },
} as const;

const db = new Database(config);

参考

Node.js と mssql npm パッケージを使用して Azure SQL Database に接続し、クエリを実行する
チュートリアル: マネージ ID と SQL バインドを使用して Azure SQL に関数アプリを接続する
マネージド ID を使用して Azure Functions から Azure SQL Database へ接続する
[Managed Identity を使った SQL Database の認証がとても簡単になった話]
Azure SQL Database との間でパスワードレス接続を使うように Node.js アプリケーションを移行する
node-mssql
tedious
prisma sql ad
sqlにマネージドIDで接続する

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?