Amazon Web Services ブログ

Amazon Linux 2 の SQL Server 2017 で Active Directory 認証をデプロイし、設定する

Windows 上での SQL Server は、SQL Server インスタンスを設定して、Active Directory アカウントで Windows 認証を使用できるようにします。この記事は、Amazon Linux 2 で SQL Server 2017 を扱う方法について取り上げます。このソリューションは、Amazon EC2 で SQL Server Linux インスタンスを管理するために Windows 認証を使用して、Active Directory アカウントにログインできるようにします。

この記事では、次の作業方法について説明しています。

  1. ドメインに SQL Server Linux インスタンスをデプロイし、結合します。
  2. 新しい Active Directory ユーザーを作成して、SQL Server Linux のサービス プリンシパル名を設定します。
  3. SQL Server サービス キータブを追加します。キータブ ファイルを使用して、Active Directory に認証します。
  4. SQL Server Management Studio (SSMS) を使用して、Active Directory ベースの SQL ログインを作成します。
  5. ドメイン アカウントを使用して、Windows マシンから SSMS を使用して Windows 認証をテストします。

チュートリアル

次の手順に従って、Amazon Linux の SQL Server 2017 で Active Directory 認証をデプロイし、設定します。

前提条件

開始する前に、次のものが必要です。

  • Active Directory ドメイン: EC2 で実行中のオンプレミス Windows ドメインまたは Windows ドメインのいずれかです。AWS Directory Service で AWS Managed Microsoft AD または Simple AD (Samba) 使用することもできます。
  • Amazon Linux 2 での SQL Server 2017 Linux (Express、Web、Standard、または Enterprise Edition)。
  • 同じドメインに接続された Windows Server (2012 R2 または 2016)。SQL Server Management Studio (SSMS) をインストールして、SQL インスタンスに接続し、Active Directory 管理ツールをインストールしてドメインを管理します。

ステップ 1: ドメインに SQL Server Linux インスタンスをデプロイし、結合する

最初に、ドメインに SQL Server Linux インスタンスをデプロイし、結合します。

Amazon Linux 2 で SQL Server 2017 Express、Web、Standard、または, Enterprise エディションをデプロイします。この記事は、SQL Server 2017 Enterprise エディションで Amazon Linux 2 インスタンスを使用します。

SSH を使用して Linux インスタンスに接続し、これらの手順を参照して Linux インスタンスをドメインに結合します。

  1. DHCP オプションを使用して Active Directory DNS サーバーをポイントしていない場合、手動で Linux ホストがサーバーをポイントするように設定します。vi /etc/resolv.conf を使用して、Active Directory DNS サーバーを設定します。ホストをリブートするときにDNS をスタティックに設定するようにし、ドメインに関連付けられた DNS が残るようにします。
  2. システムが最新のものであることを確認するために、以下のコマンドを実行します。
    sudo yum -y update
  3. 領域パッケージをインストールするには、次のコマンドを実行します。
    sudo yum -y install sssd realmd krb5-workstation samba-common-tools
  4. リブートするまでドメインに結合できないため、Linux ホストを再起動します。
  5. ドメインに Linux マシンを結合するために、以下のコマンドを実行します。
    sudo realm join -U join_account@example.com example.com ––verbose

必ず example.local をドメイン名に変更し、ジョイナー Active Directory アカウントがコンピューターオブジェクトを作成する権限をもっていることを確認してください。

Linux マシンが正常に結合される場合、最後に以下のメッセージを取得する必要があります。* 領域で正常に登録されたマシン。

ステップ 2: 新しい Active Directory ユーザーを作成して、SQL Server Linux のサービス プリンシパル名を設定します。

Remote Desktop Protocol (RDP) を使用して、Active Directory 管理ツールを使用して Windows マシンに接続します。SQL Server アカウントを作成して、Linux のサービスを実行します。ユーザーアカウント名は、希望するものであれば何でもかまいません。また、新規アカウントを作成する代わりに、既存の Active Directory アカウントを使用することもできます。

サービスアカウントに SQL Server Linux インスタンスを関連付けるために、サービスプリンシパル名 (SPN) を作成します。Windows 環境では自動的に行われますが、Linux マシンでは手動で行われなければなりません。

マシンに結合された Windows ドメインから、PowerShell を管理者として開いて、次のコマンドを実行します。

setspn -A MSSQLSvc/SQL-LINUX.corp.local:1433 nour

Linux インスタンスのホスト名は「SQL-LINUX」で、Active Directory のアカウント名は「nour」です。必ず適切なホスト名と Active Directory アカウントログオン名に変更してください。SQL Server が異なる TCP ポートでリスンするように設定されている場合、必ずそのポートに変更してください。また、SPN はドメインを通じて伝搬するためにいくらか時間がかかる場合がありますので、ご注意ください。

属性エディターでも、次のように表示されるはずです。

ステップ 3: SQL Server サーバーキータブを追加する

Active Directory に認証するために、キータブファイルを使用します。

Linux ホストから以下のコマンドを実行することにより、サーバーアカウントに対する Kerberos チケットを取得します。

kinit nour@CORP.LOCAL

Active Directory アカウントのパスワードを入力するように求めるプロンプトを表示します。「nour」をアカウントログオン名と置き換えて、適用可能なドメインン名のすべての文字を大文字にします。

Active Dirctory のパスワードを入力した後で、以下のコマンドを実行して SPN を設定するために kvno ツールを使用します。

kvno MSSQLSvc/SQL-LINUX.corp.local:1433

Active Directory アカウントサービスアカウントに対してキーバージョン番号「 kvno」を書き留めます。それは番号「2」であるはずですが、パスワードが以前変更された場合は異なることがあります。

必ず、SQL-LINUX を適用可能な Linux ホスト名に変更します。また、corp.local を適用可能なドメイン名に変更します。次のエラーに類似するものを取得することがあります。kvno:server not found in kerberos database while….その場合、コマンドを再び実行する前にいくらか時間がかかります。SPN 情報が環境のその他のドメインコントローラーにレプリケートされなていなかったためです。

すべてがうまくいったら、次のとおり表示されるはずです。

これで、ktutil ユーティリティを使用して SQL Server サービスアカウントのキータブファイルを作成します。キータブファイルは、Kerberos を使用して、パスワードを入力せずに、Windows ドメインに認証するために使用されます。今後、Active Directory パスワードを変更することを計画している場合は、新しいキータブファイルを再び作成する必要があります。

Linux SQL ホストから次のコマンドを実行します。必ず、SQL-Linux を適用可能な Linux ホスト名に変更し、corp.local をドメイン名に変更します。ktutil ユーティリティは正しい Active Directory パスワードを検証していないため、SQL Server アカウントに正しい Active Directory パスワードを入力していることを確認してください。-k 2 をキーバージョン kvno に追加しました。ステップ 3 で異なる番号を取得する場合、必ずその番号を使用してください。

ktutil

ktutil を実行した後で、以下のコマンドを実行します。

addent -password -p MSSQLSvc/SQL-LINUX.corp.local:1433@CORP.LOCAL -k 2 -e aes256-cts-hmac-sha1-96

addent -password -p MSSQLSvc/SQL-LINUX.corp.local:1433@CORP.LOCAL -k 2 -e rc4-hmac

wkt /var/opt/mssql/secrets/mssql.keytab

exit

このキータブファイルにアクセスできる人は誰でも、Active Director ドメイン上で SQL Server になりすますことができます。キータブファイルへのアクセスを mssql アカウントに読み取りアクセスケンのみを許可するように制限してください。

sudo chown mssql:mssql /var/opt/mssql/secrets/mssql.keytab 

sudo chmod 400 /var/opt/mssql/secrets/mssql.keytab

Linux の SQL Server を設定して、Kerberos 認証を使用して、SQL Server サービスを再開します。.Linux ホストから次のコマンドを実行します。

sudo /opt/mssql/bin/mssql-conf set network.kerberoskeytabfile /var/opt/mssql/secrets/mssql.keytab 

sudo systemctl restart mssql-server

=====================================================================================

ステップ 4: SQL Server Management Studio を使用して、Active Directory ベースの SQL ログインを作成する

SQL Server Management Studio (SSMS) を使用して、Active Directory ベースの SQL ログインを作成します。

Amazon Linux 2 AMI から SQL Server 2017 インスタンスをデプロイした場合、次のコマンドを実行して sa のパスワードをリセットします。

sudo systemctl stop mssql-server 

sudo /opt/mssql/bin/mssql-conf set-sa-password 

sudo systemctl start mssql-server
  1. DNS のレコードを作成して、VPC で SQL Linux インスタンス IP アドレスをポイントするようにしてください。IP アドレスを使用して接続する場合、必ず PTR レコードを作成してください。DNS サーバーがない場合は、Windows のホストファイルを変更できます。
  2. 同じドメインの一部である Windows マシンから SQL Server Management Studio をロードし、sa を使用して SQL Linux インスタンスを接続します。
  3. sa アカウントにログインした後で、Windows 認証を使用できるようにドメインアカウントに対して SQL ログインを作成する必要があります。
  4. ドメインアカウントに サーバーロールを割り当てます。

ステップ 5: ドメイン アカウントを使用して、Windows マシンから SSMS を使用して Windows 認証をテストする

以下に例を示します。

Windows Active Directory アカウントを使用して Linux で SQL Server にログインして管理する準備ができました。

 


著者について

 

Noureddine Ennacir は、アマゾン ウェブ サービスのクラウドサポートエンジニアです