Amazon Web Services ブログ

Amazon RDS for SQL サーバーでの SQL ログイン作成を監視する

データベースのセキュリティを維持することは、あらゆる組織の成功にとって不可欠です。データベースユーザーの認証と認可の実装は、データベースシステムを保護するための重要な手順です。従来のデータベース認証は、ユーザー名とパスワードのメカニズムに基づいています。このプロセスでは資格情報を管理するために DBA とエンドユーザーの両方に一定の時間と労力が必要です。対照的にリレーショナルデータベース認証を Microsoft Active Directory (AD) などの集中認証サービスと組み込むことは、より安全で広く受け入れられている業界のベストプラクティスです。

SQL Server は 2 つの認証モードをサポートしています。

  • Windows
  • 混合モード

Amazon Relational Database Service (Amazon RDS) for SQL Server は、混合モード認証のみをサポートします。お客様が Windows 認証のみを利用したいシナリオでは、SQL ログイン作成を監視するカスタムソリューションを実装できます。

この投稿では、Amazon RDS for SQL Server インスタンス内で SQL ログインが作成されたときに E メール通知を受け取るソリューションを紹介します。

ソリューションの概要

この投稿のソリューションでは、データベースメールが構成された Amazon RDS for SQL Server を使用します。データベースメールを使用すると、SMTP (Simple Mail Transfer Protocol) サーバーを使用して SQL Server からユーザーにメッセージを送信することができます。 Amazon RDS for SQL Server インスタンスには、データベースインスタンス内での SQL ログインの作成を定期的に監視するように設定された SQL エージェントジョブがあります。 SQL ログインの作成を検出すると、SQL Server エージェントジョブはデータベース管理者が適切なアクションを取れるように、ログインの詳細を含む E メールメッセージをデータベース管理者に送信します。

次の図は、ソリューションのアーキテクチャ図です。
Solution Architecture

Amazon Simple Email Service (Amazon SES) は、独自の E メールアドレスとドメインを使用して E メールを送受信するための簡単かつコスト効率の高い方法を提供する E メールプラットフォームです。

前提条件

開始するには、次の前提条件を満たしている必要があります。

Amazon SES 経由で E メールを送信するようにデータベースメールを構成する

Amazon RDS for SQL Server でのデータベースメールの使用」の投稿では、Amazon SES でデータベースメールを設定するための詳細な手順を説明しました。データベースメールを使用すると、Amazon RDS on SQL Server データベースインスタンスからユーザーに E メールメッセージを送信できます。 Amazon RDS は、SQL Server の Web、Standard および Enterprise Edition のすべてのバージョンのデータベースメールをサポートします。

データベースメールを構成した後、テスト E メールを送信して成功したかどうかをすぐに検証できます。
Send Test Email

Test Email Address

SQLエージェントジョブの作成

次のステップは、SQL エージェントジョブを作成して、SQL ログインを定期的に監視するスケジュールを設定します。

  1. SQL Server Management Studio を使用して SQL Server にログインします。
  2. SQL Server エージェントの下のジョブのコンテキストメニューを開き (右クリック)、[新しいジョブ] を選択します。Create SQL Agent Job
  3. SQL エージェントジョブの名前を指定します。
  4. ページの選択」セクションで [ステップ] を選択し、[新規作成] を選択します。
    SQL-Agent-step
  5. ステップ名を指定し、コマンドセクション内に次の T-SQL スクリプトをコピーして貼り付けます。このスクリプトは sys.sql_logins DMV を監視し、マスターユーザー以外の SQL ログインが見つかった場合に E メール通知を送信します。
    必要に応じて、T-SQL スクリプトで次の変更を行う必要があります。

    DECLARE @SQLLoginCount INT
    DECLARE @myTableVariable TABLE (SQLLogin Nvarchar(50), LoginCreateDate  datetime)
    DECLARE @mailBody Nvarchar(MAX);
    DECLARE @xml NVARCHAR(MAX)
    DECLARE @body NVARCHAR(MAX)
    
    SET @SQLLoginCount = (SELECT count(*) FROM master.sys.sql_logins where name not like '##%' and name not in ('rdsa', 'admin')) --Edit master username
    Insert into @myTableVariable (SQLLogin, LoginCreateDate) Select [name], [create_date] FROM master.sys.sql_logins where name not like '##%' and name not in ('rdsa', 'admin') --Edit master username
    
    If @SQLLoginCount > 0
        BEGIN
             SET @xml = CAST(( SELECT [SQLLogin] AS 
             'td','',LoginCreateDate AS 'td',''
             FROM @myTableVariable 
             FOR XML PATH('tr'), ELEMENTS ) AS NVARCHAR(MAX))
    
             SET @body ='<html><body><H3>A new SQL login(s) was detected on the RDS SQL Server. Please verify why this login(s) was created</H3>
             <table border = 1> 
             <tr>
             <th> SQLLogin </th> <th> LoginCreateDate </th> </tr>'    
     
             SET @body = @body + @xml +'</table></body></html>'
             EXEC msdb.dbo.sp_send_dbmail
             @profile_name = 'Notifications',
             @recipients = '<xyz@example.com>', --Edit email address
             @body = @body,
             @body_format ='HTML',
             @subject = 'New SQL Login(s) Created On RDS SQL server ';
        END
    • admin – このソリューションではマスターユーザーとしてデフォルトの「admin」を使用しました。デフォルトの「admin」からマスターユーザー名を変更する場合は、マスターユーザー名を編集します。この変更箇所はスクリプト内で 2 箇所あります。
    • @recipients – 必要に応じて受信者の E メールアドレスを編集します。この変更箇所はスクリプト内で 1 箇所です。
  6. スクリプトに変更を加えたら、[OK] を選択します。
  7. ページの選択」セクションで [スケジュール] を選択し、 [新規作成] を選択します。
    SQL Agent Schedule
  8. ジョブ スケジュールの名前を入力し、必要に応じて頻度を選択し、[OK] を選択します。
    SQL Agent Job Schedule
  9. [OK] を選択して SQL サーバーエージェントジョブを作成します。

セットアップのテスト

  1. SQL ログインを作成します。これは、T-SQL または SSMS を使用して実行できます。
    USE [master]
    GO
    CREATE LOGIN [sid] WITH PASSWORD=N'******', DEFAULT_DATABASE=[master], CHECK_EXPIRATION=ON, CHECK_POLICY=ON
    GO
  2. 数分後、新しい SQL ログインについて警告する E メール通知が届きます。次のスクリーンショットは E メールの例を示しています。
    Email Notification

後片付け

このソリューションをテストした場合、追加の課金を回避するために次の手順を実行して作成されたコンポーネントを削除します。

  1. SSMS を使用して RDS インスタンスに接続し、作成された SQL Server エージェントジョブを削除します。
  2. Amazon RDS コンソールで RDS SQL Server インスタンスを選択し、[アクション] メニューで [削除] を選択します。

まとめ

この投稿では、Amazon RDS for SQL Server インスタンス内で SQL ログインが作成されたときに Amazon SES を通じて E メール通知を送信する SQL Server エージェントジョブを作成する方法を説明しました。

ご質問、コメント、フィードバックがありましたら、この投稿のコメントセクションに残してください。


著者について

Sid Vantair は、戦略アカウントを担当する AWS のソリューション アーキテクトです。リレーショナル データベースを扱う 10 年以上の経験を持つ彼は、顧客のハードルを克服するために複雑な技術的問題を解決することに熱心に取り組んでいます。仕事以外では、家族と過ごす時間を大切にし、子供たちの好奇心を育んでいます。

Poulami Maity は、アマゾン ウェブ サービスのデータベース スペシャリスト ソリューション アーキテクトです。彼女は AWS の顧客と協力して、既存のデータベースを AWS クラウドに移行して最新化するのを支援しています。

 

 

 

翻訳はソリューションアーキテクトの Yoshinori Sawada が担当しました。原文はこちらです。