2
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?

More than 1 year has passed since last update.

マネージド ID を使用して Azure Functions から Azure SQL Database へ接続する

Posted at

はじめに

マネージド ID を使用して Azure Functions から Azure SQL Database へ接続を試みましたが、少し難しかったので手順をまとめてみます。
既に丁寧に解説されているブログ等もありますが、一度やってみるまでは理解が追いつかないところがあったのでより細かな手順にまとめました。

以下のような連携を行います(マイクロソフトの公式絵に注釈を加えました)
68747470733a2f2f646f63732e6d6963726f736f66742e636f6d2f6a612d6a702f617a7572652f6163746976652d6469726563746f72792f6d616e616765642d6964656e7469746965732d617a7572652d7265736f75726365732f6d656469612f686f772d6d616e616765642d6964656e7469746965 (1).png

(公式絵のURL)

"Azure リソースのマネージド ID の理解" と "マネージド ID を使用して Azure Functions から Azure SQL Database へ接続する" の2部構成です。

Azure リソースのマネージド ID の理解

Azure リソースのマネージド ID の ユースケース

Functions や app service から Azure ストレージ、 Azure SQL server へ資格情報の管理無しでアクセスする際に利用

マネージド ID、 サービスプリンシパル、 アプリケーション、クライアント などの整理

参考資料

マネージド ID を使用して Azure Functions から Azure SQL Database へ接続する

  • 任意の関数アプリを deploy する
    • server less プラン で問題無し
    • 今回は "functions-sql-managedid" という名前で作成
  • Functions に システム割り当てマネージド ID を割り当てる
    • スクリーンショット 2022-02-01 21.52.11.png
  • オブジェクト (プリンシパル) ID をメモしておく
    • スクリーンショット 2022-02-02 21.59.19.png
  • Azure Active Directory へ行き "マネージド ID の確認方法" で記載した方法でマネージド IDとアプリケーションIDの紐付きを確認しておく
  • SQL server を作成する
    • 以下のような感じで設定
    • スクリーンショット 2022-02-01 22.31.27.png
  • SQL Server の Azure Active Directory 管理者が自身のユーザアカウントであることを確認する
    • スクリーンショット 2022-02-01 22.47.22.png
  • Functions の マネージド ID に SQL Server への適切なロールを割り当てる
    • スクリーンショット 2022-02-01 23.36.48.png
  • SQL データベースのこちら↓から Azure Data Studio へアクセス
    • スクリーンショット 2022-02-01 22.54.14.png
    • Azure Data Studio は Azure AD での認証をサポートしている
    • 自身の Azure ユーザアカウントで接続する
    • 接続できたら
      • select * FROM sys.databases; を実行して、ポータルから作成したDBが存在することを確認する
  • ユーザーを追加する
    • CREATE USER "functions-sql-managedid" FROM EXTERNAL PROVIDER;
      • "functions-sql-managedid" は アプリケーション名 (functions のマネージドID)と一致するはず
    • EXEC sp_addrolemember 'db_datareader', "functions-sql-managedid";
    • EXEC sp_addrolemember 'db_datawriter', "functions-sql-managedid";
    • 以下クエリで追加されたことを確認する
      • SELECT * FROM sys.database_principals where name = 'functions-sql-managedid'
  • テーブルを作成してみる
    • CREATE TABLE "functions-sql-managedid.test"(id NCHAR(5) PRIMARY KEY, name NVARCHAR(256))
    • select * FROM "functions-sql-managedid.test"; を実行してみる。
  • DB に接続するための準備ができたのでコードを実行してみる
    • こちらの Python コードで接続を試してみてそのまま動かすことができました
    • 上記コードは "マネージド サービス ID と Azure 仮想マシン (VM) が連携する様子" の 5 - 7 に相当します。
    • 68747470733a2f2f646f63732e6d6963726f736f66742e636f6d2f6a612d6a702f617a7572652f6163746976652d6469726563746f72792f6d616e616765642d6964656e7469746965732d617a7572652d7265736f75726365732f6d656469612f686f772d6d616e616765642d6964656e7469746965732d.png

参考

以上です。

2
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
2
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?