Amazon RDS for SQL ServerでSSRSを使用する

記事タイトルとURLをコピーする

クラウドインテグレーション部の村上です。

Amazon RDS for SQL ServerでSQL Server Reporting Services (SSRS)を見てみたので、今回はその手順を備忘録として残しておきたいと思います。

前提

SQL Server Reporting Services (SSRS)とは?

SSRS はデータベース内の情報をレポートやダッシュボードとして提供する機能です。

learn.microsoft.com

SSRSを使用できるエディション

SQL Server Standard EditionとSQL Server Enterprise Editionのみ対応しています。

RDS は、次のバージョンで SQL Server スタンダードエディションおよびエンタープライズエディションの SSRS をサポートします。

  • SQL Server 2019、バージョン 15.00.4043.16.v1 以降
  • SQL Server 2017、バージョン 14.00.3223.3.v1 以降
  • SQL Server 2016、バージョン 13.00.5820.21.v1 以降

docs.aws.amazon.com

今回の構成

今回はRDSの認証方式でWindows 認証を採用しています。

Windows認証を利用する場合は、AWS Managed Microsoft ADが必要ですので、それを構築し、EC2上にある別のドメインと信頼関係を設定しています。

RDS では、Windows Authentication 向けに AWS Managed Microsoft AD のみの使用をサポートしています。RDS は AD Connector の使用をサポートしていません。

docs.aws.amazon.com

AD種別 ドメイン名
AWS Managed Microsoft AD msad.net
セルフマネージドAD murakami.com

本ブログのゴール

  • セルフマネージドAD側のユーザーがWindows 認証でRDSへ接続できること
  • SSRSウェブポータルにアクセスできること

以上をゴールとします。

手順

AWS Managed Microsoft ADを作成して信頼関係を設定

詳細な手順は、AWSの公式ドキュメントにセルフマネージドADとAWS Managed Microsoft ADとの間で信頼関係を設定する方法がチュートリアルでまとまっていますので、そちらをご参照ください。

docs.aws.amazon.com

AWS Managed Microsoft ADを作成

DNS名はmsad.netで作成しました。

AWS Managed Microsoft ADを作成すると、指定したサブネットからIPアドレスが割り当てられます。このIPアドレスは後で使うのでメモしておきます。

AWS Managed Microsoft ADがもつENIには、自動作成されるセキュリティグループが適用されます。インバウンドルールでは、任意のソース 0.0.0.0/0 から必要なポートへの通信が許可されていますので、オンプレミス環境にあるセルフマネージドADと信頼関係を設定する場合にもそのまま使えます。ちなみに、このENIにパブリックなIPアドレスは付与できないようです。

0.0.0.0/0 ルールでは、セキュリティ上の脆弱性は生じません。ドメインコントローラーへのトラフィックは、VPC からのトラフィック、他のピア接続された VPC からのトラフィック、または AWS Direct Connect、AWS Transit Gateway、Virtual Private Network を使用して接続したネットワークからのトラフィックに限定されるためです。セキュリティを強化するため、作成された ENI には Elastic IP がアタッチされず、これらの ENI に Elastic IP をアタッチするためのアクセス許可はユーザーに付与されません。 https://docs.aws.amazon.com/ja_jp/directoryservice/latest/admin-guide/ms_ad_getting_started_what_gets_created.html

逆にアウトバウンドルールは修正が必要です。

AWS Managed Microsoft AD用に自動作成されるセキュリティグループのアウトバウンドルールでは、ドメインコントローラ間の通信しか許可されていません。そのため、以下のようにアウトバウンドルールにセルフマネージドADのIPアドレスを追加しました。

自動作成されるセキュリティグループの内容については以下をご参照ください。

docs.aws.amazon.com

セルフマネージドAD側の設定

AWS Managed Microsoft ADからの通信許可設定

必要な通信許可設定は以下のとおりです。

プロトコル ポート 送信元
TCP/UDP 53 AWS Managed Microsoft ADが属しているVPC の CIDR ブロック
TCP/UDP 88 AWS Managed Microsoft ADが属しているVPC の CIDR ブロック
TCP/UDP 389 AWS Managed Microsoft ADが属しているVPC の CIDR ブロック
TCP 445 AWS Managed Microsoft ADが属しているVPC の CIDR ブロック

再掲となりますが、公式ドキュメントに記載があります。

DNS 条件付きフォワーダーを設定

AWS Managed Microsoft AD側のリソースにアクセスできるよう、DNSマネージャーからフォワーダーを設定します。

さきほど確認したAWS Managed Microsoft ADのIPアドレスなどを入力して設定します。

信頼関係の設定

「Active Directory ドメインと信頼関係」から自身のドメインを右クリックしプロパティを選択します。

信頼タブから「新しい信頼」を選択します。

ウィザードに従い、設定していきます。

今回、信頼関係は一方向で設定しました。セルフマネージドAD側のユーザーがAWS Managed Microsoft AD側のリソース(RDS)へ接続できれば良く、逆方向は想定しないためです。

信頼パスワードを設定します。これは後のAWS Managed Microsoft AD側の作業で必要ですので忘れないにしましょう。

最後に信頼を確認するかどうか聞かれますが、「確認しない」を選択します。

AWS Managed Microsoft AD側で信頼関係を設定

最後にAWS Managed Microsoft AD側でも信頼関係を設定します。マネジメントコンソールから信頼関係を追加します。

設定が完了しました。

RDS用のセキュリティグループの作成

インバウンドルールでは、Amazon RDS for SQL Serverのデフォルトの1433番ポートだけでなく、SSRSのウェブポータルへアクセスするためのポート(デフォルトでは8443番)も許可しておきます。

プロトコル ポート
TCP 1433
TCP 8443

オプショングループの作成

Amazon RDS for SQL ServerでSSRSを使用するための設定は、オプショングループで行います。

今回はStandard Editionで作成します。

次にSSRSを使用するため、オプションを追加します。作成したオプショングループから「オプションを追加」を選択します。

ポートはデフォルトで8443番が選択されています。任意のポート番号で利用可能ですが、443番は使用できない等の制限もあります。

デフォルトの SSL ポート (443) でリッスンするように SSRS を構成することはできません。指定できる値は、1234、1434、3260、3343、3389、47001 を除く、1150~49511 です。

Amazon RDS for SQL Server での SQL Server Reporting Services のサポート - Amazon Relational Database Service

最大メモリはSSRSが使用するメモリの上限です。デフォルトの45%のままとします。

セキュリティグループはさきほど作成したものを選択します。

パラメータグループの作成

パラメータグループの作成は必須ではありませんが、セキュリティ上の観点から、クライアントからRDSへの接続にSSL接続を強制する設定をします。

以下の公式ドキュメントにも記載がありますが、rds.force_sslパラメータを0から1に変更します。

docs.aws.amazon.com

RDS構築

今回はマネジメントコンソールから作成しました。

SSRSが使用できるエディションとバージョンを選択する点に注意してください。

また、今回はWindows認証を利用するので、設定を有効化します。

Windows認証を利用する場合はIAMロールに注意

RDSをマネジメントコンソールから作成する場合は気にしなくても良いのですが、AWS CLI等から構築する場合は、RDSがディレクトリに参加するためのIAMロールが必要です。

ステップ 2: Amazon RDS 用の IAM ロールを作成する
コンソールを使用して SQL Server DB インスタンスを作成する場合、このステップをスキップできます。SQL Server DB インスタンスの作成に CLI または RDS API を使用する場合、AmazonRDSDirectoryServiceAccess マネージド IAM ポリシーを使用する IAM ロールを作成する必要があります。
Amazon RDS for SQL Server DB インスタンスでの Windows 認証の使用 - Amazon Relational Database Service

私はマネジメントコンソールから作成したので、AWS管理ポリシーのAmazonRDSDirectoryServiceAccessがアタッチされたIAMロールが作成されていました。

~$ aws rds describe-db-instances

# 結果の抜粋
"DomainMemberships": [
                {
                    "Domain": "d-956776a7fa",
                    "Status": "joined",
                    "FQDN": "msad.net",
                    "IAMRoleName": "rds-directoryservice-access-role"
                }
            ],

RDSに接続

Microsoft SQL Server Management Studio(SSMS)を使って接続します。

詳しい接続手順は以下の公式ドキュメントにありますので、ここでは割愛します。

docs.aws.amazon.com

まずはマスターユーザでログインする

いきなりWindows認証で接続したいのですが、セルフマネージドADのユーザーに対してアクセス許可を設定する必要があります。よって、最初はRDS構築時に作成したマスターユーザー名義で接続します。

Active Directory の SQL Server ログインを作成するには、ALTER ANY LOGIN 許可が必要です。このアクセス許可を持つログインをまだ作成していない場合は、SQL Server 認証を使用して DB インスタンスのマスターユーザーとして接続します。
Amazon RDS for SQL Server DB インスタンスでの Windows 認証の使用 - Amazon Relational Database Service

使用するDDLコマンドは上記の公式ドキュメントに記載があります。

USE [master]
GO
CREATE LOGIN [mydomain\myuser] FROM WINDOWS WITH DEFAULT_DATABASE = [master], DEFAULT_LANGUAGE = [us_english];
GO

セルフマネージドAD側のユーザーでRDSに接続する

これでセルフマネージドAD側のユーザーでRDSに接続できます。

認証方式でWindows authenticationを選択してください。

SSRSウェブポータルにアクセスする

SSRSウェブポータルを利用する手順も公式ドキュメントに詳しく載っています。リンクを再掲します。

docs.aws.amazon.com

以下の手順で設定します。

  • Secure Sockets Layer (SSL) をオンにします。
  • ドメインユーザーへのアクセス権を付与します。
  • ブラウザとドメインユーザーの認証情報を使用してウェブポータルにアクセスします。

Secure Sockets Layer (SSL) をオンにします

クライアントに証明書をインポートする必要があります。

SSRS は、接続に HTTPS SSL プロトコルを使用します。このプロトコルを使用するには、クライアントコンピュータの Microsoft Windows オペレーティングシステムに SSL 証明書をインポートします。

詳しい手順が以下のドキュメントに記載されていますので、ここでは割愛します。今回はap-northeast-1-bundle.pemを使用しました。

docs.aws.amazon.com

手順に沿って証明書がインポートされていることを確認します。ちなみにパラメータグループのrds.force_sslの設定だけでは、HTTPSではアクセスできませんでした。証明書のインポートが必要のようです。

SSRSの権限を付与する

権限を付与しないと、以下のように権限エラーが出てしまいます。

公式ドキュメントに記載のストアドプロシージャを利用して、権限を付与します。ドメインユーザーでは権限が足りずに実行できなかったので、こちらもマスターユーザーとして実行しました。

exec msdb.dbo.rds_msbi_task
@task_type='SSRS_GRANT_PORTAL_PERMISSION',
@ssrs_group_or_username=N'AD_domain\user';

SSRSを表示

上記の設定を行ったあと、SSRSのウェブポータルにアクセスすると以下のように無事表示されました。

村上博哉 (執筆記事の一覧)

2020年4月入社。機械学習が好きです。記事へのご意見など:hiroya.murakami@serverworks.co.jp