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?

More than 1 year has passed since last update.

Azure SQL DB へ Data Factory から接続する with Managed ID

Posted at

やりたいこと

Azure の SQL Server/DB に Data Factory の System Assigned Managed ID で接続する方法をいろいろと調べて実現できたので、その内容をまとめます。

前提

  • Azure のリソースは Terraform で作成する
  • SQL Server の管理者として AAD で作成したグループを登録する
    • 管理者としてアクセスできないと設定できないので

Terraform コード (参考)

実際のコードを一部改変しているため、正しく動作するかは未検証。参考程度に。

main.tf
# Resource Group
resource "azurerm_resource_group" "my_rg" {
  name = "rg-aad-connection"
  location = "Japan East"
}

# AAD Group
resource "azuread_group" "grp_admin" {
  display_name     = "grp-aad-connection-admin'
  owners           = "user1@sample.co.jp"
  members          = "user1@sample.co.jp"
  security_enabled = true
}

# SQL Server
resource "azurerm_mssql_server" "sql" {
  name                          = "sql-aad-connection"
  resource_group_name           = azurerm_resource_group.my_rg.name
  location                      = azurerm_resource_group.my_rg.location
  version                       = "12.0"
  administrator_login           = "sqladmin"
  administrator_login_password  = "YOUR_SQLADMIN_PASSWORD"

  azuread_administrator {
    azuread_authentication_only = false
    login_username              = "AzureAD Admin"
    object_id                   = azuread_group.grp_admin.object_id
  }
}

# SQL DB
resource "azurerm_mssql_database" "sqldb" {
  name                        = "sqldb-aad-connection"
  server_id                   = azurerm_mssql_server.sql.id
  auto_pause_delay_in_minutes = 60
  collation                   = Japanese_CI_AS
  max_size_gb                 = 2
  min_capacity                = 1
  read_scale                  = false
  sku_name                    = "GP_S_Gen5_2"
  storage_account_type        = "Local"
  zone_redundant              = false
}

# Data Factory
esource "azurerm_data_factory" "adf" {
  name                = "adf-aad-connection"
  resource_group_name = azurerm_resource_group.my_rg.name
  location            = azurerm_resource_group.my_rg.location

  identity {
    type = "SystemAssigned"
  }
}

SQL Server のリソース定義の azuread_administrator ブロックによってサーバ管理者を設定している。
デフォルトだと、SQL 認証 (sqladmin) とこの AAD グループしか DB にログインできないので Data Factory から接続するには、Managed ID を DB のユーザとして作成する必要がある。

SQL DB 上での AAD ユーザ作成とロール割当

以下の公式ドキュメントを参考に行った。

DB へ接続して以下のクエリを実行する (db_datareader は冗長かもしれない)。

# ユーザ作成
CREATE USER [adf-aad-connection] FROM EXTERNAL PROVIDER;

# ロール割当
ALTER ROLE db_datareader ADD MEMBER [adf-aad-connection];
ALTER ROLE db_datawriter ADD MEMBER [adf-aad-connection];
ALTER ROLE db_ddladmin ADD MEMBER [adf-aad-connection];

以上を行った後に、Data Factory Studio 上で、SQL DB への Linked Service を作成して、Test Connection してみると接続される!

ということで

SQL DB へ Data Factory から Managed ID で接続しました。今回は Data Factory からでしたが、他のリソース (Web Apps や Functions App など) でも同様に接続できるので、パスワードの管理などに悩まなくて済みそうです。
RBAC とは別のレイヤでの話になるので最初は?となりましたが、通常の SQL DB でのユーザ管理と一緒ですね。このあたりも全部 Azure 上の設定で完結できると良いなと個人的には思います。

以上です。

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?