SE の雑記

SQL Server の情報をメインに Microsoft 製品の勉強内容を日々投稿

SQL Server 2022 RC0 on Linux で Azure AD 認証が実行できない場合に確認する設定

leave a comment

先日、SQL Server 2022 Release Candidate 0 is now available on Linux のアナウンスがあり、SQL Server on Linux についても、2022 RC0 の提供が開始されました。

RC0 の Linux 版で使用できる機能として、Azure Active Directory authentication (AAD 認証) があるのですが、現時点ではポータルから設定しただけでは動作しなさそうだったので情報を残しておきたいと思います。

今夏使用している環境は次の環境となり、事象については報告してあるので、今後は追加の設定を実施しなくても動作するようになっているかもしれません。

  • OS: Ubuntu 20.04
  • SQL Server: SQL Server 2022 RC0
  • Azure Arc Agent: 1.21.02043.328

SQL Server on Linux での Azure AD 認証の設定方法

SQL Server on Linux の Azure AD 認証の設定方法は Windows 版と基本は同じ流れとなり、次のドキュメントをベースにして設定を行うことができます。

Azure AD 認証は Azure Arc を使用して実装が行われているため、Arc エージェントの導入から開始して、次のような作業が必要となります。

  • Azure Arc エージェントを Linux に導入
    • Azure Arc のブレードから Arc エージェント登録用のスクリプトを生成して実行
  • SQL Server on Azure Arc Enabled Server を導入
    • Azure Arc のブレードから SQL Server 登録用のスクリプトを生成して実行
  • Key Vault を設定
    • 証明書を生成
    • Arc エージェントを導入したサーバーのマネージド ID に証明書のアクセスを許可
  • AAD のアプリケーションの設定
    • 新規にアプリケーションを作成いsk、Microsoft Graph のユーザー / グループのアクセス権限を付与

このような準備を実施した後に、Azure Arc のブレードから、AAD 認証の設定を行うことで SQL Server on Linux でも Azure AD による認証を使用することができるようになります。

image

 

2022/9/15 時点で発生している事象

今回使用しているのは、本投稿の冒頭に記載した環境なのですが、この環境はで Azure ポータルから AAD 認証の設定を実施しただけでは、AAD 認証は動作しませんでした。

設定を行った後に、SQL Server の ERRORLOG を確認すると、次のようなエラーが出力されていました。

Error: 49967, Severity: 16, State: 1.
Unable to install the AAD Cert. Cannot load cert path from registry. Error state [2].
Unable to install AAD Cert. AAD authentication will be disabled.

AAD 認証に使用する証明書がロードできないというようなエラーが出力されていますね。

Key Vault / AAD アプリケーションの設定が正常に設定できていると、Key Vault に格納した証明書が「/var/opt/mssql/aadsecrets」にコピーされます。今回、上記のエラーが発生している環境でも証明書の pfx ファイルはコピーされているのですが、上記のエラーが発生しているというような状態となります。

image

ファイルが存在しているがロードができていないようですね。

Windows であれば、AAD 認証の設定は、レジストリに格納されており、既定のインスタンスであれば、「HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL16.MSSQLSERVER\MSSQLServer\FederatedAuthentication」に設定が格納されています。

Linux については、設定は「/var/opt/mssql/mssql.conf」に格納されており、設定可能な内容については、mssql-conf のドキュメントに記載されています。

strace で「-e trace=file」のトレースを取得してみたところ「/var/opt/mssql/aadsecrets」に対してのアクセスは行われているのですが、ディレクトリに格納されているファイルへのアクセスが行われていないようでした。

SQL Server 2022 では、mssql-conf で設定可能な項目として AAD 認証向けの設定が追加されており、使用する証明書のパスについても指定ができるようになってます。

上述の画像のような証明書の名称でコピーされているのであれば、次のコマンドを実行し明示的に証明書のファイルを指定します。

/opt/mssql/bin/mssql-conf set network.aadcertificatefilepath "/var/opt/mssql/aadsecrets/SQL\ Server\ AAD\ Authentication.pfx"    

 

設定完了後、SQL Server を「systemctl restart mssql-server」で再起動すれば、設定が反映され、設定前に発生していた 49967 のエラーが発生しなくなり、AAD 認証ができる状態になりました。

2022/9/15 時点では、明示的に AAD 認証の証明書のパスを指定しないと、SQL Server からは動作に必要となる証明書を把握することができず、AAD 認証ができないようでした。

SQL Server 2022 RC0 で AAD 認証ができない場合は、Azure ポータルからの設定の他に、明示的な AAD 認証用の証明書のパス設定を追加で実施してみるとよいのではないでしょうか。

Share

Written by Masayuki.Ozawa

9月 15th, 2022 at 9:33 am

Leave a Reply